Postgresql

UPSERT 上的 UPDATE 語句不增加值

  • February 24, 2022

我有以下查詢:

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;

引用自:https://dba.stackexchange.com/questions/307933