Postgresql

如果衝突對像是它已經擁有的對象,PostgreSQL CREATE EXTENSION 只能跳過對象創建?

  • August 19, 2022

我有兩個 PostgreSQL (14.5, Ubuntu 22.04) 擴展AB每個擴展都在一個 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-14postgresql-14 版本,因為 pdpg 不允許降級到次要版本,例如 14.4。

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