この記事はPostgreSQL Advent Calendarの16日目の記事です。
Postgres歴は一年くらいな初心者ですが、参加させて頂きました。
今回は、最近気になっている Smalltalk というわりとニッチな言語の、
その中でも GNU-Smalltalk と呼ばれる、これまたわりとニッチなファイルベースの環境から、
PostgreSQLの呼び出しを行ってみようと思います。
Smalltalk自体触った事の無い人が多そうですが、
PostgreSQLをきっかけにSmalltalkも触ってくれる人が増えたらいいなぁと…
そもそもSmalltalkって何
以下をどうぞ。
http://ja.wikipedia.org/wiki/Smalltalk
頭文字の S だけ大文字です。
イメージから起動され、大抵の環境で動くような環境があったり、
webベースで使用する事や、Javascript、JQueryなんかも連携して使えます。
ちなみに、今回使うGNU Smalltalkについては、
以上に加えて、ファイルベースで、コマンドラインから使用でき、
バージョン管理がしやすいというような分かり易いメリットがあります。
スクリプト言語のようなものなのであまり抵抗も出ない?かもしれません。
また、これも大抵の環境で動くはずです。
PostgreSQL下準備
インストールは今更なので省略します。私自身はソースコンパイルから入れています。
また、テスト用に「public_test」というテーブルを作成し、以下のようなテストデータを作成しています。
GNU Smalltalk下準備
Macの場合は、homebrew導入後に下記コマンドでGNU Smalltalkのインストール
brew install gnu-smalltalk
Macportsにも同名の物がありますので、今回の場合はそちらでも問題ありません。
しかしMacportsにある GNU smalltalk はバージョンが古い為、
将来的にちゃんと使いたいなと思った時にはhomebrewからインストールする方が色々早いです。
linuxの場合は、rpmのgnu-smalltalkあたりからインストールしてください。
windowsの場合は…
ひとやすみ
これで環境準備は完了です。
次はコードを書いていきます。
スクリプトファイルの作成
以下スクリプトをtest.stとして保存します。
"パッケージのロード" PackageLoader fileInPackages: #( 'ROE' 'DBD-PostgreSQL' 'DBI' ). | db data | "PostgreSQLへの接続" db := DBI.Connection connect: 'DBI:PostgreSQL:dbname=postgres;host=localhost' user: 'postgres' password: nil. "クエリの発行" data := db do: 'SELECT * FROM public_test;'. "結果出力" data rows inspect.
そして上記ファイルを保存しているディレクトリに対して
gst test.st
とコマンドライン上から実行すると…
xxxx:gst-test xxx$ gst test.st
"Global garbage collection... done"
Loading package ROE
Loading package DBI
Loading package DBD-PostgreSQL
An instance of Array
contents: [
[1]: id -> 1 name -> 'test'
[2]: id -> 2 name -> 'test2'
]
出力されたログから、
各パッケージがロードされた後、
インスペクタで取得したレコードの詳細が出力がされている事が分かるかと思います。
まとめ
以上が、SmalltalkからのPostgreSQLの呼び出しになります。
PostgreSQL Advent CalenderなのにSmalltalkがメインになっている感がありますが、
使ってみていただけたらなと思います。
また、クエリの発行している部分や、データ出力を行っている部分についても、
今回使ったメソッドだけでは無く様々なものがあります。
もうちょっと知りたいという方は以下のマニュアルをどうぞ。
「data rows」の部分や、「db do」の部分を色々変えて試してみると面白いかもしれません。
Database connectivity with DBI
http://www.gnu.org/software/smalltalk/manual-libs/html_node/DBI-package.html
明日の担当は、Tatsuo Ishii さんです。
よろしくお願いします。
