oracle_fdw. Оболочка сторонних данных для работы с СУБД Oracle#
Версия: 2.5.0.
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения:
ext.
Расширение представляет собой внешнюю оболочку данных (fdw – foreign-data wrapper) для простого и эффективного доступа к базам данных Oracle из СУБД Pangolin. Возможности включают отображение условий WHERE и требуемых столбцов, а также всестороннюю поддержку EXPLAIN. Расширение позволяет получать доступ к таблицам и представлениям Oracle (включая материализованные представления) через сторонние таблицы.
Доработка#
Доработка: Добавлена совместимость с защищенным шифрованным хранилищем паролей
pg_auth_config.Версия: 4.5.0.
Ограничения#
Расширение появилось в версии 4.5.0 СУБД Pangolin, поэтому для использования расширения необходимо обновить версию СУБД Pangolin до 4.5.0 или выше.
Установка#
Установка расширения производится инсталлятором (документ «Руководство по установке», раздел «Установка»).
В случае ручной установки, выполните действия:
Установите
oracle clientверсии не ниже 11.2:sudo yum localinstall oracle-instantclient19.18-basic-19.18.0.0.0-2.x86_64.rpmДобавьте в систему библиотеки клиента:
Добавьте строку
/usr/lib/oracle/19.18/client64/lib/в файл/etc/ld.so.conf:
sudo vi /etc/ld.so.confСохраните файл и выйдите из редактора.
Создайте связки и кеш динамических библиотек:
sudo ldconfig -N
Выполните настройку необходимых переменных окружения:
для использования расширения достаточно переменной окружения
LD_LIBRARY_PATHприсвоить значение, равное пути, где расположены библиотекиoracle clientдля устаноленной версии, например,/usr/lib/oracle/19.18/client64/lib.vim ~/.bash_profile # добавить путь к переменной export LD_LIBRARY_PATH=/usr/pangolin-X.X.X/lib:/usr/lib/oracle/19.18/client64/libдля обновления версии Pangolin необходимо создать символьную ссылку на библиотеку
libclntsh.so.18.1в каталоге системных библиотек/usr/lib64:ln -s /usr/lib/oracle/19.18/client64/lib/libclntsh.so.18.1 /usr/lib64/libclntsh.so.18.1
Примечание:
Переменные среды необходимо устанавливать для оболочки, в которой запускается сервер PostgreSQL.
Порядок установки переменной
LD_LIBRARY_PATHописан в документе «Руководство по системному администрированию», раздел «Порядок установки переменнойLD_LIBRARY_PATHв окружении Patroni».Перезагрузите сервер базы данных для применения переменных среды. Пример для инсталляции standalone:
pg_ctl restartПосле выполнения описанных действий необходимые библиотеки и файлы клиента Oracle появятся в системе.
Добавьте расширение в БД (необходимы права суперпользователя):
CREATE EXTENSION oracle_fdw SCHEMA ext;Примечание:
В случае получения ошибки следующего вида проверьте правильность установки переменных среды (п. 2 – 4).
ERROR: could not load library "{$PGHOME}/lib/oracle_fdw.so": libclntsh.so.18.1: cannot open shared object file: No such file or directoryДайте права на использование расширения
oracle_fdwдля необходимой роли:GRANT USAGE ON FOREIGN DATA WRAPPER oracle_fdw TO <role_name>;При необходимости обновите расширение:
ALTER EXTENSION oracle_fdw UPDATE;
Настройка#
Настройка не требуется.
Использование модуля#
Пример использования расширения oracle_fdw описан в подразделе «Функциональность FOREIGN DATA WRAPPER для БД Oracle» документа «Руководство администратора», раздел «Сценарии администрирования».
Создать «сервер» – атрибут, который содержит параметры подключения к серверу базы данных Oracle:
CREATE SERVER ora_db FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//oracle_server:1521/oracle_db');где:
ora_db– произвольное имя сервера;dbserver– параметр подключения к серверу баз данных Oracle.
Создать сопоставление пользователя на внешнем сервере для подключения к созданному серверу
ora_db:CREATE USER MAPPING FOR pguser SERVER ora_db OPTIONS (user 'ora_user');где:
pguser– имя пользователя в базе данных Pangolin, который сможет пользоваться внешними данными;ora_db– имя созданного сервера внешних данных;ora_user– имя пользователя в базе данных Oracle, который имеет право на чтение внешних данных.
Выдать права для использования стороннего сервера Oracle для пользователя, которому было создано сопоставление (
USER MAPPING):GRANT USAGE ON FOREIGN SERVER ora_db TO pguser;где:
ora_db– имя созданного сервера внешних данных;pguser– имя пользователя в базе данных Pangolin, которому предоставляются права на использование созданного сервера внешних данных.
Добавить пароль для пользователя базы данных Oracle в шифрованное хранилище. Приведены два способа:
функция
add_auth_record_to_storageтребует явного ввода пароля в строке запуска, что небезопасно:SELECT add_auth_record_to_storage('FQDN_hostname-OR-IPaddress', 1521, 'oracle_db', 'ora_user', '<пароль>');Пример вывода результата:
add_auth_record_to_storage ---------------------------- (1 row)утилита
pg_auth_ configс интерактивным вводом пароля:pg_auth_config add --host <FQDN_hostname-OR-IPaddress> --port 1521 --database oracle_db --user ora_userПо запросу утилиты ввести интерактивно дважды пароль пользователя:
enter password: ******************* confirm password: *******************В случае успешного завершения утилита выдает сообщение:
Going to add auth record for user: "ora_user", host: "<FQDN_hostname-OR-IPaddress>", port: "1521", database: "oracle_db" new record added
Примечание:
Пример использования расширения
oracle_fdwописан в подразделе «Функциональность FOREIGN DATA WRAPPER для БД Oracle» документа «Руководство администратора», раздел «Сценарии администрирования».Внимание!
При проверке хранилища паролей расширение не проверяет пароль пользователя БД Oracle.
Вывод содержимого целевой тестовой таблицы
SCOPE_TEST1в базе данных Oracle:SQL> SELECT * FROM SCOPE_TEST1; COL1 COL2 ---------- ------------------------------------------------- 4034 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE 734 GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE 32 BUFFER_POOL DEFAULT FLASH_CACHE 74 POOL DEFAULT FLASH_CACHE 297 GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE 84 GROUPS POOL DEFAULT FLASH_CACHE 532 BUFFER_POOL DEFAULT 574 POOL DEFAULT 297 GROUPS 1 BUFFER_POOL DEFAULT 584 GROUPS POOL DEFAULT 10 rows selected.Структура целевой тестовой таблицы
SCOPE_TEST1в базе данных Oracle:SQL> DESCRIBE SCOPE_TEST1; Name Null? Type ----------------------------- -------- ---------------------- COL1 NOT NULL NUMBER(19) COL2 NOT NULL VARCHAR2(128 CHAR)Создать внешнюю таблицу по отношению к существующей таблицы в базе данных Oracle (атрибуты и типы данных должны соответствовать):
CREATE FOREIGN TABLE ext.ora_scope_test1(col1 numeric(19,0), col2 varchar(128)) SERVER ora_db OPTIONS (SCHEMA 'PG_USER', TABLE 'SCOPE_TEST1');где:
ext.ora_scope_test1– полное название внешней таблицы, создаваемой в базе данных Pangolin;col1,col2– столбцы таблицы, которые должны соответствовать по названию и типу данных структуре внешней таблице в базе данных Oracle;ora_db– имя сервера внешних данных Oracle;PG_USER– имя схемы в базе данных Oracle;SCOPE_TEST1– имя тестовой таблицы в базе данных Oracle.
Проверка работы расширения: можно обращаться к целевой таблице во внешней базе данных Oracle, как к обычной таблице PostgreSQL в СУБД Pangolin:
SELECT * FROM ext.ora_scope_test1;Пример вывода результата запроса:
col1 | col2 ------+--------------------------------------------------- 4034 | FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE 734 | GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE 32 | BUFFER_POOL DEFAULT FLASH_CACHE 74 | POOL DEFAULT FLASH_CACHE 297 | GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE 84 | GROUPS POOL DEFAULT FLASH_CACHE 532 | BUFFER_POOL DEFAULT 574 | POOL DEFAULT 297 | GROUPS 1 BUFFER_POOL DEFAULT 584 | GROUPS POOL DEFAULT (10 rows)Созданная внешняя таблица присутствует в списке системного каталога:
\d+ ora_scope_test1Foreign table "ext.ora_scope_test1" Column | Type | Collation | Nullable | Default | FDW options | Storage | Stats target | Description --------+------------------------+-----------+----------+---------+-------------+----------+--------------+------------- col1 | numeric(19,0) | | | | | main | | col2 | character varying(128) | | | | | extended | | Server: ora_db FDW options: (schema 'PG_USER', "table" 'SCOPE_TEST1')Удалить внешнюю таблицу:
DROP FOREIGN TABLE ext.ora_scope_test1;
Ссылки на документацию#
Описание расширения: Подраздел Функциональность FOREIGN DATA WRAPPER для БД Oracle документа «Сценарии администрирования».
Дополнительно поставляемый модуль oracle_fdw: https://github.com/laurenz/oracle_fdw.