2015年12月14日月曜日

あなたとPostgreSQL 9.5、今すぐダウンロード

これはPostgreSQL Advent Calendar 2015の14日目の記事です。

昨日はtksyさんの「普段SQLServerを触っている人がPostgreSQLに入門するかも」でした。
tksyさんの体調が心配です。

さて今日は僕がPostgreSQLの本当のポテンシャルをお見せしましょう。
…と思ってたのですがここまでPostgreSQL9.5の話は0。
下手だなぁカイジ君、本当に読者がほしいのはコレ、PostgreSQL9.5の最新情報まとめ。
ということでPostgreSQL9.5の話をします。
PostgreSQLのポテンシャルについては明日の海外さんに期待してください。

1. PostgreSQL 9.5はいつ出るの?

出る出る詐欺進行中のPostgreSQL 9.5はいつ出るのでしょうか。
現在のPostgreSQL 9.5はBeta2です。
当初は年内に出る予定でしたが今の感じでは年明けと見せかけて海外勢のロングバケーション後で2月くらいかなと僕は思ってます。
実際のgit logを見るからには毎日激しく最後の追い込みがかかってるので年内リリースに微かな期待を持っても良いかもしれません。

PostgreSQL本体のgitのSumally

2. PostgreSQL 9.5で何が変わるの?

毎年PostgreSQLの新機能の話でスピーカー業で飯を食うのが僕の生業だったのですが今年はなんと一回も新機能ネタで話してません。
なので自分のスライドが無いので他人の褌で相撲を取ろうと思います!! 
ということでPostgreSQL界のダルシムこと@sawada_masahikoくんの資料が素晴らしいのでご紹介します。



あとPostgreSQL界のラーメンテロリストことぬこさんのブログも細かい情報がまとまっています。
リリース前のPostgreSQLを積極的に検証している情報が貴重です。

日々の記録 別館


3. で結局なにがオススメ機能なのよ

PostgreSQL新機能は色々あるんですけどもうコレだと思うんですよね。

INSERT ON CONFLICT構文


PostgreSQL9.5からMERGE文相当としてINSERT ON CONFLICT構文という機能が追加になりました。
これはMySQLのINSERT ON DUPLICATE KEY UPDATE構文相当の機能になります。
構文も非常に似ており

INSERT INTO table名 (column1, column2, column3) values (value1, value2, value3) 
     ON CONFLICT 制約名
     DO UPDATE SET ( カラム名 = 値 )

と書くことで同様の処理を実行できます。
MySQLと違うところは制約を書くことです。
これは冗長とも言えますが「primary keyなのかUNIQUE制約なのかを選べる」ということです。
今までORMでsave()というメソッドを実装するときに一旦SELECTでDBを検索したりUPDATEの例外を拾って処理していたようなところは全てこれで解決できます。
ついに念願のMERGE(UPSERT)文相当の機能が実装されたということになります。
この機能だけでも新バージョンを使う価値があると思います。
もうちょっと詳しく知りたい人は上記のぬこさんの検証結果を見てみてください。

PostgreSQL 9.5 UPSERTを試してみた

その他にもRow Level Securitなど目玉機能が盛り沢山のPostgreSQL 9.5。
是非、皆さんも試してみてください!!!