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";
これは意図したとおりに機能しますが、名前を既存の値に設定しているだけなので、やや混乱します。
これはこの問題を解決する方法ですか、それとも私が見逃しているより簡単なアプローチがありますか?
                  @a_horse_with_no_nameこれは
                
                  
                    —
                    デアホッホシュプラー
                    
                  
                
              ERROR: missing FROM-clause entry for table "excluded"、を使用するときにちょうど私に与えますDO NOTHING。
                
returning excluded.idか?