Tengo una tabla tag
con 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 id
del registro existente.
Supuse que podría usarlo ON CONFLICT DO NOTHING
en 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 UPDATE
clá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
?