postgresql - SERIAL 与 NULL 一起使用,始终作为 IDENTITY 生成而不是
问题描述
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
如果我INT generated always as identity
用它代替SERIAL
它。这很奇怪,因为在另一个表中生成的标识总是与 null 一起使用。使用as value 也不起作用。default
GAAI应该是替代SERIAL的SQL标准方式,即使它是建议的方式。我在这里想念什么?
谢谢。
解决方案
我在这里想念什么?
您试图直接插入分区表l1
,而不是分区的l_table
. 这将忽略父表上的标识列,尝试插入默认值null
,并使每个标识列具有的非空约束失败。如果你改为
insert into l_table (w_id) values (1);
它将起作用并将插入的行路由到正确的分区中。
使用
default
as value 也不起作用。
显然,要做到这一点相当困难。如何默认分区标识列?在 dba.SE 上讨论了一些解决方法。
推荐阅读
- mysql - Mysql中外键类型对性能的影响
- rust - 标准输出挂在闪烁的光标上
- javascript - 使用 .filter() 函数过滤嵌套数组
- jquery - 即使我可以看到数组,使用 JQuery/AJAX 的级联下拉菜单也会返回未定义的结果
- c# - 我的简单前卫在重复,我一遍又一遍地看着它……发生了什么?
- java - 字节好友 - java.lang.IllegalStateException:无法解析“”的类型描述 - KafkaProducer
- python-3.x - 如何使用 pandas DataFrame 以科学格式读取文本文件数据
- spring-boot - Spring Boot JPA 复合外键映射
- r - 双向方差分析的 Levene 检验
- python - 如何在 Python 中使用 Selenium 在下拉列表中选择选项(Jupyter Notebook)