Eu tenho uma tabela tag
com 2 colunas: id
(uuid) e name
(texto). Agora, quero inserir uma nova tag na tabela, mas se a tag já existir, quero simplesmente obter o id
registro existente.
Eu assumi que eu poderia apenas usar ON CONFLICT DO NOTHING
em combinação com RETURNING "id"
:
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT DO NOTHING
RETURNING "id";
Mas isso retorna um conjunto de resultados vazio, se a tag com o nome "foo" já existir.
Alterei a consulta para usar uma DO UPDATE
cláusula noop :
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT ("name") DO UPDATE SET "name" = 'foo'
RETURNING "id";
Isso funciona como pretendido, mas é um pouco confuso, porque estou apenas definindo o nome para o valor já existente.
É este o caminho a seguir sobre esse problema ou há uma abordagem mais simples que estou perdendo?
ERROR: missing FROM-clause entry for table "excluded"
ao usar DO NOTHING
.
returning excluded.id
?