先日リリースされたのですが、FreeBSDのportsでも使えるようになったので早速入れ替えてみました。pg_migratorというβ版のツールが追加された模様なのですが、使い方を研究するよりもダンプしてリストアしたほうが早いので(^^)普通にアップグレード。EUC-JPで使っていた時は不正な漢字コードで insert できてしまうのかテーブル単位でリストアに失敗することがよくあったのですが、UTF-8に切り替えてからは未だそういう問題には遭遇しておりません。
さて、8.4での新機能はこちらに詳しく記載されております。中でも面白そうなのが「Window関数」と「再帰SQL」でしょうか。Window関数は割と需要がありながらスマートな方法が無かった「通し番号の付与」が簡単にできるそうです。
=# SELECT row_number() OVER (), *
FROM (SELECT * FROM tbl ORDER BY sortkey) AS t;
はい、さっそく書いてる意味がさっぱりわかりません(T^T)。たぶん私の知ってるSQLってSQL92の一部分なのでしょうね。十数年前に策定された標準(^^)。もうちょっと新しいのも覚えておいたほうがよさそうです。
で、ここの記事は前後関係を紐付けした木構造になっており、「関連記事」として表示できるようになっています。単純な木構造なので表示の際には一旦根までさかのぼってから順に追っかけるということをPHPの関数再帰呼び出しで実現しているわけですが、SQLで再帰が使えるなら一行ですぱっと書けたりするのでしょうか? なんかとっても楽ちんですね。・・・と思ったのですが、ここのコードは自宅サーバでもレンタルサーバでも同様に動くように書く必要がありまして、レンタルサーバは PostgreSQL 7.4.17 なんですねー。新機能を使っちゃうとレンタルサーバで動かなくなるのでこれは却下です(T^T)。
ちなみに、Window関数を使うとグループ単位の累計を出すってのも出来るそうです。会社サーバでは伝票を集計して科目ごとに小計を出すってことをしてたはずなので、こんど会社のに入れて遊んでみよう。