Postgresql
在不同的事務中使用 CREATE FUNCTION 和 DROP FUNCTION 是否會鎖定?
我在 PostgreSQL 9.4.5 上遇到了鎖定問題。我同時執行兩個或多個事務(通常同時執行 2 個,但有時可能會發生 2 個以上)從同一個表讀取但在不同的輸出表上寫入。在我的事務中,我有幾個聲明一些函式的語句
DROP FUNCTION IF EXISTS
。CREATE OR REPLACE FUNCTION
我的猜測是,
DROP FUNCTION IF EXISTS
並且CREATE OR REPLACE FUNCTION
正在鎖定。我對嗎?我可以通過將語句移到事務之外來解決問題。我觀察到以下情況:兩個事務 A 和 B 包含一些
DROP FUNCTION
andCREATE OR REPLACE FUNCTION
;如果我在事務 A 仍在執行時執行事務 B,事務 B 會等待DROP FUNCTION
它遇到的第一條語句。
是的,當然另一筆交易會等待。(幾乎)每個 DDL 語句都對正在修改(刪除、創建)的對象進行排他鎖。請參閱文件中的顯式鎖定。