2012年8月4日土曜日

変態アドベントカレンダー in Summer : ATNDの17日目

この記事は変態アドベントカレンダー in Summer : ATNDの17日目です。

昨日の記事はdproject21さんの

Titanium mobile の Alloyでエロい(?)アプリをつくる。

でした。

皆さん日に日に変態度が増してますね!
さて本日はPostgreSQL 9.2の新機能について触れます。
ホントは変態チックにSQLで因数分解を解いたりとエグい事したいんですけどコレ見てるみんなも変態だからそんなことは知ってるよね!
なのでナゥなヤングにバカウケの最新情報をお送りします。

Q「9.2って何が追加になったの?」
A「色々追加になったから公式ドキュメント嫁」

ってなわけみんな話題になってるレンジ関数とかindex-only scanとかは知ってそうだから別のところを攻めてみます。
個人的にはPostgreSQLの熱いのはJSON型、コレだね!!
前回はArray型とか紹介しましたがやっぱ最近の流行りはJSONだよね。
でJSON型はなにがいいかって?
どうせtext型に丸っと入れてるのと一緒なんでしょwっとか思った人。
違うんです!

ついでに9.1でも拡張すればJSON型を使えるみたいです

で実際の使い方ですが例えばArray型からJSON型にCASTして取り出す場合。
tagsに配列型でデータを入れてるとしましょう。

=> SELECT * FROM t;
 id | name |       tags
----+------+------------------
  1 | パンピー      | {従順,賢い}
  2 | 廃人            | {自由}
  3 | 変態            | {エロい,恐い,希少}

=> SELECT row_to_json(t) FROM t WHERE id = 3;
                    row_to_json
----------------------------------------------------
 {"id":3,"name":"変態","tags":["エロい","恐い","希少"]}

↑↑↑JSONになって帰ってくる↑↑↑

となります。
どうだい?コレならphp標準で対応してるはずのJSONencodeがソースからコンパイルしてしまい、phpのバグでencode出来ないphp5.3.8でも大丈夫だろうぉ?
標準では行の結果をJSONに変換してくれる関数もあります。
当然、tableにJSON型を指定してinsert時に直接JSONを入れてやることもできます。
plv8jsを使えばJSONの中をwhereしたりINDEXを利用することもできるようです。
今後は日本語対応も含めて設計の幅が広がるので期待したいと思います。
9.3ではもっと関数が追加されるかな?
ということで現在はBETA版で正式版は年末ごろになると思われる9.2。
非常に基本性能も向上しておりますので可能でしたら環境のバージョンアップを是非検討してみてください。