PostgreSQL 13
新機能おさらいOSC 2021 Online/Nagoya
2021-05-29
日本 PostgreSQL ユーザ会
名古屋支部 福島 克輝
1PostgreSQL とは●多機能、高性能、かつオープンソースのリレーショナルデータベース管理システム– INGRES('70),POSTGRES('80) 由来の歴史（カリフォルニア大学バークレイ）– BSD ライセンス– 特定オーナー企業が無い
企業
ある種の OSS 開発体制

企業

企業
PostgreSQL
製品

開発者

企業
PostgreSQL 開発体制

2

PostgreSQL コード行数

安定したリリース

3,500,000
3,000,000
2,500,000‘11.09‘08.022,000,000‘05.01‘05.11‘09.07

BitmapScan

500,0000‘13.09‘16.01

PITR,Windows

HOTUpdate

4 coreスケール‘19.10‘10.09‘06.121,500,000
1,000,000‘12.09‘14.12‘17.10‘16.09‘18.10

Replication

OLAP,
再帰 SQL

manycore
スケール

FDW
同期 Repl.

JSONB

マテビュー ,更新ビュー

パラレルクエリー

BRIN,
UPSERT

8.0 8.1 8.2 8.3 8.4 9.0 9.1 9.2 9.3 9.4 9.5 9.6 10

JIT
compile

論理Repl.

11‘20.09

重複排除
Btree

Table AM I/F
JSON Path

1213 3

最近の大きなエンハンスメント●

JIT コンパイル (11)●Table Access Method インタフェース (12)●Btree インデックスの重複除去 (13)●パラレルクエリ対応と強化（ 9.6 - 13)●

テーブルパーティショニング対応と強化 (10 - 13)●

ロジカルレプリケーション対応 (10)4

PostgreSQL 13 主な新機能その 1・パラレルVACUUM
VACUUMを並列時実行する機能が追加されました。これによりVACUUMの実行時間短縮が期待されます。対象は複数のインデックスが存在するテーブルに対して、各インデックスごとに並行でVACUUMが実行されます。
・B-Treeインデックスの性能向上
PostgreSQLのB-Treeインデックスに重複排除機能が追加されました。いままでは同じキー値があるタプルについて、全てインデックスを持っていましたが、これを同一キー値の場合インデックスをマージすることにより、インデックスのサイズを縮小します。
これによりクエリのパフォーマンス向上、およびVACUUMのオーバーヘッドを削減することができます。これはデフォルトで有効になっており、無効にしたい
場合はCREATE INDEX時にWITH(dedupulicate_items = off)を明示的に指定します。

5

PostgreSQL 13 主な新機能その 2・インクリメンタルソート機能の追加
すでにデータがソートされている場合に、追加のソートが高速化されました。
・大規模な集合セットを持つハッシュ集約（GROUP BY等）にディスクストレージも使用できるように変更
いままではwork_memを超えるようなサイズにマッピングされる場合はグループ集約を利用しており、これは事前にソート処理を行うため、パフォーマンスが劣化していました。いままでは大きな集約があり、パフォーマンスチューニングで一時的にwork_memを増やしてクエリーを投げるなどの対応が必要でしたが、ストレージハッシュ集約プランが利用可能となり、極端なパフォーマンス低下が防ぐことができます。

6

PostgreSQL 13 主な新機能その３・パーティション機能の改善がいくつかパーティション化されたテーブルを、ロジカルレプリケーションでレプリケーションできるように改善。
・FETCH FIRST WITH TIES
PostgreSQLはLIMIT OFFSET形式とOFFSET FETCH形式の２種類の構文をサポートしています。前者は以前から存在するPostgreSQL独自の構文で、後者がSQL標準の構文です。後者についてWITH TIESオプションがサポートされました。
その他はリリースノートを参照してください。

7

最近とこれからのリリース●2021 年 5 月 13 日 ( マイナーバージョンリリース )– 13.3 リリース
– 12.7 リリース
– 11.12 リリース
– 10.17 リリース
– 9.6.22 リリース
– 9.5 系は前回リリース 9.5.25 で終了
2021 年 5 月 20 日 PostgreSQL 14 beta1 公開– 正式リリースは 2021 年第 3 四半期を予定
8

PostgreSQL 14 で予定されている機能
・マテリアライズド・ビューのパラレルクエリー対応(REFRESH MATERIALIZEDVIEW)・REINDEXでインデックスのテーブルスペースをTABLESPACE句を指定することで変更可能
・REINDEXでパーティショニングされているリレーション全ての小テーブル及びインデックスを処理できるように対応
・COPY FROMのバイナリモード性能改善
・CREATE TRIGGERにOR REPLACEを追加
・GRANT・REVOKEにSQL標準のGRANTED BY句を追加
・外部テーブルでTRUNCATEが動作するように改善 (併せてpostgres_fdw対応)
・TOASTデータにLZ4圧縮を使用する機能追加
・レプリケーション機能の多数改善 （ロジカル・ストリーミング・レプリケーション、ロジカル・レプリケーション・バイナリ転送など)
・fdw非同期実行 などなど
9

PostgreSQL
最新バージョンと最近の動向

10現在の PostgreSQL と周辺
SQL 機能的には：クラスタ構成：●●

ANSI SQL:2016 概ね準拠

各種の組み込み言語● 地理情報システム (PostGIS)●

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

論理レプリケーション● HA クラスタ●●

JSON 型●

MPP クラスタ (shared nothing)●

他 DB 連携（ FDW ）●RAC 型 (shared disk) は不可

性能的には：

運用支援など：●●参照・更新多コアでもスケール

パラレルクエリ対応拡大● パーティショニング●●

JIT 対応運用監視 pg_statsinfo /pg_badger / pg_monz(Zabbix 連携● クライアントツール
PgAdmin4 / SI Object Browser● 各方面クラウド対応●

K8s 、 Docker 対応

11現在の PostgreSQL と周辺
SQL 機能的には：●

ANSI SQL:2016 概ね準拠

各種の組み込み言語● 地理情報システム（ PostGIS ）●●JSON 型●他 DB 連携（ FDW ）PostgreSQL

PL/pgSQL
PL/Perl
PL/Python
PL/TclOracledatabase

PL/v8
PL/R

PostgreSQL

FDW

db=# SELECT * FROM t1;
id |
info
----+------------------------------------------1 | {"DBMS": "PostgreSQL", "Version": "10.1"}(1 row)
db=# SELECT * FROM t1,LATERAL jsonb_to_record(t1.info) AS r ("DBMS" text, "Version" text);
id |info|
DBMS| Version----+-------------------------------------------+------------+--------1 | {"DBMS": "PostgreSQL", "Version": "10.1"} | PostgreSQL | 10.1
(1 row)

12

現在の PostgreSQL と周辺
性能的には：●

参照・更新多コアでもスケール

パラレルクエリ対応拡大● パーティショニング●●

JIT 対応

対応範囲

9.6

10

シーケンシャルスキャン○○

入れ子ループ結合

○

○

ソート

○

○

インデックススキャン

×

○

マージ結合

×

○

ハッシュ結合×○

サブクエリ対応×○

11 でアペンドも対応

13

CPU スケール（参照系）
9.2.x の段階で参照はスケール2012 年度 PGECons WG1 成果資料より

14

CPU スケール（更新系）
9.6.x ので更新スケール

2016 年度 PGECons WG1 成果資料より
15

クラスタ構成：●

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

論理レプリケーション●

HA クラスタ

スタンバイ

アクティブ

DB サーバDB サーバ

相互監視

MPP クラスタ (shared nothing)● RAC 型 ( 共有ストレージ ) は不可●

データ同期共有ストレージ
HA （高可用性）クラスタ
Pacemaker などの各種 HA クラスタソフトで対応

振り分け
振り分けサーバ
サーバ

アクティブ

アクティブ
DB サーバDB サーバDB サーバDB サーバDB サーバDB サーバ

相互通信
MPP クラスタ
Postgres-XL 等

共有ストレージ
RAC 型

16

レプリケーション機能の進展
DB サーバ

テーブル単位でロジカルレプリケーション
DB サーバDB サーバ

10 から

DB サーバ同期スタンバイを指定可能

9.1 からシングルマスタマルチスレーブ

9.0 から

DB サーバ

クォーラム指定（内何台に書込したら）10 から

WAL データによるバイナリ
レプリケーション

DB サーバカスケード可能DB サーバ

9.2 から
17

運用支援など：●

運用監視 pg_statsinfo /pg_badger / pg_monz(Zabbix 連携 )クライアントツール
PgAdmin4 / SI Object Browser● 各方面クラウド対応●●

K8s 、 Docker 対応

18

PostgreSQL 利用へのサポート– 国内商用サポートが各社から提供– PostgreSQL ベースの商用 DB ソフトウェア

日本 PostgreSQL
日本におけるユーザユーザ会
コミュニティ
●
国内各地に支部– 北海道～沖縄●
2～3千名のM L– pgsql-jp●●

最近はSlackで質問が多い– jpug-users●

2012 年発足（任意団体）
正会員 １７社
一般会員 ４８社
2021 年 5 月現在

P ostgreS Q Lに関わる各種 Ｉ
Ｔサー
ビス・製品を提供する企業の団体●P ostgreS Q L業務適用の推進
情報発信●共同検証●– 優れた成果資料

開発コミュニティにフィードバック●
関連周辺開発の支援
●

19

おしまい

ご清聴ありがとうございました20