SlideShare a Scribd company logo
© 2023 NTT DATA Group Corporation
- 最新機能までを総ざらい!-
PostgreSQLの
注目機能を振り返る
2023/10/7
株式会社NTTデータグループ
小林 隆浩
© 2023 NTT DATA Group Corporation 3
アジェンダ
01. PostgreSQLリリースを振り返る(2021-2023)
02. PostgreSQL v14の注目機能
03. PostgreSQL v15の注目機能
04. PostgreSQL v16の注目機能
05. まとめ
(おまけ)各クラウドのバージョン対応状況
© 2023 NTT DATA Group Corporation 4
(セッションの注意事項)
⚫ PostgreSQL各バージョンの新機能全てを網羅した内容ではありません。
⚫ 全て知りたいという方は、以下を調べましょう。
⚫ 公式リリースノート
⚫ SRA OSS Tech Blog 「PostgreSQL 14/15/16 検証報告」
⚫ 篠田の虎の巻 「PostgreSQL 14/15/16 新機能検証結果」
各バージョンのリンクは、Let’s POSTGRESにまとまっています。
PostgreSQL14の新機能 | Let's POSTGRES
PostgreSQL15の新機能 | Let's POSTGRES
PostgreSQL16の新機能 | Let's POSTGRES
© 2023 NTT DATA Group Corporation 5
01.
PostgreSQLリリースを振り返る
(2021-2023)
5
© 2023 NTT DATA Group Corporation 6
サマリ:各バージョンの新機能
v15 (2022年) v16 (2023年)
①SQL
②ロジカル
レプリケーション
③性能改善
④バックアップ
⑤モニタリング
⑥ロール
• publicスキーマの権限変更
• MERGE
• REGEXP系
• 行/列フィルタ
• lsn指定の同期スキップ
• エラー時の無効化
• NOT INや外部ソート
• ¥copyの改善
• archive_module
• WAL/ pg_basebackup圧縮
• pg_stat_subscription_stats
• JSON形式のログ
• pg_checkpoint
• JSON関数、IS JSON
• ANY_VALUE
• libpq接続ロードバランシング
• スタンバイからレプリケーション
• パラレル適用
• 双方向
• パラレルクエリ、インクリメンタ
ルソートの拡張
• pg_dump圧縮(lz4/zstd)
• pg_stat_io
• pg_create_subscription
• pg_use_reserved_connections
v14 (2021年)
• SEARCH/CYCLE
• postgres_fdw
• ストリーム送信
• バイナリ転送
• Memoize
• Bottom-up Index
Deletion
• VACUUM改善
• pg_stat_wal
• pg_stat_progress_copy
• pg_read/write_all_data
© 2023 NTT DATA Group Corporation 7
02.
PostgreSQL v14の注目機能
7
© 2023 NTT DATA Group Corporation 8
紹介する新機能(PostgreSQL v14)
①新しいSQL(関数など)
②ロジカルレプリケーションの拡張
③性能改善
④WALやバックアップ関連の改善
⑤モニタリング関連
⑥ロールの追加等
v14
© 2023 NTT DATA Group Corporation 9
①新しいSQL(関数等)
⚫ SEARCH句とCYCLE句
✓ グラフのデータ構造に対して再帰的な問い合わせが
シンプルに書けるように。
✓ SEARCHで探索順序(幅優先/深さ優先)を
指定でき、CYCLEで循環参照の検出が可能。
⚫ パーティションデタッチ時のロック軽減
✓ ALTER TABLE … DETACH PARTITION CONCURRENTLY
✓ AccessExclusiveLockを取らなくなる。
v14
1
2
3
5
4
© 2023 NTT DATA Group Corporation 10
①新しいSQL(関数等) - postgres_fdw -
⚫ 外部テーブルのTRUNCATE
✓ truncatableオプションを指定可能、デフォルトはtrue
⚫ 外部テーブルの非同期スキャン
⚫ async_capableオプションで指定可能、デフォルトはfalse
⚫ Async Foreign Scanが同時並行で実行される。
⚫ 外部テーブルの一括コピー
✓ batch_sizeで指定可能、デフォルトは1
✓ 大量挿入時に1行ずつINSERT文が送信されていたが、これをまとめるように。
v14
© 2023 NTT DATA Group Corporation 11
②ロジカルレプリケーションの拡張 - streaming -
⚫ ストリーム送信
✓ 13以前はパブリッシャ側でファイルに書き込み、コミットで送信(大量変更時の性能↓)
✓ WITH (streaming = on)でコミットを待たずに順次変更を送信
v14
WALsender Apply Worker
デコード結果を保持 メモリの制限を超えると
デコードされた変更を
ストリーミングで送信
残りの変更を送信
適用した変更のCOMMIT
変更を一時ファイル(changes)
に書き込む
変更を読み取り適用
パブリッシャ サブスクライバ
© 2023 NTT DATA Group Corporation 12
②ロジカルレプリケーションの拡張 - その他 -
⚫ 初期同期時の更新を複数トランザクション化
✓ 13以前、「初期コピー」と「初期コピー中の他の更新」が単一トランザクション
⇒ロングトラン化する。更にエラーで全てロールバックされてしまい、やり直しが発生。
✓ 上記が分離され、初期コピー完了後にデータ参照可。その後、他の更新を同期。
⚫ バイナリ転送
✓ CREATE PUBLICATIONでWITH (binary = on)を指定して、バイナリ転送が可能に。
✓ timestamp型やbytea型など一部で性能改善が見込まれる。
v14
© 2023 NTT DATA Group Corporation 13
Memoizeの
キャッシュ
(バックエンドプロセス内)
③性能改善 - Memoize -
⚫ Nested Loopで一部のケースをキャッシュを使って、性能を改善する
✓ enable_memoizeで制御できる(デフォルトon)
例)以下で FROM Tbl1 JOIN ON Tbl2 Tbl1.key = Tbl2.key
Tbl1のkey1のカーディナリティが低く、Tbl2のkeyのカーディナリティは高いケースで有効。
Memoizeなしの場合、Tbl1の1行ごとにTbl2をIndex Scanして結合するが件数が増えるとオーバーヘッド大。
v14
Memoizeをもっと詳しく知りたい方は、第41回PGアンカンファレンスの「Memoizeの仕組み」 by 笠原さんを参照してください。
Tbl1
1
1
...
…
key1
2
…
2
…
Tbl2
1
2
...
…
3 …
4 …
1
2
...
…
key1
通常は初回にキャッシュ、
キャッシュされたレコードは
Tbl2を参照しない
© 2023 NTT DATA Group Corporation 14
③性能改善 - Bottom-up Index Deletion -
⚫ B-Treeインデックスの肥大化抑止
✓ インデックスのタプル削除+重複削除(v13)+Bottom-up Index Deletion
✓ インデックスのページ分割を防ぐ
(HOTは上記の対象外。肥大化を防ぐために、まずはHOTを考えよう。)
v14
Table1
Index1 Index2
X
Y
100
100
...
…
100
100
X
Y
①Index2の対象列を更新
※HOTではない
②’ こちらにも
タプルが追加される
② 新しいタプルが
追加される
③不要なインデックスタプルを
積極的に削除する
© 2023 NTT DATA Group Corporation 15
③性能改善
⚫ パラレルクエリの拡張
✓ REFRESH MATERIALIZED VIEW が並列問い合わせを実行可能に。
⚫ VACUUMコマンドの改善
✓ INDEX_CLEANUP=auto(デフォルト)で、処理が長くなる事の多いインデックスの
Vacuumが(必要に応じて)スキップされる。
✓ Failsafeモードが導入され、XID周回が近づいた際にFreeze以外の処理をスキップ。
v14
© 2023 NTT DATA Group Corporation 16
⑤モニタリング関連
⚫ pg_stat_wal
✓ WALの生成と書き込みに関する情報を表示
⚫ pg_stat_progress_copy
✓ COPYコマンドの進捗状況を確認
⚫ pg_stats_ext_expr
✓ 式を使った拡張統計の情報を表示
⚫ トランザクション周回の警告閾値が変更
⚫ log_autovacuum_min_durationにインデックスの詳細情報が出るように
v14
© 2023 NTT DATA Group Corporation 17
⑥ロールの追加等
⚫ 3つのロールが追加された。
v14
ロール名 概要
pg_database_owner データベース所有者で構成される
pg_read_all_data 全スキーマのテーブル、ビュー、シーケンスを参照できる。
スキーマのUSAGE権限、オブジェクトのSELECT権限に相当。
pg_write_all_data 全スキーマのテーブル、ビュー、シーケンスを参照できる。
スキーマのUSAGE権限、オブジェクトのINSERT、UPDATE、
DELETE権限に相当。
© 2023 NTT DATA Group Corporation 18
03.
PostgreSQL v15の注目機能
1
© 2023 NTT DATA Group Corporation 19
紹介する新機能(PostgreSQL v15)
①新しいSQL(関数など)
②ロジカルレプリケーションの拡張
③性能改善
④WALやバックアップ関連の改善
⑤モニタリング関連
⑥ロールの追加等
v15
© 2023 NTT DATA Group Corporation 20
①新しいSQL(関数等) - 注意すべき変更 -
⚫ publicスキーマに対するCREATE、USAGE権限を削除
✓ セキュリティ対応(CVE-2018-1058)
✓ 15からはpublicスキーマへのアクセスは、pg_database_ownerが必要
(基本的にスーパーユーザとデータベース所有者)
✓ 14以前からのデータベースをリストアした際にも適用される
⇒バージョンアップ時に注意
v15
© 2023 NTT DATA Group Corporation 21
①新しいSQL(関数等) - MERGE -
⚫ 条件に応じて、INSERT/UPDATE/DELETEを単一SQLで実行
✓ MERGE INTO テーブル名
USING 結合元テーブル
ON 結合条件
WHEN MATCHED 条件 THEN
UPDATE SET … / DELETE / DO NOTHING
WHEN NOT MATCHED
INSERT VALUES … / DO NOTHING
✓ 結合条件にマッチした場合 ⇒ UPDATE / DELETE / 何もしない
✓ 結合条件にマッチしなかった場合 ⇒ INSERT / 何もしない
v15
© 2023 NTT DATA Group Corporation 22
(補足)MERGEとそれまでのINSERT文の違い
⚫ 他のUPSERT方法である、INSERT … ON CONFLICTとの違い
✓ MERGEは、対象テーブルを外部結合し、結果行についてUPDATE/INSERT
✓ INSERT ... ON CONFLICTは、まずINSERTして重複で失敗したものについて
UPDATEを行う。
✓ INSERT INTO テーブル名 VALUES (…)
ON CONFLICT (制約名)
DO UPDATE SET c1 = EXCLUDED.c1 , c2 = EXCLUDED.c2;
✓ 実行時の性能特性も異なる。
v15
© 2023 NTT DATA Group Corporation 23
①新しいSQL(関数等) - その他 -
⚫ REGEXP_で始まる5つの関数の追加
関数 出力結果
REGEXP_COUNT パターンにマッチする個数
REGEXP_INSTR パターンにマッチする位置
(引数で開始位置/終了のどちらかを指定)
REGEXP_LIKE パターンにマッチすればtrue、そうでなければfalse
REGEXP_SUBSTR パターンにマッチした文字列
REGEXP_REPLACE パターンにマッチした部分を置換して返す
(15で対象範囲の指定を引数で可能になった)
⚫ 集約関数RANGE_AGGの追加
✓ 複数行の範囲型データ(int4range等)を多重範囲型に集約
v15
© 2023 NTT DATA Group Corporation 24
Schema1
②ロジカルレプリケーションの拡張
⚫ PUBLICATIONの対象をスキーマ単位で指定したり、列/行でフィルタ可能に。
⚫ サブスクライバでスキップ(LSN指定)したり、エラー時の無効化が可能に。
v15
Schema1
エラー発生時に該当更新の同期を
$ ALTER SUBSCRIPTION ... SKIP (LSN=‘lsnの値’)
でスキップが可能。
また、SUBSCRIPTIONに
disable_on_error=true
を指定して、エラー時に無効化する
設定が可能。
パブリッシャ サブスクライバ
Table1
1
Table2
Table1
Table2
PUBLICATION
で行を指定
PUBLICATION
で列を指定
スキーマ一括で
PUBLICATION指定も可
© 2023 NTT DATA Group Corporation 25
③性能改善
⚫ NOT IN句の改善
✓ 内部でハッシュテーブルを使うように変更された(実行計画は変化なし)
⚫ ソート性能の改善
✓ 外部ソート(Sort Method: external merge)のアルゴリズム変更
⚫ ウィンドウ関数の改善
✓ ROW_NUMBER、RANK、COUNTで一部の実行計画を改善
⚫ ¥copy fromの改善
✓ 1行単位のCopyDataメッセージをまとめることで改善
v15
© 2023 NTT DATA Group Corporation 26
④WALやバックアップ関連
⚫ WAL関連の改善
✓ モジュールによるアーカイブが可能に。
✓ archive_libraryでモジュール名を指定。
✓ archive_commandよりも柔軟性の高いアーカイブが可能になった。
✓ 15時点で優先度はarchive_library > archive_command
✓ WAL圧縮でzstd/lz4が指定可能に。
✓ configureで、--with-zstd/--with-lz4が必要。
✓ wal_compressionは、pglz/zstd/lz4/on(=pglz)/offを指定可能。
⚫ pg_basebackupの改善
✓ --compressオプションで圧縮が可能、形式(gzip/zstd/lz4)とレベルを指定。
✓ --targetオプションでバックアップの取得先をclientやserverで選べる。ちなみに
blackholeも指定でき、この場合バックアップは取られない。
v15
© 2023 NTT DATA Group Corporation 27
⑤モニタリング関連
⚫ pg_stat_subscription_statsの追加
✓ ロジカルレプリケーションの同期エラーを表示
✓ サブスクリプションごとに1行、初期同期と更新適用の失敗がカウントされる
⚫ pg_ident_file_mappingsの追加
✓ pg_ident.confの内容を表示
⚫ JSON形式でログ出力が可能に
✓ log_destinataion=jsonlogが指定可能になった
✓ 従来のstderr/csvlog/syslogは変わらず
⚫ log_checkpointのデフォルト値変更
✓ 14以前はデフォルトoff、15からデフォルトがonになった
v15
© 2023 NTT DATA Group Corporation 28
⑥ロールの追加等
⚫ 以下のロールが追加された。
ロール名 概要
pg_checkpoint CHECKPOINTのコマンドが実行可能
v15
© 2023 NTT DATA Group Corporation 29
04.
PostgreSQL v16の注目機能
2
© 2023 NTT DATA Group Corporation 30
紹介する新機能(PostgreSQL v16)
①新しいSQL(関数など)
②ロジカルレプリケーションの拡張
③性能改善
④WALやバックアップ関連の改善
⑤モニタリング関連
⑥ロールの追加等
v16
© 2023 NTT DATA Group Corporation 31
①新しいSQL(関数等) - JSON関連 -
⚫ JSON関連の機能追加
関数 変換元 変換先
JSON_OBJECT テキスト配列 JSONオブジェクト
JSON_OBJECTAGG 複数行のデータ(SELECT結果等) JSONオブジェクト
JSON_ARRAY スカラ値やJSONデータ JSON配列
JSON_ARRAYAGG 複数行のデータ JSON配列
述語 判定内容 (true/false)
IS JSON JSONとして解釈できるか
IS JSON ARRAY JSON配列として解釈できるか
IS JSON OBJECT JSONオブジェクトとして解釈できるか
IS JSON SCALAR JSONのスカラ値として解釈できるか
v16
© 2023 NTT DATA Group Corporation 32
①新しいSQL/構文 - その他 -
⚫ ANY_VALUE
✓ GROUP BYに含まれない列を集計関数を使わずに参照するとエラー。
✓ 解消方法:GROUP BYに列を含める、またはMIN/MAX/ANY_VALUE
⚫ 数値リテラル
✓ 2/8/16進数を表現することが可能に。
✓ (2進数)0b1001=9 (8進数)0o25=21 (16進数)0x32=50
⚫ ICUロケールの拡張
✓ 15以前はICUライブラリを照合順序で有効にするには、configure時に
--with-icuが必要。
✓ 16ではデフォルトで有効となり、除外する際に--without-icuが必要。
✓ これまでのconfigureが通らないケースも発生するので注意。
v16
© 2023 NTT DATA Group Corporation 33
①新しいSQL/構文 - libpqロードバランシング -
⚫ 複数ホストからランダムな接続が可能に
✓ 接続パラメータのload_balance_hosts=randomと、複数ホストのリストを指定。
✓ デフォルトだとload_balance_hosts=disableで、ラウンドロビンになる。
✓ psqlなどlibpqを使うアプリケーションで利用可能
v16
client
psql “host=aaa,bbb,ccc
load_balance_hosts=random”
host=aaa
host=bbb
host=ccc
接続先をランダムに選択、
エラー時は別の接続を試す
© 2023 NTT DATA Group Corporation 34
②ロジカルレプリケーションの拡張 - スタンバイからのレプリケーション -
⚫ ストリーミングレプリケーションのスタンバイを、パブリッシャーとして構成可能
プライマリ スタンバイ
パブリッシャ パブリッシャ サブスクライバ
ロジカル
レプリケーション
ストリーミング
レプリケーション
PUBLICATION SUBSCRIPTION
PUBLICATION
• PUBLICATIONはプライマリで作成
• pg_log_standby_snapshotでスタンバイへ
のレプリケーションのスロットを即時反映
v16
© 2023 NTT DATA Group Corporation 35
②ロジカルレプリケーションの拡張 - steaming = parallel -
⚫ 15以前でstreamingオプションはon/offだったが、parallelが追加
✓ CREATE SUBSCRIPTION sub_1
CONNECTION ‘port=5432 dbname=pub_db’ PUBLICATION pub
WITH (streaming = parallel);
v16
WALsender
Parallel
Apply Worker
Apply Worker
デコード結果を保持
メモリの制限を超えると
デコードされた変更を
ストリーミングで送信
(これはおそらくv14同等)
COMMIT時に全変更を
一度に送信 COMMITを指示
並列ワーカを
起動
変更を適用
メッセージ送信
max_parallel_apply_workers_per_subscriptionでワーカ数を指定
パブリッシャ サブスクライバ
© 2023 NTT DATA Group Corporation 36
テーブルA
テーブルA
②ロジカルレプリケーションの拡張 - 双方向レプリケーション -
⚫ 15までは双方向レプリケーションをすると循環してしまっていた。
⚫ 16から with (origin=none) が追加、双方向で更新が可能に。
✓ 同一キーでの挿入など、衝突が起きるケースがある。
✓ 衝突時は手動でスキップするなどの対応が必要。
v16
PUBLICATION SUBSCRIPTION
PUBLICATION
SUBSCRIPTION
origin=none
origin=none
パブリッシャにoriginを持たない変更のみの送信を要求
© 2023 NTT DATA Group Corporation 37
②ロジカルレプリケーションの拡張 - その他 -
⚫ 初期コピーでバイナリ形式が利用可に
✓ パブ/サブどちらも16以上 & サブスクリプションで with (binary = on)
✓ 初期データ移行もバイナリ形式で転送可 (15以前はテキスト形式のみ)
✓ 一部データ型が含まれる場合、所要時間が短縮されることがある。
⚫ Primary Key以外のインデックスが利用可に
✓ replica identity fullを指定した際、15以前ではフルスキャン。
✓ 16ではPrimary Key以外のインデックスを利用して、サブスクライバ側のデータ同期性
能が向上。
v16
© 2023 NTT DATA Group Corporation 38
③性能改善
⚫ パラレルクエリの拡張
✓ right outer join/full outer joinでパラレルクエリをサポート。
✓ 実行計画にParallel Hash Full Joinが登場するように 。
✓ string_arg、array_argで集約処理の一部をパラレルに実行、実行計画上はPartial
Aggregateが表示される。
⚫ インクリメンタルソートの拡張
✓ インクリメンタルソート自体は13で登場、インデックスを利用して一部のソートを高速化。
ディスクソートも避けられる。15まではSELECT DISTINCTは対象外。
✓ 16からSELECT DISTINCTでも、Incremental Sortが使われるように。
v16
© 2023 NTT DATA Group Corporation 39
④WALやバックアップ関連の改善
⚫ pg_dumpでlz4とzstdに対応
✓ -zまたは--compressで、gzip/lz4/zstdと圧縮レベルを指定可能(noneで非圧縮)
✓ 15以前はgzipのみ
⚫ archive_commandとarchive_libraryの同時指定不可
✓ 15で追加されたarchive_libraryパラメータ、15時点ではarchive_commandと同時
に指定可能(archive_libraryが優先される)
✓ 16では同時に追加できない、設定ファイルの書き方に注意
v16
© 2023 NTT DATA Group Corporation 40
⑤モニタリング関連
⚫ pg_stat_ioビューの追加
✓ PostgreSQLのIOに関連する統計情報を表示
✓ OSレベルでは調べるのが難しい、共有バッファ内のreadなども見れるように
✓ 今後、各種ツールでも対応が進むと思われる
v16
© 2023 NTT DATA Group Corporation 41
⑥ロールの追加等
⚫ 2つのロールが追加された。
ロール名 概要
pg_create_subscription スーパーユーザ以外でも、CREATE SUBSCRIPTIONが可能
pg_use_reserved_connections reserved_connectionsで予約した接続数を使って接続が可能。
なお、実際のコネクションは以下でカウントされるため、利用時に注
意が必要。
max_connections = superuser_reserved_connection
+ reserved_connection
+ その他一般ユーザ
pg_maintain (VACUUMやANALYZE等ができる権限だったがリバートされた)
v16
© 2023 NTT DATA Group Corporation 42
05.
まとめ
4
© 2023 NTT DATA Group Corporation 43
(再掲)サマリ:各バージョンの新機能
①SQL
②ロジカル
レプリケーション
③性能改善
④バックアップ
⑤モニタリング
⑥ロール
• publicスキーマの権限変更
• MERGE
• REGEXP系
• 行/列フィルタ
• lsn指定の同期スキップ
• エラー時の無効化
• NOT INや外部ソート
• ¥copyの改善
• archive_module
• WAL/ pg_basebackup圧縮
• pg_stat_subscription_stats
• JSON形式のログ
• pg_checkpoint
• SEARCH/CYCLE
• postgres_fdw
• ストリーム送信
• バイナリ転送
• Memoize
• Bottom-up Index
Deletion
• VACUUM改善
• pg_stat_wal
• pg_stat_progress_copy
• pg_read/write_all_data
• JSON関数、IS JSON
• ANY_VALUE
• libpq接続ロードバランシング
• スタンバイからレプリケーション
• パラレル適用
• 双方向
• パラレルクエリ、インクリメンタ
ルソートの拡張
• pg_dump圧縮(lz4/zstd)
• pg_stat_io
• pg_create_subscription
• pg_use_reserved_connections
開発者向け、使いたいSQLがあればどんどんバージョンアップを
ロジカルレプリケーションを使い倒したいなら、最新バージョンを使おう
地道な性能改善の取り込みを意識しよう
実行計画も新しくなるので、バージョンアップ後は知識のアップデートも必要
どちらかと言うとDB管理者向け、クラウド利用の場合はメリット少なめ
オンプレ/自前で大量DB管理するケースでバージョンアップのメリット大きい
v15 (2022年) v16 (2023年)
v14 (2021年)
© 2023 NTT DATA Group Corporation 44
さて、PostgreSQL v17はどうなる? ※あくまで予想です
v14 v15 v16 v17
• publicスキーマの権限
• MERGE
• REGEXP系
• 行/列フィルタ
• lsn指定の同期スキップ
• エラー時の無効化
• NOT INや外部ソート
• ¥copyの改善
• archive_module
• WAL/ pg_basebackup圧縮
• pg_stat_subscription_stats
• JSON形式のログ
• pg_checkpoint
• SEARCH/CYCLE
• postgres_fdw
• ストリーム送信
• バイナリ転送
• Memoize
• Bottom-up Index
Deletion
• VACUUM改善
• pg_stat_wal
• pg_stat_progress_copy
• pg_read/write_all_data
• JSON関数、IS JSON
• ANY_VALUE
• libpq接続ロードバランシング
• スタンバイから
• パラレル適用
• 双方向
• パラレルクエリ、
インクリメンタルソートの
拡張
• pg_dump圧縮(lz4/zstd)
• pg_stat_io
• pg_create_subscription
• pg_use_reserved_connections
①SQL
③性能改善
④バックアップ
⑤モニタリング
⑥ロール
②ロジカル
レプリケーション
• SQL/JSON関連
• 透過的カラム暗号化
• Table AMのAPI拡張
• DDLやSeqの対応
• Time-delayed
• Async IO
• ロックの改善
• 64bit XID(freeze削減)
• Incremental Backup
• WALサイズの削減
• 一部コマンドでsuperuser権限が
不要に
© 2023 NTT DATA Group Corporation 45
(おまけ)クラウドにおける対応状況
⚫ 2023/10時点の各社サービスのPostgreSQLバージョン対応状況
クラウド サービス名 PostgreSQL Ver. 備考
AWS
RDS for PostgreSQL 11 - 15 16はプレビュー
Aurora PostgreSQL 11 - 15 LTS 12.9/13.9/14.6
Azure
Azure Database for PostgreSQL 11 - 15
Cosmos DB for PostgreSQL 11 - 16
Google
Cloud
Cloud SQL for PostgreSQL 9.6 - 15 Enterprise Plusは14,15
Alloy DB for PostgreSQL 14互換
PostgreSQL interface for Spanner - 完全な互換性はない
OCI OCI Database for PostgreSQL 14.9 2023/12?

More Related Content

What's hot (20)

PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQL 15の新機能を徹底解説
Masahiko Sawada
 
PDF
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
NTT DATA Technology & Innovation
 
PDF
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
Preferred Networks
 
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
 
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
Toru Makabe
 
PPTX
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
NTT DATA Technology & Innovation
 
PPTX
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PPTX
Dockerからcontainerdへの移行
Akihiro Suda
 
PDF
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
 
PDF
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
NTT DATA Technology & Innovation
 
PDF
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
NTT DATA Technology & Innovation
 
PDF
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
2025年現在のNewSQL (最強DB講義 #36 発表資料)
NTT DATA Technology & Innovation
 
PPTX
トランザクションの設計と進化
Kumazaki Hiroki
 
PPTX
トランザクションをSerializableにする4つの方法
Kumazaki Hiroki
 
PDF
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQL 15の新機能を徹底解説
Masahiko Sawada
 
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
NTT DATA Technology & Innovation
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
Preferred Networks
 
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
 
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
細かすぎて伝わらないかもしれない Azure Container Networking Deep Dive
Toru Makabe
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
NTT DATA Technology & Innovation
 
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
Dockerからcontainerdへの移行
Akihiro Suda
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
NTT DATA Technology & Innovation
 
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
NTT DATA Technology & Innovation
 
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
2025年現在のNewSQL (最強DB講義 #36 発表資料)
NTT DATA Technology & Innovation
 
トランザクションの設計と進化
Kumazaki Hiroki
 
トランザクションをSerializableにする4つの方法
Kumazaki Hiroki
 
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 

Similar to 最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料) (20)

PDF
PostgreSQL 9.6 新機能紹介
Masahiko Sawada
 
PDF
JTF2021w F3 postgresql frontline
Haruka Takatsuka
 
PDF
Postgre sql update_20170310
Haruka Takatsuka
 
PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
NTT DATA Technology & Innovation
 
PDF
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
Insight Technology, Inc.
 
PDF
PostgreSQL15 新機能紹介
Satoshi Hirata
 
PPTX
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
NTT DATA Technology & Innovation
 
PDF
Chugoku db 17th-postgresql-9.6
Toshi Harada
 
PDF
PostgreSQL13 新機能紹介
Satoshi Hirata
 
PPTX
PostgreSQLのgitレポジトリから見える2021年の開発状況(第30回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
10大ニュースで振り返るPGCon2015
NTT DATA OSS Professional Services
 
PDF
PostgreSQL10徹底解説
Masahiko Sawada
 
PPTX
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQLの運用・監視にまつわるエトセトラ
NTT DATA OSS Professional Services
 
PDF
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
Ryuichiro Munechika
 
PPTX
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
Hackers Champloo 2016 postgresql-9.6
Toshi Harada
 
PDF
Kof2016 postgresql-9.6
Toshi Harada
 
PDF
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
Shigeru Hanada
 
ODP
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
Shigeru Hanada
 
PostgreSQL 9.6 新機能紹介
Masahiko Sawada
 
JTF2021w F3 postgresql frontline
Haruka Takatsuka
 
Postgre sql update_20170310
Haruka Takatsuka
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
NTT DATA Technology & Innovation
 
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
Insight Technology, Inc.
 
PostgreSQL15 新機能紹介
Satoshi Hirata
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
NTT DATA Technology & Innovation
 
Chugoku db 17th-postgresql-9.6
Toshi Harada
 
PostgreSQL13 新機能紹介
Satoshi Hirata
 
PostgreSQLのgitレポジトリから見える2021年の開発状況(第30回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
10大ニュースで振り返るPGCon2015
NTT DATA OSS Professional Services
 
PostgreSQL10徹底解説
Masahiko Sawada
 
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
NTT DATA Technology & Innovation
 
PostgreSQLの運用・監視にまつわるエトセトラ
NTT DATA OSS Professional Services
 
Incoming PostgreSQL 9.4 次バージョンの新機能をご紹介
Ryuichiro Munechika
 
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
Hackers Champloo 2016 postgresql-9.6
Toshi Harada
 
Kof2016 postgresql-9.6
Toshi Harada
 
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
Shigeru Hanada
 
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
Shigeru Hanada
 
Ad

More from NTT DATA Technology & Innovation (20)

PDF
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
NTT DATA Technology & Innovation
 
PDF
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
NTT DATA Technology & Innovation
 
PDF
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
NTT DATA Technology & Innovation
 
PDF
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
NTT DATA Technology & Innovation
 
PDF
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
NTT DATA Technology & Innovation
 
PDF
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
NTT DATA Technology & Innovation
 
PDF
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PDF
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
NTT DATA Technology & Innovation
 
PDF
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
NTT DATA Technology & Innovation
 
PDF
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
NTT DATA Technology & Innovation
 
PDF
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
 
PDF
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
 
PDF
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
 
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
NTT DATA Technology & Innovation
 
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
NTT DATA Technology & Innovation
 
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
NTT DATA Technology & Innovation
 
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
NTT DATA Technology & Innovation
 
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
NTT DATA Technology & Innovation
 
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
 
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
NTT DATA Technology & Innovation
 
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
NTT DATA Technology & Innovation
 
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
NTT DATA Technology & Innovation
 
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
NTT DATA Technology & Innovation
 
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
NTT DATA Technology & Innovation
 
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
NTT DATA Technology & Innovation
 
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
NTT DATA Technology & Innovation
 
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
 
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
NTT DATA Technology & Innovation
 
Ad

Recently uploaded (8)

PDF
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
PDF
go tool と Minimal Version Selection アルゴリズム
Keisuke Ishigami
 
PPTX
オープンソース界隈の利用者や技術者から見たオープンソースEDAとは? What is open source EDA from the perspecti...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
PDF
2023年版Web3技術の理想と現実
Syuhei Hiya
 
PDF
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
PPTX
新卒・中途採用者向け採用ピッチ資料2025年7月版(20250702).pptx
Official74
 
PDF
AIツールを使った研究の効率化 Improving Research Efficiency with AI Tools
Tohoku University
 
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
go tool と Minimal Version Selection アルゴリズム
Keisuke Ishigami
 
オープンソース界隈の利用者や技術者から見たオープンソースEDAとは? What is open source EDA from the perspecti...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
2023年版Web3技術の理想と現実
Syuhei Hiya
 
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
新卒・中途採用者向け採用ピッチ資料2025年7月版(20250702).pptx
Official74
 
AIツールを使った研究の効率化 Improving Research Efficiency with AI Tools
Tohoku University
 

最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)

  • 1. © 2023 NTT DATA Group Corporation - 最新機能までを総ざらい!- PostgreSQLの 注目機能を振り返る 2023/10/7 株式会社NTTデータグループ 小林 隆浩
  • 2. © 2023 NTT DATA Group Corporation 3 アジェンダ 01. PostgreSQLリリースを振り返る(2021-2023) 02. PostgreSQL v14の注目機能 03. PostgreSQL v15の注目機能 04. PostgreSQL v16の注目機能 05. まとめ (おまけ)各クラウドのバージョン対応状況
  • 3. © 2023 NTT DATA Group Corporation 4 (セッションの注意事項) ⚫ PostgreSQL各バージョンの新機能全てを網羅した内容ではありません。 ⚫ 全て知りたいという方は、以下を調べましょう。 ⚫ 公式リリースノート ⚫ SRA OSS Tech Blog 「PostgreSQL 14/15/16 検証報告」 ⚫ 篠田の虎の巻 「PostgreSQL 14/15/16 新機能検証結果」 各バージョンのリンクは、Let’s POSTGRESにまとまっています。 PostgreSQL14の新機能 | Let's POSTGRES PostgreSQL15の新機能 | Let's POSTGRES PostgreSQL16の新機能 | Let's POSTGRES
  • 4. © 2023 NTT DATA Group Corporation 5 01. PostgreSQLリリースを振り返る (2021-2023) 5
  • 5. © 2023 NTT DATA Group Corporation 6 サマリ:各バージョンの新機能 v15 (2022年) v16 (2023年) ①SQL ②ロジカル レプリケーション ③性能改善 ④バックアップ ⑤モニタリング ⑥ロール • publicスキーマの権限変更 • MERGE • REGEXP系 • 行/列フィルタ • lsn指定の同期スキップ • エラー時の無効化 • NOT INや外部ソート • ¥copyの改善 • archive_module • WAL/ pg_basebackup圧縮 • pg_stat_subscription_stats • JSON形式のログ • pg_checkpoint • JSON関数、IS JSON • ANY_VALUE • libpq接続ロードバランシング • スタンバイからレプリケーション • パラレル適用 • 双方向 • パラレルクエリ、インクリメンタ ルソートの拡張 • pg_dump圧縮(lz4/zstd) • pg_stat_io • pg_create_subscription • pg_use_reserved_connections v14 (2021年) • SEARCH/CYCLE • postgres_fdw • ストリーム送信 • バイナリ転送 • Memoize • Bottom-up Index Deletion • VACUUM改善 • pg_stat_wal • pg_stat_progress_copy • pg_read/write_all_data
  • 6. © 2023 NTT DATA Group Corporation 7 02. PostgreSQL v14の注目機能 7
  • 7. © 2023 NTT DATA Group Corporation 8 紹介する新機能(PostgreSQL v14) ①新しいSQL(関数など) ②ロジカルレプリケーションの拡張 ③性能改善 ④WALやバックアップ関連の改善 ⑤モニタリング関連 ⑥ロールの追加等 v14
  • 8. © 2023 NTT DATA Group Corporation 9 ①新しいSQL(関数等) ⚫ SEARCH句とCYCLE句 ✓ グラフのデータ構造に対して再帰的な問い合わせが シンプルに書けるように。 ✓ SEARCHで探索順序(幅優先/深さ優先)を 指定でき、CYCLEで循環参照の検出が可能。 ⚫ パーティションデタッチ時のロック軽減 ✓ ALTER TABLE … DETACH PARTITION CONCURRENTLY ✓ AccessExclusiveLockを取らなくなる。 v14 1 2 3 5 4
  • 9. © 2023 NTT DATA Group Corporation 10 ①新しいSQL(関数等) - postgres_fdw - ⚫ 外部テーブルのTRUNCATE ✓ truncatableオプションを指定可能、デフォルトはtrue ⚫ 外部テーブルの非同期スキャン ⚫ async_capableオプションで指定可能、デフォルトはfalse ⚫ Async Foreign Scanが同時並行で実行される。 ⚫ 外部テーブルの一括コピー ✓ batch_sizeで指定可能、デフォルトは1 ✓ 大量挿入時に1行ずつINSERT文が送信されていたが、これをまとめるように。 v14
  • 10. © 2023 NTT DATA Group Corporation 11 ②ロジカルレプリケーションの拡張 - streaming - ⚫ ストリーム送信 ✓ 13以前はパブリッシャ側でファイルに書き込み、コミットで送信(大量変更時の性能↓) ✓ WITH (streaming = on)でコミットを待たずに順次変更を送信 v14 WALsender Apply Worker デコード結果を保持 メモリの制限を超えると デコードされた変更を ストリーミングで送信 残りの変更を送信 適用した変更のCOMMIT 変更を一時ファイル(changes) に書き込む 変更を読み取り適用 パブリッシャ サブスクライバ
  • 11. © 2023 NTT DATA Group Corporation 12 ②ロジカルレプリケーションの拡張 - その他 - ⚫ 初期同期時の更新を複数トランザクション化 ✓ 13以前、「初期コピー」と「初期コピー中の他の更新」が単一トランザクション ⇒ロングトラン化する。更にエラーで全てロールバックされてしまい、やり直しが発生。 ✓ 上記が分離され、初期コピー完了後にデータ参照可。その後、他の更新を同期。 ⚫ バイナリ転送 ✓ CREATE PUBLICATIONでWITH (binary = on)を指定して、バイナリ転送が可能に。 ✓ timestamp型やbytea型など一部で性能改善が見込まれる。 v14
  • 12. © 2023 NTT DATA Group Corporation 13 Memoizeの キャッシュ (バックエンドプロセス内) ③性能改善 - Memoize - ⚫ Nested Loopで一部のケースをキャッシュを使って、性能を改善する ✓ enable_memoizeで制御できる(デフォルトon) 例)以下で FROM Tbl1 JOIN ON Tbl2 Tbl1.key = Tbl2.key Tbl1のkey1のカーディナリティが低く、Tbl2のkeyのカーディナリティは高いケースで有効。 Memoizeなしの場合、Tbl1の1行ごとにTbl2をIndex Scanして結合するが件数が増えるとオーバーヘッド大。 v14 Memoizeをもっと詳しく知りたい方は、第41回PGアンカンファレンスの「Memoizeの仕組み」 by 笠原さんを参照してください。 Tbl1 1 1 ... … key1 2 … 2 … Tbl2 1 2 ... … 3 … 4 … 1 2 ... … key1 通常は初回にキャッシュ、 キャッシュされたレコードは Tbl2を参照しない
  • 13. © 2023 NTT DATA Group Corporation 14 ③性能改善 - Bottom-up Index Deletion - ⚫ B-Treeインデックスの肥大化抑止 ✓ インデックスのタプル削除+重複削除(v13)+Bottom-up Index Deletion ✓ インデックスのページ分割を防ぐ (HOTは上記の対象外。肥大化を防ぐために、まずはHOTを考えよう。) v14 Table1 Index1 Index2 X Y 100 100 ... … 100 100 X Y ①Index2の対象列を更新 ※HOTではない ②’ こちらにも タプルが追加される ② 新しいタプルが 追加される ③不要なインデックスタプルを 積極的に削除する
  • 14. © 2023 NTT DATA Group Corporation 15 ③性能改善 ⚫ パラレルクエリの拡張 ✓ REFRESH MATERIALIZED VIEW が並列問い合わせを実行可能に。 ⚫ VACUUMコマンドの改善 ✓ INDEX_CLEANUP=auto(デフォルト)で、処理が長くなる事の多いインデックスの Vacuumが(必要に応じて)スキップされる。 ✓ Failsafeモードが導入され、XID周回が近づいた際にFreeze以外の処理をスキップ。 v14
  • 15. © 2023 NTT DATA Group Corporation 16 ⑤モニタリング関連 ⚫ pg_stat_wal ✓ WALの生成と書き込みに関する情報を表示 ⚫ pg_stat_progress_copy ✓ COPYコマンドの進捗状況を確認 ⚫ pg_stats_ext_expr ✓ 式を使った拡張統計の情報を表示 ⚫ トランザクション周回の警告閾値が変更 ⚫ log_autovacuum_min_durationにインデックスの詳細情報が出るように v14
  • 16. © 2023 NTT DATA Group Corporation 17 ⑥ロールの追加等 ⚫ 3つのロールが追加された。 v14 ロール名 概要 pg_database_owner データベース所有者で構成される pg_read_all_data 全スキーマのテーブル、ビュー、シーケンスを参照できる。 スキーマのUSAGE権限、オブジェクトのSELECT権限に相当。 pg_write_all_data 全スキーマのテーブル、ビュー、シーケンスを参照できる。 スキーマのUSAGE権限、オブジェクトのINSERT、UPDATE、 DELETE権限に相当。
  • 17. © 2023 NTT DATA Group Corporation 18 03. PostgreSQL v15の注目機能 1
  • 18. © 2023 NTT DATA Group Corporation 19 紹介する新機能(PostgreSQL v15) ①新しいSQL(関数など) ②ロジカルレプリケーションの拡張 ③性能改善 ④WALやバックアップ関連の改善 ⑤モニタリング関連 ⑥ロールの追加等 v15
  • 19. © 2023 NTT DATA Group Corporation 20 ①新しいSQL(関数等) - 注意すべき変更 - ⚫ publicスキーマに対するCREATE、USAGE権限を削除 ✓ セキュリティ対応(CVE-2018-1058) ✓ 15からはpublicスキーマへのアクセスは、pg_database_ownerが必要 (基本的にスーパーユーザとデータベース所有者) ✓ 14以前からのデータベースをリストアした際にも適用される ⇒バージョンアップ時に注意 v15
  • 20. © 2023 NTT DATA Group Corporation 21 ①新しいSQL(関数等) - MERGE - ⚫ 条件に応じて、INSERT/UPDATE/DELETEを単一SQLで実行 ✓ MERGE INTO テーブル名 USING 結合元テーブル ON 結合条件 WHEN MATCHED 条件 THEN UPDATE SET … / DELETE / DO NOTHING WHEN NOT MATCHED INSERT VALUES … / DO NOTHING ✓ 結合条件にマッチした場合 ⇒ UPDATE / DELETE / 何もしない ✓ 結合条件にマッチしなかった場合 ⇒ INSERT / 何もしない v15
  • 21. © 2023 NTT DATA Group Corporation 22 (補足)MERGEとそれまでのINSERT文の違い ⚫ 他のUPSERT方法である、INSERT … ON CONFLICTとの違い ✓ MERGEは、対象テーブルを外部結合し、結果行についてUPDATE/INSERT ✓ INSERT ... ON CONFLICTは、まずINSERTして重複で失敗したものについて UPDATEを行う。 ✓ INSERT INTO テーブル名 VALUES (…) ON CONFLICT (制約名) DO UPDATE SET c1 = EXCLUDED.c1 , c2 = EXCLUDED.c2; ✓ 実行時の性能特性も異なる。 v15
  • 22. © 2023 NTT DATA Group Corporation 23 ①新しいSQL(関数等) - その他 - ⚫ REGEXP_で始まる5つの関数の追加 関数 出力結果 REGEXP_COUNT パターンにマッチする個数 REGEXP_INSTR パターンにマッチする位置 (引数で開始位置/終了のどちらかを指定) REGEXP_LIKE パターンにマッチすればtrue、そうでなければfalse REGEXP_SUBSTR パターンにマッチした文字列 REGEXP_REPLACE パターンにマッチした部分を置換して返す (15で対象範囲の指定を引数で可能になった) ⚫ 集約関数RANGE_AGGの追加 ✓ 複数行の範囲型データ(int4range等)を多重範囲型に集約 v15
  • 23. © 2023 NTT DATA Group Corporation 24 Schema1 ②ロジカルレプリケーションの拡張 ⚫ PUBLICATIONの対象をスキーマ単位で指定したり、列/行でフィルタ可能に。 ⚫ サブスクライバでスキップ(LSN指定)したり、エラー時の無効化が可能に。 v15 Schema1 エラー発生時に該当更新の同期を $ ALTER SUBSCRIPTION ... SKIP (LSN=‘lsnの値’) でスキップが可能。 また、SUBSCRIPTIONに disable_on_error=true を指定して、エラー時に無効化する 設定が可能。 パブリッシャ サブスクライバ Table1 1 Table2 Table1 Table2 PUBLICATION で行を指定 PUBLICATION で列を指定 スキーマ一括で PUBLICATION指定も可
  • 24. © 2023 NTT DATA Group Corporation 25 ③性能改善 ⚫ NOT IN句の改善 ✓ 内部でハッシュテーブルを使うように変更された(実行計画は変化なし) ⚫ ソート性能の改善 ✓ 外部ソート(Sort Method: external merge)のアルゴリズム変更 ⚫ ウィンドウ関数の改善 ✓ ROW_NUMBER、RANK、COUNTで一部の実行計画を改善 ⚫ ¥copy fromの改善 ✓ 1行単位のCopyDataメッセージをまとめることで改善 v15
  • 25. © 2023 NTT DATA Group Corporation 26 ④WALやバックアップ関連 ⚫ WAL関連の改善 ✓ モジュールによるアーカイブが可能に。 ✓ archive_libraryでモジュール名を指定。 ✓ archive_commandよりも柔軟性の高いアーカイブが可能になった。 ✓ 15時点で優先度はarchive_library > archive_command ✓ WAL圧縮でzstd/lz4が指定可能に。 ✓ configureで、--with-zstd/--with-lz4が必要。 ✓ wal_compressionは、pglz/zstd/lz4/on(=pglz)/offを指定可能。 ⚫ pg_basebackupの改善 ✓ --compressオプションで圧縮が可能、形式(gzip/zstd/lz4)とレベルを指定。 ✓ --targetオプションでバックアップの取得先をclientやserverで選べる。ちなみに blackholeも指定でき、この場合バックアップは取られない。 v15
  • 26. © 2023 NTT DATA Group Corporation 27 ⑤モニタリング関連 ⚫ pg_stat_subscription_statsの追加 ✓ ロジカルレプリケーションの同期エラーを表示 ✓ サブスクリプションごとに1行、初期同期と更新適用の失敗がカウントされる ⚫ pg_ident_file_mappingsの追加 ✓ pg_ident.confの内容を表示 ⚫ JSON形式でログ出力が可能に ✓ log_destinataion=jsonlogが指定可能になった ✓ 従来のstderr/csvlog/syslogは変わらず ⚫ log_checkpointのデフォルト値変更 ✓ 14以前はデフォルトoff、15からデフォルトがonになった v15
  • 27. © 2023 NTT DATA Group Corporation 28 ⑥ロールの追加等 ⚫ 以下のロールが追加された。 ロール名 概要 pg_checkpoint CHECKPOINTのコマンドが実行可能 v15
  • 28. © 2023 NTT DATA Group Corporation 29 04. PostgreSQL v16の注目機能 2
  • 29. © 2023 NTT DATA Group Corporation 30 紹介する新機能(PostgreSQL v16) ①新しいSQL(関数など) ②ロジカルレプリケーションの拡張 ③性能改善 ④WALやバックアップ関連の改善 ⑤モニタリング関連 ⑥ロールの追加等 v16
  • 30. © 2023 NTT DATA Group Corporation 31 ①新しいSQL(関数等) - JSON関連 - ⚫ JSON関連の機能追加 関数 変換元 変換先 JSON_OBJECT テキスト配列 JSONオブジェクト JSON_OBJECTAGG 複数行のデータ(SELECT結果等) JSONオブジェクト JSON_ARRAY スカラ値やJSONデータ JSON配列 JSON_ARRAYAGG 複数行のデータ JSON配列 述語 判定内容 (true/false) IS JSON JSONとして解釈できるか IS JSON ARRAY JSON配列として解釈できるか IS JSON OBJECT JSONオブジェクトとして解釈できるか IS JSON SCALAR JSONのスカラ値として解釈できるか v16
  • 31. © 2023 NTT DATA Group Corporation 32 ①新しいSQL/構文 - その他 - ⚫ ANY_VALUE ✓ GROUP BYに含まれない列を集計関数を使わずに参照するとエラー。 ✓ 解消方法:GROUP BYに列を含める、またはMIN/MAX/ANY_VALUE ⚫ 数値リテラル ✓ 2/8/16進数を表現することが可能に。 ✓ (2進数)0b1001=9 (8進数)0o25=21 (16進数)0x32=50 ⚫ ICUロケールの拡張 ✓ 15以前はICUライブラリを照合順序で有効にするには、configure時に --with-icuが必要。 ✓ 16ではデフォルトで有効となり、除外する際に--without-icuが必要。 ✓ これまでのconfigureが通らないケースも発生するので注意。 v16
  • 32. © 2023 NTT DATA Group Corporation 33 ①新しいSQL/構文 - libpqロードバランシング - ⚫ 複数ホストからランダムな接続が可能に ✓ 接続パラメータのload_balance_hosts=randomと、複数ホストのリストを指定。 ✓ デフォルトだとload_balance_hosts=disableで、ラウンドロビンになる。 ✓ psqlなどlibpqを使うアプリケーションで利用可能 v16 client psql “host=aaa,bbb,ccc load_balance_hosts=random” host=aaa host=bbb host=ccc 接続先をランダムに選択、 エラー時は別の接続を試す
  • 33. © 2023 NTT DATA Group Corporation 34 ②ロジカルレプリケーションの拡張 - スタンバイからのレプリケーション - ⚫ ストリーミングレプリケーションのスタンバイを、パブリッシャーとして構成可能 プライマリ スタンバイ パブリッシャ パブリッシャ サブスクライバ ロジカル レプリケーション ストリーミング レプリケーション PUBLICATION SUBSCRIPTION PUBLICATION • PUBLICATIONはプライマリで作成 • pg_log_standby_snapshotでスタンバイへ のレプリケーションのスロットを即時反映 v16
  • 34. © 2023 NTT DATA Group Corporation 35 ②ロジカルレプリケーションの拡張 - steaming = parallel - ⚫ 15以前でstreamingオプションはon/offだったが、parallelが追加 ✓ CREATE SUBSCRIPTION sub_1 CONNECTION ‘port=5432 dbname=pub_db’ PUBLICATION pub WITH (streaming = parallel); v16 WALsender Parallel Apply Worker Apply Worker デコード結果を保持 メモリの制限を超えると デコードされた変更を ストリーミングで送信 (これはおそらくv14同等) COMMIT時に全変更を 一度に送信 COMMITを指示 並列ワーカを 起動 変更を適用 メッセージ送信 max_parallel_apply_workers_per_subscriptionでワーカ数を指定 パブリッシャ サブスクライバ
  • 35. © 2023 NTT DATA Group Corporation 36 テーブルA テーブルA ②ロジカルレプリケーションの拡張 - 双方向レプリケーション - ⚫ 15までは双方向レプリケーションをすると循環してしまっていた。 ⚫ 16から with (origin=none) が追加、双方向で更新が可能に。 ✓ 同一キーでの挿入など、衝突が起きるケースがある。 ✓ 衝突時は手動でスキップするなどの対応が必要。 v16 PUBLICATION SUBSCRIPTION PUBLICATION SUBSCRIPTION origin=none origin=none パブリッシャにoriginを持たない変更のみの送信を要求
  • 36. © 2023 NTT DATA Group Corporation 37 ②ロジカルレプリケーションの拡張 - その他 - ⚫ 初期コピーでバイナリ形式が利用可に ✓ パブ/サブどちらも16以上 & サブスクリプションで with (binary = on) ✓ 初期データ移行もバイナリ形式で転送可 (15以前はテキスト形式のみ) ✓ 一部データ型が含まれる場合、所要時間が短縮されることがある。 ⚫ Primary Key以外のインデックスが利用可に ✓ replica identity fullを指定した際、15以前ではフルスキャン。 ✓ 16ではPrimary Key以外のインデックスを利用して、サブスクライバ側のデータ同期性 能が向上。 v16
  • 37. © 2023 NTT DATA Group Corporation 38 ③性能改善 ⚫ パラレルクエリの拡張 ✓ right outer join/full outer joinでパラレルクエリをサポート。 ✓ 実行計画にParallel Hash Full Joinが登場するように 。 ✓ string_arg、array_argで集約処理の一部をパラレルに実行、実行計画上はPartial Aggregateが表示される。 ⚫ インクリメンタルソートの拡張 ✓ インクリメンタルソート自体は13で登場、インデックスを利用して一部のソートを高速化。 ディスクソートも避けられる。15まではSELECT DISTINCTは対象外。 ✓ 16からSELECT DISTINCTでも、Incremental Sortが使われるように。 v16
  • 38. © 2023 NTT DATA Group Corporation 39 ④WALやバックアップ関連の改善 ⚫ pg_dumpでlz4とzstdに対応 ✓ -zまたは--compressで、gzip/lz4/zstdと圧縮レベルを指定可能(noneで非圧縮) ✓ 15以前はgzipのみ ⚫ archive_commandとarchive_libraryの同時指定不可 ✓ 15で追加されたarchive_libraryパラメータ、15時点ではarchive_commandと同時 に指定可能(archive_libraryが優先される) ✓ 16では同時に追加できない、設定ファイルの書き方に注意 v16
  • 39. © 2023 NTT DATA Group Corporation 40 ⑤モニタリング関連 ⚫ pg_stat_ioビューの追加 ✓ PostgreSQLのIOに関連する統計情報を表示 ✓ OSレベルでは調べるのが難しい、共有バッファ内のreadなども見れるように ✓ 今後、各種ツールでも対応が進むと思われる v16
  • 40. © 2023 NTT DATA Group Corporation 41 ⑥ロールの追加等 ⚫ 2つのロールが追加された。 ロール名 概要 pg_create_subscription スーパーユーザ以外でも、CREATE SUBSCRIPTIONが可能 pg_use_reserved_connections reserved_connectionsで予約した接続数を使って接続が可能。 なお、実際のコネクションは以下でカウントされるため、利用時に注 意が必要。 max_connections = superuser_reserved_connection + reserved_connection + その他一般ユーザ pg_maintain (VACUUMやANALYZE等ができる権限だったがリバートされた) v16
  • 41. © 2023 NTT DATA Group Corporation 42 05. まとめ 4
  • 42. © 2023 NTT DATA Group Corporation 43 (再掲)サマリ:各バージョンの新機能 ①SQL ②ロジカル レプリケーション ③性能改善 ④バックアップ ⑤モニタリング ⑥ロール • publicスキーマの権限変更 • MERGE • REGEXP系 • 行/列フィルタ • lsn指定の同期スキップ • エラー時の無効化 • NOT INや外部ソート • ¥copyの改善 • archive_module • WAL/ pg_basebackup圧縮 • pg_stat_subscription_stats • JSON形式のログ • pg_checkpoint • SEARCH/CYCLE • postgres_fdw • ストリーム送信 • バイナリ転送 • Memoize • Bottom-up Index Deletion • VACUUM改善 • pg_stat_wal • pg_stat_progress_copy • pg_read/write_all_data • JSON関数、IS JSON • ANY_VALUE • libpq接続ロードバランシング • スタンバイからレプリケーション • パラレル適用 • 双方向 • パラレルクエリ、インクリメンタ ルソートの拡張 • pg_dump圧縮(lz4/zstd) • pg_stat_io • pg_create_subscription • pg_use_reserved_connections 開発者向け、使いたいSQLがあればどんどんバージョンアップを ロジカルレプリケーションを使い倒したいなら、最新バージョンを使おう 地道な性能改善の取り込みを意識しよう 実行計画も新しくなるので、バージョンアップ後は知識のアップデートも必要 どちらかと言うとDB管理者向け、クラウド利用の場合はメリット少なめ オンプレ/自前で大量DB管理するケースでバージョンアップのメリット大きい v15 (2022年) v16 (2023年) v14 (2021年)
  • 43. © 2023 NTT DATA Group Corporation 44 さて、PostgreSQL v17はどうなる? ※あくまで予想です v14 v15 v16 v17 • publicスキーマの権限 • MERGE • REGEXP系 • 行/列フィルタ • lsn指定の同期スキップ • エラー時の無効化 • NOT INや外部ソート • ¥copyの改善 • archive_module • WAL/ pg_basebackup圧縮 • pg_stat_subscription_stats • JSON形式のログ • pg_checkpoint • SEARCH/CYCLE • postgres_fdw • ストリーム送信 • バイナリ転送 • Memoize • Bottom-up Index Deletion • VACUUM改善 • pg_stat_wal • pg_stat_progress_copy • pg_read/write_all_data • JSON関数、IS JSON • ANY_VALUE • libpq接続ロードバランシング • スタンバイから • パラレル適用 • 双方向 • パラレルクエリ、 インクリメンタルソートの 拡張 • pg_dump圧縮(lz4/zstd) • pg_stat_io • pg_create_subscription • pg_use_reserved_connections ①SQL ③性能改善 ④バックアップ ⑤モニタリング ⑥ロール ②ロジカル レプリケーション • SQL/JSON関連 • 透過的カラム暗号化 • Table AMのAPI拡張 • DDLやSeqの対応 • Time-delayed • Async IO • ロックの改善 • 64bit XID(freeze削減) • Incremental Backup • WALサイズの削減 • 一部コマンドでsuperuser権限が 不要に
  • 44. © 2023 NTT DATA Group Corporation 45 (おまけ)クラウドにおける対応状況 ⚫ 2023/10時点の各社サービスのPostgreSQLバージョン対応状況 クラウド サービス名 PostgreSQL Ver. 備考 AWS RDS for PostgreSQL 11 - 15 16はプレビュー Aurora PostgreSQL 11 - 15 LTS 12.9/13.9/14.6 Azure Azure Database for PostgreSQL 11 - 15 Cosmos DB for PostgreSQL 11 - 16 Google Cloud Cloud SQL for PostgreSQL 9.6 - 15 Enterprise Plusは14,15 Alloy DB for PostgreSQL 14互換 PostgreSQL interface for Spanner - 完全な互換性はない OCI OCI Database for PostgreSQL 14.9 2023/12?