Postgresql
如果衝突對像是它已經擁有的對象,PostgreSQL CREATE EXTENSION 只能跳過對象創建?
我有兩個 PostgreSQL (14.5, Ubuntu 22.04) 擴展
A
,B
每個擴展都在一個 common schema 中創建一些函式schm
。現在我在重新創建這兩個擴展時遇到了麻煩,因為公共方案的所有權似乎存在衝突。
如果我
CREATE EXTENSION A;
先執行,它會自動創建通用模式schm
;當我跑步時CREATE EXTENSION B;
,postgres 抱怨說錯誤:模式 schm 不是擴展“b”的成員
如果衝突對像是它已經擁有的對象,則擴展只能使用 CREATE … IF NOT EXISTS 來跳過對象創建。
我還嘗試顯式地提前創建共享模式,這會導致類似的錯誤。如果我記得,共享模式以前可以正常工作。
我的問題:
當 postgres 說一個模式是擴展的成員時,這是什麼意思?不是擁有擴展的數據庫使用者/角色嗎?
如何解決上述兩個擴展之間的“成員資格”或所有權衝突。
錯誤在於您將
CREATE SCHEMA
語句作為擴展 SQL 腳本的一部分發出,因此架構屬於擴展。最好從腳本中省略模式創建,至少除了一個擴展之外。
這似乎是 PostgreSQL 14.5 版本(來自 pdpg 儲存庫)的問題。我使用 PostgreSQL 14.4 回到舊映像,並重複該過程。舊版本沒有錯誤。
目前,我習慣使用
apt-mark hold postgresql-14
postgresql-14 版本,因為 pdpg 不允許降級到次要版本,例如 14.4。