Несколько дней назад возникла такая задача: получать данные из Oracle, выполняя запросы в PgAdmin. Немного погуглив, нашёл для себя решение в виде связки oracle instant client + oracle fdw. Всё это должно работать для ОС Windows.
- Качаем и устанавливаем Oracle instant client. После разархивирования нужно добавить путь к каталогу в переменную окружения PATH. Я это делаю так:
- Создаю новую переменную окружения ORA_INSTANT_CLIENT, в значении которой указываю путь к клиенту
- Добавляю созданную ранее переменную к PATH через «;»: %ORA_INSTANT_CLIENT%
- Качаем oracle_fdw. После распаковки архива копируем содержимое папок extension и lib в соответствующие папки установленного postgres’а.
- Выполняем следующие команды:
- Создаём расширение:
1
CREATE EXTENSION oracle_fdw;
CREATE EXTENSION oracle_fdw;
- Описываем сервер:
1
CREATE SERVER ora FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//<address>:<port>/<service name> ');
CREATE SERVER ora FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//<address>:<port>/<service name> ');
- Назначаем права пользователю postgres для доступа к внешнему серверу:
1
GRANT USAGE ON FOREIGN SERVER ora TO postgres;
GRANT USAGE ON FOREIGN SERVER ora TO postgres;
- Указываем имя пользователя и пароль, с которыми пользователь postgres будет мапиться на внешний сервер:
1
CREATE USER MAPPING FOR postgres SERVER ora OPTIONS (user 'user_name', password 'your_password');
CREATE USER MAPPING FOR postgres SERVER ora OPTIONS (user 'user_name', password 'your_password');
- Создаём схему в postgresql и и мпортируем схему в postgresql:
1 2
CREATE SCHEMA <postgresql_schema_name>; IMPORT FOREIGN SCHEMA "<oracle_schema_name>" from server ora into "<postgresql_schema_name>";
CREATE SCHEMA <postgresql_schema_name>; IMPORT FOREIGN SCHEMA "<oracle_schema_name>" from server ora into "<postgresql_schema_name>";
Теперь можно делать запросы к этой схеме и они автоматически будут транслироваться в запросы для
- Второй вариант – это не импортировать схему, а воспользоваться инструкцией CREATE FOREIGN TABLE:
1 2 3 4
CREATE FOREIGN TABLE tt ( kod numeric(38, 0) ) server ora options ( table '(select n.kod from main.nar n)')
CREATE FOREIGN TABLE tt ( kod numeric(38, 0) ) server ora options ( table '(select n.kod from main.nar n)')
- Создаём расширение: