tag
2つの列を持つテーブルがあります:id
(uuid)とname
(text)。テーブルに新しいタグを挿入したいのですが、タグが既に存在する場合id
は、既存のレコードを取得するだけです。
私はちょうどON CONFLICT DO NOTHING
と組み合わせて使用できると仮定しましたRETURNING "id"
:
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT DO NOTHING
RETURNING "id";
ただし、「foo」という名前のタグがすでに存在する場合、これは空の結果セットを返します。
次に、noop DO UPDATE
句を使用するようにクエリを変更しました。
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT ("name") DO UPDATE SET "name" = 'foo'
RETURNING "id";
これは意図したとおりに機能しますが、名前を既存の値に設定しているだけなので、やや混乱します。
これはこの問題を解決する方法ですか、それとも私が見逃しているより簡単なアプローチがありますか?
@a_horse_with_no_nameこれは
—
デアホッホシュプラー
ERROR: missing FROM-clause entry for table "excluded"
、を使用するときにちょうど私に与えますDO NOTHING
。
returning excluded.id
か?