我有一个使用 UUID 作为主键的表。像这样插入新行
INSERT INTO a ( id, ... ) VALUES ( uuid_generate_v4(), ...)
现在我实际上只想在插入中没有提供 ID(NULL
或空字符串)时生成 UUID
可以写这样的东西吗?
INSERT INTO a ( id, ... ) VALUES ( $1 || uuid_generate_v4(), ...)
我有一个使用 UUID 作为主键的表。像这样插入新行
INSERT INTO a ( id, ... ) VALUES ( uuid_generate_v4(), ...)
现在我实际上只想在插入中没有提供 ID(NULL
或空字符串)时生成 UUID
可以写这样的东西吗?
INSERT INTO a ( id, ... ) VALUES ( $1 || uuid_generate_v4(), ...)
coalesce() 函数将使用第一个非空值。如果 $1 为空,则 coalesce() 将使用 uuid_generate_v4()。否则,它将尝试使用 $1。
insert into a (id, ... ) values
(coalesce($1, uuid_generate_v4()), ... );
检查 IF 函数,在某些 RDBMS 中可用。
IF( $1 = NULL, $1, uuid_generate_v4())
$1
作为占位符。
如果你喜欢它们,你也可以设置一个触发器,但大多数情况下它们是不受欢迎的。
而且还有IFNULL( $1, uuid_generate_v4() )
。
更新:我很惊讶 PostgreSQL 不支持IF
我认为的标准。
因此,正如其他答案中提到的,COALESCE( $1, uuid_generate_v4() )
可能是最好的选择。
您可以更改表或使用列的默认值创建表。
CREATE TABLE thing (
id uuid DEFAULT uuid_generate_v4(),
updated timestamp DEFAULT now()
);