ฉันมีตารางที่tag
มี 2 คอลัมน์: id
(uuid) และname
(ข้อความ) ตอนนี้ฉันต้องการแทรกแท็กใหม่ลงในตาราง แต่ถ้ามีแท็กนั้นอยู่แล้วฉันต้องการเพียงรับid
บันทึกที่มีอยู่
ฉันคิดว่าฉันสามารถใช้ON CONFLICT DO NOTHING
ร่วมกับRETURNING "id"
:
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT DO NOTHING
RETURNING "id";
แต่จะส่งคืนชุดผลลัพธ์ที่ว่างเปล่าหากมีแท็กชื่อ "foo" อยู่แล้ว
ฉันเปลี่ยนแบบสอบถามเพื่อใช้ส่วนDO UPDATE
คำสั่งnoop :
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT ("name") DO UPDATE SET "name" = 'foo'
RETURNING "id";
มันใช้งานได้ตามที่ตั้งใจ แต่มันค่อนข้างสับสนเพราะฉันเพิ่งตั้งชื่อให้เป็นค่าที่มีอยู่แล้ว
นี่เป็นวิธีที่จะแก้ไขปัญหานี้หรือมีวิธีที่ง่ายกว่าที่ฉันคิดถึง
ERROR: missing FROM-clause entry for table "excluded"
DO NOTHING
returning excluded.id
ไหม