---
title: PostgreSQL 19 の概要
tags:  #postgresql  
author: [Haruka Takatsuka](https://www.docswell.com/user/harukat)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/4EMYQD36EW.jpg?width=480
description: PostgreSQL 19 の概要 by Haruka Takatsuka
published: June 13, 26
canonical: https://www.docswell.com/s/harukat/KGN2W9-2026-06-13-154358
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/4EMYQD36EW.jpg)

PostgreSQL 19 の概要
2026-06-13
日本 PostgreSQL ユーザ会 総会併設セミナー
JPUG 理事 / SRA OSS K.K. 高塚 遥
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/PER984QNJ9.jpg)

本講演について
●
beta リリースされた PostgreSQL 19 について、
ざっくりお話します
●
大部分の新機能について詳細な検証評価は未実施です
●
●
一部は beta 以前に確認した内容です
😢
2 月に CommitFest エントリに基づいて講演しましたが、
（例年通りながら） 見送りになった機能も多数でした
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/P7XQ8258EX.jpg)

グラフ問い合わせ SQL/PGQ
●
表からグラフにマッピングして、グラフとして問合せ
db=# CREATE TABLE usr (id int PRIMARY KEY, name text);
db=# CREATE TABLE follows (id1 int, id2 int,
PRIMARY KEY(id1, id2));
《・・・適当にデータを充填・・・》
db=# CREATE PROPERTY GRAPH g1
VERTEX TABLES (usr KEY (id) PROPERTIES (id, name))
EDGE TABLES (follows
SOURCE KEY (id1) REFERENCES usr(id)
DESTINATION KEY (id2) REFERENCES usr(id));
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/37K9KM6L7D.jpg)

グラフ問い合わせ SQL/PGQ
db=# SELECT * FROM GRAPH_TABLE (g1 MATCH
(u1 IS usr)-[f1 IS follows]-&gt;(u2 IS usr)
-[f2 IS follows]-&gt;(u1 IS usr)
WHERE u1.id &lt; u2.id COLUMNS (u1.name, u2.name));
name
| name
---------+--------name25 | name54
相互フォローのユーザの
組を調べる問い合わせ
name45 | name88
(2 rows)
●
N 回～無限回リンクを手繰る構文はまだ使えない
→ 今のところは再帰問合せを置き換えできない
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/LJ3WZY66J5.jpg)

テンポラルテーブル
●
レコードに有効期間を付加する DB 設計パターン
uid
name
valid_at
0
root
[&quot;2026-04-01&quot;,)
26
postgres
[&quot;2026-05-10&quot;,)
27
mysql
[&quot;2026-04-15&quot;,&quot;2026-05-01&quot;)
1000
taro
[&quot;2026-04-01&quot;,&quot;2026-05-01&quot;)
1001
jiro
[&quot;2026-06-01&quot;,)
daterange 型
tsrange 型
などが利用可
db1=# SELECT * FROM t_user WHERE valid_at @&gt; &#039;2026-06-13&#039;::date;
uid |
name
|
valid_at
------+----------+--------------0 | root
| [2026-04-01,)
26 | postgres | [2026-05-10,)
1001 | jiro
| [2026-06-01,)
(3 rows)
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/8JDKR5VMEG.jpg)

テンポラルテーブル
●
PG18: WITHOUT OVERLAPS サポート
CREATE EXTENSION btree_gist;
範囲型の他、
マルチ範囲型
でも可
CREATE TABLE t_user (
uid int, name text, valid_at daterange,
PRIMARY KEY (uid, valid_at WITHOUT OVERLAPS));
●
PG19: FOR PORTION OF サポート
db1=# UPDATE t_user
FOR PORTION OF valid_at FROM &#039;2026-06-13&#039; TO NULL
SET name = &#039;jiro2&#039; WHERE uid = 1001;
UPDATE 1
マルチ範囲型だと
構文が少し異なる
db1=# SELECT * FROM t_user WHERE uid = 1001;
uid | name |
valid_at
------+-------+------------------------1001 | jiro2 | [2026-06-13,)
1001 | jiro | [2026-06-01,2026-06-13)
マルチ範囲型なら、
行数増加をいくらか
(2 rows)
6
抑制できる


# Page. 7

![Page Image](https://bcdn.docswell.com/page/VEPKWGVQ78.jpg)

ストリーミングレプリケーション拡張
●
WAIT FOR LSN &#039;...&#039; WITH ( MODE ... ) ;
スタンバイとして指定 LSN までの replay を待機
●
スタンバイとして指定 LSN までの flush を待機
●
スタンバイとして指定 LSN までの write を待機
●
プライマリとして指定 LSN までの WAL flush を待機
●
非同期レプリケーションで、特定処理だけは最新データを
参照したいが、参照処理をプライマリで実行したくない
●
スタンバイを所定 LSN まで待ってから、停止 or 昇格
●
synchronous_commit = off 、 wal_writer_delay= 長め だけど、
時には確実な書き込みをしたい
●
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/27VV86ZP7Q.jpg)

論理レプリケーション拡張
●
シーケンス対応
●
パブリケーションで ALL SEQUENCES を指定可能
（個別指定はできない、シーケンス全部か無しか）
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/5JGL5N4Q7L.jpg)

pg_plan_advice
db=# EXPLAIN (COSTS OFF, PLAN_ADVICE)
「ヒント付与案を提示」
SELECT * FROM tfact f
＋
JOIN tdim d ON f.dim_id = d.id;
「ヒント付与機能」
QUERY PLAN
-----------------------------------Hash Join
Hash Cond: (f.dim_id = d.id)
-&gt; Seq Scan on tfact f
-&gt; Hash
実行計画の
-&gt; Seq Scan on tdim d
ヒント候補を
出力
Generated Plan Advice:
JOIN_ORDER(f d)
HASH_JOIN(d)
実行計画の
SEQ_SCAN(f d)
ヒントを指定
NO_GATHER(f d)
db=# SET pg_plan_advice.advice = &#039;JOIN_ORDER(f d)&#039;;
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/47QYZQGWEP.jpg)

pg_stash_advice
●
plan advice を貯めて、 query id に基づき自動適用
shared_preload_libraries = &#039;pg_stash_advice,pg_plan_advice&#039;
compute_query_id = on
db=# CREATE EXTENSION pg_stash_advice;
db=# SELECT * FROM pg_create_advice_stash(&#039;mystash1&#039;);
db=# SELECT pg_set_stashed_advice(&#039;mystash1&#039;, &#039;8128359337089801368&#039;,
&#039;INDEX_SCAN(t_user t_user_pkey)&#039;);
db=# SET pg_stash_advice.stash_name TO &#039;mystash1&#039;;
db=# explain (verbose) SELECT * FROM t_user WHERE valid_at @&gt; now()::date;
QUERY PLAN
---------------------------------------------------------------------------Index Scan using t_user_pkey on public.t_user (cost=0.14..8.15 rows=1 widt
Output: uid, name, valid_at
Index Cond: (t_user.valid_at @&gt; (now())::date)
Query Identifier: 8128359337089801368
Supplied Plan Advice:
INDEX_SCAN(t_user t_user_pkey) /* matched */
10
(6 rows)


# Page. 11

![Page Image](https://bcdn.docswell.com/page/KE4W3N51J1.jpg)

REPACK コマンド
空き領域回収コマンド
●
CLUSTER 、 VACUUM FULL コマンドを統合
●
CONCURRENTLY オプションで排他ロック
（ ACCESS EXCLUSIVE ロック）取得範囲を最小化
●
pg_repack 、 pg_squeeze と似た実現方式
●
クリーンなコピーを作って、切り替え
●
再構築中の変更差分はロジカルデコーディングで採取
●
db=# REPACK (CONCURRENTLY) tbl1 USING INDEX tbl1_idx1;
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/L71Y15W5JG.jpg)

パーティションの併合／分割
●
ALTER TABLE ... MERGE/SPLIT PARTITIONS
●
v17 beta1 で 1 度含まれて、取り下げられたもの
（併合）
ALTER TABLE t_log MERGE PARTITIONS (t_log_1, t_log_2)
INTO t_log_1_2;
HASH パー
ティション
は非対応
（分割）
ALTER TABLE t_log SPLIT PARTITION t_log_1_2
INTO (
PARTITION t_log_1 FOR VALUES FROM (10000) TO (20000),
PARTITION t_log_2 FOR VALUES FROM (20000) TO (30000));
LIST パーティションなら、
FOR VALUES IN (&#039;…&#039;,&#039;…&#039;,… )
となる
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/G7WG856WE2.jpg)

Autovacuum スコア
●
テーブルとコンポーネントごとにスコアが付く
処理優先順を決める
●
pg_stat_autovacuum_scores ビューで参照できる
●
コンポーネントは :
●
–
●
XID 周回、 MXID 周回、デッドタプル、行挿入、プランナ統計
コンポーネントごとにスコア調整する係数の設定 :
–
autovacuum_freeze_score_weight
– autovacuum_multixact_freeze_score_weight
– autovacuum_vacuum_score_weight
– autovacuum_vacuum_insert_score_weight
– autovacuum_analyze_score_weight
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/4JZL8NY2E3.jpg)

モニタリングビューの拡充
●
pg_stat_lock ビュー追加
●
pg_stat_recovery ビュー追加
●
pg_dsm_registry_allocations ビュー追加
●
pg_stat_replication_slots.mem_exceeded_count 列追加
●
pg_stat_all_*.stats_reset 列追加
●
pg_stat_progress_vacuum.started_by /
pg_stat_progress_analyze.started_by 列追加
●
他に pg_stat_progress_basebackup,pg_stat_wal,
pg_stat_wal_receiver.status,pg_stats,
pg_stats_ext_exprs,pg_available_extensions,
pg_stats_ext,pg_stats_ext_exprs の変更拡充
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/YE6WP8R6EV.jpg)

pg_stat_lock
ロック待ち
の累計統計
db1=# SELECT locktype, waits, wait_time, fastpath_exceeded
FROM pg_stat_lock;
locktype
| waits | wait_time | fastpath_exceeded
------------------+-------+-----------+------------------relation
|
11 |
113057 |
0
extend
|
0 |
0 |
0
frozenid
|
0 |
0 |
0
page
|
0 |
0 |
0
tuple
|
0 |
0 |
0
transactionid
|
3 |
38415 |
0
virtualxid
|
0 |
0 |
0
spectoken
|
0 |
0 |
0
object
|
0 |
0 |
0
userlock
|
0 |
0 |
0
advisory
|
0 |
0 |
0
applytransaction |
0 |
0 |
0
(12 rows)
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/GE5MK985E4.jpg)

オンライン設定変更
●
wal_level
●
「 logical 」レベル書き出しの有無の変更がオンラインで
–
●
(WAL に書き出す情報量 )
論理レプリケーションスロットが無ければ出力を自動縮減
データチェックサム
pg_enable_data_checksums() 、
pg_disable_data_checksums() 関数で切替
●
pg_stat_progress_data_checksums ビュー
●
–
有効化（無効化）している途中の状態がある
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/9729W2KGJR.jpg)

COPY FROM の SIMD 化（性能向上）
CSV
からの 10 万行 COPY FROM ローディング所要時間
3500
20 ％程度の高速化
3000
他に
encode(..,&#039;hex&#039;)
decode(..,&#039;hex&#039;)
も SIMD 化
2500
ms
2000
1500
1000
500
0
適用前
SIMD
化適用後
・数値、テキスト、タイムスタンプ型で計 30 列のテーブルで
一行あたり 300 バイト程度 × 10 万行
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/DJY4LYNG7M.jpg)

各種高速化
●
各種のプランナ改善
●
基数ソート
●
●
整数等の高速ソート
タプルデフォーム高速化
●
列が多いテーブルのスキャン性能が向上
●
外部キー制約検査の高速化
●
タイミング計測の高速化
●
auto_explain.log_timing = on の負荷軽減
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/V7NY4PX8E8.jpg)

その他機能追加
●
バイナリ pg_dumpall
●
GROUP BY ALL
●
jsonpath メソッド追加
●
タイムスタンプを返す random() 関数
●
NULL ならエラーを出す error_on_null() 関数
●
COPY TO で JSON 形式
●
COPY FROM で複数行ヘッダ、 ON_ERROR SET_NULL
●
CHECKPOINT (FLUSH_UNLOGGED, MODE SPREAD)
●
AIX 再サポート
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/YJ9PQ38X73.jpg)

ひとまず以上
●
他にも多数の性能改善、機能追加があります
●
●
「わたしが開発に携わった項目が無いぞ」という方、
申し訳ありません。
SRA OSS K.K. で、例年通り詳しいレポートを作成中です。
20


