PostgreSQL 17の概要
PostgreSQL 17は、JSONBのSQL/JSON標準準拠、インクリメンタルバックアップ、大幅なパフォーマンス改善を含むメジャーリリースです。
SQL/JSON標準のサポート
JSON_TABLE
JSONデータをリレーショナルテーブルとして扱えます。
SELECT *
FROM JSON_TABLE(
'[{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]',
'$[*]'
COLUMNS (
id INT PATH '$.id',
name TEXT PATH '$.name'
)
) AS users;
-- 結果:
-- id | name
-- ---+------
-- 1 | Alice
-- 2 | Bob
JSON_QUERY / JSON_VALUE
-- JSON_VALUE: スカラー値を取得
SELECT JSON_VALUE(data, '$.user.name') as name
FROM events;
-- JSON_QUERY: JSON値(配列・オブジェクト)を取得
SELECT JSON_QUERY(data, '$.user.tags' WITH WRAPPER) as tags
FROM events;
JSON_EXISTS
-- 条件に一致するJSONが存在するかチェック
SELECT *
FROM products
WHERE JSON_EXISTS(attributes, '$.colors[*] ? (@ == "red")');
インクリメンタルバックアップ
前回のバックアップからの変更分のみをバックアップできます。
# フルバックアップを取得
pg_basebackup -D /backup/base --checkpoint=fast
# インクリメンタルバックアップを取得
pg_basebackup -D /backup/incr1 \
--incremental=/backup/base/backup_manifest
# 復元時にマージ
pg_combinebackup /backup/base /backup/incr1 -o /restore
利点
| 項目 | フルバックアップ | インクリメンタル |
|---|---|---|
| 時間 | 長い | 短い |
| 容量 | 大きい | 小さい |
| 復元 | 簡単 | マージが必要 |
パフォーマンス改善
VACUUMの高速化
PostgreSQL 16 vs 17:
- 大規模テーブルのVACUUM: 最大20倍高速化
- メモリ使用量: 最大20倍削減
I/O最適化
-- 新しいI/O統計
SELECT * FROM pg_stat_io;
-- 結果にはバックエンドタイプごとのI/O統計が含まれる
インデックスの改善
-- BRIN(Block Range Index)の改善
CREATE INDEX ON events USING BRIN (created_at)
WITH (pages_per_range = 32);
-- より効率的なマルチカラムBRIN
新しい機能
MERGE文の拡張
MERGE INTO inventory t
USING new_items s
ON t.product_id = s.product_id
WHEN MATCHED THEN
UPDATE SET quantity = t.quantity + s.quantity
WHEN NOT MATCHED THEN
INSERT (product_id, quantity)
VALUES (s.product_id, s.quantity)
RETURNING *; -- PostgreSQL 17で追加
部分的な集計プッシュダウン
-- パーティションテーブルでの集計が高速化
SELECT date_trunc('month', created_at), COUNT(*)
FROM events -- パーティション化されたテーブル
GROUP BY 1;
新しいシステムビュー
-- 実行中のクエリの進捗
SELECT * FROM pg_stat_progress_copy;
SELECT * FROM pg_stat_progress_basebackup;
論理レプリケーションの改善
フェイルオーバースロット
-- スタンバイサーバーでレプリケーションスロットを同期
ALTER SUBSCRIPTION my_sub
SET (failover = true);
サブスクライバーでの競合解決
-- 競合発生時の動作を設定
ALTER SUBSCRIPTION my_sub
SET (disable_on_error = false);
移行のポイント
# アップグレード前のチェック
pg_upgrade --check
# pg_upgradeでのアップグレード
pg_upgrade \
-b /usr/lib/postgresql/16/bin \
-B /usr/lib/postgresql/17/bin \
-d /var/lib/postgresql/16/main \
-D /var/lib/postgresql/17/main
まとめ
PostgreSQL 17は、SQL/JSON標準への対応、インクリメンタルバックアップ、大幅なパフォーマンス改善により、エンタープライズでの利用がさらに容易になりました。特にJSONデータを扱うアプリケーションでは、新しいJSON関数が大きな恩恵をもたらします。
← 一覧に戻る