我最近从 PostgreSQL 9.5 升级到 PostgreSQL 10。PostgreSQL 10 中的一个漂亮特性是新的标识列类型,它是 PostgreSQL串行伪类型的替代品。身份栏的官方文档可以在CREATE TABLE
一页中找到。
但是,当将多行插入到带有GENERATED BY DEFAULT AS IDENTITY
列的表中并使用关键字DEFAULT
获取下一个 ID 值时,默认值返回为null
.
例如,假设我有一张桌子
CREATE TABLE test (
id int GENERATED BY DEFAULT AS IDENTITY,
t text
);
CREATE TABLE
Run Code Online (Sandbox Code Playgroud)
使用DEFAULT
关键字插入单行似乎工作正常。
INSERT INTO test (id, t) VALUES (DEFAULT, 'a');
INSERT 0 1
Run Code Online (Sandbox Code Playgroud)
插入多行不会。
INSERT INTO test (id, t) VALUES (DEFAULT, 'b'), (DEFAULT, 'c');
ERROR: null value in column "id" violates …
Run Code Online (Sandbox Code Playgroud)