首页 > 解决方案 > Postgres GENERATED AS IDENTITY 列可空性

问题描述

我想创建一个表,其中包含一个可以为空的列GENERATED BY DEFAULT AS IDENTITY,因此我运行以下查询:

CREATE TABLE my_table (
  generated INTEGER NULL GENERATED BY DEFAULT AS IDENTITY,
  data TEXT NOT NULL
);

但是一旦我尝试在表中插入一行,哪个generated字段是null这样的:

INSERT INTO my_table(generated, data) VALUES(NULL, "some data");

我收到一个空约束违规错误。

但是,如果我更改my_table.generated列属性的顺序:

CREATE TABLE my_table (
  generated INTEGER GENERATED BY DEFAULT AS IDENTITY NULL,
  data TEXT NOT NULL
);

它插入行,生成的字段是NULL,没有任何问题。这是案件的预期行为吗?

标签: sqlpostgresql-13

解决方案


Postgres 开发人员告诉我这是一个错误,因为身份列不应该为空(请参阅响应下的补丁文件)。


推荐阅读