Foreign-Data Wrappers (FDW) в PostgreSQL это инструмент, который позволяет работать с данными из разных источников, будто они находятся прямо в PostgreSQL. Это часть стандарта SQL/MED для работы с внешними данными. FDW скрывает сложности подключения к разным базам данных (например, Oracle, MySQL, Redis), делая их использование проще. Они удобны для анализа данных из разных источников и помогают переносить данные в PostgreSQL из других систем управления базами данных.
В целом, Foreign-Data Wrappers значительно расширяют функциональные возможности PostgreSQL, предоставляя гибкий и мощный инструмент для работы с внешними данными.
Данная инструкция описывает процесс использования Foreign-Data Wrappers (FDW) в PostgreSQL для интеграции с внешними данными.
Выполните команду для установки FDW расширения. Например, для MySQL:
CREATE EXTENSION mysql_fdw;
для подключения к другому серверу PostgreSQL
CREATE EXTENSION postgres_fdw;
Расширения идет вместе с PostgreSQL и отдельно скачивать / компилировать его не нужно.
Создайте сервер внешних данных, указав тип FDW и параметры подключения для MySQL:
CREATE SERVER mysql_server FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'hostname', port 'port_number');
Пример для PostgreSQL
CREATE SERVER ubuntu_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname 'test_database', host '127.0.0.1', port '5454');
Проверяем:
# \des List of foreign servers Name | Owner | Foreign-data wrapper ---------------+-------+---------------------- ubuntu_server | eax | postgres_fdw (1 row)
# select * from pg_foreign_server; -[ RECORD 1 ]----------------------------------------------- oid | 37539 srvname | ubuntu_server ...
Создайте пользователя и укажите данные для доступа к внешнему серверу:
CREATE USER MAPPING FOR postgres SERVER mysql_server OPTIONS (username 'remote_username', password 'remote_password');
Проверяем:
select * from pg_user_mappings;
Если вы используйте пользователя отличного от postgres не забудьте дать ему права
GRANT USAGE ON FOREIGN SERVER ubuntu_server TO your_user;
Импортируйте внешние таблицы. Вы можете импортировать все таблицы или конкретную таблицу:
IMPORT FOREIGN SCHEMA remote_db_name FROM SERVER mysql_server INTO public;
IMPORT FOREIGN SCHEMA public LIMIT TO (TABLE_NAME) FROM SERVER ubuntu_server INTO public;
Название foreign_table_schema в нашем случае это стандартная схема public, может быть другим, не копируйте бездумно.
Теперь с таблицей table_name(или fdw_table_name) можно работать, как если бы она была локальной. Все изменения с таблицей, которые мы делаем на втором сервере, будут видны на первом, и наоборот.
Проверяем:
SELECT * FROM information_schema.foreign_tables;
Если таблица больше не нужна, от нее можно избавиться так:
DROP FOREIGN TABLE TABLE_NAME;
Теперь вы можете выполнять SQL-запросы к внешним таблицам, как к обычным таблицам PostgreSQL:
SELECT * FROM external_table;
Эта инструкция предоставляет базовые шаги для начала работы с FDW в PostgreSQL.