最近の PostgreSQL 動向SRA OSS, Inc. 日本支社
2019-02-22© 2019 SRA OSS, Inc. Japan1

PostgreSQLとは• ポストグレスキューエルと読む• 単にポストグレス、日本ではポスグレとも呼ばれる• 標準SQLの大部分とそのほかの先進的な機能をサポートする本
格的なオープンソースRDBMS• 20年以上の歴史をもち、現在も活発な開発体制• 豊富なプラットフォームに対応• Unix系OS全般、Windows、macOS• 豊富なサポート言語• C、ECPG、C++、Java、Tcl/TK、Python、Perl、PHP、Ruby、ODBC、.NET Data Providerなど© 2019 SRA OSS, Inc. Japan2

PostgreSQLのライセンス• The PostgreSQL License

COPYRIGHTファイル• https://www.postgresql.org/about/license/• 広告条項はなしの修正BSDライ
センスに類似• 使用、複製、改変、配布の自由• 複製においては著作権表示、ライセンス条文、免責事項を含めることが条件

PostgreSQL Database Management System(formerly known as Postgres, then as Postgres95)
Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
Portions Copyright (c) 1994, The Regents of the University of California
Permission to use, copy, modify, and distribute this software and its documentation
for any purpose, without fee, and without a written agreement is hereby granted,
provided that the above copyright notice and this paragraph and the following twoparagraphs appear in all copies.
IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FORDIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITSDOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISEDOF THE POSSIBILITY OF SUCH DAMAGE.

• GPLと比較すると、派生物を再UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
配布する際にソースコード公開、 THE
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWAREPROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
ライセンス継承の義務がない
CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

© 2019 SRA OSS, Inc. Japan3

PostgreSQLの開発体制• 特定のオーナー企業をもたない方式• 単独の企業に独占されることなく、幅広い層の厚い開発体制
コントリビュータ

メジャー
コントリビュータ

Peter Eisentraut (2ndQuadrant)
Magnus Hagander (Redpill Linpro)
Tom Lane (Crunchy Data)
Bruce Momjian (EnterpriseDB)
Dave Page (EnterpriseDB)

支援企業

コアチーム

開発コミュニティ

Etsuro Fujita
Tatsuo Isii (SRA OSS, Inc. Japan)
Amit Langote (NTT)Fujii Masao (NTT Open Source)
Michael Paquier (VMWare)⋮30～40名など…
※PostgreSQLサイトより (2019年1月時点)© 2019 SRA OSS, Inc. Japan4

日本のPostgreSQLコミュニティ
ユーザコミュニティ

日本PostgreSQLユーザ会 (JPUG)• 1999年設立、2006年NPO法人化• 5,000人強のML会員• 全国各地の支部
日本におけるOSSコミュニ
ティのロールモデルでもある• 普及活動を中心に

ビジネスコミュニティ

PostgreSQLエンタープライズ・
コンソーシアム (PGECons)• 2012年設立• 正会員企業16社、一般会員企業46社 (2019年1月現在)• エンタープライズ用途に向けた共同検証やプロモーション活動© 2019 SRA OSS, Inc. Japan5

PostgreSQLの生い立ち
1977～1985

Ingresアメリカカリフォル
ニア大学 (UCB) で開発された、最も初期のRDBMSCA-Ingres II
Illustra1986～1994

POSTGRESUCBで研究目的で開発。ユーザ増加。
バージョン4.2で打ち切り

1994～1995

Postgres95Informix
1996～

PostgreSQL

ソースコードの見なおしと改良。SQLに対応© 2019 SRA OSS, Inc. Japan

6PostgreSQLの歴史

パラレルクエリ、
VACUUM時のXID
凍結処理の改善、
レプリケーション
拡張

1,000,000

PostgreSQLソースコード行数

900,000
多CPU
スケール

800,000
700,000
600,000

ビットマップ
スキャン

更新の高速化

レプリケーション、
Windows 64bit

500,000
400,000

ウィンドウ関数、
再帰SQL

マテビュー、更新ビュー、
更新FDW、
データチェックサム

300,000
200,000
100,000

PITR、
Windows

４CPU
スケール

同期レプリケーション、
外部テーブル

行単位セキュリティ、
BRINインデックス

高速JSON、
レプリケーションスロット

ロジカルレプリケーション、
宣言的パーティショニング、
パラレルクエリの改善

02005/1/19 2005/11/8 2006/12/5
8.0
8.1
8.2

2008/2/4
8.3

2009/7/1
8.4

2010/9/20 2011/9/12 2012/9/109.0
9.1
9.2© 2019 SRA OSS, Inc. Japan

2013/9/9 2014/12/18 2016/1/7
9.3
9.4
9.5

2016/9/29 2017/10/5
9.6
10.0

7

PostgreSQLのバージョン番号• PostgreSQLのバージョンは6.0から始まる• POSTGRESがバージョン4.2まで、Postgres95をバージョン5と見なしてバージョン9.6以前

バージョン10以降

9.6.11
メジャー
バージョン

11.1

マイナー
バージョン

メジャー マイナー
バージョン
バージョン

• 1年に1度のメジャーバージョンアップでは仕様の追加・変更• バージョンアップにはデータ移行が必要• 1年に数回のマイナーバージョンアップではおもにバグ修正© 2019 SRA OSS, Inc. Japan8

PostgreSQLの歩み
バージョン

主な変更/機能追加

Postgres95から名称変更、マルチバイト対応、サブクエリ、PL/pgSQL (ストアドプ
6.0 (1997/1)～6.5 (1999/11) ロシージャ)、MVCC (読み取り一貫性)

外部キー、JOIN構文、トランザクションログ、コンカレントVACUUM、スキーマ、
7.0 (2000/5)～7.4 (2003/11) プリペアドステートメント
8.0 (2005/1)～8.4 (2009/7)

PITR、Windows対応、ビットマップスキャン、CPUスケール、更新の高速化、ウィンドウ関数、再帰SQL

9.0 (2010/9)～9.6 (2016/9)

レプリケーション、外部テーブル、多CPUスケール、マテビュー、高速JSON、行単
位セキュリティ、パラレルクエリ

10 (2017/10)

ロジカルレプリケーション、宣言的パーティショニング

11 (2018/10)

JITコンパイル、プロシージャ内でのトランザクション制御© 2019 SRA OSS, Inc. Japan

9ロジカルレプリケーション（1）• 従来のレプリケーション（～PostgreSQL 9.6）
• プライマリからスタンバイにトランザクションログ（WAL）転送することでデータを複製する• トランザクションログの内容は「データベースを構成するファイルの変更内• スタンバイサーバはビット単位での複製• つまり、「物理的」なレプリケーション• 完全な複製• スタンバイに一切の物理的変更ができない
プライマリ

リカバリし続ける

スタンバイ

WAL転送
WAL書き込み

WAL書き込み

物理的な複製© 2019 SRA OSS, Inc. Japan10

ロジカルレプリケーション（2）• 「論理的」なレプリケーション（PostgreSQL 10）• トランザクションログの内容は「論理的なの変更内容」• 「テーブル T に、行 (1, ‘abc’) が挿入されました」• 複製するデータ・処理を選択できる• 複製先でデータの変更ができる
複製元

複製先

DB参照・変更

データベース単位の複製

一部のテーブルを異なるデータベースに複製
INSERT処理だけ複製
DB参照・変更© 2019 SRA OSS, Inc. Japan11

宣言的パーティショニング（1）• パーティショニング• 巨大なテーブルを複数のテーブルに分割• 親テーブルへの検索時、必要な子テーブルのみを検索• 挿入時には適切な子テーブルに振り分け
水平分割された子テーブル
群

1月売上（子テーブル）
2月売上（子テーブル）・・・

売上（親テーブル）© 2019 SRA OSS, Inc. Japan

12月売上（子テーブル）12

宣言的パーティショニング（2）• これまではPostgreSQLの機能を組み合わせてパーティショニングを実現していた

PostgreSQL のテーブル継承と制約を使う

子テーブルは親テーブルを継承して作成

検索時は「制約による除外」により、必要な子テーブルのみが検索される
挿入時はトリガー関数でレコードを振り分ける
詳細やその他の新機能については、SRA OSS• 手順が煩雑サイトのPostgreSQL技術情報ページで検証レ• 親テーブルを作成
ポートを参照• 親テーブルを継承する子テーブルを作成
http://www.sraoss.co.jp/technology/postgres• 子テーブル全部に CHECK 制約を作成
ql/9.6/verification_report.php• 親テーブルに INSERT トリガーを作成
• トリガー関数を使うので遅い• 宣言的パーティショニング（PostgreSQL 10）• パーティション機能が正式実装• CREATE TABLE 文で簡単にパーティションが作れる• トリガー関数でないので早い© 2019 SRA OSS, Inc. Japan13

クラウドでのPostgreSQL利用• マネージドサービスも増え、利用しやすくなってきている• Microsoft Azure Database for PostgreSQL• Amazon RDS for PostgreSQL• Google Cloud SQL for PostgreSQL• クラウドのメリット• 資材の調達が不要• 従量課金制なので使った分しか費用が発生しない• マネージドサービスの利点• 運用管理を任せられる• 耐障害性、可用性構成の作成を任せられる• スケールアップ/ダウンが容易© 2019 SRA OSS, Inc. Japan

14

RDBMS市場でのPostgreSQLの位置づけ• DB-Engines Rankingによる人気ランキングでは• Oracle、MySQL、MS SQL Serverに次いで第4位のスコア• スコアの伸びでは2017年から2年連続で第1位• Oracleの移行先として• SE1/SEの販売終了、他社クラウドでの値上げもあって、Oracle離れが進んでいる• MySQLに比べると、機能が豊富で移行しやすく、システム構造が似ていて技術者の転換がしやすい• Oracle以外とは棲み分け• MySQLはシンプルなWebシステム向け• Microsoft SQL ServerはWindows向け

MicrosoftAccess
3%

その他
17%

IBM Db2
4%
PostgreSQL
9%

Microsoft
SQL Server
20%

Oracle
25%

MySQL
22%

※DB-Engines Rankingサイトより (2019年1月時点)© 2019 SRA OSS, Inc. Japan15

PostgreSQLの導入事例
国内の導入事例• NTT OSSセンタ

海外の導入事例• CAIXA (ブラジル連邦貯蓄銀行)• PostgreSQLの開発まで手掛けるユーザ企業• 社内の80%強のシステムにPostgreSQLが採用できると分析• システムリプレイスに応じて順次入れ替え• 中国電力• ATMおよびオンラインシステムで採用• 開発者も抱える• フランス社会保障システム• 汎用機のシステムからリプレイス• Zalando• スマートメータのシステムに採用• PGConf.ASIA 2016で講演• ヨーロッパ最大のオンライン服飾販売サイト• 5TB、90台のデータベース

PGConf.ASIA 2016公開資料: http://www.pgconf.asia/JP/material/

Zalandoのオンライン通販サイト: https://www.zalando.de/© 2019 SRA OSS, Inc. Japan16

PostgreSQLの派生製品• ライセンス制約が少ないため、商用/OSS製品のベースとして広く利用されている• PostgreSQLサイトに記載のものだけで43 (開発終了も含む)• おもな派生製品• EnterpriseDBのEDB Postgres
Advanced Server• AmazonのRedshift• 富士通のFUJITSU Enterprise Postgres• Postgres XC/XL/X2• SRA OSSのPowerGres
PostgreSQL derived databases
https://wiki.postgresql.org/wiki/PostgreSQL_derived_databases© 2019 SRA OSS, Inc. Japan17

PowerGres• PostgreSQLに安心のサポート
サービスと使いやすいGUI管理ツールを付属した製品• サポート期間は販売開始から7年• 別メニューで24時間365日サポートも提供• WebベースのGUI管理ツールでデータベースを簡単に操作

PowerGresファミリーのラインアップ
PowerGres Plus

PowerGres HA

信頼性とセキュリティ可用性

PowerGres

WAL二重化
HAクラスタ
使いやすさと安心• PowerGres PlusはPostgreSQLにない独自の機能追加• 12,000本以上ライセンスを出荷© 2019 SRA OSS, Inc. Japan

透過的データ暗号化

サポートサービス
GUI管理ツール
PostgreSQL

18

PostgreSQLの周辺ツール (1)• pgBadger• http://dalibo.github.io/pgbadger/• ログを高速に解析し、SQLの実行やサーバの動作に関するレポートを作成するツール• アプリケーションを遅くしているSQLを見つけ出したい人にお勧め

pgBadgerのレポート© 2019 SRA OSS, Inc. Japan19PostgreSQLの周辺ツール (2)• pg_reorg• https://github.com/ossc-db/pg_reorg• 参照や更新を妨げずにCLUSTERやVACUUM FULLを実行するツール• どうしてもVACUUM FULLを実行したい人にお勧め• （FULLでない）VACUUMをちゃんと実行しておけば、VACUUM FULLが必要になることは少ない• pg_statsinfo• http://pgstatsinfo.sourceforge.net/index_ja.html• サーバの動作に関する情報を定期的に集めるツール• いざというときに備えて情報をとっておきたい人にお勧め© 2019 SRA OSS, Inc. Japan20

PostgreSQLのクラスタ構成（1） クラスタリングの目的• 高可用性の確保• サービスを停止させたくない• 1つのサーバが故障しても、別のサーバが肩代わりする• 参照負荷分散• 大量のアクセスをさばきたい• 負荷を分散して検索性能を向上• 並列処理• 大量のデータを解析したい• 複数のサーバで並列的に処理© 2019 SRA OSS, Inc. Japan21

PostgreSQLのクラスタ構成（2） おもなクラスタ技術• HAクラスタ• Pgpool-II• クライアントとPostgreSQLの間に入ってレプリケーション機能を提供• コネクションプーリング、負荷分散、自動フェイル
オーバなどほかの機能もある• Pacemaker＋DRBD、共有ストレージなどを利用• 待機側はサービス停止• ストリーミングレプリケーション• PostgreSQL自体をもつ、レプリケーション機能• プライマリ（更新可能）＋複数のスタンバイ（検索のみ）• 簡単、確実、速い• Postgres-XC/XL/X2• PostgreSQLを改造したクラスタシステム• 書き込み性能の負荷分散

Pgpool-II（アクティブ）参照・更新

PostgreSQL（プライマリ）

仮想IP
参照
クライアントPgpool-IIによるクラスタ構成

相互監視

Pgpool-II（スタンバイ）参照

PostgreSQL（スタンバイ）© 2019 SRA OSS, Inc. Japan

PostgreSQL（スタンバイ）

ストリーミング
レプリケーション
22