1

UUID を主キーとして使用するテーブルがあります。このように新しい行が挿入されます

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

NULL挿入でIDが提供されていない場合(または空の文字列)にのみ、実際にUUIDを生成したい

このようなものを書くことは可能ですか?

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

3 に答える 3

5

coalesce() 関数は最初の非 null を使用します。$1 が null の場合、coalesce() は uuid_generate_v4() を使用します。それ以外の場合は、$1 を使用しようとします。

insert into a (id, ... ) values 
(coalesce($1, uuid_generate_v4()), ... );
于 2013-07-11T16:41:13.057 に答える
1

一部の RDBMS で使用可能な IF 関数を確認します。

IF( $1 = NULL, $1, uuid_generate_v4())

$1プレースホルダーです。

また、必要に応じてトリガーを設定することもできますが、ほとんどの場合、彼らは眉をひそめています。

また、ありますIFNULL( $1, uuid_generate_v4() )

更新: PostgreSQL が、IF私が標準と考えていたものをサポートしていないことに非常に驚いています。

したがって、他の回答で述べたように、COALESCE( $1, uuid_generate_v4() )おそらく最良の選択肢です。

于 2013-07-11T16:34:07.537 に答える
1

テーブルを変更するか、列のデフォルト値を使用してテーブルを作成できます。

CREATE TABLE thing (
  id uuid DEFAULT uuid_generate_v4(),
  updated timestamp DEFAULT now()
);
于 2013-07-11T16:46:34.513 に答える