Доступ к Oracle из Postgresql (инструкция для Windows)

Несколько дней назад возникла такая задача: получать данные из Oracle, выполняя запросы в PgAdmin. Немного погуглив, нашёл для себя решение в виде связки oracle instant client + oracle fdw. Всё это должно работать для ОС Windows.

  1. Качаем и устанавливаем Oracle instant client. После разархивирования нужно добавить путь к каталогу в переменную окружения PATH. Я это делаю так:
    • Создаю новую переменную окружения ORA_INSTANT_CLIENT, в значении которой указываю путь к клиенту
    • Добавляю созданную ранее переменную к PATH через «;»: %ORA_INSTANT_CLIENT%
  2. Качаем oracle_fdw. После распаковки архива копируем содержимое папок extension и lib в соответствующие папки установленного postgres’а.
  3. Выполняем следующие команды:
    • Создаём расширение:
      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)')
Bookmark the permalink.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *