SERIAL与NULL一起工作,GENERATED ALWAYS AS IDENTITY not



Postgres 12:

CREATE TABLE l_table (
id INT generated always as identity,
w_id int NOT null references w_table(id),
primary key (w_id, id)
)PARTITION BY LIST (w_id);
CREATE table l1 PARTITION OF l_table FOR VALUES IN (1);
insert into l1 (w_id) values (1);

我得到:

ERROR: null value in column "id" violates not-null constraint

如果我用SERIAL替换INT generated always as identity,则有效。这很奇怪,因为在另一个表中,生成的"始终作为"标识使用null。使用default作为值也不起作用。

GAAI被认为是替换SERIAL的SQL标准方式,甚至是建议的方式。我在这里错过了什么?

谢谢。

这里缺少什么?

您正试图直接插入分区表l1,而不是分区的l_table。这将忽略父表上的标识列,尝试插入默认的null,并使每个标识列具有的非null约束失败。如果你改为

insert into l_table (w_id) values (1);

它将工作,并将插入的行路由到正确的分区中。

使用default作为值也不起作用。

显然很难做到这一点。如何默认分区标识列?在dba。SE讨论了一些解决方法。

相关内容

  • 没有找到相关文章

最新更新