Summary: In this tutorial, you’ll learn about PostgreSQL integer types, including SMALLINT, INTEGER, and BIGINT, to store integers in the database.
Getting started with PostgreSQL integer types #
PostgreSQL supports the following integer data types for storing integers:
SMALLINTINTEGERBIGINT
The table below presents the specifications for each integer type:
| Name | 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 |
If you try to insert or update a value beyond the allowed ranges, PostgreSQL will generate an error.
SMALLINT #
The SMALLINT data type requires 2 bytes of storage and can store integer values ranging from -32,767 to 32,767.
In practice, you can use the SMALLINT type for storing small-range integer values like student grades, product quantities, and people’s ages.
For example, the following statement CREATE TABLE statement creates a people table for storing personal information including name and age:
CREATE TABLE people (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age SMALLINT NOT NULL CHECK (
age >= 1
AND age <= 150
)
);Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)In the people table, the age column is a SMALLINT column. Because age can be from 1 to 150, we use a CHECK constraint to enforce this rule.
INTEGER #
The INTEGER data type is the most common choice among integer types because it provides the best balance between storage size, range, and performance.
The INTEGER type requires 4 bytes of storage and can store numbers in the range of (-2,147,483,648 to 2,147,483,647).
INT is the synonym of the INTEGER so that you can use them interchangeably.
In practice, you can use the INTEGER data type for a column that stores quite large whole numbers.
For example, the following creates a table that has an INTEGER column:
CREATE TABLE inventories (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL,
quantity INTEGER NOT NULL CHECK (quantity > 0)
);Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)BIGINT #
The BIGINT type requires an 8-byte storage size that can store any number from -9,223,372,036,854,775,808 to +9,223,372,036,854,775,807.
For example, the following creates a table videos for storing video data including video views:
CREATE TABLE videos (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
title VARCHAR(255) NOT NULL,
description TEXT,
view_count BIGINT CHECK (view_count > 0)
);Code language: PostgreSQL SQL dialect and PL/pgSQL (pgsql)Notice that the BIGINT data type consumes more storage than SMALLINT and INT and may decrease database performance.
Summary #
- Use PostgreSQL integer types, including
SMALLINT,INT, andBIGINT, to store integers in the database.