UUID を主キーとして使用するテーブルがあります。このように新しい行が挿入されます
INSERT INTO a ( id, ... ) VALUES ( uuid_generate_v4(), ...)
NULL
挿入でIDが提供されていない場合(または空の文字列)にのみ、実際にUUIDを生成したい
このようなものを書くことは可能ですか?
INSERT INTO a ( id, ... ) VALUES ( $1 || uuid_generate_v4(), ...)
UUID を主キーとして使用するテーブルがあります。このように新しい行が挿入されます
INSERT INTO a ( id, ... ) VALUES ( uuid_generate_v4(), ...)
NULL
挿入でIDが提供されていない場合(または空の文字列)にのみ、実際にUUIDを生成したい
このようなものを書くことは可能ですか?
INSERT INTO a ( id, ... ) VALUES ( $1 || uuid_generate_v4(), ...)
coalesce() 関数は最初の非 null を使用します。$1 が null の場合、coalesce() は uuid_generate_v4() を使用します。それ以外の場合は、$1 を使用しようとします。
insert into a (id, ... ) values
(coalesce($1, uuid_generate_v4()), ... );
一部の RDBMS で使用可能な IF 関数を確認します。
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()
);