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 overflowYou 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)