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