PostgreSQL Integer Types
This article describes the three integer data types in PostgreSQL: SMALLINT
, INTEGER
, and BIGINT
.
Integer types store integers, and PostgreSQL provides three integer data types: SMALLINT
, INTEGER
, and BIGINT
.
The following table shows the number of bytes occupied and value ranges by different integer types:
Type | Storage Size | Minimum Value | Maximum Value |
---|---|---|---|
SMALLINT |
2 bytes | -32,768 | 32,767 |
INTEGER |
4 bytes | -2,147,483,648 | 2,147,483,647 |
BIGINT |
8 bytes | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
Note that BIGINT
types take up a lot of space and can degrade database performance.
Usages
To define an integer type column, use the following syntax:
column_name {SMALLINT | INTEGER | BIGINT} column_constrait
Note that INT
is a synonym for INTEGER
, you can use INT
instead INTEGER
.
To define a primary key column of integer type, use the following syntax:
column_name {SMALLINT | INTEGER | BIGINT} GENERATED ALWAYS AS IDENTITY PRIMARY KEY
To define an identity column of type integer, use the following syntax:
column_name {SMALLINT | INTEGER | BIGINT} GENERATED ALWAYS AS IDENTITY
To define a SERIAL
column, use the following syntax:
column_name SERIAL PRIMARY KEY
Note that the internal type of SMALLSERIAL
is SMALLINT
, the internal type of SERIAL
is INTEGER
, and the internal type of BIGSERIAL
is BIGINT
.
Examples
SMALLINT
Type Examples
First, create a test table with the following statement:
CREATE TABLE test_smallint(
name TEXT NOT NULL,
age SMALLINT NOT NULL
);
Insert two rows of data using the following statement:
INSERT INTO test_smallint (name, age)
VALUES ('Tom', '23'), ('Lucy', 20)
RETURNING *;
name | age
------+-----
Tom | 23
Lucy | 20
(2 rows)
Note that although we pass in a character value '23'
for the integer column, PostgreSQL automatically converts it to a number and stores it in the database.
Use INTEGER
column as primary key
In general, the identity columns of the INTEGER
type can be used as the primary key column:
CREATE TABLE test_int_pk(
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name TEXT NOT NULL,
age SMALLINT NOT NULL
);
Here, the id
column is the primary key column. Its type is INTEGER
and uses the GENERATED ALWAYS AS IDENTITY
property.
Use the following statement to insert the two rows into the table:
INSERT INTO test_int_pk (name, age)
VALUES ('Tom', '23'), ('Lucy', 20)
RETURNING *;
id | name | age
----+------+-----
1 | Tom | 23
2 | Lucy | 20
(2 rows)
Conclusion
PostgreSQL provides three integer data types: SMALLINT
, INTEGER
, and BIGINT
. You can choose different types according to your different storage requirements to improve the efficiency of access.