アプリケーションエンジニアから見たPostgreSQL16の新機能

242 Views

November 07, 23

スライド概要

2023年11月12日(日) に開催される オープンソースカンファレンス2023 Hiroshimaでのセッションスライドです。

1年に1回のペースでメジャーバージョンをリリースしているRDBMSであるPostgreSQL.

今年は9月にPostgreSQL16がリリースされました。
今セミナーでは、PostgreSQL16で追加された機能について、アプリケーションエンジニアの観点からピックアップしてご紹介させて頂きます。

profile-image

岡山でWebサービス作ってます STAR FESTIVAL

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

日本PostgreSQLユーザー会 中国地方支部長 高橋 一騎 アプリケーションエンジニアから見た PostgreSQL16の新機能 2023-11-12 OSC 2023 HIROSHIMA

2.

自己紹介 高橋 一騎 @IKKITANG スターフェスティバル株式会社 TechPdM | バックエンドエンジニア 岡山在住(妻、息子、娘) 日本PostgreSQLユーザー会 中国地方支部長 Takahashilkki Takahashilkki ikkitang ikkitang

3.

本セッションについて • 資料は公開済みです • 質問は #osc23hi に投稿してもらえれば、 後ほど拾います。ぜひ、ご活用ください。 • Webアプリケーションの開発に携わっている方を 対象にしたセッションです • このセッションを通じて 「PostgreSQLを使ってみよう」など興味を 持って頂くきっかけになったら幸いです

4.

おしながき 01 PostgreSQLのバージョンの変遷 02 PostgreSQL16の新機能 03 さいごに CONTENTS

5.

Section 01 PostgreSQLの バージョンの変遷

6.

01 PostgreSQLの バージョンの変遷 PostgreSQLとは • 代表的なオープンソースのRDBMSの一つ • オーナー企業は無く開発コミュニティに よって開発されている • データの管理を支援することを目的として多 くの機能を備えている ○ 標準SQLに多く準拠 (SQL:2023 170/179) ○ 豊富な機能 ■ データ型, 制約, パフォーマンス

7.

01 PostgreSQLの 開発プロセス 約1年ごとにメジャーバージョンがリリース コミットフェスタ パッチレビュー 2ヶ月 コミットフェスタ ... コミットフェスタ ベータリリース 検証期間 正式リリース 約9ヶ月

8.

01 PostgreSQLの バージョンの変遷 • パラレルクエリ強化 • JITコンパイル 11 2018/10 12 2019/10 • B-tree index 改良 • 生成列 対応 • 並列バキューム 13 2020/09 14 2021/09 • SEARCH/CYCLE句 • Merge文 15 2022/10

9.

01 PostgreSQLの バージョンの変遷 • 並列バキューム 13 2020/09 12 2019/10 • B-tree index 改良 • 生成列 対応 14 2021/09 • SEARCH/CYCLE句 • Merge文 15 2022/10 16 2023/09

10.

Section 02 PostgreSQL16の 新機能

11.

02 PostgreSQL16の 新機能(抜粋) ロジカル レプリケーション 強化 • パラレル適用 • スタンバイイスタン スのサポート • レプリケーションモー ドの追加 SQL文の追加 JSON • JSON_ARRAY • IS JSON パラレルクエリ 強化 • Right outer join / Full outer join での サポート • string_agg / array_agg での サポート

12.

02 PostgreSQL16の 新機能(抜粋) ロジカル Pickup レプリケーション 強化 • パラレル適用 • スタンバイイスタン スのサポート • レプリケーションモー ドの追加 SQL文の追加 Pickup JSON • JSON_ARRAY • IS JSON パラレルクエリ 強化 • Right outer join / Full outer join での サポート • string_agg / array_agg での サポート

13.

ロジカルレプリケーションの強化

14.

02 ロジカルレプリケーションの 強化 PostgreSQLの レプリケーション • ストリーミングレプリケーション 特徴的に物理レプリケーションとも言える WALデータをプライマリとスタンバイで リアルタイムで同期し複製を作成する. 使用用途としてプライマリに障害が 発生した際スタンバイをプライマリに 昇格(フェイルオーバー)させることで 高可用性を実現できる プライマリサーバー WAL WAL スタンバイサーバー スタンバイサーバー

15.

02 ロジカルレプリケーションの 強化 PostgreSQLの レプリケーション • ロジカルレプリケーション WALデータを解釈し、書き込みの操作に 変換した情報をレプリケーションし、 サブスクライバー側で適用する. 使用用途は、バージョンが異なっても レプリケーションできるので バージョンアップや 分析用のDBを作るなどがある パブリッシャー Publication Publication 購読 購読 サブスクライバー サブスクライバー

16.

02 ロジカルレプリケーションの 強化 スタンバイサーバーをパブリッシャーとして ロジカルレプリケーションを構築できるよう になった プライマリの負荷分散などの利点がある! スタンバイが昇格しても問題なし. ※ スタンバイは書き込みできないので プライマリでパブリッシャーを作って それをスタンバイに同期する必要がある

17.

02 ロジカルレプリケーションの 強化 ロジカルレプリケーションのstreamingオプションに parallel が追加 (on/off/parallel) • コミットを待たずに送信し、並列で適用するようになった(適用遅延を40%削減) Publisher BEGIN; INSERT~; .... COMMIT; WAL sender WAL デコード logical_decoding_work_mem 単位 streaming pg14 Commit Apply Worker ワーカー起動 Parallel Apply Worker Commit前に 適用 データベースの 変更を確定 Subscriber

18.

02 ロジカルレプリケーションの 強化 サブスクリプションで with(origin = none) を指定すると オリジンがない更新データのみを取り込むようになる • 15以前だと、双方向レプリケーションをすると循環してしまっていた • マルチマスターとかできるようになるんですかねぇ(!?) DB-a Publication Subscription origin=DB-b hogeテーブル hogeテーブル Subscription origin=none Publication DB-b

19.

02 ロジカルレプリケーションの 強化 ロジカルレプリケーションの性能改善 • 初期コピーでバイナリ形式が利用可能に ○ これまでは初期コピーには適用されなかった ○ バイナリ転送によって初期コピーの所要時間 が約半分に • Primary Key 以外のインデックスが利用可能に ○ 主キーが無く、REPLICA IDENTITY FULL が 指定されてるテーブルのレプリケーションで Update/Deleteで行を特定するときに、 主キー以外のインデックスがあれば活用する

20.

SQL構文の追加

21.

02 新しいSQLの追加 JSON関連 • IS JSON • IS JSON SCALAR • IS JSON OBJECT • IS JSON ARRAY どの構文も `評価したい値` IS JSON で boolean が返る

22.

02 新しいSQLの追加 JSON関連 • IS JSON • IS JSON SCALAR • IS JSON OBJECT • IS JSON ARRAY それぞれがどの時に True になるのか?

23.

02 新しいSQLの追加 JSON関連 SQL構文 Trueを返す条件 IS JSON (VALUE) 文字列がJSONとして解釈できる IS JSON SCALAR 文字列がJSONのスカラ値として解釈で きる IS JSON OBJECT 文字列がJSONオブジェクトとして解釈 できる IS JSON ARRAY 文字列がJSON配列として解釈できる

24.

02 新しいSQLの追加 JSON関連 JSONデータ型 JSONスカラ値 • text • numeric • boolean • null 上記の型を満たす値 JSONオブジェクト { “key”: スカラ値 } 形式で表現される 集合 JSON配列 要素が下記の型を 満たす配列 • JSONスカラ値 • JSONオブジェクト • JSON配列

25.

02 新しいSQLの追加 JSON関連 JSONデータ型 JSONスカラ値 • “osc”, “広島” • 1, 11.25 • true/false • null JSONオブジェクト { “name”:“ikkitang”, “age”: 32, “is_marriage”: true } JSON配列 [ “osc”, 1, null, { “name” : “ikki” } ]

26.

02 新しいSQLの追加 JSON関連 JSONデータ型 JSONスカラ値 • “osc”, “広島” • 1, 11.25 • true/false • null IS JSON: TRUE IS JSON SCALAR : TRUE IS JSON OBJECT : FALSE IS JSON ARRAY : FALSE JSONオブジェクト { “name”:“ikkitang”, “age”: 32, “is_marriage”: true } IS JSON: TRUE IS JSON SCALAR : FALSE IS JSON OBJECT : TRUE IS JSON ARRAY : FALSE JSON配列 [ “osc”, 1, null, { “name” : “ikki” } ] IS JSON: TRUE IS JSON SCALAR : FALSE IS JSON OBJECT : FALSE IS JSON ARRAY : TRUE

27.

02 新しいSQLの追加 JSON関連 SQL構文 振る舞い JSON_OBJECT 文字列をJSONオブジェクトに変換する JSON_OBJECTAGG 文字列を集約した後 JSONのオブジェクトに変換する JSON_ARRAY 文字列をJSON配列に変換する JSON_ARRAYAGG 文字列を集約した後 JSON配列に変換する

28.

Section 03 さいごに

29.

03 まとめ PostgreSQL16の注目機能 • ロジカルレプリケーションの改善 ○ stand-by からのロジカルレプリケーション ○ streaming=parallel 適用 ○ 双方向レプリケーション • SQL標準準拠の構文追加 ○ JSON_ARRAY ○ JSON_ARRAYAGG PostgreSQL16では、PostgreSQLの推し機能のロ ジカルレプリケーションに様々な改善が入りました. 今後もロジカルレプリケーションは どんどん改善されていくと思われます!!

30.

03 PostgreSQL17で 議論されていること 現在、第3回目の Commit Fest 中です • pg_restoreのパラレル性能向上 • パーティショニングされたテーブルに排他制約を 作成できるように • ロジカルレプリケーションのREPLICA IDENTITY FULLケースでHash Indexもサポート • ログイン時にトリガーを設定できるように

31.

03 中国地方DB勉強会 中国地方 DB勉強会 #ChugokuDB DBに関する勉強会を 中国地方の五県(or インターネット) で開催しています。 勉強会に携わることに興味のある方 歓迎していますので 興味があれば是非!!

32.

03 中国地方DB勉強会 中国地方DB勉強会 @db580 チャンネル登録者数 192人 100本の動画 中国地方で開催しているDBに関する勉強会の動画です。 dbstudychugoku.github.io、他1件のリンク ホーム 動画 ライブ 再生リスト コミュニティ 概要 作成した再生リスト 並べ替え 第31回 中国地方DB勉強会 再生リストの全体を見る 第30回 中国地方DB勉強会 再生リストの全体を見る 第27回中国地方DB勉強会 再生リストの全体を見る 第25回中国地方DB勉強会 再生リストの全体を見る 第22回 中国地方DB勉強会 再生リストの全体を見る 第21回 中国地方DB勉強会 再生リストの全体を見る 第18回 中国地方DB勉強会 再生リストの全体を見る 第17回 中国地方DB勉強会 再生リストの全体を見る 中国地方DB勉強会 Youtube にて 過去のイベントの動画を 掲載しています 是非、チャンネル登録 / いいねを お願いします!

33.

03 参考文献 • PostgreSQL16 新機能検証結果 (GA) ○ https://h50146.www5.hpe.com/products/software/oe/linux/mainstream /support/lcc/pdf/PostgreSQL_16_GA_New_Features_ja_20230919_1.pdf • PostgreSQL16検証レポート ○ https://www.sraoss.co.jp/tech-blog/wp- content/uploads/2023/09/pg16_report_20230929.pdf • PostgreSQL16のスタンバイからのロジカルレプリケーションにおけるスタンバイ 昇格の影響調査 ○ https://qiita.com/fujii_masao/items/3a02657545bab3e01310 • PostgreSQL16とそのあと ○ https://www.fujitsu.com/jp/products/software/resources/feature- stories/postgres/engineer-blog30/#chapter02-01 • PostgreSQL16 新機能解説 2023-09-29 A-4 ○ https://youtu.be/0UVpTTWCNHw?si=JAWFKclOdB1cBtou • 【第32回中国地方DB勉強会】最新機能まで総ざらい!PostgreSQLの注目機能を振 り返る ○ https://youtu.be/7AsWB9-AxQg?si=I-pRzxbSvClCZqbO

34.

03 参考文献 • PostgreSQL 16 Logical Replication Improvements in Action ○ https://www.pgedge.com/blog/postgresql-16-logical-replication- improvements-in-action • PostgreSQL Logical Replication: Advantages, EDB's Contributions and PG 16 Enhancements ○ https://www.enterprisedb.com/blog/postgres-logical-replication- advantages • PGCon 2023参加レポート - PostgreSQL 16 「Parallel apply」の紹介 ○ https://www.fujitsu.com/jp/products/software/resources/feature- stories/postgres/engineer-blog29/ • PostgreSQL 17: part 1 or CommitFest 2023-07 ○ https://postgrespro.com/blog/pgsql/5970285 • PostgreSQL 17: part 2 or CommitFest 2023-09 ○ https://postgrespro.com/blog/pgsql/5970391 • PostgreSQL 15.4文書 ○ https://www.postgresql.jp/document/15/html/index.html

35.

03 参考文献 • PostgreSQL 16 に関する技術情報 ○ https://www.sraoss.co.jp/tech-blog/pgsql/16-0/ • PostgreSQL 16 Press Kit ○ https://www.postgresql.org/about/press/presskit16/ja/ • Understanding the new JSON capabilities in Postgres 16 ○ https://neon.tech/blog/json-features-pg-16 • JSON Updates in Postgres 16 ○ https://www.crunchydata.com/blog/json-updates-postgres-16 • 最新機能まで総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB 勉強会 in 岡山 発表資料) ○ https://www.slideshare.net/nttdata-tech/postgresql-new-features- chugokudb32-nttdata

36.

THANK YOU! ありがとうございました