我有一个使用UUID作为主键的表。新行的插入方式如下
INSERT INTO a ( id, ... ) VALUES ( uuid_generate_v4(), ...)
现在我实际上只想在insert中没有提供ID ( NULL
或空字符串)时生成UUID。
有没有可能写成这样的东西?
INSERT INTO a ( id, ... ) VALUES ( $1 || uuid_generate_v4(), ...)
发布于 2013-07-11 16:41:13
coalesce() function将使用第一个非null。如果$1为空,coalesce()将使用uuid_generate_v4()。否则,它将尝试使用$1。
insert into a (id, ... ) values
(coalesce($1, uuid_generate_v4()), ... );
发布于 2013-07-11 16:34:08
检查IF函数,它在一些RDBMS中可用。
IF( $1 = NULL, $1, uuid_generate_v4())
$1
是占位符。
你也可以设置一个触发器,如果你喜欢的话,但大多数情况下他们是不赞成的。
还有IFNULL( $1, uuid_generate_v4() )
。
更新:我很惊讶PostgreSQL不支持我认为是标准的IF
。
因此,正如在其他答案中提到的,COALESCE( $1, uuid_generate_v4() )
可能是最好的选择。
发布于 2013-07-11 16:46:35
您可以更改该表,也可以使用列的默认值创建该表。
CREATE TABLE thing (
id uuid DEFAULT uuid_generate_v4(),
updated timestamp DEFAULT now()
);
https://stackoverflow.com/questions/17598171
复制相似问题