Ho una tabella tagcon 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 idrecord esistente.
Supponevo di poter usare solo ON CONFLICT DO NOTHINGin 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 UPDATEclausola 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?