Содержание

Использование Foreign-Data Wrappers в PostgreSQL

Foreign-Data Wrappers (FDW) в PostgreSQL это инструмент, который позволяет работать с данными из разных источников, будто они находятся прямо в PostgreSQL. Это часть стандарта SQL/MED для работы с внешними данными. FDW скрывает сложности подключения к разным базам данных (например, Oracle, MySQL, Redis), делая их использование проще. Они удобны для анализа данных из разных источников и помогают переносить данные в PostgreSQL из других систем управления базами данных.

Основные Особенности

В целом, Foreign-Data Wrappers значительно расширяют функциональные возможности PostgreSQL, предоставляя гибкий и мощный инструмент для работы с внешними данными.

Инструкция по использованию Foreign-Data Wrappers в PostgreSQL

Данная инструкция описывает процесс использования Foreign-Data Wrappers (FDW) в PostgreSQL для интеграции с внешними данными.

Предварительные Условия

Шаг 1: Установка FDW расширения

Выполните команду для установки FDW расширения. Например, для MySQL:

CREATE EXTENSION mysql_fdw;

для подключения к другому серверу PostgreSQL

CREATE EXTENSION postgres_fdw;

Расширения идет вместе с PostgreSQL и отдельно скачивать / компилировать его не нужно.

Шаг 2: Создание Сервера Внешних Данных

Создайте сервер внешних данных, указав тип 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
...

Шаг 3: Создание Пользователя для Внешнего Сервера

Создайте пользователя и укажите данные для доступа к внешнему серверу:

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;

Шаг 4: Импорт и Удаление Внешних Таблиц

Импортируйте внешние таблицы. Вы можете импортировать все таблицы или конкретную таблицу:

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;

Шаг 5: Использование Внешних Таблиц

Теперь вы можете выполнять SQL-запросы к внешним таблицам, как к обычным таблицам PostgreSQL:

SELECT * FROM external_table;

Дополнительные Замечания

Эта инструкция предоставляет базовые шаги для начала работы с FDW в PostgreSQL.