№ 10366 В разделе
Sysadmin
от October 11th, 2019,
В подшивках: PostgreSQL
Никогда этим не занимался и вот опять.
Нужно это чтобы отправлять запросы к внешним таблицам будто бы они размещены локально. Называется это FOREIGN TABLE и работает оно через Foreign Data Wrapper. Как внешние источники можно подключать не только PostgreSQL, но и другие СУБД. Мне нужен PostrgeSQL
На источнике данных создаю пользователя с правом чтения забираемой схемы:
CREATE USER vlad_remote LOGIN PASSWORD 'GesAim7bla' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
GRANT ro_group TO vlad_remote;
После этого на источнике данных нужно добавить в pg_hba запись, разрешающую подключение с целевого сервера. Больше никаких правок там делать не требуется.
Теперь на целевом сервере нужно подгрузить fdw расширение: CREATE EXTENSION postgres_fdw;
Далее создать SERVER, указывающий на источник данных:
CREATE SERVER home_db FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'blindage.org', dbname 'zabbix');
Маппинг нужен чтобы текущий пользователь мог авторизоваться на источнике данных:
CREATE USER MAPPING FOR CURRENT_USER SERVER home_db OPTIONS (user 'vlad_remote', password 'GesAim7bla');
После этого можно либо создавать удаленные таблицы через CREATE FOREIGN TABLE
, либо испортировать всю схему или часть таблиц через IMPORT FOREIGN SCHEMA.
Всю базу данных светить не нужно, если нужна только одна таблица items
. Делаем новую БД и импорт только одной таблицы:
CREATE SCHEMA zabbix;
IMPORT FOREIGN SCHEMA public limit to (items) FROM SERVER home_db INTO zabbix;
Ну и проверяем:
SELECT * FROM zabbix.items LIMIT 1;
Все.
Fortune cookie: Today's spam: Impotency can easily be cured with no embarressements.
Leave a Reply