2
upsertで競合する行のIDを取得する方法は?
tag2つの列を持つテーブルがあります: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"; これは意図したとおりに機能しますが、名前を既存の値に設定しているだけなので、やや混乱します。 これはこの問題を解決する方法ですか、それとも私が見逃しているより簡単なアプローチがありますか?