【发布时间】:2012-03-26 12:10:42
【问题描述】:
我不想将我的所有表定义放入与使用标准 PostGIS 安装过程 (http://postgis.refractions.net/docs/ch02.html) 创建的 PostGIS 定义相同的公共架构中。
有人对使用 PostGIS 时如何将事物组织成单独的模式有任何建议吗?
【问题讨论】:
标签: postgresql postgis
我不想将我的所有表定义放入与使用标准 PostGIS 安装过程 (http://postgis.refractions.net/docs/ch02.html) 创建的 PostGIS 定义相同的公共架构中。
有人对使用 PostGIS 时如何将事物组织成单独的模式有任何建议吗?
【问题讨论】:
标签: postgresql postgis
正如我刚刚在您的 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
【讨论】:
--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 管理我的其他模式。谢谢!