Movatterモバイル変換


[0]ホーム

URL:


PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)

PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)2025年7月11日(金)NTTデータOSSソリューション統括部藤井 雅雄

Embed presentation

© 2025 NTT DATA Japan Corporation© 2025 NTT DATA Japan Corporationdb tech showcase 2025PostgreSQL18新機能紹介2025年7月11日NTTデータ 藤井 雅雄
© 2025 NTT DATA Japan Corporation 2自己紹介藤井 雅雄Database Technical Lead @ NTTデータデータベース研究開発PostgreSQL 技術支援PostgreSQLコミッタレプリケーションWAL圧縮バックアップ進捗確認pg_bigm(全文検索モジュール) コミッタfujii_masaoMasaoFujii
© 2025 NTT DATA Japan Corporation 3講演にあたって講演資料は、NTTデータのSlideShareアカウント上で公開予定です。https://www.slideshare.net/nttdata-tech2025年7月11日時点で、バージョン18のブランチに含まれている新機能を取り上げます。バージョン18のリリースまでに仕様の変更や機能の取り消しの可能性があります。講演資料に掲載の検証結果は、ノートPC上の簡易計測で取得したものです。環境や条件などによっては、異なる検証結果になる可能性があるためご了承ください。
© 2025 NTT DATA Japan Corporation 4PostgreSQLバージョン182025年秋頃リリース予定のPostgreSQL最新メジャーバージョン211個の新機能や変更点 (*1)• 非同期I/Oの採用により特定処理で最大2〜3倍の性能向上• UUID v7を生成する関数の導入• OAuth 2.0によるユーザ認証のサポートなどバージョン18新機能の参考資料• PostgreSQL 18 新機能検証結果 (Beta 1)https://github.com/nori-shinoda/documents/blob/main/postgresql_18_beta1_new_features_ja_20250527-1.pdf• PostgreSQL 18 Release Notehttps://www.postgresql.org/docs/18/release-18.htmlhttps://github.com/postgres/postgres/blob/REL_18_STABLE/doc/src/sgml/release-18.sgml(*1) 2025年7月11日時点のリリースノートから、新機能や変更点を独自にカウント
© 2025 NTT DATA Japan Corporation 5© 2025 NTT DATA Japan Corporation継続的なパフォーマンスの改善
© 2025 NTT DATA Japan Corporation 6Index Skip Scanv18から、マルチカラムインデックスの先頭以外のカラムの一致検索で、Index Skip Scanのインデックス検索が可能に!v17とv18でSQL実行プランを比較-- レコード件数10万件のテーブル tbl を作成して、カラム col1 と col2 にマルチカラムインデックスを作成する。=# CREATE TABLE tbl (col1 INT, col2 INT);=# CREATE INDEX idx ON tbl (col1, col2);-- Index Skip Scanが選ばれやすいように、先頭カラム col1 のカーディナリティは低くする。=# INSERT INTO tbl SELECT n % 10, n FROM generate_series(1, 100000) n;=# VACUUM ANALYZE tbl;-- マルチカラムインデックスのカラム col1 と col2 のそれぞれで一致検索する。=# EXPLAIN ANALYZE SELECT * FROM tbl WHERE col1 = 5;=# EXPLAIN ANALYZE SELECT * FROM tbl WHERE col2 = 5;
© 2025 NTT DATA Japan Corporation 7Index Skip ScanIndex Only Scan using idx on tbl (cost=0.29..293.27 rows=10113 width=8) (actualtime=0.079..3.770 rows=10000 loops=1)Index Cond: (col1 = 5)Heap Fetches: 0Planning Time: 0.136 msExecution Time: 4.815 msIndex Only Scan using idx on tbl (cost=0.29..284.84 rows=9860 width=8) (actualtime=0.153..3.757 rows=10000.00 loops=1)Index Cond: (col1 = 5)Heap Fetches: 0Index Searches: 1Buffers: shared hit=30Planning Time: 0.141 msExecution Time: 4.930 msv17v18先頭カラムの一致検索では、v17とv18ともにIndex Scanを選択=# EXPLAIN ANALYZE SELECT * FROM tbl WHERE col1 = 5;
© 2025 NTT DATA Japan Corporation 8Index Skip ScanSeq Scan on tbl (cost=0.00..1693.00 rows=1 width=8) (actual time=0.034..23.397 rows=1loops=1)Filter: (col2 = 5)Rows Removed by Filter: 99999Planning Time: 0.125 msExecution Time: 23.424 msIndex Only Scan using idx on tbl (cost=0.29..47.31 rows=1 width=8) (actual time=0.085..0.123rows=1.00 loops=1)Index Cond: (col2 = 5)Heap Fetches: 0Index Searches: 11Buffers: shared hit=23Planning Time: 0.240 msExecution Time: 0.161 msv17v18先頭以外のカラムの一致検索では、v17でSeq Scan、v18でIndex Scan(Index Skip Scan)を選択=# EXPLAIN ANALYZE SELECT * FROM tbl WHERE col2 = 5;
© 2025 NTT DATA Japan Corporation 9Index Skip Scan-- 先頭カラムをユニークな値にしてカーディナリティを高くする。=# TRUNCATE tbl;=# INSERT INTO tbl SELECT n, n FROM generate_series(1, 100000) n;=# VACUUM ANALYZE tbl;Seq Scan on tbl (cost=0.00..1693.00 rows=1 width=8) (actual time=0.038..23.739 rows=1.00loops=1)Filter: (col2 = 5)Rows Removed by Filter: 99999Buffers: shared hit=443Planning Time: 0.127 msExecution Time: 23.772 msv18前方のカラムのカーディナリティが高いほど、Index Skip Scanのコストが高くなり、Seq Scanが選ばれやすくなる=# EXPLAIN ANALYZE SELECT * FROM tbl WHERE col2 = 5;
© 2025 NTT DATA Japan Corporation 10Index Skip Scan-- 先頭以外のカラムの値も変えてみると、=# TRUNCATE tbl;=# INSERT INTO tbl SELECT n % 10, n % 1000 FROM generate_series(1, 100000) n;=# VACUUM ANALYZE tbl;Index Only Scan using idx on tbl (cost=0.29..1147.29 rows=100 width=8) (actualtime=0.524..1.058 rows=100 loops=1)Index Cond: (col2 = 5)Heap Fetches: 0Buffers: shared hit=99Planning Time: 0.146 msExecution Time: 1.110 msv17先頭以外のカラムの一致検索で、v17でもIndex Full Scanによるインデックス検索が可能なことも=# EXPLAIN (ANALYZE on, BUFFERS on) SELECT * FROM tbl WHERE col2 = 5;
© 2025 NTT DATA Japan Corporation 11Index Skip ScanIndex Only Scan using idx on tbl (cost=0.29..1147.29 rows=100 width=8) (actualtime=0.524..1.058 rows=100 loops=1)Index Cond: (col2 = 5)Heap Fetches: 0Buffers: shared hit=99Planning Time: 0.146 msExecution Time: 1.110 msIndex Only Scan using idx on tbl (cost=0.29..48.96 rows=100 width=8) (actualtime=0.089..0.163 rows=100.00 loops=1)Index Cond: (col2 = 5)Heap Fetches: 0Index Searches: 11Buffers: shared hit=23Planning Time: 0.138 msExecution Time: 0.213 msv17先頭以外のカラムの一致検索で、Index Full Scan (v17) より Index Skip Scan (v18) の方が効率的になりやすい=# EXPLAIN (ANALYZE on, BUFFERS on) SELECT * FROM tbl WHERE col2 = 5;v18
© 2025 NTT DATA Japan Corporation 12EXPLAIN出力内容の違いIndex Only Scan using idx on tbl (cost=0.29..293.27 rows=10113 width=8) (actualtime=0.079..3.770 rows=10000 loops=1)Index Cond: (col1 = 5)Heap Fetches: 0Planning Time: 0.136 msExecution Time: 4.815 msIndex Only Scan using idx on tbl (cost=0.29..284.84 rows=9860 width=8) (actual time=0.153..3.757rows=10000.00 loops=1)Index Cond: (col1 = 5)Heap Fetches: 0Index Searches: 1Buffers: shared hit=30Planning Time: 0.141 msExecution Time: 4.930 msv17v18=# EXPLAIN ANALYZE SELECT * FROM tbl WHERE col1 = 5;• actual rowsを小数点2桁まで出力(ループ回数と掛けたときに、より正確な件数を算出できるように)• インデックス検索回数「Index Searches」を出力• EXPLAIN ANALYZEでBUFFERSオプションがデフォルト有効に
© 2025 NTT DATA Japan Corporation 13GINインデックスの並列作成v17ではB-treeとBRINのインデックスを並列作成できるが、v18からはGINインデックスも並列作成可能に!• CREATE INDEXでもREINDEXでも並列作成可能• 並列度は以下のとおり決定。最大値はmax_parallel_maintenance_workersで設定➢ テーブルに設定されたparallel_workersの値から並列度を決定➢ (parallel_workersが未設定の場合) PostgreSQLがコストモデルに基づいて並列度を決定約430万件の日本語Wikipediaタイトルデータを使って、pg_bigmによる(GINインデックスベースの)全文検索インデックスの作成時間を計測(*1)並列度 インデックス作成時間 補足1 66.5 秒5 28.7 秒パラレルワーカーが4つ起動され、バックエンドと合わせて並列度5でインデックスを並列作成(*1) https://qiita.com/fujii_masao/items/e37e3733273eab7f0621
© 2025 NTT DATA Japan Corporation 14© 2025 NTT DATA Japan Corporationアプリケーション開発の利便性向上
© 2025 NTT DATA Japan Corporation 15仮想生成列生成列のうち、v17では格納生成列を利用でき、v18からは仮想生成列も利用可能に!生成列は、常に他のカラムから値が計算される特別なカラム。例えば、-- 身長と体重からBMIを自動的に計算したい=# CREATE TABLE players (height numeric,weight numeric,bmi numeric GENERATED ALWAYS AS (weight / (height * height)));=# INSERT INTO players VALUES (1.67, 65), (2.06, 98);=# SELECT * FROM players ;height | weight | bmi--------+--------+---------------------1.67 | 65 | 23.30668005306751772.06 | 98 | 23.0935997737769818
© 2025 NTT DATA Japan Corporation 16仮想生成列格納生成列• GENERATED ALWAYS AS ( 計算式 ) STORED• v12以降で利用可能• レコードの挿入・更新時に値が計算され、値の実データは保存される仮想生成列• GENERATED ALWAYS AS ( 計算式 ) [ VIRTUAL ]• v18以降で利用可能• レコードの参照時に値が計算され、値の実データは保存されない• 代表的な制約事項➢ インデックスを作成できない➢ ユニーク制約や外部キー制約を設定できない➢ プランナ統計情報を収集できない (行数推定が誤りやすい)➢ 論理レプリケーションできない➢ ユーザ定義関数・演算子を計算式に指定できない (指定できるのはPostgreSQL組み込みの関数・演算子のみ)
© 2025 NTT DATA Japan Corporation 17RETURNING OLD / NEWv18から、DMLのRETURNING句でOLD(更新後レコード)とNEW(更新後レコード)を指定可能に!-- v17以前では、更新時のRETURNINGで参照できるのは更新後レコードのみ=# UPDATE login SET last_login = now() WHERE id = 18 RETURNING *;id | last_login----+----------------------------18 | 2025-07-10 22:51:42.458511-- v18以降では、OLDを指定して更新前レコードも参照可能=# UPDATE login SET last_login = now() WHERE id = 18 RETURNING OLD.*, NEW.*;id | last_login | id | last_login----+----------------------------+----+----------------------------18 | 2023-06-23 20:33:40.363248 | 18 | 2025-07-10 22:51:42.458511v17v18
© 2025 NTT DATA Japan Corporation 18RETURNING OLD / NEWv18から、DMLのRETURNING句でOLD(更新後レコード)とNEW(更新後レコード)を指定可能に!DML 処理種別RETURNINGで返却されるレコード指定なし OLD NEWINSERTMERGE挿入 挿入レコード NULL 挿入レコードINSERT ON CONFLICTUPDATEMERGE更新 更新後レコード 更新前レコード 更新後レコードDELETEMERGE削除 削除前レコード 削除前レコード NULLv17以前で利用可能v18以降で利用可能
© 2025 NTT DATA Japan Corporation 19© 2025 NTT DATA Japan Corporation非互換・仕様変更
© 2025 NTT DATA Japan Corporation 20非互換・仕様変更v18から、DBユーザのMD5パスワードが非推奨に(将来的に削除予定)• MD5パスワードを設定すると、警告メッセージがログ出力される。この警告メッセージは、md5_password_warningsを無効化することで抑制可能=# SET password_encryption TO md5;=# passwordEnter new password for user "postgres":Enter it again:WARNING: setting an MD5-encrypted passwordDETAIL: MD5 password support is deprecated and will be removed in a future release of PostgreSQL.HINT: Refer to the PostgreSQL documentation for details about migrating to another password type.他の非互換・仕様変更はリリースノート(*1)を参照。個人的には、影響の非常に大きいものはない印象(*1) https://www.postgresql.org/docs/18/release-18.html#RELEASE-18-MIGRATION
© 2025 NTT DATA Japan Corporation 21リリースノートに記載されていない非互換・仕様変更pg_trgmでのKEEPONLYALNUMの廃止• マルチバイト文字を含む文字列をpg_trgmで効率的に全文検索するために、ソース中でKEEPONLYALNUMを無効化してpg_trgmを再コンパイルするテクニックが従来あったが、v18でKEEPONLYALNUMが廃止され、このテクニックが利用できなくなる(*1)• このテクニックを使っている場合は、v18以降では、マルチバイト文字に対応した他の全文検索モジュール(pg_bigmなど)への移行を検討する必要がある(*1) https://qiita.com/fujii_masao/items/53123f8829cd09d49bf3(*2) https://lets.postgresql.jp/documents/technical/text-processing/3Let's POSTGRES 「テキスト検索の方法とインデックス」(*2)
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)

Recommended

PDF
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
PDF
PostgreSQL開発コミュニティに参加しよう! (オープンデベロッパーズカンファレンス(ODC)2024 発表資料)
PDF
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
PDF
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLの運用・監視にまつわるエトセトラ
PDF
Vacuum徹底解説
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
使ってみませんか?pg_hint_plan
PPTX
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PDF
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
PDF
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
NTT DATA と PostgreSQL が挑んだ総力戦
PPTX
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PDF
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
PPTX
PostgreSQLのgitレポジトリから見える2021年の開発状況(第30回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PPTX
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PDF
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PPTX
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
PDF
PostgreSQL 15 開発最新情報
PDF
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
PDF
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
PPTX
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
PDF
pg_trgmと全文検索

More Related Content

PDF
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
PDF
PostgreSQL開発コミュニティに参加しよう! (オープンデベロッパーズカンファレンス(ODC)2024 発表資料)
PDF
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
PDF
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLの運用・監視にまつわるエトセトラ
PDF
Vacuum徹底解説
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
PostgreSQL開発コミュニティに参加しよう! (オープンデベロッパーズカンファレンス(ODC)2024 発表資料)
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの運用・監視にまつわるエトセトラ
Vacuum徹底解説
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)

What's hot

PDF
使ってみませんか?pg_hint_plan
PPTX
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PDF
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
PDF
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
NTT DATA と PostgreSQL が挑んだ総力戦
PPTX
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PDF
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
PPTX
PostgreSQLのgitレポジトリから見える2021年の開発状況(第30回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PPTX
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PDF
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PPTX
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
PDF
PostgreSQL 15 開発最新情報
PDF
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
PDF
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
使ってみませんか?pg_hint_plan
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA と PostgreSQL が挑んだ総力戦
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
PostgreSQLのgitレポジトリから見える2021年の開発状況(第30回PostgreSQLアンカンファレンス@オンライン 発表資料)
アーキテクチャから理解するPostgreSQLのレプリケーション
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
PostgreSQL 15 開発最新情報
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)

Similar to PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)

PPTX
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
PDF
pg_trgmと全文検索
PPTX
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
PDF
JPUGしくみ+アプリケーション勉強会(第20回)
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PPTX
SQLチューニング入門 入門編
PPT
20090107 Postgre Sqlチューニング(Sql編)
PDF
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
PDF
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PDF
より深く知るオプティマイザとそのチューニング
PDF
PostgreSQL 9.5 新機能紹介
PDF
SQL Server チューニング基礎
PDF
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PDF
PostgreSQL 12の話
PDF
Introduction of Oracle Database Architecture
PDF
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
PDF
RailsエンジニアのためのSQLチューニング速習会
PDF
2018年度 若手技術者向け講座 インデックス
 
PDF
2019年度若手技術者向け講座 インデックス
 
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
pg_trgmと全文検索
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
JPUGしくみ+アプリケーション勉強会(第20回)
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
SQLチューニング入門 入門編
20090107 Postgre Sqlチューニング(Sql編)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
より深く知るオプティマイザとそのチューニング
PostgreSQL 9.5 新機能紹介
SQL Server チューニング基礎
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PostgreSQL 12の話
Introduction of Oracle Database Architecture
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
RailsエンジニアのためのSQLチューニング速習会
2018年度 若手技術者向け講座 インデックス
 
2019年度若手技術者向け講座 インデックス
 

More from NTT DATA Technology & Innovation

PDF
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
PDF
SAFe実践から見えた、フレームワークより大切な組織変革の道程(Scrum Fest Sendai 2025 発表資料)
PDF
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
PDF
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
PDF
2025年現在のNewSQL (最強DB講義 #36 発表資料)
PDF
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
PDF
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
PDF
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
PDF
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
PDF
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PDF
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
PDF
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
PDF
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
PDF
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
PDF
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
PDF
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PDF
アウトプット100回!YOWフレームワークで実践するふりかえりとその効果 (XP祭り2024 登壇資料)
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
SAFe実践から見えた、フレームワークより大切な組織変革の道程(Scrum Fest Sendai 2025 発表資料)
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
2025年現在のNewSQL (最強DB講義 #36 発表資料)
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)
アウトプット100回!YOWフレームワークで実践するふりかえりとその効果 (XP祭り2024 登壇資料)

PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)

  • 1.
    © 2025 NTTDATA Japan Corporation© 2025 NTT DATA Japan Corporationdb tech showcase 2025PostgreSQL18新機能紹介2025年7月11日NTTデータ 藤井 雅雄
  • 2.
    © 2025 NTTDATA Japan Corporation 2自己紹介藤井 雅雄Database Technical Lead @ NTTデータデータベース研究開発PostgreSQL 技術支援PostgreSQLコミッタレプリケーションWAL圧縮バックアップ進捗確認pg_bigm(全文検索モジュール) コミッタfujii_masaoMasaoFujii
  • 3.
    © 2025 NTTDATA Japan Corporation 3講演にあたって講演資料は、NTTデータのSlideShareアカウント上で公開予定です。https://www.slideshare.net/nttdata-tech2025年7月11日時点で、バージョン18のブランチに含まれている新機能を取り上げます。バージョン18のリリースまでに仕様の変更や機能の取り消しの可能性があります。講演資料に掲載の検証結果は、ノートPC上の簡易計測で取得したものです。環境や条件などによっては、異なる検証結果になる可能性があるためご了承ください。
  • 4.
    © 2025 NTTDATA Japan Corporation 4PostgreSQLバージョン182025年秋頃リリース予定のPostgreSQL最新メジャーバージョン211個の新機能や変更点 (*1)• 非同期I/Oの採用により特定処理で最大2〜3倍の性能向上• UUID v7を生成する関数の導入• OAuth 2.0によるユーザ認証のサポートなどバージョン18新機能の参考資料• PostgreSQL 18 新機能検証結果 (Beta 1)https://github.com/nori-shinoda/documents/blob/main/postgresql_18_beta1_new_features_ja_20250527-1.pdf• PostgreSQL 18 Release Notehttps://www.postgresql.org/docs/18/release-18.htmlhttps://github.com/postgres/postgres/blob/REL_18_STABLE/doc/src/sgml/release-18.sgml(*1) 2025年7月11日時点のリリースノートから、新機能や変更点を独自にカウント
  • 5.
    © 2025 NTTDATA Japan Corporation 5© 2025 NTT DATA Japan Corporation継続的なパフォーマンスの改善
  • 6.
    © 2025 NTTDATA Japan Corporation 6Index Skip Scanv18から、マルチカラムインデックスの先頭以外のカラムの一致検索で、Index Skip Scanのインデックス検索が可能に!v17とv18でSQL実行プランを比較-- レコード件数10万件のテーブル tbl を作成して、カラム col1 と col2 にマルチカラムインデックスを作成する。=# CREATE TABLE tbl (col1 INT, col2 INT);=# CREATE INDEX idx ON tbl (col1, col2);-- Index Skip Scanが選ばれやすいように、先頭カラム col1 のカーディナリティは低くする。=# INSERT INTO tbl SELECT n % 10, n FROM generate_series(1, 100000) n;=# VACUUM ANALYZE tbl;-- マルチカラムインデックスのカラム col1 と col2 のそれぞれで一致検索する。=# EXPLAIN ANALYZE SELECT * FROM tbl WHERE col1 = 5;=# EXPLAIN ANALYZE SELECT * FROM tbl WHERE col2 = 5;
  • 7.
    © 2025 NTTDATA Japan Corporation 7Index Skip ScanIndex Only Scan using idx on tbl (cost=0.29..293.27 rows=10113 width=8) (actualtime=0.079..3.770 rows=10000 loops=1)Index Cond: (col1 = 5)Heap Fetches: 0Planning Time: 0.136 msExecution Time: 4.815 msIndex Only Scan using idx on tbl (cost=0.29..284.84 rows=9860 width=8) (actualtime=0.153..3.757 rows=10000.00 loops=1)Index Cond: (col1 = 5)Heap Fetches: 0Index Searches: 1Buffers: shared hit=30Planning Time: 0.141 msExecution Time: 4.930 msv17v18先頭カラムの一致検索では、v17とv18ともにIndex Scanを選択=# EXPLAIN ANALYZE SELECT * FROM tbl WHERE col1 = 5;
  • 8.
    © 2025 NTTDATA Japan Corporation 8Index Skip ScanSeq Scan on tbl (cost=0.00..1693.00 rows=1 width=8) (actual time=0.034..23.397 rows=1loops=1)Filter: (col2 = 5)Rows Removed by Filter: 99999Planning Time: 0.125 msExecution Time: 23.424 msIndex Only Scan using idx on tbl (cost=0.29..47.31 rows=1 width=8) (actual time=0.085..0.123rows=1.00 loops=1)Index Cond: (col2 = 5)Heap Fetches: 0Index Searches: 11Buffers: shared hit=23Planning Time: 0.240 msExecution Time: 0.161 msv17v18先頭以外のカラムの一致検索では、v17でSeq Scan、v18でIndex Scan(Index Skip Scan)を選択=# EXPLAIN ANALYZE SELECT * FROM tbl WHERE col2 = 5;
  • 9.
    © 2025 NTTDATA Japan Corporation 9Index Skip Scan-- 先頭カラムをユニークな値にしてカーディナリティを高くする。=# TRUNCATE tbl;=# INSERT INTO tbl SELECT n, n FROM generate_series(1, 100000) n;=# VACUUM ANALYZE tbl;Seq Scan on tbl (cost=0.00..1693.00 rows=1 width=8) (actual time=0.038..23.739 rows=1.00loops=1)Filter: (col2 = 5)Rows Removed by Filter: 99999Buffers: shared hit=443Planning Time: 0.127 msExecution Time: 23.772 msv18前方のカラムのカーディナリティが高いほど、Index Skip Scanのコストが高くなり、Seq Scanが選ばれやすくなる=# EXPLAIN ANALYZE SELECT * FROM tbl WHERE col2 = 5;
  • 10.
    © 2025 NTTDATA Japan Corporation 10Index Skip Scan-- 先頭以外のカラムの値も変えてみると、=# TRUNCATE tbl;=# INSERT INTO tbl SELECT n % 10, n % 1000 FROM generate_series(1, 100000) n;=# VACUUM ANALYZE tbl;Index Only Scan using idx on tbl (cost=0.29..1147.29 rows=100 width=8) (actualtime=0.524..1.058 rows=100 loops=1)Index Cond: (col2 = 5)Heap Fetches: 0Buffers: shared hit=99Planning Time: 0.146 msExecution Time: 1.110 msv17先頭以外のカラムの一致検索で、v17でもIndex Full Scanによるインデックス検索が可能なことも=# EXPLAIN (ANALYZE on, BUFFERS on) SELECT * FROM tbl WHERE col2 = 5;
  • 11.
    © 2025 NTTDATA Japan Corporation 11Index Skip ScanIndex Only Scan using idx on tbl (cost=0.29..1147.29 rows=100 width=8) (actualtime=0.524..1.058 rows=100 loops=1)Index Cond: (col2 = 5)Heap Fetches: 0Buffers: shared hit=99Planning Time: 0.146 msExecution Time: 1.110 msIndex Only Scan using idx on tbl (cost=0.29..48.96 rows=100 width=8) (actualtime=0.089..0.163 rows=100.00 loops=1)Index Cond: (col2 = 5)Heap Fetches: 0Index Searches: 11Buffers: shared hit=23Planning Time: 0.138 msExecution Time: 0.213 msv17先頭以外のカラムの一致検索で、Index Full Scan (v17) より Index Skip Scan (v18) の方が効率的になりやすい=# EXPLAIN (ANALYZE on, BUFFERS on) SELECT * FROM tbl WHERE col2 = 5;v18
  • 12.
    © 2025 NTTDATA Japan Corporation 12EXPLAIN出力内容の違いIndex Only Scan using idx on tbl (cost=0.29..293.27 rows=10113 width=8) (actualtime=0.079..3.770 rows=10000 loops=1)Index Cond: (col1 = 5)Heap Fetches: 0Planning Time: 0.136 msExecution Time: 4.815 msIndex Only Scan using idx on tbl (cost=0.29..284.84 rows=9860 width=8) (actual time=0.153..3.757rows=10000.00 loops=1)Index Cond: (col1 = 5)Heap Fetches: 0Index Searches: 1Buffers: shared hit=30Planning Time: 0.141 msExecution Time: 4.930 msv17v18=# EXPLAIN ANALYZE SELECT * FROM tbl WHERE col1 = 5;• actual rowsを小数点2桁まで出力(ループ回数と掛けたときに、より正確な件数を算出できるように)• インデックス検索回数「Index Searches」を出力• EXPLAIN ANALYZEでBUFFERSオプションがデフォルト有効に
  • 13.
    © 2025 NTTDATA Japan Corporation 13GINインデックスの並列作成v17ではB-treeとBRINのインデックスを並列作成できるが、v18からはGINインデックスも並列作成可能に!• CREATE INDEXでもREINDEXでも並列作成可能• 並列度は以下のとおり決定。最大値はmax_parallel_maintenance_workersで設定➢ テーブルに設定されたparallel_workersの値から並列度を決定➢ (parallel_workersが未設定の場合) PostgreSQLがコストモデルに基づいて並列度を決定約430万件の日本語Wikipediaタイトルデータを使って、pg_bigmによる(GINインデックスベースの)全文検索インデックスの作成時間を計測(*1)並列度 インデックス作成時間 補足1 66.5 秒5 28.7 秒パラレルワーカーが4つ起動され、バックエンドと合わせて並列度5でインデックスを並列作成(*1) https://qiita.com/fujii_masao/items/e37e3733273eab7f0621
  • 14.
    © 2025 NTTDATA Japan Corporation 14© 2025 NTT DATA Japan Corporationアプリケーション開発の利便性向上
  • 15.
    © 2025 NTTDATA Japan Corporation 15仮想生成列生成列のうち、v17では格納生成列を利用でき、v18からは仮想生成列も利用可能に!生成列は、常に他のカラムから値が計算される特別なカラム。例えば、-- 身長と体重からBMIを自動的に計算したい=# CREATE TABLE players (height numeric,weight numeric,bmi numeric GENERATED ALWAYS AS (weight / (height * height)));=# INSERT INTO players VALUES (1.67, 65), (2.06, 98);=# SELECT * FROM players ;height | weight | bmi--------+--------+---------------------1.67 | 65 | 23.30668005306751772.06 | 98 | 23.0935997737769818
  • 16.
    © 2025 NTTDATA Japan Corporation 16仮想生成列格納生成列• GENERATED ALWAYS AS ( 計算式 ) STORED• v12以降で利用可能• レコードの挿入・更新時に値が計算され、値の実データは保存される仮想生成列• GENERATED ALWAYS AS ( 計算式 ) [ VIRTUAL ]• v18以降で利用可能• レコードの参照時に値が計算され、値の実データは保存されない• 代表的な制約事項➢ インデックスを作成できない➢ ユニーク制約や外部キー制約を設定できない➢ プランナ統計情報を収集できない (行数推定が誤りやすい)➢ 論理レプリケーションできない➢ ユーザ定義関数・演算子を計算式に指定できない (指定できるのはPostgreSQL組み込みの関数・演算子のみ)
  • 17.
    © 2025 NTTDATA Japan Corporation 17RETURNING OLD / NEWv18から、DMLのRETURNING句でOLD(更新後レコード)とNEW(更新後レコード)を指定可能に!-- v17以前では、更新時のRETURNINGで参照できるのは更新後レコードのみ=# UPDATE login SET last_login = now() WHERE id = 18 RETURNING *;id | last_login----+----------------------------18 | 2025-07-10 22:51:42.458511-- v18以降では、OLDを指定して更新前レコードも参照可能=# UPDATE login SET last_login = now() WHERE id = 18 RETURNING OLD.*, NEW.*;id | last_login | id | last_login----+----------------------------+----+----------------------------18 | 2023-06-23 20:33:40.363248 | 18 | 2025-07-10 22:51:42.458511v17v18
  • 18.
    © 2025 NTTDATA Japan Corporation 18RETURNING OLD / NEWv18から、DMLのRETURNING句でOLD(更新後レコード)とNEW(更新後レコード)を指定可能に!DML 処理種別RETURNINGで返却されるレコード指定なし OLD NEWINSERTMERGE挿入 挿入レコード NULL 挿入レコードINSERT ON CONFLICTUPDATEMERGE更新 更新後レコード 更新前レコード 更新後レコードDELETEMERGE削除 削除前レコード 削除前レコード NULLv17以前で利用可能v18以降で利用可能
  • 19.
    © 2025 NTTDATA Japan Corporation 19© 2025 NTT DATA Japan Corporation非互換・仕様変更
  • 20.
    © 2025 NTTDATA Japan Corporation 20非互換・仕様変更v18から、DBユーザのMD5パスワードが非推奨に(将来的に削除予定)• MD5パスワードを設定すると、警告メッセージがログ出力される。この警告メッセージは、md5_password_warningsを無効化することで抑制可能=# SET password_encryption TO md5;=# passwordEnter new password for user "postgres":Enter it again:WARNING: setting an MD5-encrypted passwordDETAIL: MD5 password support is deprecated and will be removed in a future release of PostgreSQL.HINT: Refer to the PostgreSQL documentation for details about migrating to another password type.他の非互換・仕様変更はリリースノート(*1)を参照。個人的には、影響の非常に大きいものはない印象(*1) https://www.postgresql.org/docs/18/release-18.html#RELEASE-18-MIGRATION
  • 21.
    © 2025 NTTDATA Japan Corporation 21リリースノートに記載されていない非互換・仕様変更pg_trgmでのKEEPONLYALNUMの廃止• マルチバイト文字を含む文字列をpg_trgmで効率的に全文検索するために、ソース中でKEEPONLYALNUMを無効化してpg_trgmを再コンパイルするテクニックが従来あったが、v18でKEEPONLYALNUMが廃止され、このテクニックが利用できなくなる(*1)• このテクニックを使っている場合は、v18以降では、マルチバイト文字に対応した他の全文検索モジュール(pg_bigmなど)への移行を検討する必要がある(*1) https://qiita.com/fujii_masao/items/53123f8829cd09d49bf3(*2) https://lets.postgresql.jp/documents/technical/text-processing/3Let's POSTGRES 「テキスト検索の方法とインデックス」(*2)

[8]ページ先頭

©2009-2025 Movatter.jp