Integer Types

Reference: Integer Types

Integers are whole numbers that are typically used to represent counters or identifiers. CedarDB supports three different widths of integers:

  • A two-byte smallint,
  • a four-byte integer,
  • and an eight-byte bigint.

Usage Example

create table example (
    id integer primary key
);
insert into example select i from generate_series(1, 3) g(i);
select id from example;
 id 
----
  1
  2
  3
(3 rows)

Value Range

Type Min Max
smallint $-2^{15}$ $2^{15}-1$
integer $-2^{31}$ $2^{31}-1$
bigint $-2^{63}$ $2^{63}-1$

Storing values outside of the supported ranges will result in an overflow exception. Operations on integers are range checked, so that e.g., numeric overflows will never cause wrong results. To avoid overflows, it might be necessary to cast to a type that can represent a larger range.

Handling Overflows

create table integers(i) as 
values (power(2, 29)::int),
       (power(2, 30)::int);

The following will produce an overflow, since $2^{30} + 2^{30} > 2^{31}-1$.

select i + i from integers;
ERROR:  numeric overflow

You can handle such overflows in multiple ways:

Try

Wrapping the operation in a try() produces a null value for overflows:

select try(i + i) from integers;
    try     
------------
 1073741824
            <---- null
(2 rows)

Casting

Casting to bigint increases the value range and produces the correct result without an exception:

select i::bigint + i from integers;
  ?column?  
------------
 1073741824
 2147483648
(2 rows)