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");

我得到一个null约束违反错误。

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

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

插入行,生成的字段是NULL,没有任何问题。这是这种情况下的预期行为吗?

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

最新更新