Postgresql

Postgres:帶有事務的顯式鎖定

  • June 13, 2017

我是 SQL 世界的初學者,對事務/鎖定有一些疑問:

  • 在 postgres 中,事務是否還確保在完成之前鎖定行(首選)/表?
  • 另外,如果有兩個事務通過不同的查詢,第二個事務會等待第一個事務完成,即它是串列的還是並發的?

我認為這兩點都推斷相同,但我不確定是否會同時發布兩者。

在 postgres 中,事務是否還確保在完成之前鎖定行(首選)/表?

不,事務不能確保鎖定。事務只確保任何事務都是原子完成的。也就是說,要麼全部成功,要麼全部失敗。它如何做它做什麼,它做什麼,完全由你控制。

例如,PostgreSQL 目前支持三種隔離級別

  • 讀已送出
  • 可重複讀取
  • 可序列化

這三個隔離級別要麼看到和操作可以直接看到數據,要麼是事務開始時的數據快照。

只有在最後一種模式下可序列化,才會嘗試以序列化方式送出事務。是否進行了足夠的嘗試是另一個問題。

PostgreSQL 中的所有鎖定都可以顯式或隱式完成(DDL 命令知道如何有效地鎖定以完成工作)。通常,避免顯式鎖。但在同樣的情況下,包括在可序列化的情況下,這是確保自事務開始以來沒有添加數據的唯一方法。

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