!!!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/ からダウンロード {{ref oracle_fdw-ORACLE_FDW_1_2_0.tar.gz}} 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 ローカルスキーマ名; {{category2 データベース,Postgresql}}