
PostgreSQL 19ベータ1の新機能と既定値の変更
PostgreSQL 19 Beta 1が2026年6月4日に公開されました。コア機能は出そろっていますが本番利用は想定されておらず、追加のベータとリリース候補を経て、正式版は2026年9月から10月ごろに出る見込みです。PostgreSQL 18で入った非同期I/Oの土台を引き継ぎ、その上に機能を積み増した版にあたります。
開発者がすぐ使える新機能
ON CONFLICT DO SELECTは、競合した行をそのまま取り出せるようにします。これまで「あれば取得、なければ挿入」を1文で書こうとすると、競合時にDO UPDATEでダミーの更新をかけ、不要な不可視タプルを生んでいました。新しい構文はその回避策を置き換えます。
INSERT INTO users (email, name) VALUES ('a@example.com', 'A')
ON CONFLICT (email) DO SELECT
RETURNING *;REPACKは、テーブルの再編成を1つのコマンドにまとめます。従来VACUUM FULLとCLUSTERに分かれていた処理を統合し、CONCURRENTLYを付ければ排他ロックを取らずに再編成できます。使うレプリケーションスロット数はmax_repack_replication_slotsで制御します。
REPACK my_table CONCURRENTLY;COPY TOがJSONを直接出力できるようになりました。既定では1行1オブジェクトのNDJSON形式で、FORCE_ARRAYを付けると配列として出します。
COPY my_table TO STDOUT WITH (FORMAT json);
COPY my_table TO STDOUT WITH (FORMAT json, FORCE_ARRAY);SQL/PGQも入りました。これはSQL:2023のプロパティグラフクエリで、既存のリレーショナルテーブルに対してGRAPH_TABLE句でパターンマッチングを書けます。専用のストレージへ移す必要はなく、テーブルをグラフとして問い合わせます。
運用と性能にかかわる変更
autovacuumが並列ワーカーを使えるようになりました。autovacuum_max_parallel_workersでインデックス処理の並列度を決めます。並列化はメモリを食うため、消費量がワーカー数とmaintenance_work_memの積で膨らむ点に注意がいります。どのテーブルを優先して掃除するかは、新しいビューpg_stat_autovacuum_scoresでスコアを確認できます。
非同期I/Oは、PostgreSQL 18のio_method=workerを土台に、負荷へ応じてワーカー数を自動で増減するようになりました。io_min_workersやio_max_workersなどのパラメータで範囲を決めます。実行計画ではEXPLAIN ANALYZEのI/O統計から非同期I/Oの様子を読めます。
外部キー制約のチェックは、INSERT時の性能が公式ニュースで最大2倍になったとされています。データチェックサムは、クラスタを止めて初期化し直さなくても、オンラインで有効化と無効化を切り替えられるようになりました。
プランナーの判断を安定させたい場合は、新しいcontrib拡張のpg_plan_adviceを使います。SQLにコメントを書く代わりにGUC設定で指示を与え、アプリのコードを変えずに実行計画を固定できます。
CREATE EXTENSION pg_plan_advice;既定値と互換性の変更
メジャー更新なので、既定値の変更と削除がいくつかあります。とくにJITが既定で無効になった点は、分析系の重いクエリで性能差として現れることがあるので、必要なら明示的に有効化します。
| 項目 | 変更 | 影響 |
|---|---|---|
jit | on から off | 分析クエリで遅くなる場合がある。必要時に SET jit = on |
default_toast_compression | pglz から lz4 | 新規TOASTデータがlz4圧縮になる。既存データは不変 |
max_locks_per_transaction | 64 から 128 | ロック構造の変更による既定の引き上げ |
log_lock_waits | off から on | ロック待ちが自動でログに残る |
| RADIUS認証 | 削除 | 利用中なら別の認証方式へ移行が必要 |
inet / cidr の既定opclass | GiSTへ変更 | 該当インデックスがあると pg_upgrade が失敗する |
| C言語のビルド要件 | C99 から C11 | 拡張機能の再コンパイルが必要 |
このほか、standard_conforming_stringsがサーバー側で強制され、MULE_INTERNALエンコーディングが廃止されました。データベース名やロール名に改行文字を含むクラスタはpg_upgradeに失敗するため、事前に確認します。アップグレードはpg_dumpallによるダンプとリストア、pg_upgrade、論理レプリケーションのいずれかで行います。
試すときの前提
Beta 1は本番向けではありません。正式版までに仕様が動く余地があり、既定値の変更や削除も含むため、検証は新しい環境で行います。手元のアプリを移すときは、JITの無効化やTOASTの圧縮方式の変更が性能に与える影響を測り、pg_upgradeが失敗する条件に当たっていないかを先に確かめておきます。
外部キーチェックの高速化の具体的な実装内容や、I/Oワーカーの既定値といった細部は、リリースノートに数値が明示されていない部分もあります。本番採用の判断材料にするなら、正式版のリリースノートで確定値を確認してください。


