2016年6月9日木曜日

FileMakerからPostgreSQLにレコードを送りつける・その1

先日、FileMaker Pro 15がリリースされました。

メンテナンスリリースで無償インストールできたので、早速使ってみた。

感想は……14とあまり変わってない感じ。

むしろ、メニューの表示が変わってて、ひじょうに使いにくくなっていました。

元々、今回はiOS関連の機能の追加が多いようでしたので、実はあまり興味がなかったのですが、ODBC接続でPostgreSQLが使えるようになるという点にだけ、注目していました。

ODBC?Post?なんのことやらわからんという人に言っておくと……



まずPostgreSQLですが……

同じ人間でも人種が違うように、データベースを扱うソフトウェアにも、種類がたくさんあります。

FileMaker以外にも、MySQLやOracleなど、いろいろありまして、PostgreSQLもそのうちのひとつ。

PostgreSQLはよくポスグレと呼ばれます。

タダで使えるうえに、同じタダで使えるMySQLよりも高機能なので、評価されているらしいです。



次にODBC。

実はFileMakerは、リレーションシップのグラフに、別データベースのテーブルを追加することができるのです(外部データソースと言います)。

こんな感じで。


ごちゃってますが、一番右のテーブル。

これはFileMakerのテーブルではなく、PostgreSQLのテーブルです。

テーブル名(order_psql)が斜体になっているのが目印。



それで、これができると何が良いかというと、FileMakerとは一切関係のないシステムで作ったデータベースに、FileMakerで作ったデータを放り込む……ということができます。

ただし、ここで注意点がひとつあります。

FileMakerと上述のPostgreSQLは別物、日本人とドイツ人みたいなものなので、両者をつなぐためには、その仲介をする「共通言語」が必要なのです。

この共通言語が、ODBC(Open Database Connectivity)になります。

その名の通り、データベースをオープンにつなぐ……データベース界の通訳さんです。

FileMaker ---- ODBC ---- PostgreSQL という構成をとることで、FileMakerのデータをPostgreSQLに転送することができるようになります。

実データはPostgreSQLデータベースで管理しているんだけど、データ入力はFileMakerでやりたいんだよね。

そんな時に使えばいいと思います。



本題に戻ると、FileMaker の14までは、PostgreSQLを外部データソースとして使うことができませんでした(リレーションシップグラフに追加できなかった)。

15になって初めて、PostgreSQLとの本格的な連携ができるようになったわけです。

ですので、今回はFileMakerで作ったデータを、ODBCを介してPostgreSQLデータベースに送りつけてみました。

わざわざFileMakerのデータをPostgreSQLに送って何の役に立つのかというと……

イメージとしては、各店舗のPOS端末から、本社のデータベースにデータを送って、本社側でデータ分析、みたいな。

データ分析、FileMakerでもできなくはないと思いますが、データ分析用の関数があるPostgreSQLでやったほうが良いと思います。



FileMaker→PostgreSQLへのデータ転送にはいろいろ準備が要ってめんどくさいですが、手順としては、以下のような流れになります。

① PostgreSQLをインストールする。

② PostgreSQL用のODBCドライバをインストールする。

③ Windowsの管理ツールで、②を使うためのアカウントのようなもの(DSNという)を作る。

④ Actual ESS Adapterをインストールする。

⑤ Windowsの管理ツールで、④を使うためのアカウントのようなもの(DSNという)を作る。

⑥ FileMakerでテーブルを作って、レコードをいくつか追加する。

⑦ PostgreSQLに、FileMakerで作ったテーブルと同じ形式のテーブルを作る(SQL実行環境が必要)。

⑧ FileMakerで外部データソースを追加して、リレーションシップグラフに⑦で作ったテーブルを追加する。

----ここまでが準備----

⑨ FileMakerのレコードを⑧のテーブルにインポートする。



ちなみに今回は、同じPCにPostgreSQLとFileMakerを入れた完全ローカル環境、OSはWindows7(64bit)での実験になります。

本当はサーバー・クライアントでやってみたかったのですが、最初なのでシンプルに。

……長くなりそうなので、詳細は次の投稿でやります。