我在其中包含一個 sql 陳述句ON CONFLICT ON CONSTRAINT以允許更新插入。這似乎運行良好,只是我的錯誤日志有一堆與此查詢相關的錯誤。
我對錯誤日志感到困惑,因為我們希望遇到這個約束,然后只做更新 - 這里有什么壞掉的,還是只是聊天記錄?
RDS Postgres,版本 12.7。
2021-12-18 16:00:32 UTC:172.31.1.154(33952):{username}@{database}:[28367]:ERROR: duplicate key value violates unique constraint "segments_sequence_number_event_id"
2021-12-18 16:00:32 UTC:172.31.1.154(33952):{username}@{database}:[28367]:DETAIL: Key (sequence_number, event_id)=(2, d5c70xxxx63478) already exists.
2021-12-18 16:00:32 UTC:172.31.1.154(33952):{username}@{database}:[28367]:STATEMENT: INSERT INTO segments (id,created_at,updated_at,event_id,sequence_number,start_time,end_time,bitrate,width,height) VALUES ('8e6d5xxxxbdae3','2021-12-18T16:00:32.596Z','2021-12-18T16:00:32.596Z','d5c70xxxx63478',2,1639843218000,1639843221000,2097152,1920,1080) ON CONFLICT ON CONSTRAINT sequence_number_event_id_unique DO UPDATE SET updated_at='2021-12-18T16:00:32.596Z',start_time=1639843218000,end_time=1639843221000,bitrate=2097152,width=1920,height=1080 RETURNING id,sequence_number,url,start_time,end_time,duration,bitrate,width,height,size,event_id,created_at,updated_at
uj5u.com熱心網友回復:
你的ON CONFLICT條款使用ON CONSTRAINT sequence_number_event_id_unique
但是唯一的違規是由不同的約束引發的: unique constraint "segments_sequence_number_event_id"
要捕獲任何和所有沖突,您可以使用ON CONFLICT DO NOTHING.
ON CONFLICT ... DO UPDATE只能捕獲單個“沖突目標”(單個約束、索引或索引運算式)。
有關的:
- 如何在 PostgreSQL 中使用 RETURNING 和 ON CONFLICT?
旁白:您不必兩次傳遞值。您可以僅重用排除行中的值:
...
SET (updated_at,start_time,end_time,bitrate,width,height)
= (EXCLUDED.updated_at,EXCLUDED.start_time,EXCLUDED.end_time,EXCLUDED.bitrate,EXCLUDED.width,EXCLUDED.height)
...
看:
- 如何在一個陳述句中使用單個值 UPSERT 多行?
極端情況差異:EXCLUDED行中的值包括來自可能觸發器的更改ON INSERT(這通常是可取的)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/389922.html
標籤:sql PostgreSQL的 亚马逊 插入
