【问题标题】:How do you load postgis object and function definitions into a separate schema?如何将 postgis 对象和函数定义加载到单独的模式中?
【发布时间】:2012-03-26 12:10:42
【问题描述】:

我不想将我的所有表定义放入与使用标准 PostGIS 安装过程 (http://postgis.refractions.net/docs/ch02.html) 创建的 PostGIS 定义相同的公共架构中。

有人对使用 PostGIS 时如何将事物组织成单独的模式有任何建议吗?

【问题讨论】:

    标签: postgresql postgis


    【解决方案1】:

    正如我刚刚在您的 related preceding question 上回答的那样,我建议 根本不要为您的对象使用 public 架构。为 PostGis 等扩展保留它,并为您的对象使用一个或多个单独的架构。

    公共架构与数据库中的任何其他架构没有任何不同。 PostgreSQL 根本不需要它。它恰好是许多扩展放置它们的东西的默认模式。所以把你的东西放在其他地方,然后在你需要的地方设置search_path

    然后你也可以创建对应的用户,匹配预设search_path。基本设置可能如下所示:

    CREATE ROLE sales;
    ALTER ROLE sales SET search_path=sales, public; -- postgis functions in public?
    COMMENT ON ROLE sales IS 'Sales app uses this user to connect.';
    
    CREATE ROLE sales_admin;
    ALTER ROLE sales_admin SET search_path=sales, public;
    COMMENT ON ROLE sales_admin IS 'Owns objects in schema sales.';
    
    CREATE SCHEMA sales;
    GRANT ALL ON SCHEMA sales TO sales_admin;
    GRANT USAGE ON SCHEMA sales TO sales;
    COMMENT ON SCHEMA sales IS 'All objects for my sales app here.'
    

    您还会对DEFAULT PRIVILEGES 的用户或架构感兴趣。更多在这个密切相关的问题下:
    Grant all on a specific schema in the db to a group role in PostgreSQL

    【讨论】:

      【解决方案2】:
      --start out with it in public:
      create extension postgis;
      
      --add other extensions that depend on postgis being in public schema like postgis_tiger_geocoder
      
      --then move it 
      create schema postgis;
      
      grant all on schema postgis to public;
      
      alter database [database_name] set search_path = "$user", public, postgis;
      
      alter extension postgis set schema postgis;
      

      【讨论】:

      • 很棒的答案!我还刚刚学会了如何使用内置数据库search_path 管理我的其他模式。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      相关资源
      最近更新 更多