2013-10-02 46 views
7

我正在研究一個需要在多個模式上使用hstore的項目。 '公共'模式,其中hstore擴展安裝在任何地方都不可用,因爲我的範圍不查找'公共'。在一些試用中,我在名爲'hstore'的模式上創建了擴展,並在所使用的每個可用範圍(搜索路徑)上使用模式。在Postgres數據庫的多個模式中安裝hstore的最佳方法是什麼?

在此基礎上,我有一些問題:

  • 它是確定創建模式只是爲了延長?或者更好地在每個模式上創建擴展(例如,customer_1customer_2等等)?

  • 是否在單獨的模式中創建擴展會影響數據的存儲位置?我使用多個模式來更容易地進行備份/恢復,並且實際上不希望pg在單個模式下將所有的hstore數據存儲在隱藏表中(例如blob的pg_large_objects)。

回答

6

不允許每個數據庫多次安裝擴展。引用the manual on CREATE EXTENSION

記住,擴展本身並不被認爲是任何 模式中:擴展有不合格的名稱必須是唯一 數據庫範圍。但屬於擴展的對象可以在模式內。

如果你不希望包括publicsearch_path,安裝「公共」擴展到專用模式(例如:extensions)。我會爲它們使用單​​個模式,而不是每個擴展的單獨模式。 There are quite a few of them. CREATE EXTENSION提供了一個選項來安裝到您選擇的現有模式:

CREATE EXTENSION hstore SCHEMA extensions; 

,並確保架構包括在誰可能想利用它用戶的search_path

數據存儲不被延長駐留在架構在所有受影響。

+0

的'擴展安裝擴展hstore 'schema將需要被添加到search_path,對嗎? – Qcom

+1

@Qcom:正確。 search_path中的模式序列也是相關的。 *或者*您必須模式化所有您想要參考的對象 - 包括操作員!詳細信息:http://stackoverflow.com/questions/22975599/how-to-use-operator-from-the-extension-pg-trgm/22975642#22975642 –

+0

是否有任何明顯的好處,而不是明確的安裝擴展在專用模式,而不是使用公共? – Qcom

0

試試這個對所有模式

create extension hstore schema pg_catalog; 
+0

我不認爲在'pg_catalog'中存儲非核心內容是個好主意 –

相關問題