Postgresql

在不同的事務中使用 CREATE FUNCTION 和 DROP FUNCTION 是否會鎖定?

  • December 23, 2017

我在 PostgreSQL 9.4.5 上遇到了鎖定問題。我同時執行兩個或多個事務(通常同時執行 2 個,但有時可能會發生 2 個以上)從同一個表讀取但在不同的輸出表上寫入。在我的事務中,我有幾個聲明一些函式的語句DROP FUNCTION IF EXISTSCREATE OR REPLACE FUNCTION

我的猜測是,DROP FUNCTION IF EXISTS並且CREATE OR REPLACE FUNCTION正在鎖定。我對嗎?我可以通過將語句移到事務之外來解決問題。

我觀察到以下情況:兩個事務 A 和 B 包含一些DROP FUNCTIONand CREATE OR REPLACE FUNCTION;如果我在事務 A 仍在執行時執行事務 B,事務 B 會等待DROP FUNCTION它遇到的第一條語句。

社區維基回答

是的,當然另一筆交易會等待。(幾乎)每個 DDL 語句都對正在修改(刪除、創建)的對象進行排他鎖。請參閱文件中的顯式鎖定

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