全部术语

标识列

PostgreSQL 中的标识列(identity column)是什么?

标识列的值由一个隐式序列自动生成。这是在 PostgreSQL 中创建自增键的 SQL 标准方式。

标识列使用 GENERATED ALWAYS AS IDENTITY 或 GENERATED BY DEFAULT AS IDENTITY 声明。PostgreSQL 会为其关联一个隐式序列,每当插入操作没有提供值时,就用该序列填充该列。

使用 GENERATED ALWAYS 时,INSERT 中显式提供的值会被拒绝,除非语句中写明 OVERRIDING SYSTEM VALUE;使用 BY DEFAULT 时,显式提供的值优先。标识列遵循 SQL 标准,而 serial 是 PostgreSQL 特有的较旧简写。与任何序列一样,被回滚的事务用掉的编号不会被重用,因此出现空缺是正常的。

示例

该示例插入两行不带 id 的数据,返回生成的值,并显示该列背后的序列名称。

CREATE TABLE tickets (
  id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  subject text NOT NULL
);
INSERT INTO tickets (subject) VALUES ('first'), ('second') RETURNING id;

SELECT pg_get_serial_sequence('tickets', 'id');

适用于原生 PostgreSQL 16 或 17 的纯 SQL,无需任何扩展。请在一个可随时丢弃的空数据库中运行。

参考资料

PostgreSQL 官方文档(英文)。

相关术语