Symfoware

Symfowareについての考察blog

PostgreSQL multicorn extensionのインストールと設定

mysql_fdwで、PostgreSQLからMySQLのテーブルが参照できるようにしてみました。
mysql_fdwで、PostgreSQLからMySQLのデータベースに接続する

調べてみると、Python経由でMySQLに接続する拡張がありました。
multicorn
PGXN - multicorn

ソース
https://github.com/Kozea/Multicorn/tree/master/python/multicorn


MySQLというか、SqlAlchemyで接続できるデータベースなら何でもOKなようです。
データベース以外もLDAPやRSSにも対応。

さらに、独自の拡張がPythonで記載できるみたいですね。

Debian 8 + PostgreSQL 9.4.5で試してみます。



インストール



インストールはpgxnコマンドで行うことにしました。
これはPythonで作成されているようですね。
easy_installでインストールすることにします。

python-setuptoolsをインストールして、easy_installを使えるようにした後、
pgxnclientをインストールします。


# apt-get install python-setuptools
# easy_install pgxnclient



これでpgxnコマンドが使えるようになります。

C言語のビルドが実行されますので、事前に必要なライブラリをインストール。


# apt-get install make g++ python-dev
# apt-get install postgresql-server-dev-9.4




準備出来たらmulticornをインストール。


# pgxn install multicorn



これでインストールは完了です。





エラーになる場合のメモ



エラーになった時の対処法メモです。


# pgxn install multicorn
You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application.
ERROR: command returned 1: ['/usr/bin/pg_config', '--libdir']



このエラーは、PostgreSQLのヘッダーなどが無い可能性有りです。
postgresql-server-dev-9.4をインストールしてやります。


# apt-get install postgresql-server-dev-9.4





# pgxn install multicorn
INFO: best version: multicorn 1.2.3
INFO: saving /tmp/tmp21bKuI/multicorn-1.2.3.zip
INFO: unpacking: /tmp/tmp21bKuI/multicorn-1.2.3.zip
INFO: building extension
ERROR: make executable not found: gmake




この場合は、コンパイル環境が不足しています。


# apt-get install make g++ python-dev







拡張機能の有効化



PostgreSQLに対して、クエリを実行していきます。

CREATE EXTENSIONでmulticornを有効にします。


  1. CREATE EXTENSION multicorn;




「alchemy_srv」という名前で、SqlAlchemy FDWを使用することにします。


  1. CREATE SERVER alchemy_srv FOREIGN DATA WRAPPER multicorn
  2. options (
  3. wrapper 'multicorn.sqlalchemyfdw.SqlAlchemyFdw'
  4. );




※ここで、こんなエラーが発生する場合、SqlAlchemyがインストールされていません。


ERROR: Error in python: ImportError
SQLステート:XX000
詳細:No module named sqlalchemy



SqlAlchemyをインストールし、PostgreSQLを再起動します。


# easy_install SqlAlchemy
# service postgresql restart





これでSqlAlchemyFdwが有効になりました。
サーバ、テーブルの関連付けを指定します。

db_urlに指定するのは、SqlAlchemyの接続文字列です。
MySQLの場合はこんな感じ。


mysql://user:pass@db-server-name/db-name?charset=utf8'




mysql_fdwで、PostgreSQLからMySQLのデータベースに接続する
こちらで試したのと同じレイアウトのテーブルと接続してみます。


  1. create foreign table mysql_table (
  2. warehouse_id int,
  3. warehouse_name text
  4. ) server alchemy_srv options (
  5. tablename 'warehouse',
  6. db_url 'mysql://admin:P@ssw0rd@192.168.1.102/test?charset=utf8'
  7. );




できたらselectしてみます。


  1. select * from mysql_table




※こんなエラーが出たら、MySQLdb(PythonからMySQLに接続するライブラリ)がインストールされていません。


ERROR: Error in python: ImportError
SQLステート:XX000
詳細:No module named MySQLdb




こちらを参考にインストール。
MariaDB 5.5にUbuntu 12.04 + Pythonで接続する(MySQL-python使用)


# apt-get install libmysqlclient-dev
# easy_install mysql-python




ちゃんとMySQLのテーブルが検索できました。

648_01.png


データを登録しようとすると・・・

648_02.png


ERROR: This FDW does not support the writable API
SQLステート:XX000




データの更新には対応していないようです。




関連記事

テーマ:サーバ - ジャンル:コンピュータ

  1. 2015/10/15(木) 23:28:38|
  2. PostgreSQL
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<FreeBSD 10.2でRedmine 3.1の環境構築(Nginx+Puma+PostgreSQL) | ホーム | FreeBSD 10.1から10.2へのアップグレード手順>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1803-b045c4e1
この記事にトラックバックする(FC2ブログユーザー)