条件价值

时间:2013-07-11 15:59:38

标签: sql postgresql

我有一个使用UUID作为主键的表。像这样插入新行

INSERT INTO a ( id, ... ) VALUES ( uuid_generate_v4(), ...)

现在我实际上只想在插入中没有提供ID时生成UUID(NULL或空字符串)

是否可以写这样的东西?

INSERT INTO a ( id, ... ) VALUES ( $1 || uuid_generate_v4(), ...)

3 个答案:

答案 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()
);