Ich habe eine Tabelle tagmit 2 Spalten: id(UUID) und name(Text). Ich möchte jetzt ein neues Tag in die Tabelle einfügen, aber wenn das Tag bereits vorhanden ist, möchte ich einfach idden vorhandenen Datensatz abrufen.
Ich nahm an, ich könnte nur ON CONFLICT DO NOTHINGin Kombination mit RETURNING "id":
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT DO NOTHING
RETURNING "id";
Dies gibt jedoch eine leere Ergebnismenge zurück, wenn das Tag mit dem Namen "foo" bereits vorhanden ist.
Ich habe dann die Abfrage geändert, um eine noop- DO UPDATEKlausel zu verwenden:
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT ("name") DO UPDATE SET "name" = 'foo'
RETURNING "id";
Dies funktioniert wie beabsichtigt, ist jedoch etwas verwirrend, da ich nur den Namen auf den bereits vorhandenen Wert setze.
Ist dies der Weg, um dieses Problem zu lösen, oder gibt es einen einfacheren Ansatz, den ich vermisse?
ERROR: missing FROM-clause entry for table "excluded"bei der Verwendung DO NOTHING.
returning excluded.id?