Tengo una tabla tagcon 2 columnas: id(uuid) y name(texto). Ahora quiero insertar una nueva etiqueta en la tabla, pero si la etiqueta ya existe, simplemente quiero obtener la iddel registro existente.
Supuse que podría usarlo ON CONFLICT DO NOTHINGen combinación con RETURNING "id":
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT DO NOTHING
RETURNING "id";
Pero esto devuelve un conjunto de resultados vacío, si la etiqueta con el nombre "foo" ya existe.
Luego cambié la consulta para usar una DO UPDATEcláusula noop :
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT ("name") DO UPDATE SET "name" = 'foo'
RETURNING "id";
Esto funciona según lo previsto, pero es algo confuso, porque solo estoy configurando el nombre al valor ya existente.
¿Es esta la forma de solucionar este problema o me falta un enfoque más simple?
ERROR: missing FROM-clause entry for table "excluded"cuando lo uso DO NOTHING.
returning excluded.id?