Saya punya tabel tagdengan 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 idcatatan yang ada.
Saya berasumsi saya hanya bisa menggunakan ON CONFLICT DO NOTHINGdalam 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 UPDATEklausa 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?