Saya punya tabel tag
dengan 2 kolom: id
(uuid) dan name
(teks). Saya sekarang ingin memasukkan tag baru ke dalam tabel, tetapi jika tag sudah ada, saya hanya ingin mendapatkan id
catatan yang ada.
Saya berasumsi saya hanya bisa menggunakan ON CONFLICT DO NOTHING
dalam kombinasi dengan RETURNING "id"
:
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT DO NOTHING
RETURNING "id";
Tapi ini mengembalikan set hasil kosong, jika tag dengan nama "foo" sudah ada.
Saya kemudian mengubah kueri untuk menggunakan DO UPDATE
klausa noop :
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT ("name") DO UPDATE SET "name" = 'foo'
RETURNING "id";
Ini berfungsi sebagaimana dimaksud, tetapi agak membingungkan, karena saya hanya mengatur nama ke nilai yang sudah ada.
Apakah ini cara untuk mengatasi masalah ini atau apakah ada pendekatan yang lebih sederhana yang saya lewatkan?
ERROR: missing FROM-clause entry for table "excluded"
saat menggunakan DO NOTHING
.
returning excluded.id
?