GENERATED { ALWAYS | 的限制是什么?默认情况下 } 作为 PostgreSQL 中的 IDENTITY?

eti*_*soy 5 postgresql identity sequence

PostgreSQL中存在smallserial,serialbigserial数值数据类型,它们分别对 32767、2147483647 和 9223372036854775807 有明显的限制。

但是呢GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY,它有什么限制吗?或者也许它们是根据提供的数据类型(SMALLINT, INT, BIGINT)计算的?

Luk*_*zda 4

是的,它取决于列的数据类型,并且可以使用 COLUMNS 元数据进行验证:

CREATE TABLE t1(id SMALLINT GENERATED ALWAYS AS IDENTITY);
CREATE TABLE t2(id INT GENERATED ALWAYS AS IDENTITY);
CREATE TABLE t3(id BIGINT GENERATED ALWAYS AS IDENTITY);

SELECT table_name, column_name, data_type,
       is_identity, identity_minimum, identity_maximum, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME IN('t1','t2','t3');
Run Code Online (Sandbox Code Playgroud)

db<>小提琴演示

输出:

在此输入图像描述