PostgreSQL 19: 今後の機能とコミュニティの期待

PostgreSQL 19: 今後の機能とコミュニティの期待

PostgreSQL 19は、開発者の使い勝手を向上させ、グラフ処理やより効率的なデータ移動へとデータベースの機能を拡張することを目指しています。次期リリースでは、SQLクエリのボイラープレート(定型文)の削減と、バックアップおよびレプリケーションの運用オーバーヘッドの改善に焦点が当てられています。

主要な機能強化

GROUP BY ALL によるクエリ構文の簡素化

PostgreSQL 19では、DuckDBに触発されたGROUP BY ALLが導入されます。これにより、集計されていないすべての列を明示的にリストすることなく、それらですべてグループ化できるようになります。これにより、クエリの冗長性が減少し、複雑なレポートにおける列選択の変更時のエラーを最小限に抑えることができます。

グラフデータベースの統合

このリリースではGRAPH_TABLE構文が導入され、リレーショナルモデル内でのグラフのようなクエリが可能になります。これにより、Neo4jに似た構文を使用してテーブル間でパターンをマッチングさせることができます。ただし、一部のコミュニティメンバーからは、この特定の実装の冗長性とパフォーマンスに関する懸念が示されています。

論理レプリケーションと COPY の改善

COPYコマンドと論理レプリケーションの強化を通じて、運用ワークフローが改善されます。これらの変更は、データ移行やバックアッププロセス中のオーバーヘッド削減を目的としており、大規模なデプロイメントを管理するユーザーにとって共通の課題を解決します。

コミュニティによる技術的批判と不足している機能

計画されている機能は歓迎されていますが、経験豊富なPostgreSQLユーザーは、現在のロードマップにおけるいくつかの重要な欠落を指摘しています。

ストレージエンジンの制限

ますます増大するデータセットを扱うために、ネイティブな列指向ストレージ(columnar storage)への強い需要があります。ユーザーは、Citusのような拡張機能が存在することは知っていますが、ネイティブサポートがあれば、アーキテクチャの複雑さと依存関係のリスクを軽減できると指摘しています。

"As the datasets become bigger and bigger, the limitations of PG's storage are becoming more and more significant. I know there are various extensions... but then you depend on that extension being supported in the future."

さらに、ユーザーは、大量のデータに対して不十分なことが多い現在の行レベル圧縮に代わる、ネイティブなブロック圧縮を要求しています。

時系列データと標準への準拠

一部の開発者は、SQL:2011標準に基づくネイティブなアプリケーションタイム・テンポラルデータ(application-time temporal data)のサポートの欠如を強調しています。これが実現すれば、より堅牢な履歴データの追行が可能になります。

運用およびアーキテクチャ上の要求

プロジェクトの現在の軌道において、いくつかの技術的要件が未解決のままです。

  • In-place Upgrades: コンテナ化(Docker)環境におけるpg_upgradeの複雑さを排除するため、連続するメジャーバージョン間でのネイティブなインプレース・アップグレードの要求があります。
  • Connection Overhead: 同時接続あたりのメモリ使用量が高いことに関する懸念が続いており、より軽量な接続処理の必要性が示唆されています。
  • Synchronous Materialized Views: 複雑なデータシナリオにおいて正確性を確保するため、SQL Serverに似た「インデックス付きビュー(indexed views)」が同期的に更新されることを望む声があります。
  • Pluggable Storage Engines: OLTP、OLAP、またはアペンドオンリーのワークロードを最適化するために、複数のストレージエンジン(例:RocksDB)をサポートするMariaDBスタイルのアーキテクチャへの関心があります。

パフォーマンスに関する懸念

機能の追加にもかかわらず、一部のユーザーはPostgreSQLのプランナーの挙動に対して慎重な姿勢をまましています。具体的には、Row-Level Security (RLS) が原因でプランナーがデフォルトで行ごとのマッチングを行ってしまうことがあり、これが本番環境でのパフォーマンスを大幅に低下させるという報告があります。

Sources