FDW(Foreign Data Wrapper)
機能
dblink以外にFDWという機能が PostgreSQL 9.1から使えるようになった。
外部データベースのテーブルをPostgreSQLのテーブルのように扱えるようにする機能。
FDWでOracleと接続する
機能
PostgreSQL 9.3 の oracle_fdwからINSERT、UPDATE、DELETEがサポートされた。
それ以前は、SELECTのみ。
インストール
ダウンロード
http://laurenz.github.io/oracle_fdw/
からダウンロード
oracle_fdw-ORACLE_FDW_1_2_0.tar.gz(919)
Oracle Clientも必要なので、Oracle Client Instant をダウンロードしてインストールしておく。
コンパイル
sudo yum install postgresql-devel tar zxvf oracle_fdw-ORACLE_FDW_1_2_0.tar.gz cd oracle_fdw-ORACLE_FDW_1_2_0 make sudo make install
pg_configが見つからない場合は
find / -name pg_config
で探して、ディレクトリにパスを通す。
export PATH=${PATH}:/usr/pgsql-9.4/bin
など。
起動スクリプト修正
PostgreSQLのプロセスにOracleライブラリのパスを教える必要がある。
sudo vim /etc/sysconfig/postgresql
LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib/
postgresql起動スクリプトを作成する。
本来の起動スクリプトを読み込んでからカスタマイズを書く。
Environmentで直接指定してもいいけど、環境変数ファイルを指定しておく。
sudo vim /etc/systemd/system/postgresql.service
.include /lib/systemd/system/postgresql.service [Service] EnvironmentFile=/etc/sysconfig/postgresql
systemdでない場合は、postgresユーザの .bashrcに
export LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.4/client64/lib/
としてもよい。
拡張読み込み
postgresql内にoracle_fdwの拡張を読み込む。
psql -U postgres CREATE EXTENSION oracle_fdw;
もし、ここでエラーが出る場合は、SELinuxまわりかライブラリのパス指定にミスがある可能性がある。
外部テーブルの定義
リモートデータベース名は任意の名前。
リモートデータベースを作成する
create server リモートデータベース名 foreign data wrapper oracle_fdw options (dbserver '//xxx.xxx.xxx.xxx:1521/XE');
ユーザマッピングの作成
create user mapping for postgresqlのユーザ名 server リモートデータベース名 options(user 'oracleのユーザ', password 'oracleのパスワード');
外部テーブルの作成
create foreign table テーブル名 ( a date, b date, c text, d text) server リモートデータベース名 options(schema 'oracleのスキーマ', table 'oracleのテーブル');
テーブル名は大文字、小文字を識別するので注意
スキーマごとのインポート
テーブルを一つ一つマッピングせずに、スキーマをまるごとリンクできる。
(9.5以降)
IMPORT FOREIGN SCHEMA リモートスキーマ名 FROM SERVER リモートデータベース名 INTO ローカルスキーマ名;
[カテゴリ: データベース > Postgresql]
[通知用URL]
Tweet
最終更新時間:2020年05月06日 17時51分22秒