詳解 PostgreSQL[10/11対応]―現場で役立つ新機能と実践知識

第1章 PostgreSQLの今昔を知る―20年を超える歴史,リリースサイクル,環境構築

この記事を読むのに必要な時間:およそ 6.5 分

特集のはじめに

みなさんは普段,どのようなRDBMSRelational Database Management Systemをご利用でしょうか。昨今,OSS DBOpen Source Software DataBaseの需要は高まっており,DB-Enginesのデータベース人気ランキングでもOSS DBは商用DBに負けないほどの需要を持っています。その中でも特にRDBMSは需要が高く,OSS DBであるMySQLとPostgreSQLは幅広く利用されており,PostgreSQLは2017年に大きくランキングスコアを伸ばしています。

本特集では,2018年10月18日にリリースされたばかりのバージョン11と,現場の主力として使える10にフォーカスし,進化したPostgreSQLの魅力を余すことなくお伝えします。ぜひ,これを機にPostgreSQLの新しいバージョンにチャレンジしてください。

第1章では,PostgreSQLの歴史とインストール方法を解説します。続く第2章では内部構造を中心に基礎を説明し,第3章では開発に役立つ機能,第4章では運用で役立つ機能を紹介をします。本特集を通じてPostgreSQLをより深く知っていただき,明日から使える技術と知識を身に付け,ステップアップしたデータベースライフを目指しましょう。

PostgreSQLの特徴

巷では「Postgres」「ポスグレ」の名称で呼ばれているPostgreSQLは,UNIX系(FreeBSD,OpenBSD,Linux,macOS,Solaris)およびMicrosoft Windowsで動作し,次のようなことを大切しています。

  • OSSとしてソースコードをきれいに保つこと
  • 利用しやすいライセンス形態であること
  • 標準SQL準拠を重視すること
  • トランザクションを厳格にすること
  • 制約や型が豊富でデータを適切に守ること
  • 関数やデータ型など,ユーザー独自の拡張機能が開発しやすいこと

BSDライセンスベースの使いやすいライセンス形態ときれいなソースコード,そしてAPIの充実は豊富な拡張を生み出す理由になっていて,EDB PostgresやGreenplumなどforkされた多くのソフトウェアを生み出しています。また,CHECK制約や豊富な型をはじめとしたデータを守るしくみと,厳密なトランザクションがしっかり備わっていることから,業務系,Web系を問わず多種多様なシステムで利用されています。

PostgreSQLの歴史と最新事情

PostgreSQLの誕生から21年が経ち,前身のPostgresからはすでに29年が経っています。PostgreSQLはもともとIngresの後継として開発され,名前の由来は「Post-Ingres」から来ています。

PostgreSQLは安定した稼働実績で信用を勝ち取っていますが,さらにメジャーリリースごとにすばらしい進化をしています。たとえば複数のメジャーバージョンをまとめて系統ごとで簡単に振り返っただけでも,次のような進化を遂げています。

6系(1997年)
標準SQLに準拠し,MVCCMultiVersion Concurrency ControlなどのRDBMSとしての基本的な機能を実装
7系(2000年)
制約やWALWrite Ahead Loggingを手に入れてACID(Atomicity:不可分性,Consistency:一貫性,Isolation:独立性,Durability:永続性)を満たす
8系(2005年)
VACUUMやHOTなどの運用に直結する性能改善
9系(2010年)
レプリケーションや,OLTPOnline Transaction ProcessingとDWHData Warehouse両方の面で性能向上

今回取り上げるPostgreSQL 10,11よりも1つ前のバージョンである上記9系は,メジャーバージョンごとに表1の進化を遂げました。レプリケーションを皮切りに,マテリアライズドビューやパラレルクエリと,商用データベースで主力として使われている機能をOSSで実装してきました。PostgreSQL 10,11も,後述するようにさらなる進化を遂げています。

表1 PostgreSQL 9系の振り返り

バージョン内容
9.0
(2010年)
レプリケーション,一括権限変更,64ビットWindows対応,移動平均,列/条件トリガ,一意制約の遅延,排他制約
9.1
(2011年)
同期レプリケーション,外部テーブル,UNLPGGEDテーブル,近傍検索へのインデックス
9.2
(2012年)
INDEX ONLY SCAN,カスケードレプリケーション,JSON型,範囲型,pg_basebackup
9.3
(2013年)
マテリアライズドビュー,外部テーブルへの書き出し,イベントトリガ,LATERAL句,更新可能なView
9.4
(2014年)
JSONB型,ALTER SYSTEM,レプリケーションスロット
9.5
(2016年)
UPSERT機能,行単位センキュリテ制御,BRIN INDEX
9.6
(2016年)
パラレルクエリ,複数同時スタンバイ,全文検索のフレーズ検索,COPY文のreturning句対応

新しい機能が詰まったPostgreSQL 10

2017年にリリースされたPostgreSQL 10の特徴は,垂涎すいえんの新機能です。もちろん性能や運用についての改善もたくさん含まれていますが,PostgreSQL 10の魅力はなんと言っても新機能による表現力の向上です。

機能強化

PostgreSQL 10によって圧倒的進化を遂げた機能の代表は,9.6で追加されたパラレルクエリの強化と,postgres_fdwで接続した外部サーバが実行する集約を外部サーバが処理して,本体側に処理結果のみを返す処理(プッシュダウン)ができるようになったことです。これらの機能は,9.6では本番運用するには足りない部分がありました。PostgreSQL 10は,それを本番に導入できるすばらしい機能にまで引き上げました。postgres_fdwはPostgreSQLの拡張の話なので今回は割愛しますが,パラレルクエリについては後日公開予定の第3章で詳しく紹介します。

待望の新機能

PostgreSQL 10の機能追加の注目株は,ロジカルレプリケーションとネイティブのパーティションです。これらは同じOSS DBであるMySQLではすでに使える機能でしたが,PostgreSQLでは使えませんでした。そのため,表現力の違いからPostgreSQLを採用できないケースもたくさんありました。第4章ではそれぞれの有効なケースを紹介し,機能の詳細を紹介します。

10から強化/進化したPostgreSQL 11

リリースされたばかりのPostgreSQL 11は,新機能が多く追加されたと言うよりも,既存機能の改善や性能向上が多いことが特徴です。そのため,PostgreSQLを利用しているユーザーの多くは恩恵を受けます。機能改善や性能向上は,バージョンアップするには十分な理由です。

機能強化

PostgreSQL 11で強化された目玉機能は,Window関数とパーティションです。第3章でWindow関数を,第4章でパーティションの詳しい紹介は行いますが,SQLの表現力が増え,運用のかゆいところに手が届く強化は,PostgreSQLの魅力をより輝かせます。ほかにもCREATE INDEX文のINCLUDE句の導入など,運用改善や信頼性向上の機能もたくさんリリースされています。

性能の向上

PostgreSQL 11の性能改善は著しく,特に注目すべきはパラレルクエリの強化とJITJust-In-Timeコンパイラです。これらの詳しい紹介は,第3章で行います。

本特集で紹介する機能以外にも,LIMIT句のプッシュダウンのように意識しなくても同じクエリが最適化される機能などもあります。

著者プロフィール

曽根壮大(そねたけとも)

株式会社オミカレ副社長兼CTO。数々の業務システム,Webサービスなどの開発・運用を担当し,2017年に株式会社はてなでサービス監視サービス「Mackerel」のCRE(Customer Reliability Engineer)を経て現職。 コミュニティでは,Microsoft MVPをはじめ,日本PostgreSQLユーザ会の理事として勉強会の開催を担当し,各地で登壇している。 builderscon 2017,YAPC::Kansaiなどのイベントでベストスピーカーを受賞し,分かりやすく実践的な内容のトークに定評がある。 他に,岡山Python勉強会を主催し,オープンラボ備後にも所属。著書に『Software Design』誌で,データベースに関する連載「RDBアンチパターン」をまとめた『失敗から学ぶRDBの正しい歩き方』を執筆。

@soudai1025
はてなid:Soudai

著書