如何将postgis对象和函数定义加载到单独的模式中?

时间:2012-03-09 00:40:12

标签: postgresql postgis

我不想将所有表定义抛出到与使用标准PostGIS安装过程创建的PostGIS定义相同的公共模式(http://postgis.refractions.net/docs/ch02.html)。

在使用PostGIS时,有没有人对如何将事物整理成单独的模式有任何建议?

2 个答案:

答案 0 :(得分:5)

正如我刚刚回答您的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

答案 1 :(得分: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;