PolarDB for PostgreSQL (PostgreSQL 16 互換)が正式にリリースされました。PostgreSQL 16 では、パフォーマンスが大幅に向上しました。特に、パラレルクエリ実行、大量データのロード、および論理レプリケーションにおいて顕著です。また、SQL/JSON 構文の拡張サポート、新しいワークロード監視メトリック、柔軟なクラスタ間アクセス制御ルールなど、開発者と管理者向けの新しい機能も提供されています。
概要
PolarDB for PostgreSQL 16 は、PostgreSQL 16 の機能に加えて、GanosBase 時空間エンジン、グローバルプランキャッシュメカニズム、GBK/GB18030 文字セットなどの機能を提供します。PolarDB for PostgreSQL 16 の最初のリリースでは、データベースの機能を拡張するために、次のプラグインをサポートしています:hll、hypopg、log_fdw、pase、pg_bigm、pg_cron、pg_jieba、pg_repack、pg_similarity、pgtap、pgvector、pldebugger、prefix、roaringbitmap、rum、varbitx、zhparser、ganos。
PolarDB は、命令セットの最適化(SIMD/アトミック操作)、システムレベルの最適化(PGO/BOLT/LTO)、I/O パフォーマンスの向上など、広範なパフォーマンス最適化を実装しています。
詳細については、「PostgreSQL 16 リリースノート」をご参照ください。
リリース日
2024 年 9 月 18 日 (UTC + 08:00)
課金
サブスクリプションと従量課金の課金方法がサポートされています。どちらの方法も、コンピューティングプランとストレージプランを組み合わせて、柔軟なコスト管理を実現できます。詳細については、「課金」をご参照ください。
主な改善点
パフォーマンスの向上
新しいクエリプランナーによって、PostgreSQL 機能のパフォーマンスが向上しました。
FULL結合とRIGHT結合の並列実行をサポートします。DISTINCT句またはORDER BY句を使用する集約に対して、効率的な実行プランを生成します。SELECT DISTINCT クエリのパフォーマンスを向上させるために、増分ソートを導入します。
ウィンドウ関数を最適化して、関連クエリの処理効率を向上させます。
RIGHTアンチ結合とOUTERアンチ結合の処理を改善して、結合テーブルに存在しない行の識別を向上させます。
PostgreSQL 16 では、単一スレッドおよび同時 COPY 操作によるバルクデータロードが改善されました。テストでは、パフォーマンスが最大 300% 向上することが示されています。また、libpq ライブラリを使用するアプリケーションのクライアント側負荷分散もサポートしています。vacuum ポリシーが改善され、フルテーブルフリーズ vacuum の必要性が軽減されました。x86 アーキテクチャと ARM アーキテクチャで SIMD ベースの CPU アクセラレーションが適用されています。これにより、ASCII 文字列と JSON 文字列の処理、配列検索とサブトランザクション検索におけるシステムパフォーマンスが向上します。
論理レプリケーション
論理レプリケーションは、PostgreSQL 論理レプリケーションプロトコルをサポートする他のノードまたはサブスクライバーにデータストリームを複製します。PostgreSQL 16 は、読み取り専用ノードからの論理レプリケーションをサポートして、論理変更を他のサーバーにパブリッシュします。これにより、負荷の高いプライマリノードから読み取り専用ノードに論理レプリケーショ ンタスクをオフロードするなど、ワークロードを分散するための新しいオプションが開発者に提供されます。
PostgreSQL 16 では、論理レプリケーションのパフォーマンスが向上しています。サブスクライバーは、大きなトランザクションを同時に処理できます。サブスクライバーは、プライマリキーのないテーブルの行を検索するために、シーケンシャルスキャンの代わりに B ツリーインデックスを使用できます。特定のケースでは、バイナリ形式を使用して初期テーブル同期を高速化できます。
PostgreSQL 16 では、論理レプリケーションのアクセス制御が改善されています。ユーザーが論理サブスクリプションを作成できるように、新しい定義済みロール pg_create_subscription が追加されました。
PostgreSQL 16 は、双方向の論理レプリケーションをサポートしています。2 つの異なるパブリッシャーのテーブル間でデータをレプリケートできます。
開発者エクスペリエンス
PostgreSQL 16 は、JSON_ARRAY()、JSON_ARRAYAGG()、IS JSON などのコンストラクターや述語を含む、より標準的な SQL/JSON 構文をサポートしています。アンダースコア(_)を桁区切り記号として使用できます。例:5_432_000。0x1538、0o12470、0b1010100111000 などの非 10 進整数定数がサポートされています。
psql コマンドのサポートが拡張され、\bind などが追加されました。これにより、パラメーター付きのクエリを使用し、変数の代わりに \bind を使用できます。例:SELECT $1::int + $2::int \bind 1 2 \g。
テキストの照合順序が改善されました。デフォルトでは、ICU が有効になっています。デフォルトの ICU ロケールはシステム環境から決定されます。ICU 照合ルールはカスタマイズできます。
監視
データベースのパフォーマンスを最適化するには、I/O 操作の監視が不可欠です。PostgreSQL 16 では、I/O アクセスパターンの分析を向上させるために、pg_stat_io メトリックが導入されました。
pg_stat_all_tables ビューに新しいフィールドが追加され、テーブルまたはインデックスで実行された最後のスキャンのタイムスタンプが記録されます。クエリに渡されたパラメーター値が記録されるため、auto_explain ログの可読性と、pg_stat_statements ビューと pg_stat_activity ビューでのクエリ追跡の精度が向上します。
アクセス管理とセキュリティ
PostgreSQL 16 では、よりきめ細かいアクセス管理オプションと強化されたセキュリティ機能が提供されています。正規表現を使用して、pg_hba.conf ファイルと pg_ident.conf ファイルのデータベースエントリとロールエントリを照合できます。include ディレクティブを使用して、外部構成ファイルを参照できます。
セキュリティに関連する次のクライアント接続パラメーターが追加されました。
require_auth:許容される認証方式を指定します。sslrootcert="system":libpq が証明書の検証にシステム証明書プールを使用できるようにします。
Kerberos の信頼委任がサポートされています。これにより、postgres_fdw プラグインと dblink プラグインは、認証された資格情報を使用して信頼できるサービスに接続できます。
アップグレード
クラスタを PolarDB for PostgreSQL 16 にアップグレードすることをお勧めします。クラスタを PolarDB for PostgreSQL (PostgreSQL 16 互換)にアップグレードすると、PostgreSQL コミュニティの最新情報を入手し、問題解決やデータベースのベストプラクティスの学習に役立つリソースやサポートを利用できます。
クラスタを PolarDB for PostgreSQL 15 から PolarDB for PostgreSQL 16 にアップグレードすると、ほとんどのデータ型、ビルトイン関数、テーブル列、オブジェクトは変更されないまま、技術的な詳細の改善点が追加されます。論理レプリケーション(DTS をお勧めします。詳細については、「PolarDB for PostgreSQL バージョン間でのデータの移行」をご参照ください)を使用して、ほぼ 100% の互換性を実現できます。以下のセクションでは、改善点について説明します。
次のセクションでは、PolarDB for PostgreSQL 15 と PolarDB for PostgreSQL 16 の違いについてのみ説明します。PolarDB for PostgreSQL 14 と PolarDB for PostgreSQL 15 の違いについては、「PostgreSQL 15 と PostgreSQL 14 の違い」をご参照ください。
データ型
NULLS NOT DISTINCT インデックスをプライマリキーに使用することはできません。
関数と式
PL/pgSQL のバインドカーソル変数への代入ルールが変更されました。PostgreSQL 16 より前のリリースでは、カーソル代入時に、このような変数の文字列値が変数名と一致するように設定されていました。PostgreSQL 16 では、値は OPEN 操作時に代入され、変数名と一致しなくなりました。以前の設定に戻すには、OPEN 操作の前に、目的の
portal名をカーソル変数に代入します。pg_walinspect関数pg_get_wal_records_info_till_end_of_wal()とpg_get_wal_stats_till_end_of_wal()が削除されました。継承テーブルとパーティションテーブルの GENERATED 式に対する制限が厳しくなりました。親/パーティションテーブルと子/パーティションテーブルのすべての列で、生成ステータスが同じである必要があります。ただし、実際の生成式はテーブル間で異なる場合があります。
REINDEX DATABASE 文と
reindexdbユーティリティは、システムカタログのインデックスを処理しなくなりました。代わりに、REINDEX SYSTEM 文とreindexdb --systemユーティリティを使用する必要があります。ON SELECT ルールを使用してビューを手動で作成することはできなくなりました。
権限
新しい GRANT ... WITH INHERIT 句を使用して、ロールのデフォルトの継承動作をオーバーライドできます。これにより、メンバーロールの継承ステータスが GRANT コマンドで設定されるため、メンバーは特定のロールを継承し、他のロールは継承しないようにすることができます。以前は、メンバーロールの継承状態は、自身の継承状態によってのみ制御され、ロールの継承状態の変更は、既存および将来のすべてのメンバーロールに影響していました。
CREATEROLE 権限を持つロールが他のロールを変更できる機能が制限されました。PostgreSQL 16 より前のリリースでは、CREATEROLE 権限を持つロールは、多くの非スーパーユーザーロール権限を変更できました。PostgreSQL 16 では、ロールへのメンバーの追加などの操作には、ADMIN OPTION 権限が必要です。たとえば、ロールは、ADMIN OPTION 権限を持っている場合にのみ、CREATEDB、REPLICATION、BYPASSRLS などのプロパティを変更できます。
その他
読み取り専用パラメーター
lc_collateとlc_ctypeが削除されました。boost_trigger_fileパラメーターが削除されました。vacuum_defer_cleanup_ageパラメーターが削除されました。force_parallel_modeパラメーターの名前がdebug_parallel_queryに変更されました。