问题描述
不确定哪个选项是最新的最佳实践?我在本教程上读到以下内容:
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
);
当您按照以下内容引用此表的FOREIGN KEY时:
CREATE TABLE pallet (
id INT GENERATED ALWAYS AS IDENTITY,color_1 REFERENCES color
color_2 REFERENCES color
);
是否知道身份现在是主键?:
解决方法
是否知道身份现在是主键?
否(serial
也不会这样做)。
您需要明确定义主键:
CREATE TABLE color (
color_id INT primary key GENERATED ALWAYS AS IDENTITY,color_name VARCHAR NOT NULL
);
不确定哪个选项是最新的最佳实践?
建议使用identity
代替serial
。
对于新应用程序,应改为使用标识列。
为什么不串行?
串行类型具有一些奇怪的行为,这些行为使架构,依赖关系和权限管理变得不必要地麻烦。
最后,标识列符合SQL标准,而serial
是PostgreSQL方言。