トップ 一覧 置換 検索 ヘルプ RSS ログイン

PostgreSQLで他データベースにアクセスするの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!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 ローカルスキーマ名;

!!!以下未整理
grant usage on FOREIGN data wrapper mysql_fdw to mysql_user;
create server mysql_server foreign data wrapper mysql_fdw options (host 'localhost', port '3306')
create user MAPPING FOR mysql_user server  mysql_server  OPTIONS(password 'root', username 'root');
create user MAPPING FOR postgres server  mysql_server  OPTIONS(password 'root', username 'root');
import foreign schema mysql_db from server mysql_server into mysql;

\dx
\des
\deu

{{category2 データベース,Postgresql}}