2013-10-02 61 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'中存储非核心内容是个好主意 –

相关问题