PostgreSQL Integer Data Types

Summary: this tutorial introduces you to various PostgreSQL integer types including SMALLINT, INTEGER, and BIGINT.

Introduction to PostgreSQL integer types

postgresql integer

To store the whole numbers in PostgreSQL, you can use one of the following integer types:

  • SMALLINT
  • INTEGER
  • BIGINT

The following table illustrates the specification of each integer type:

NameStorage SizeMinMax
 SMALLINT2 bytes-32,768+32,767
 INTEGER4 bytes-2,147,483,648+2,147,483,647
 BIGINT8 bytes-9,223,372,036,854,775,808+9,223,372,036,854,775,807

If you attempt to store a value outside of the permitted ranges, PostgreSQL will issue an error.

Unlike MySQL integer, PostgreSQL does not provide unsigned integer types.

SMALLINT

The SMALLINT requires 2 bytes storage size which can store any integer numbers that are in the range of (-32,767, 32,767).

You can use the SMALLINT type for storing something like the ages of people, the number of pages of a book, and so on.

The following statement creates a table named books:

CREATE TABLE books (
    book_id SERIAL PRIMARY KEY,
    title VARCHAR (255) NOT NULL,
    pages SMALLINT NOT NULL CHECK (pages > 0)
);Code language: SQL (Structured Query Language) (sql)

In this example, the pages column is a SMALLINT column. Because the number of pages must be positive, we added a CHECK constraint to enforce this rule.

INTEGER

The INTEGER is the most common choice between integer types because it offers the best balance between storage size, range, and performance.

The INTEGER type requires 4 bytes storage size that can store numbers in the range of (-2,147,483,648, 2,147,483,647).

You can use the INTEGER type for a column that stores quite big whole numbers like the population of a city or even country as the following example:

CREATE TABLE cities (
    city_id serial PRIMARY KEY,
    city_name VARCHAR (255) NOT NULL,
    population INT NOT NULL CHECK (population >= 0)
);Code language: SQL (Structured Query Language) (sql)

Notice that INT is the synonym of INTEGER.

BIGINT

If you want to store the whole numbers that are out of the range of the INTEGER type, you can use the BIGINT type.

The BIGINT type requires 8 bytes storage size that can store any number in the range of (-9,223,372,036,854,775,808,+9,223,372,036,854,775,807).

Using BIGINT type is not only consuming a lot of storage but also decreasing the performance of the database, therefore, you should have a good reason to use it.

Summary

  • Use SMALLINT, INT, and BIGINT data types to store integers in the database.
Was this tutorial helpful ?