PostgreSQL 9.3の新機能、目玉は「マテビュー」こと、マテリアライズドビュー
基調講演ではPostgreSQLの最新状況が解説された。9月9日には最新版となるPostgreSQL 9.3がリリースされたところだ。PostgreSQLに携わり9年、国内外のPostgreSQLカンファレンスへ参加し、PostgreSQLの研修講師も務めるNTTソフトウェアの勝俣智成氏が、PostgreSQL 9.3のポイントを解説した。
PostgreSQL 9.3では150もの新機能追加や機能改善がなされており、なかでも目を引くのがマテリアライズドビュー(通称「マテビュー」)と更新可能ビュー、レプリケーション改善となる高速フェールオーバーなどだ。
最大の目玉となるのがマテビュー。クエリの結果をキャッシュしたビューであり、頻繁にアクセスするのであれば結果がキャッシュされているので有効となる。またマテビューにはインデックスを定義することができるため、集計も高速化できる。
ただし元テーブルが更新されても自動的にマテビューを更新する機能はないため、ビューはキャッシュしたときのままである。「REFRESH MATERIALIZED VIEW」コマンドで更新する必要がある。またマテビューを更新するにしても、差分のみを更新するようにはなっていない。現段階ではほぼ最初から作り直すような仕様になっているので注意が必要だ。次バージョンの9.4では差分のみを更新するような高速化に向けて開発が始められているとのこと。
続いて更新可能ビュー。PostgreSQL 9.2まではビューは参照しかできなかったが、PostgreSQL 9.3から更新も可能となった。一定の条件を満たせば更新できるビューを定義することができる。ただし以下の条件にあてはまると更新可能とはできず、参照のみのビューとなる。例えば「FROM句の指定が1つのテーブルもしくは更新可能ビューになっていない」、「最上位レベルでWITH、DISTINCT、GROUP BY、HAVING、LIMIT、OFFSETが使われていない」、「最上位レベルで集合操作が使われていない」などである。
もし更新可能ビューを使用するのであれば「移行時に注意が必要です」と勝俣氏は注意を促す。9.3ではビューのデフォルトが更新可能ビューとなるため、9.2以前で参照用に使用していたビューがバージョンアップすることにより更新可能ビューになる可能性があるからだ。適切な権限設定を施すなど注意が必要だ。
それからレプリケーション改善として高速フェールオーバー機能が追加された。9.2までのフェールオーバー処理ではpromote、recovery、checkpointの処理が終了してから、ようやく更新可能な状態となっていた。9.3からはrecovery処理が終われば更新可能となる。checkpointは後で実行することができ、checkpoint処理を待つ時間がまるまる省かれるため高速化が見込まれる。
ただしこうした処理のありかたについてはコミュニティ内部でも賛否両論あるそうだ。そのため従来型(9.2と同じ)のフェールオーバーも9.3では併存となっている。ほかにもレプリケーション改善策として、9.3では故障検知を迅速化できる「wal_sender_timeout」(9.2では「replication_timeout」)や「wal_reciever_timeout」(新設)というパラメーターが提供されている。
少し気が早いものの、PostgreSQL 9.4についても少し言及があった(ただし9.4の開発は始まったばかりなので変更になる可能性もある)。9.3までのPostgreSQLでレプリケーションを行う場合は物理レプリケーション(同じデータベースクラスタ)となるためテーブル単位では行えないことになっている。そのため9.4以降では異なるデータベースクラスタ間でのレプリケーションやテーブル単位のレプリケーションも可能となりそうとのことだ。今後レプリケーションの選択肢が増えていきそうだ。
勝俣氏は最後に「今後PostgreSQLがエンタープライズの領域で利用されることを期待しています」と述べて結んだ。