Как загрузить определения объектов и функций postgis в отдельную схему? - PullRequest
3 голосов
/ 09 марта 2012

Я не хочу бросать все мои определения таблиц в ту же общедоступную схему, что и определения PostGIS, которые создаются с помощью стандартного процесса установки PostGIS (http://postgis.refractions.net/docs/ch02.html).

Есть ли у кого-нибудь предложения о том, как организовать вещи в отдельные схемы при использовании PostGIS?

Ответы [ 2 ]

5 голосов
/ 09 марта 2012

Как я только что ответил на ваш связанный предыдущий вопрос Я рекомендую вообще не использовать схему 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 для пользователей или схем.Более подробно об этом тесно связанном вопросе:
Предоставить все на определенной схеме в БД групповой роли в PostgreSQL

2 голосов
/ 16 августа 2014
--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;
...