Ho una tabella tag
con 2 colonne: id
(uuid) e name
(testo). Ora voglio inserire un nuovo tag nella tabella, ma se il tag esiste già, voglio semplicemente ottenere il id
record esistente.
Supponevo di poter usare solo ON CONFLICT DO NOTHING
in combinazione con RETURNING "id"
:
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT DO NOTHING
RETURNING "id";
Ma questo restituisce un set di risultati vuoto, se il tag con il nome "pippo" esiste già.
Ho quindi modificato la query per utilizzare una DO UPDATE
clausola noop :
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT ("name") DO UPDATE SET "name" = 'foo'
RETURNING "id";
Funziona come previsto, ma è un po 'confuso, perché sto solo impostando il nome sul valore già esistente.
È questo il modo di affrontare questo problema o c'è un approccio più semplice che mi manca?
ERROR: missing FROM-clause entry for table "excluded"
quando uso DO NOTHING
.
returning excluded.id
?