Mam tabelę tagz 2 kolumnami: id(uuid) i name(tekst). Chcę teraz wstawić nowy znacznik do tabeli, ale jeśli znacznik już istnieje, chcę po prostu pobrać idistniejący rekord.
Zakładałem, że mogę po prostu użyć ON CONFLICT DO NOTHINGw połączeniu z RETURNING "id":
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT DO NOTHING
RETURNING "id";
Zwraca to jednak pusty zestaw wyników, jeśli znacznik o nazwie „foo” już istnieje.
Następnie zmieniłem zapytanie, aby użyć DO UPDATEklauzuli noop :
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT ("name") DO UPDATE SET "name" = 'foo'
RETURNING "id";
Działa to zgodnie z przeznaczeniem, ale jest nieco mylące, ponieważ po prostu ustawiam nazwę na już istniejącą wartość.
Czy to jest sposób na rozwiązanie tego problemu, czy brakuje mi prostszego podejścia?
ERROR: missing FROM-clause entry for table "excluded"podczas korzystania DO NOTHING.
returning excluded.id?