SET ROLE dbo; DROP SCHEMA IF EXISTS vmreports CASCADE; CREATE SCHEMA IF NOT EXISTS vmreports AUTHORIZATION dbo; --GRANT ALL ON SCHEMA vmreports TO postgres; BEGIN GRANT USAGE ON SCHEMA vmreports TO appserver; ALTER DEFAULT PRIVILEGES FOR ROLE dbo IN SCHEMA vmreports GRANT SELECT ON TABLES TO appserver; ALTER DEFAULT PRIVILEGES FOR ROLE dbo IN SCHEMA vmreports GRANT USAGE ON SEQUENCES TO appserver; EXCEPTION END; BEGIN GRANT USAGE ON SCHEMA vmreports TO nifi,analytics,analyst; ALTER DEFAULT PRIVILEGES FOR ROLE dbo IN SCHEMA vmreports GRANT SELECT ON TABLES TO nifi,analytics,analyst; ALTER DEFAULT PRIVILEGES FOR ROLE dbo IN SCHEMA vmreports GRANT USAGE ON SEQUENCES TO nifi,analytics,analyst; EXCEPTION WHEN others THEN END; /* конструкция осложняется тем, что нужен один пользователь-владелец и второй читатель Это вызывает множество телодвижений при создании. Необходимость указывать пароль при локальном коннекте не очень радует (ведь пользователь локальный, прописан на этом же сервере) */ --DROP FOREIGN TABLE IF EXISTS host; --CREATE FOREIGN TABLE vmreports.host () SERVER billing OPTIONS (schema_name 'vmreports', table_name 'host'); -- вместо этого лучше импортировать схему DROP SERVER IF EXISTS billing CASCADE; CREATE SERVER billing FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'localhost', port '5432', dbname 'billing'); -- для импорта схемы мы создаем маппинг владельцу DROP USER MAPPING IF EXISTS FOR dbo SERVER billing; CREATE USER MAPPING FOR dbo SERVER billing OPTIONS (user 'appserver', password '***'); IMPORT FOREIGN SCHEMA vmreports FROM SERVER billing INTO vmreports; GRANT SELECT ON vmreports.host to appserver; DROP USER MAPPING IF EXISTS FOR dbo SERVER billing; -- мы импортировали схему, маппинг больше не нужен. -- Но нам все равно пришлось указать пароль дважды DROP USER MAPPING IF EXISTS FOR appserver SERVER billing; CREATE USER MAPPING FOR appserver SERVER billing OPTIONS (user 'appserver', password '***'); --проверка --set role appserver; select * from vmreports.host; -- это если интересно, не разрешен ли локальный коннект --SELECT * FROM pg_hba_file_rules;