PostgreSQL 整数类型

本文介绍了 PostgreSQL 中的三种整数数据类型:SMALLINTINTEGER,和 BIGINT

整数类型将内容存储为整数,PostgreSQL 提供了三种整数数据类型: SMALLINTINTEGER,和 BIGINT

下表展示了不同的整数类型的占用的字节数和数值范围:

类型 存储大小 最小值 最大值
SMALLINT 2 字节 -32,768 32,767
INTEGER 4 字节 -2,147,483,648 2,147,483,647
BIGINT 8 字节 -9,223,372,036,854,775,808 9,223,372,036,854,775,807

注意,BIGINT 类型占用空间大,并且会降低数据库性能。

PostgreSQL 整数类型用法

要定义一个整数类型的列,请使用如下语法:

column_name {SMALLINT | INTEGER | BIGINT} column_constrait

注意, INTINTEGER 的同义词,您可以使用 INT 代替 INTEGER

要定义一个整数类型的主键列,请使用如下语法:

column_name {SMALLINT | INTEGER | BIGINT} GENERATED ALWAYS AS IDENTITY PRIMARY KEY

要定义一个整数类型的标识列,请使用如下语法:

column_name {SMALLINT | INTEGER | BIGINT} GENERATED ALWAYS AS IDENTITY

要定义一个 SERIAL, 请使用如下语法:

column_name SERIAL PRIMARY KEY

注意, SMALLSERIAL 的内部类型为 SMALLINTSERIAL 的内部类型为 INTEGERBIGSERIAL 的内部类型为 BIGINT

PostgreSQL 整数类型实例

SMALLINT 类型实例

首先,使用下面的语句创建一个测试表

CREATE TABLE test_smallint(
  name TEXT NOT NULL,
  age SMALLINT NOT NULL
);

使用下面的语句插入两行数据

INSERT INTO test_smallint (name, age)
VALUES ('Tom', '23'), ('Lucy', 20)
RETURNING *;
 name | age
------+-----
 Tom  |  23
 Lucy |  20
(2 rows)

注意, 虽然我们为整数列传入了一个字符类型的值 '23',PostgreSQL 自动将其转成了数字并存储到数据库。

使用 INTEGER 列作为主键

通常, INTEGER 数据类型的标识列可以作为主键列:

CREATE TABLE test_int_pk(
  id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  name TEXT NOT NULL,
  age SMALLINT NOT NULL
);

这里,id 列是主键列。它的类型是 INTEGER,并且使用了 GENERATED ALWAYS AS IDENTITY 属性。

使用下面的语句插入和上面例子中相同的两条数据:

INSERT INTO test_int_pk (name, age)
VALUES ('Tom', '23'), ('Lucy', 20)
RETURNING *;
 id | name | age
----+------+-----
  1 | Tom  |  23
  2 | Lucy |  20
(2 rows)

结论

PostgreSQL 提供了三种整数数据类型: SMALLINTINTEGER,和 BIGINT。您可以根据自己不同的存储需求选择不同的类型以提高存取的效率。