Terry Cheng
@terrychengtw
Taipei · UTC+8
主題Theme
語言Lang
按 D 切換主題 · L 切換語言press D for theme · L for language
← 回首頁 ← Back to index
2025·12·14 深入 Deep dive 14 min · postgres

Postgres 的 lock 為什麼總是違反我的直覺

SELECT FOR UPDATE 的鎖範圍不是你想的那樣。一篇關於 row-level lock、advisory lock、與我踩過的三個坑。

長文——整理中。

三個坑

  1. FOR UPDATELEFT JOIN 的未匹配列不會上鎖
  2. FOR UPDATE SKIP LOCKED 看起來像 queue 的 primitive,但連續 skip 會讓你讀不到剛被 rollback 的那筆
  3. advisory lock 的命名空間是整個 DB cluster,不是單一 DB
一次寫一點 慢慢累積 one thought at a time slowly