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
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PDF
Vacuum徹底解説
PDF
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
pg_stat_activityの不可解な観測結果の謎 (第47回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
PPTX
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PDF
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
PDF
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLの関数属性を知ろう
PPTX
企業システムにSELinuxを適用するときの検討事項
PDF
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
PDF
PostgreSQL: XID周回問題に潜む別の問題
PDF
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PDF
Active directory のセキュリティ対策 130119
PDF
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL 15 開発最新情報
PDF
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
PDF
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PDF
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
hbstudy# 28 SELinux HandsOn 公開版
PDF
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLレプリケーション徹底紹介
PPTX
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PDF
auto_explainのススメ (第48回 PostgreSQLアンカンファレンス 発表資料)
PPTX
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
PDF
pg_trgmと全文検索

More Related Content

PDF
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PDF
Vacuum徹底解説
PDF
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
pg_stat_activityの不可解な観測結果の謎 (第47回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
PPTX
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
Vacuum徹底解説
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_stat_activityの不可解な観測結果の謎 (第47回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)

What's hot

PPTX
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PDF
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
PDF
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLの関数属性を知ろう
PPTX
企業システムにSELinuxを適用するときの検討事項
PDF
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
PDF
PostgreSQL: XID周回問題に潜む別の問題
PDF
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PDF
Active directory のセキュリティ対策 130119
PDF
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL 15 開発最新情報
PDF
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
PDF
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PDF
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
hbstudy# 28 SELinux HandsOn 公開版
PDF
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLレプリケーション徹底紹介
PPTX
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PDF
auto_explainのススメ (第48回 PostgreSQLアンカンファレンス 発表資料)
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの関数属性を知ろう
企業システムにSELinuxを適用するときの検討事項
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
PostgreSQL: XID周回問題に潜む別の問題
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
Active directory のセキュリティ対策 130119
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL 15 開発最新情報
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
B-Treeのアーキテクチャ解説 (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
hbstudy# 28 SELinux HandsOn 公開版
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLレプリケーション徹底紹介
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
auto_explainのススメ (第48回 PostgreSQLアンカンファレンス 発表資料)

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
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PDF
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PDF
より深く知るオプティマイザとそのチューニング
PDF
PostgreSQL 9.5 新機能紹介
PDF
SQL Server チューニング基礎
PDF
PostgreSQL 12の話
PDF
Introduction of Oracle Database Architecture
PDF
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
PDF
RailsエンジニアのためのSQLチューニング速習会
PDF
2018年度 若手技術者向け講座 インデックス
 
PDF
2019年度若手技術者向け講座 インデックス
 
ODP
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
押さえておきたい、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編)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
より深く知るオプティマイザとそのチューニング
PostgreSQL 9.5 新機能紹介
SQL Server チューニング基礎
PostgreSQL 12の話
Introduction of Oracle Database Architecture
まだ統計固定で消耗してるの? - Bind Peek をもっと使おうぜ! 2015 Edition -
RailsエンジニアのためのSQLチューニング速習会
2018年度 若手技術者向け講座 インデックス
 
2019年度若手技術者向け講座 インデックス
 
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto

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
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
PDF
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
PDF
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
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...
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
SAFe実践から見えた、フレームワークより大切な組織変革の道程(Scrum Fest Sendai 2025 発表資料)
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
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...

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