在 Postgres 中,SEQUENCE 和 SERIAL 之间的关系是什么?

Iva*_*var -3 postgresql sequence

Postgres 能够定义SERIAL数据类型和SEQUENCE,但它们似乎在功能上重叠。主要区别是什么?

Col*_*art 6

serial纯粹是创建integer具有关联序列的列作为其默认值的一种速记方式。

serial从问题链接的文档甚至说:

数据类型 smallserial、serial 和 bigserial 不是真正的类型,而仅仅是创建唯一标识符列的符号方便(类似于某些其他数据库支持的 AUTO_INCREMENT 属性)。在当前的实现中,指定:

CREATE TABLE tablename (
    colname SERIAL
);
Run Code Online (Sandbox Code Playgroud)

相当于指定:

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
    colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
Run Code Online (Sandbox Code Playgroud)