1
PostgreSQL Update 2017
~ 10.0 時代を迎えるポスグレの今 ~
OSC 2017 Tokyo/Spring
2017-03-10 14:00-
日本 PostgreSQL ユーザ会
高塚 遙
2
PostgreSQL ってどんなデータベース?
3
PostgreSQL とは
● 多機能、高性能、かつオープンソースの
リレーショナルデータベース管理システム
– INGRES('70),POSTGRES('80) 由来の歴史
(カリフォルニア大学バークレイ)
– BSD ライセンス
– 特定オーナー企業が無い
企業
製品
ある種の OSS 開発体制
開発者
PostgreSQL
企業
企業
企業
PostgreSQL 開発体制
4
PostgreSQL この 10 年
~1年に1メジャーリリースで着々と進歩~
BRIN
行単位セキュリティ
UPSERT
2016-01-07
5
最近の、これからのリリース
● 2016 年 9 月 PostgreSQL 9.6.0 リリース
– 2016 年 10 月 9.6.1 リリース
– 2017 年 2 月 9.6.2 リリース
– 2017 年 5 月 次マイナーリリース予定
– 2017 年 8 月 次マイナーリリース予定
● 2017 年 秋~冬 PostgreSQL 10.0 リリース予定
– 10.0.0 でなくて 10.0
– バージョンが2つの数字で構成となる
6
PostgreSQL
最新バージョンと最近の動向
7
現在の PostgreSQL と周辺
SQL 機能的には:
● 概ね ANSI SQL:2008 準拠
● 各種の組み込み言語
● 地理情報システム (PostGIS)
● 他 DB との連携 (Foreign
Data Wrapper)
クラスタ構成:
● Streaming Replication
● Logical Replication
● HA クラスタ
● MPP クラスタ (shared nothing)
● RAC 型 (shared disk) は不可
性能的には:
● OLTP の多 CPU スケール
参照→ 96 コアでもスケール
更新→ 96 コアでもスケール
● パラレルクエリ対応拡大
運用支援など:
● ログ / 状態の集積分析ツール
pg_statsinfo / pg_badger
● クライアントツール
PgAdmin4 / SI Object Browser
● RDS for PostgreSQL
8
ここ最近の拡張
● レプリケーション
– Streaming Replication(9.0 標準装備~ )
– Logical Replication(9.4 基盤機能、 10 標準装備 )
● JSON データ型 (9.2 ~ )
– JSONB + 内部要素検索インデックス (9.4 ~ )
● Foreign Data Wrapper (9.1 ~ )
– 書き込み対応 (9.2 ~ ) 、各種プラン対応改良、
– パーティションに組み込み (9.4 ~ )
● パラレルクエリ (9.6 、 10 、 )
● 多 CPU コアにおける性能スケール (9.2 、 9.5 、 )
9
PostgreSQL 9.5
● INSERT ... ON CONFLICT ( UPSERT )の実装
●
GROUP BY に GROUPING SETS 、 CUBE 、 ROLLUP 追加
●
BRIN(Block Range Index) インデックス
●
行単位セキュリティ制御
● JSONB データ型の機能強化
● Foreign Data Wrapper をパーティションに組み入れ
10
PostgreSQL 9.6
● パラレルクエリ(スキャン、結合、ソート)
● VACUUM FREEZE 改善
●
突然重い auto vacuum が走る問題の解消
●
Foreign Data Wrapper のプッシュダウン強化
● (更新を含む)多 CPU 性能改善
●
古いスナップショットの強制廃棄
● トランザクション継続したままのクライアントによる害悪を排除
●
全文検索でフレーズ(複数後の連なり)の検索
11
PostgreSQL 10
– ロジカルレプリケーション
– 同期スタンバイのクォーラム対応
– 宣言的パーティショニング
● 多階層パーティショニング + 実行プラン改良
– Foreign Data Wrapper 改良
● さらにプッシュダウン強化
●
2 相コミットの利用
●
非同期データ取得
– プランナ、エグゼキュータの大幅改造
12
標準装備ロジカルレプリケーション
postgresql.conf
log_level = logical
db1=# CREATE TABLE t1 (id int primary key, v text);
db1=# CREATE PUBLICATION pub1 FOR TABLE t1;
db2=# CREATE TABLE t1 (id int primary key, v text);
db2=# CREATE SUBSCRIPTION sub1
CONNECTON ‘host=host1 dbname=db1 user=repuser’
PUBLICATINO pub1;
● SQL 命令でレプリケーション定義
● テーブル単位
● WAL にロジカル変更情報を付加して伝播
– レプリケーションスロットを使用
13
宣言的パーティショニング
●
従来はテーブル継承機能でパーティショニング実現
● 明示的にパーティションを構成する SQL 命令
CREATE TABLE table_name
PARTITION OF parent_table [ (
{ column_name [ column_constraint [ ... ] ]
| table_constraint }
[, ... ]
) ] FOR VALUES partition_bound_spec
[ PARTITION BY { RANGE | LIST }
( { column_name | ( expression ) }
[ COLLATE collation ] [ opclass ] [, ... ] ) ]
ALTER TABLE [ IF EXISTS ] name
ATTACH PARTITION partition_name FOR VALUES partition_bound_spec
ALTER TABLE [ IF EXISTS ] name
DETACH PARTITION partition_name
14
パラレルクエリー対応範囲拡大
対応範囲 9.6 10
シーケンシャルスキャン ○ ○
入れ子ループ結合 ○ ○
ソート ○ ○
インデックススキャン × ○
マージ結合 × ○
ハッシュ結合 × ○
サブクエリ対応 × ○
15
PostgreSQL のエコシステム
コミュニティ・サポート・利用事例
16
コミュニティと商用サポート
● 開発コミュニティ (Mailing List, git)
(PostgreSQL Global Development Team)
●
国内のコミュニティ活動
– 日本 PostgreSQL ユーザ会 (JPUG)
– PostgreSQL エンタープライズ・コンソーシアム
( PGECons )
● 国内の商用サポート
– 提供会社いくつかあり、取り扱い会社多数
https://www.pgecons.org/postgresql-info/services/
17
著名なユーザ
●
Salesforce
●
Skype
●
阿里巴巴
● 国内電力会社
●
SBI ジャパンネクスト証券(私設取引所)
● フランス全国家族手当金庫 (CNAF)
●
ブラジル連邦貯蓄銀行 (Caixa Econômica Federal)
[PGEcons PostgreSQL 導入事例 ]
https://www.pgecons.org/postgresql-info/introduction-
example/
18
JPUG の活動● イベント
● PostgreSQL アンカンファレンス(前理事長の活動?) 
● 総会&夏セミナー 6月ごろ
● PostgreSQL カンファレンス
● PostgreSQL 勉強会 ( 年数回)
– 各地の支部でもそれぞれ年数回(活動量の振れ幅あり)
● 合宿(年 1 回程度 - 昨年は熊本と箱根)
● OSC など各種イベントに出展(通年)
● 日本語ドキュメント作成  https://github.com/pgsql-jp/jpug-doc
● ML 運営 pgsql-jp@postgresql.jp 、 jpug-users@postgresql.jp
● 最近は slack postgresql-jp が人口増加中
● Web 運営 ( www.postgresql.jp 、 lets.postgresql.jp )
19
PostgreSQL 日本語文書
● オンラインドキュメント
– http://www.postgresql.jp/document/
●
ポータルサイト( Let's Postgres)
– http://lets.postgresql.jp/
●
PGEcons 成果資料
– https://www.pgecons.org/download/works_2016/
20
おしまい
●
ご質問

Postgre sql update_20170310