今日から3回に分けて、PostgreSQL 9.5の新機能IMPORT FOREIGN SCHEMAを使うメモ。外部サーバに接続してスキーマごとデータを一括インポートできて便利♪ 作業は全部終わってますが、画像が多いので記事を分けます。今日はpostgres_fdwインストールまで、明日からPostGISを使用。
実行環境
昨日と同じで、仮想マシンのCentoOSに入れたPostgreSQL 9.5 Alpha 1を使います。 ホストOS:Windows7 32bit ゲストOS:CentOS7 64bit 仮想化ソフトウェア:Portable VirtualBox 作業も昨日同様、ホストOSのSSHクライアントまたはpgAdminから。それにはVirtualBoxのネットワーク設定とか必要で少し面倒ですが(下記参照)、やること自体は普通のCentOS上と変わりありません。
参考サイト
今回使うpostgres_fdwと、これを含むPostgreSQLの外部データラッパ(Foreign Data Wrapper, FDW)に関する日本語の解説が下記にあります。 PostgreSQL 9.5 Alpha 1の公式ドキュメント(英語)で、今回関連する所は次のとおり。 IMPORT FOREIGN SCHEMAの使い方は下記を参考にしました。すでに1年以上前に開発中のPostgreSQL 9.5に備わり、テストされてきた模様。
postgres_fdwインストール
postgres_fdwというのは、PostGISと同様、PostgreSQLの機能拡張の一つです。が、前項に書いたとおり公式ドキュメントの「Additional Supplied Modules」に位置付けられていて、クエリのリファレンスもドキュメント内にあるので、その意味では本体に近い存在。PostgreSQL9.3以降で使えます。 最初に、今回のテスト用データベースを作成。ロケールは昨日と同様にCにしました(もしWindowsに持ってくる必要が出たら、UTF-8系のロケールが使えないため)
CREATE DATABASE test_fdw
  WITH ENCODING = 'UTF8'
       TEMPLATE = 'template0'
       LC_COLLATE = 'C'
       LC_CTYPE = 'C';
次に、機能拡張を行うクエリCREATE EXTENSION文を実行すると、ファイルがないとのメッセージ(ERROR: could not open extension control file "/usr/pgsql-9.5/share/extension/postgres_fdw.control": No such file or directory)。これは想定の範囲内で、7月6日の記事でPostgreSQL 9.5 Alpha 1を入れた時、最小限のパッケージだけインストールしたから。 そこでSSHクライアントでCentOSにログインし、パッケージリストを確認。右端で@付きのがインストール済みで、postgres_fdwなど拡張機能が含まれている-contribパッケージはまだでした。
ssh -p 2233 postgres@localhost
[password]
-bash-4.2$yum list | grep postgresql95

postgresql95.x86_64                   9.5-alpha1_1PGDG.rhel7   @pgdg95
postgresql95-libs.x86_64              9.5-alpha1_1PGDG.rhel7   @pgdg95
postgresql95-server.x86_64            9.5-alpha1_1PGDG.rhel7   @pgdg95
postgresql95-contrib.x86_64           9.5-alpha1_1PGDG.rhel7   pgdg95
postgresql95-debuginfo.x86_64         9.5-alpha1_1PGDG.rhel7   pgdg95
postgresql95-devel.x86_64             9.5-alpha1_1PGDG.rhel7   pgdg95
postgresql95-docs.x86_64              9.5-alpha1_1PGDG.rhel7   pgdg95
postgresql95-plperl.x86_64            9.5-alpha1_1PGDG.rhel7   pgdg95
postgresql95-plpython.x86_64          9.5-alpha1_1PGDG.rhel7   pgdg95
postgresql95-pltcl.x86_64             9.5-alpha1_1PGDG.rhel7   pgdg95
postgresql95-test.x86_64              9.5-alpha1_1PGDG.rhel7   pgdg95
管理者権限になってインストール。昨日のPostGISでは未署名だったので--nogpgcheckオプションが必要でしたが、こちらは不要で簡単に終了。
su
[password]
yum -y install postgresql95-contrib

...
Complete!
EXTENSION関係のフォルダを見ると、確かに入ってました。でpgAdminに戻り、再度CREATE EXTENSIONを実行してインストール完了。
ls /usr/pgsql-9.5/share/extension/ | grep fdw

file_fdw--1.0.sql
file_fdw.control
postgres_fdw--1.0.sql
postgres_fdw.control
CREATE EXTENSION postgres_fdw;
PostGISもインストール。明日、外部サーバから取り込むデータがPostGISのジオメトリを含むからです。通常のPostgreSQLデータ型だけをやり取りするなら不要。
CREATE EXTENSION postgis;
↓ ここまでの結果をオブジェクトブラウザで見たるところ。準備は以上で、明日に続きます。