tag
2 sütunlu bir tablo var : id
(uuid) ve name
(metin). Şimdi tabloya yeni bir etiket eklemek istiyorum, ancak etiket zaten varsa, sadece id
varolan kaydı almak istiyorum .
Ben sadece kullanabilirsiniz varsayılır ON CONFLICT DO NOTHING
birlikte RETURNING "id"
:
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT DO NOTHING
RETURNING "id";
Ancak, "foo" adındaki etiket zaten varsa, bu boş bir sonuç kümesi döndürür.
Sonra noop DO UPDATE
yan tümcesi kullanmak için sorguyu değiştirdim :
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT ("name") DO UPDATE SET "name" = 'foo'
RETURNING "id";
Bu, amaçlandığı gibi çalışır, ancak biraz kafa karıştırıcıdır, çünkü adı zaten mevcut değere ayarlıyorum.
Bu sorunu çözmenin yolu mu yoksa eksik olduğum daha basit bir yaklaşım var mı?
ERROR: missing FROM-clause entry for table "excluded"
kullanırken verir DO NOTHING
.
returning excluded.id
mi