新機能や性能向上まとめ【PostgreSQL 13】
新機能まとめ
PostgreSQL13は変更が少なめのメジャーリリースとなっており、非互換が少なくアップグレードしやすいものとなっているようです。
以下の点、それぞれについて解説・まとめをしていきます。
1.新機能(SQL)
2.性能向上
3.運用管理
※ ここに記載する内容は、ほぼ次の動画を簡易的にまとめたものになります。詳細を知りたい方は、次の動画を是非ご参照ください(とても聞きやすくわかりやすい動画でおすすめです)。
1.SQL機能
・FETCH FIRST … WITH TIE
PostgreSQLでは、データの先頭何行だけを表示するのに「limit句」を使用する方法と、「FETCH FIRST」を使用する方法があります。その「FETCH FIRST」という構文に「WITH TIE」をつけて同じ順位(=タイ)のものも表示するように対応されました。(SQL標準の機能でしたが、PostgreSQLは組み込まれていなかったため今回追加となりました。)
・JSON Pathのdatetime()メソッド追加
JSON Pathとは、JSONのデータ型に対して中身を検索したり、加工できる機能です。今回、datetime()というJSON PATHの中で使えるメソッドが追加されました。datetime()を使用することで、日付時刻データを文字列ではなく、ちゃんと日付時刻として評価できるようになりました。
・パーティションテーブル関連の各種拡張
・ロジカルレプリケーション(テーブル単位でレプリケーションをする機能)にパーティションテーブルが追加されました。
・パーティションテーブル同士の結合が改良されました。
・パーティションテーブルに行単位のBEFOREトリガが対応されました。
2.性能向上
・Btreeインデックスの性能向上
インデックスのデータ格納時、以前までは同じ値でも複数エントリー(=複数の格納場所)に格納していました。今回からは、同じキー値の値の場合は、1つのエントリーだけに保存されることになり、格納サイズが減る反面、処理オーバーヘッドが(若干)増えるようになりました。ただし、重複排除が効かない条件が一部のあります。この機能はデフォルトでONとなっていますが、CREATE INDEX時に明示的にOFFにすることも可能。
・インクリメンタルソートが追加
データを並び替える際の新しいアルゴリズムが追加されました。クエリを投げる時、従来まではすでにソートキーでソートされている物も改めてソートしなおし実行していましたが、今回からはすでにソートされているキーは考慮した上で(再度ソートすることなく)実行できるようになりました。デフォルトでON。
・ストレージハッシュ集約が追加
ハッシュ集約の方法について、従来まではGroupAggregateとHashAggregateという二つの方法がありました。今回、その2つの中間くらいに位置したものが1つ追加され全部で3つとなりました。
3.運用管理機能
・並列VACUUM機能の追加
テーブルに対してバキュームを行った場合、テーブル+そのインデックスに対してバキューム処理が行われます。並列バキュームではテーブル+その各インデックスに対して並列でバキューム処理が行われるようになりました。
・進捗レポート対応拡張
従来ではVACUUM、CLUSTER、VACUUM FULL、CREATE INDEX、REINDEXに対して、「SQL実行している処理がどこまで進んでいるか」というのをビューで見ることができていました。その進捗で見る項目にpg_basebackup、ANALYZEコマンドが追加されました。
・接続認証の拡張
・クライアント側でチャンネルバインディングが必須に指定できるようになりました。チャンネルバインディング中間者攻撃を防ぐ機能です。
・SSL/TLSのプロトコルのバージョンを最小でいくつ、最大でいくつと指定できるようになりました。
・クライアント証明書のパスワードの指定ができるようになりました
・pgbenchの拡張
・パーティションテーブルの生成が可能になりました。
・サーバー側でデータが作成できるようになりました。
・データ生成時にフェース毎にどれだけ時間がかかったか表示できるようになりました。
・pg_rewindの改良(レプリケーション時の巻き戻し機能)
・クラッシュリカバリが自動で実行されるようになりました。
・ソースサーバーに追随するスタンバイの設定を自動で作成するようになりました。
・WALアーカイブ適用
・pg_verifybackupコマンドの追加
新しい運用管理コマンド(バックアップデータを検証する機能)が追加されました。
・その他の運用コマンド拡張
・reindexdbコマンドに--jobs対応(複数並列が可能に)
・pg_dumpが外部テーブルに含まれるデータも内容をダンプに入ることができるようになりました。
・EXTENSIONにtrustedなという概念が加わりました。