【问题标题】:Better to use SERIAL PRIMARY KEY or GENERATED ALWAYS AS IDENTITY for primary key in PostgreSQL最好使用 SERIAL PRIMARY KEY 或 GENERATED ALWAYS AS IDENTITY 作为 PostgreSQL 中的主键
【发布时间】:2021-01-08 23:52:56
【问题描述】:

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

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

PostgreSQL 版本 10 引入了一个新的约束 GENERATED AS IDENTITY 允许您自动分配唯一编号给 列。

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

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

CREATE TABLE color (
    color_id INT GENERATED ALWAYS AS IDENTITY,
    color_name VARCHAR NOT NULL
);

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

CREATE TABLE pallet (
    id INT GENERATED ALWAYS AS IDENTITY,
    color_1 REFERENCES color
    color_2 REFERENCES color
);

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

【问题讨论】:

    标签: postgresql primary-key identity-column


    【解决方案1】:

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

    不(serial 也不会这样做)。

    您需要明确定义主键:

    CREATE TABLE color (
        color_id INT  primary key GENERATED ALWAYS AS IDENTITY,
        color_name VARCHAR NOT NULL
    );
    

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

    建议使用identity 而不是serial

    Quote from the Postgres Wiki

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

    为什么不连载?
    串行类型有一些奇怪的行为,使架构、依赖和权限管理变得不必要地麻烦。

    最后,标识列符合 SQL 标准,而 serial 是 PostgreSQL 方言。

    【讨论】:

      猜你喜欢
      • 2023-02-19
      • 2017-10-13
      • 2021-10-30
      • 2023-03-27
      • 2019-11-07
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      • 2020-10-26
      相关资源
      最近更新 更多