我不想将所有表定义抛出到与使用标准PostGIS安装过程创建的PostGIS定义相同的公共模式(http://postgis.refractions.net/docs/ch02.html)。
在使用PostGIS时,有没有人对如何将事物整理成单独的模式有任何建议?
答案 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;