Eu tenho uma tabela tagcom 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 idregistro existente.
Eu assumi que eu poderia apenas usar ON CONFLICT DO NOTHINGem 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 UPDATEclá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?