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