Postgresql
UPSERT 上的 UPDATE 語句不增加值
我有以下查詢:
INSERT INTO ReservationCounter (student_id, reservation_count) VALUES (1, 1) ON CONFLICT (student_id) DO UPDATE SET reservation_count=excluded.reservation_count+1;
當沒有衝突時它
INSERTS
成功。但是,當發生衝突時,該
UPDATE
語句實際上並沒有用增量更新值。當我第一次在衝突中執行它時,它按預期返回 2,但是當我再次執行它時,我希望它從 2 增加到 3(因為
reservation_count=excluded.reservation_count+1
)。它不這樣做,它再次返回 2;讓我相信那reservation_count
永遠是1。我究竟做錯了什麼?
您正在將 reservation_count 設置為插入的值 + 1,而不是增加目前值。
您可能希望將提供的計數添加到現有計數中。
SET reservation_count = reservationcounter.reservation_count + excluded.reservation_count;