Postgresql
將 IMPORT FOREIGN SCHEMA 與 Greenplum 數據庫一起使用
我已經設置了一個 PostgreSQL 12 數據庫並試圖連接到一個 Greenplum 數據庫以創建代理表。我能夠連接到 Greenplum db,但是當我嘗試使用 IMPORT FOREIGN SCHEMA 命令時出現錯誤。
IMPORT FOREIGN SCHEMA remote_schema FROM SERVER "remote_server" INTO schema_test_1;
返回:
ERROR: Greenplum Database does not support REPEATABLE READ transactions. (variable.c:570) CONTEXT: remote SQL command: START TRANSACTION ISOLATION LEVEL REPEATABLE READ SQL state: XX000
我讀到Greenplum不支持REPEATABLE READ,而是使用SERIALIZE。有沒有辦法編輯 IMPORT FOREIGN SCHEMA 命令,以便我可以用 SERIALIZE 替換 REPEATABLE READ?
我正在使用 PGadmin 4。
更新:
我發現如果我將命令寫成完整的事務並在任何命令之前包含以下內容,我可以讓命令工作:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
有沒有辦法將此設置為通過外部伺服器的所有事務的預設值?
不,那是做不到的。您必須使用聽說過的不太古老的 PostgreSQL 分支
REPEATABLE READ
。為了使它工作,你必須修改 PostgreSQL 原始碼,但如果你這樣做,你應該
SERIALIZABLE
只使用 Greenplum。
根據 PostgreSQL 9.5 文件的 F.31.3:
當本地事務具有 SERIALIZABLE 隔離級別時,遠端事務使用 SERIALIZABLE 隔離級別;否則它使用 REPEATABLE READ 隔離級別。
如果將 postgresql.conf 文件更改為
default_transaction_isolation = 'SERIALIZABLE'
與外部伺服器通信時,它將使用 SERIALIZABLE 副 REPEATABLE READ 事務隔離。
對外部伺服器的查詢現在可以正常工作,包括 IMPORT FOREIGN SCHEMA。