【问题标题】:Best way to install hstore on multiple schemas in a Postgres database?在 Postgres 数据库中的多个模式上安装 hstore 的最佳方法?
【发布时间】:2013-10-09 09:33:36
【问题描述】:

我正在处理一个需要在多个架构上使用hstore 的项目。 安装hstore 扩展的“公共”模式并非在任何地方都可用,因为我的范围没有在“公共”处查找。在一些试验中,我在名为“hstore”的架构上创建了扩展,并在每个可用范围(搜索路径)上使用了该架构。

基于此,我有一些问题:

  • 是否可以仅为扩展创建架构?还是在每个架构上创建扩展更好(例如,customer_1customer_2 等等...)?

  • 在单独的架构中创建扩展是否会影响数据的存储位置?我正在使用多个模式来更轻松地备份/恢复,并且真的不希望 pg 将我所有的 hstore 数据存储在单个模式上的隐藏表中(例如 pg_large_objects 用于 blob)。

【问题讨论】:

    标签: postgresql hstore postgresql-extensions


    【解决方案1】:

    尝试在所有架构上安装扩展 hstore

    create extension hstore schema pg_catalog;
    

    【讨论】:

    • 我认为将非核心内容存储在pg_catalog中不是一个好主意
    【解决方案2】:

    每个数据库不允许多次安装扩展。引用the manual on CREATE EXTENSION:

    请记住,扩展程序本身不属于任何 架构:扩展具有必须唯一的非限定名称 数据库范围。但是属于扩展的对象可以在模式中。

    如果您不想在 search_path 中包含 public,请将“公共”扩展安装到专用架构中(例如:extensions)。我会为所有这些使用一个模式,而不是为每个扩展使用单独的模式。 There are quite a few of them. CREATE EXTENSION 提供了安装到您选择的现有架构的选项:

        CREATE EXTENSION hstore SCHEMA extensions;
    

    并确保架构包含在可能想要使用它的用户的search_path 中。

    数据存储完全不受扩展所驻留的架构的影响。

    【讨论】:

    • extensions 架构需要添加到 search_path,对吗?
    • @Qcom:正确。 search_path 中的模式序列也是相关的。 或者您必须对所有要引用的对象进行模式限定 - 包括运算符!详情:stackoverflow.com/questions/22975599/…
    • 在专用架构中安装扩展而不是使用公共,除了清晰之外还有什么明显的好处吗?
    • @Qcom: public 只是另一个模式。它唯一的特别之处在于它是默认安装的,并且默认的 search_path 使用它。扩展的专用架构主要是为了清晰,更易于管理,更轻松地处理备份...
    猜你喜欢
    • 2019-08-08
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多