最好使用 SERIAL PRIMARY KEY 或 GENERATED ALWAYS AS IDENTITY 作为 PostgreSQL 中的主键

Zaf*_*fer 3 postgresql primary-key identity-column

不确定哪个选项是最新的最佳实践?我继续阅读本教程:

https://www.postgresqltutorial.com/postgresql-identity-column/

PostgreSQL 版本 10 引入了一个新的约束 GENERATED AS IDENTITY,它允许您自动为列分配一个唯一的数字。

GENERATED AS IDENTITY 约束是旧的SERIAL 列的符合SQL 标准的变体。

在示例中,他们使用身份作为主键:

CREATE TABLE color (
    color_id INT GENERATED ALWAYS AS IDENTITY,
    color_name VARCHAR NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

当您按照以下方式引用此表以获取外键时:

CREATE TABLE pallet (
    id INT GENERATED ALWAYS AS IDENTITY,
    color_1 REFERENCES color
    color_2 REFERENCES color
);
Run Code Online (Sandbox Code Playgroud)

它现在会知道身份是主键吗?:

a_h*_*ame 6

它现在会知道身份是主键吗?

不(也不serial会这样做)。

您需要明确定义主键:

CREATE TABLE color (
    color_id INT  primary key GENERATED ALWAYS AS IDENTITY,
    color_name VARCHAR NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

不确定哪个选项是最新的最佳实践?

建议使用identity而不是serial.

引自 Postgres Wiki

对于新应用程序,应改用标识列。

为什么不是连续剧?
串行类型有一些奇怪的行为,使模式、依赖项和权限管理变得不必要地麻烦。

最后,标识列符合 SQL 标准,而serialPostgreSQL 方言。