SlideShare a Scribd company logo
© 2022 NTT DATA Corporation 1
PostgreSQL Conference Japan 2022
PostgreSQLのバグとの付き合い方
~バグの調査からコミュニティへの報告、修正パッチ投稿まで~
2022年11月11日
株式会社NTTデータ 藤井 雅雄
© 2022 NTT DATA Corporation 2
自己紹介
藤井 雅雄
Database Technical Lead @ NTTデータ
データベース研究開発
PostgreSQL 技術支援
PostgreSQLコミッタ
レプリケーション
WAL圧縮
バックアップ進捗確認
pg_bigm(全文検索モジュール) コミッタ
fujii_masao
MasaoFujii
v15に対応済!
© 2022 NTT DATA Corporation 3
本講演について
講演資料は、NTTデータのSlideShareアカウント上で公開予定です。
https://www.slideshare.net/nttdata-tech
本講演では、PostgreSQLドキュメントにあるバグレポートガイドラインに沿いつつ、
一部主観や実例を交えながら、PostgreSQLのバグとの使い方を説明します。
・ バグだと思ったら ・・・ PostgreSQLのバグの確認方法
・ コミュニティに共有しよう ・・・ バグ報告のやり方
・ 修正パッチを書いてみよう ・・・ パッチ提供と議論
(*) バグレポートガイドライン
https://www.postgresql.jp/document/current/html/bug-reporting.html
© 2022 NTT DATA Corporation 4
PostgreSQLにおけるバグ
© 2022 NTT DATA Corporation 5
PostgreSQLはバグが少ないと言われることがあるが
2011 Coverity Scan Open Source Integrity Report
不具合密度(1000行あたりの不具合の数)が、
「Linux 2.6: 0.62」>「OSS平均: 0.45」>「PostgreSQL 9.1: 0.21」
https://codezine.jp/article/detail/6436
PostgreSQL開発コミュニティの信頼性に対する姿勢
・ PostgreSQLの信頼性に関するFAQ
https://wiki.postgresql.org/wiki/FAQ/ja#.E4.BF.A1.E9.A0.BC.E6.80.A7.28Reliability.29
我々は、DBMSの信頼性が高くなくてはその価値が無いことを理解しています。
十分テストして、安定したコードに対してバグを最小にしてからリリースするように努めてます。
・ バグレポートガイドライン
https://www.postgresql.jp/document/current/html/bug-reporting.html
最大限の注意を払っても、全てのプラットフォーム、全ての環境でPostgreSQLの機能全てが
正常に動くことは保証できません。
© 2022 NTT DATA Corporation 6
PostgreSQLにおけるバグとは
バグと見なされるのは、ドキュメントなどで謳っている仕様と実際の挙動が異なるケース
・ 各プログラムが、入力に対して間違った(仕様とは異なる)結果を返却する
・ PostgreSQL提供の各プログラムが、セグメンテーションフォルトなどで意図せずクラッシュする ...など
仕様として謳われていないことを問題報告してもバグとは見なされない
・ 仕様にない(まだサポートされていない)機能が利用できない
・ 各プログラムの実行性能が単に低い ...など
最終的には、バグと見なされるかどうかは、コミュニティ内の議論で決まる
© 2022 NTT DATA Corporation 7
バグと見なされなかった例
pg_stat_statements: rows not updated for CREATE TABLE AS SELECT statements
https://www.postgresql.org/message-id/flat/1584293755198-0.post%40n3.nabble.com
・ v13で、CREATE TABLE AS SELECTなどのユーティリティコマンドが取り扱った行数が、
pg_stat_statementsのrowsカラムにカウントされない
・ ユーティリティコマンドによるrowsカラムのカウントについて、v13ではドキュメントにそのような仕様がなく、
バグではなく機能不足と見なされて、v13では改修されず、v14で新機能として取り込み
=# CREATE TABLE test AS SELECT * FROM pg_class;
SELECT 387
=# SELECT query, calls, rows FROM pg_stat_statements WHERE query LIKE 'CREATE TABLE test%';
-[ RECORD 1 ]--------------------------------------
query | CREATE TABLE test AS SELECT * FROM pg_class
calls | 1
rows | 0
v13以前では、CREATE TABLE AS SELECTで
387行を取り扱ったのに、rowsカラムは0のまま
© 2022 NTT DATA Corporation 8
コミュニティの賛同でバグ扱いになることも
Speedup of relation deletes during recovery
https://www.postgresql.org/message-
id/flat/CAHGQGwHVQkdfDqtvGVkty%2B19cQakAydXn1etGND3X0PHbZ3%2B6w%40mail.gmail.com
・ v11において、同一トランザクション内で複数のリレーションを削除すると、そのリカバリ性能が大幅に劣化
・ この問題は仕様に反しているわけではないが、既存ユーザへの問題の影響などから、
コミュニティ内の複数の開発者がバグ扱いとすることに賛同して、v11にも問題の改修を取り込み
プライマリ スタンバイ
BEGIN;
DROP TABLE tbl01;
DROP TABLE tbl02;
...
COMMIT;
レプリケーション
リカバリ
リカバリ処理が完全停止したように見えるほど、
リカバリ性能が大幅に劣化することがあった
© 2022 NTT DATA Corporation 9
バグ修正の取り込み
バグ修正は、サポート対象のバージョン(v11~v15)と現在開発中のバージョン(v16dev)に取り込み
※()内は2022年11月11日時点のバージョン
PostgreSQL開発コミュニティは、メジャーバージョンについて初回リリースから約5年間をサポート
サポート終了した古いバージョン
についてはバグ修正されない!
https://www.postgresql.org/support/versioning/
© 2022 NTT DATA Corporation 10
バグだと思ったら ・・・
PostgreSQLのバグの確認方法
© 2022 NTT DATA Corporation 11
問題解決の流れ
問題の検知
問題やトラブル、期待通りでない挙動を検知する。
問題の分析や解決に必要な情報を収集する。
問題の切り分け
問題の原因となる誤り・ミス(操作誤り、設定誤り、ドキュメントの読
み違いなど)がないか確認する。
誤り・ミスの確認
問題の原因となる既知バグがないか確認する。
コミュニティへの問題報告などにより未知バグを確認する。
バグの確認
原因に応じた対策を実施して、問題を解決する。
1
2
3
4
問題の解決
5
問題の発生個所を特定する。
PostgreSQL、エクステンション、アプリケーション、OSなど
繰
り
返
し
© 2022 NTT DATA Corporation 12
既知バグの確認
PostgreSQL開発コミュニティにはバグ管理システムがない
バグ管理システムから、バグの報告内容や関連する議論、バグの対応ステータス(非バグ、未修正、修正対応中、
修正済など)などを確認できない。
PostgreSQLコミュニティの複数の情報源から既知バグかどうか確認する必要がある
1. 各マイナーバージョンのリリースノート
2. ソースレポジトリのコミットログ
3. PostgreSQL開発コミュニティのML
4. 日本PostgreSQLユーザ会のMLやSlackチャンネル
5. PostgreSQL関連ブログ記事など一般サイト
など
© 2022 NTT DATA Corporation 13
既知バグの確認例
期待する挙動
=# BEGIN;
=*# SAVEPOINT s1;
=*# CREATE TABLE test (i int);
=*# COMMIT AND CHAIN;
=*# INSERT INTO test VALUES (1);
=*# ROLLBACK;
=# SELECT count(*) FROM test;
count
-------
0
(1 row)
v13.1での挙動
=# BEGIN;
=*# SAVEPOINT s1;
=*# CREATE TABLE test (i int);
=*# COMMIT AND CHAIN;
=# INSERT INTO test VALUES (1);
=# ROLLBACK;
WARNING: there is no transaction in progress
=# SELECT count(*) FROM test;
count
-------
1
(1 row)
・ v13.1において、SAVEPOINTがあるトランザクションでCOMMIT AND CHAINを
実行したとき、次のトランザクションが開始されない
・ COMMIT AND CHAINは、現在のトランザクションをコミットして、そのトランザクションと
同じ特性(トランザクション分離レベルなど)で次のトランザクションをすぐに開始するコマンド
既知バグ
の例
© 2022 NTT DATA Corporation 14
1. リリースノートからの既知バグの確認例
問題が発生したマイナーバージョンの次のバージョンから、最新のマイナーバージョンまで、リリースノートを見て、
問題の修正が含まれていないか確認する。
各マイナーバージョンのリリースノートは、そのメジャーバージョンのドキュメントに含まれる。
例えば、v13.xのリリースノートは、v13のドキュメントから確認できる。
https://www.postgresql.org/docs/13/release.html
今回の例ではv13.1で問題が発生したため、v13.2以降のリリースノートを確認していく。
v13.3のリリースノートに今回の問題のバグ修正を確認できる。
Fix COMMIT AND CHAIN to work correctly when the current transaction has
live savepoints (Fujii Masao)
https://www.postgresql.org/docs/13/release-13-3.html
バグ修正を確認できたマイナーバージョン(今回はv13.3)以降で問題が再現するか確認し、再現しなければ
既知バグと判断できる。
© 2022 NTT DATA Corporation 15
2. コミットログからの既知バグの確認例
バグ修正のコミットを特定するための検索キーワードを決めて、①~④の方法で確認する。
今回の例では、「commit and chain」や「savepoints」を検索キーワードにする。
① 手元環境にcloneしたgitソースレポジトリからgitコマンドで確認
$ git clone -b REL_13_STABLE git://git.postgresql.org/git/postgresql.git
$ git log --grep="commit and chain" --grep="savepoints" -i --all-match
② PostgreSQLの公式gitソースレポジトリで検索
https://git.postgresql.org/gitweb/?p=postgresql.git;a=shortlog;h=refs/heads/REL_13_STABLE
③ GitHubにミラーされているPostgreSQLの
gitソースレポジトリで検索
https://github.com/postgres/postgres
④ pgsql-committersのMLで検索
https://www.postgresql.org/search/?m=1
© 2022 NTT DATA Corporation 16
ML 説明
pgsql-hackers 新機能の提案やバグ修正、開発課題などについて議論する
pgsql-bugs ユーザからのバグ報告先。報告されたバグやその修正などについて議論する
pgsql-docs ドキュメントやその問題、改修などについて議論する
pgsql-committers コミットされた内容が通知される
3. PostgreSQL開発コミュニティのMLからの既知バグの確認例
PostgreSQL開発コミュニティでのコミュニケーションはMLが基本
・ PostgreSQL公式サイトでコミュニティアカウントを作成することでMLを購読できる。
・ バグ修正について議論されやすいMLは以下。
バグ修正の議論を特定するための検索キーワードを決めて、
MLの過去議論検索ページから確認する。
・ 今回の例では、「commit and chain」と「savepoints」を
検索キーワードにする。
https://www.postgresql.org/search/?m=1
検索ページでは、検索キーワード(Search term)、
検索対象のML(List)、検索対象の期間(Date)、
検索結果の表示順(Sort By)を指定できる
© 2022 NTT DATA Corporation 17
既知バグを確認する各情報源の特徴
項
番
情報源
修正済かつ
リリース済
修正済かつ
未リリース
未修正
(未リリース)
1
各マイナーバージョンの
リリースノート ○
2
ソースレポジトリの
コミットログ ○ ○
3
PostgreSQL
開発コミュニティのML ○ ○ ○
各情報源から確認できるバグの種類
開発者含む専門的なやりとり
具体的な情報
長大な議論
ユーザ向けの記述
概要レベルの情報
簡潔な説明
© 2022 NTT DATA Corporation 18
各情報源の対応付け
1. リリースノートのソース
https://github.com/postgres/postgres/blob/REL_13_STABLE/doc/src/sgml/release-13.sgml
<!--
Author: Fujii Masao <fujii@postgresql.org>
Branch: master [8a55cb5ba] 2021-02-19 21:57:52 +0900
Branch: REL_13_STABLE [422012c98] 2021-02-19 21:58:43 +0900
Branch: REL_12_STABLE [fadcc4e81] 2021-02-19 21:59:26 +0900
-->
<para>
Fix <command>COMMIT AND CHAIN</command> to work correctly when the
current transaction has live savepoints (Fujii Masao)
</para>
2. コミットログ
$ git show 422012c98
commit 422012c98f8d929f9aa2b2e706b29512f61544e1
Author: Fujii Masao <fujii@postgresql.org>
Date: Fri Feb 19 21:57:52 2021 +0900
Fix bug in COMMIT AND CHAIN command.
(略)
Reported-by: Arthur Nascimento
Author: Fujii Masao
Reviewed-by: Arthur Nascimento, Vik Fearing
Discussion: https://postgr.es/m/16867-3475744069228158@postgresql.org
リリースノートのソースに記載されている、各改修項目
のコミットIDから、対応するコミットログを特定
コミットログに記載されているURLから、
対応するML上の議論を特定
3. ML上の議論
© 2022 NTT DATA Corporation 19
既知バグの修正の取り込み
バグが修正されたマイナーバージョン(まだ未リリースであればリリースを待ってから)に
アップデートすることで、バグ修正を取り込み
• 既知バグの修正をすべて取り込めるように最新マイナーバージョンへのアップデートも検討する
• ただし、取り込みたいバグ修正以外にも複数の改修項目がマイナーバージョンに含まれるため、必要に
応じてそれらがシステムやアプリケーションに影響しないか確認する必要がある
• PostgreSQL開発コミュニティは、特定のバグ修正を個別パッチとして取り込む方法を提供しない
© 2022 NTT DATA Corporation 20
コミュニティに共有しよう ・・・
バグ報告のやり方
© 2022 NTT DATA Corporation 21
問題解決の流れ
問題の検知
問題やトラブル、期待通りでない挙動を検知する。
問題の分析や解決に必要な情報を収集する。
問題の切り分け
問題の原因となる誤り・ミス(操作誤り、設定誤り、ドキュメントの読
み違いなど)がないか確認する。
誤り・ミスの確認
問題の原因となる既知バグがないか確認する。
コミュニティへの問題報告などにより未知バグを確認す
る。
バグの確認
原因に応じた対策を実施して、問題を解決する。
1
2
3
4
問題の解決
5
問題の発生個所を特定する。
PostgreSQL、エクステンション、アプリケーション、OSなど
繰
り
返
し
© 2022 NTT DATA Corporation 22
バグ報告にあたり
バグレポートガイドライン
PostgreSQLに関してバグを発見した場合、ぜひ我々に連絡してください。
バグレポートはPostgreSQLをより信頼性の高いものにするために、大変重要になります。
・・・
私たちは、すべてのバグを直ちに修正することを約束することはできません。
そのバグが明確で、重大で、あるいは他の多くのユーザにも影響を与えるものであれば、
誰かがすぐに調査する可能性が高くなるでしょう。
・・・
現在計画中の大きな変更が終了するまで、バグを修正できないと判断する場合もあります。
また、単に修正が非常に困難であり、より重要な他の事項があることもあります。
早急に処置が必要な場合は、商用サポートの購入を検討してください。
https://www.postgresql.jp/document/current/html/bug-reporting.html
© 2022 NTT DATA Corporation 23
バグ報告先
バグ報告先 説明
pgsql-bugs@lists.postgresql.org バグ報告先のML。報告されたバグやその修正などについて議論される
https://www.postgresql.org/acc
ount/submitbug/
バグ報告用Webフォーム。利用にはPostgreSQLコミュニティサイトへのサ
インインが必要。報告内容はpgsql-bugsのMLに送信される
pgsql-docs@lists.postgresql.org ドキュメントのバグ報告先のML。報告されたバグやその修正などについて議
論される
security@postgresql.org セキュリティ問題のバグ報告先の非公開ML。MLには限られたメンバのみ参
加し、バグやその修正などについて非公開で議論される
報告するバグごとに適切な報告先を選ぶ
注意事項
• セキュリティ問題のバグなど公開が望ましくない報告は、pgsql-bugsやpgsql-docsの公開MLにしないこと
• ユーザ向けML(pgsql-generalなど)や開発者向けML(pgsql-hackers)には、基本的にバグ報告しないこと
• MLはモデレータ付のため、メールの配送が遅延する可能性がある
© 2022 NTT DATA Corporation 24
バグ報告用Webフォーム
https://www.postgresql.org/
https://www.postgresql.org/account/submitbug/
© 2022 NTT DATA Corporation 25
報告すべきこと
問題やバグについて、事実のみをありのままに報告すること
① 問題を再現できる明確で具体的な手順
② 問題発生時の出力結果そのもの
SQL実行結果、エラーメッセージ、スタックトレースなど
③ どのような挙動や実行結果を期待していたか
④ プログラムに指定したオプションやデフォルトから変更した設定パラメータ値
⑤ PostgreSQLのバージョン
可能であれば最新マイナーバージョンや最新メジャーバージョンで問題が再現するかの情報
⑥ プラットフォーム情報
OSの種類やバージョンなど
PostgreSQL開発者自身が問題を再現できることが、
バグ修正のための最大の一歩!!
© 2022 NTT DATA Corporation 26
バグ報告例その1
Fix error message for MERGE foreign tables
https://www.postgresql.org/message-id/flat/af88be42757c90e163fc4e27a2e29e0e%40oss.nttdata.com
外部テーブルへの
直のMERGE実行では
期待通りのエラーメッセージ
パーティションテーブル経由の
外部テーブルへの
MERGE実行では
想定外のエラーメッセージ
パーティションテーブルA
テーブル
A2
外部
テーブル
A1
テーブル
A3
MERGE
© 2022 NTT DATA Corporation 27
バグ報告例その2
Backup command and functions can cause assertion failure and segmentation fault
https://www.postgresql.org/message-id/flat/3374718f-9fbf-a950-6d66-d973e027f44c%40oss.nttdata.com
問題の概要と
バージョン情報
問題の
再現手順
エラーメッセージと
スタックトレース
© 2022 NTT DATA Corporation 28
バグ報告へのよくある反応と必要な対応
報告の問題をバグとして取り扱うべき根拠などを見直し、改めて説明する。
これは期待通りの挙動で、
バグではありません!
再現手順やその前提となる条件・設定などに漏れ・誤りがないか見直し、
再現手順を改めて提供する。
私の環境では問題を
再現できませんでした。
可能であれば、最新のマイナーバージョンやメジャーバージョンで問題が
再現するか確認した結果を報告する。
最新バージョンでも
問題は再現しますか?
コミュニティWikiに記載の方法で、
問題発生時のスタックトレースを取得して報告する。
https://wiki.postgresql.org/wiki/Generating_a_stack_trace_of_a_PostgreSQL_backend
問題発生時のスタックトレース
を提供してください。
必要な対応
よくある反応
可能であれば、手元にPostgreSQLの開発環境を用意して、
パッチを適用した版で問題が解消するか確認した結果を報告する。
バグ修正パッチを作成しました。
このパッチで問題が解消します
か?
© 2022 NTT DATA Corporation 29
報告したバグの修正がコミットされると
バグの報告者として名前が
コミットログに掲載される!
以降、バグ修正されたマイナーバージョンがリリースされたら、アップデートすることでバグ修正を取り込み
© 2022 NTT DATA Corporation 30
修正パッチを書いてみよう ・・・
パッチ提供と議論
© 2022 NTT DATA Corporation 31
バグ修正パッチを本当に自分が書くべきか?
基本的に、バグ修正パッチの作成はコミュニティの開発者に任せた方が、バグをいち早く確実に解消できる。
バグ修正に関与したい場合も、ML上での技術的な議論への参加やパッチレビューから始めるのがよい。
参考: 「PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)」
https://www.slideshare.net/nttdata-tech/postgresql-global-development-group-postgresql-conference-japan-2021-nttdata
もし書くとしたら
• バグ報告したが、誰も修正パッチを作成してくれないため
• パッチ作成を通じて、PostgreSQLの実装を学びたいため
• バグ修正者としてリリースノートに自分の名前を載せたい
などあるが・・・
© 2022 NTT DATA Corporation 32
バグ修正パッチの開発の流れ
開発環境準備
バグ解析
パッチ作成
パッチ投稿
1
2
3
4
レビュー対応
5
繰
り
返
し
コミット
6
パッチを作成、適用、コンパイル、テストできる開発環境を準備する
バグ関連のソースを読み、デバッガで動きを追い、バグやその原因を
実装レベルで解析する
バグを修正するパッチを作成して、パッチにより問題が解消すること
を確認する
コミュニティでパッチをレビューして、パッチの不備を改修する
コミッタがバグ修正パッチをPostgreSQLに取り込む
バグの報告とともに修正パッチをコミュニティに投稿する
© 2022 NTT DATA Corporation 33
デバッガによるバックエンドプロセスの処理実装の確認
① PostgreSQLをデバッガで追いやすいように、--enable-debugとCFLAGS=-O0を指定してコンパイルする。
$ ./configure --prefix=/opt/pgsql --enable-debug --enable-cassert --enable-tap-tests CFLAGS=-O0
$ make -j 4 install
② PostgreSQLを起動して、psqlからPostgreSQLに接続し、バックエンドプロセスのpidを取得する。
$ initdb -D data --no-locale --encoding=UTF8
$ pg_ctl -D data start
$ psql
=# SELECT pg_backend_pid();
③ gdbを起動して、②で取得したpidを指定してバックエンドプロセスにアタッチする。以下ではEmacs経由でgdb実行。
$ emacs &
Emacs内で M-x gdb コマンドでgdbを起動
(gdb) attach <②で取得のpid>
バグ解析
2
VSCodeでデバッグしたい場合は、
発表資料「VSCodeで作るPostgreSQL開発環境」を参考に。
https://www.slideshare.net/nttdata-tech/postgresql-vscode-
development-environment-pgunconf25-nttdata
© 2022 NTT DATA Corporation 34
デバッガによるバックエンドプロセスの処理実装の確認
④ PostgreSQL内の関数をブレークポイントに設定する。
例えば、SQL実行の起点となるexec_simple_query関数を設定する。
(gdb) b exec_simple_query
⑤ ②で起動のpsqlから、デバッガで処理を追いたいSQLを実行する。
以下ではCOMMIT AND CHAINの処理実装を確認。
=# COMMIT AND CHAIN;
⑥ デバッガをブレークポイントまで進めて、
以降は、gdbのコマンドを使って、処理を1ステップずつ進めたり、変数の内容を調査するなどして処理実装を追っていく。
(gdb) c
(gdb) ...
バグ解析
2
© 2022 NTT DATA Corporation 35
バグの原因となったコミットの特定
以前は期待通りの挙動で、いつの間にか問題が発生するようになったバグについては、バグを混入させたコミットを特定す
ることで、バグ解析や修正検討の役に立つ。
例えば、以下では、v13.4以降でバグを混入させたコミットをgit bisectで特定する。
① v13のブランチで、git bisectの探索範囲としてv13.4(REL_13_4)から最新(HEAD)までを指定する。
$ git checkout REL_13_STABLE
$ git bisect start HEAD REL_13_4
② バグを試験するスクリプトを用意して、git bisectでバグを混入させたコミットを探索する。
$ git bisect run /PATH_TO/test_script.sh
...
162ade612f1543389bd105fba82ea7e60c5b82c9 is the first bad commit
commit 162ade612f1543389bd105fba82ea7e60c5b82c9
Author: Fujii Masao <fujii@postgresql.org>
Date: Tue Jul 12 11:53:29 2022 +0900
Fix assertion failure and segmentation fault in backup code.
バグ解析
2
PostgreSQLをコンパイル、起動して、
問題を再現させるSQLなどを実行
© 2022 NTT DATA Corporation 36
パッチを作成するブランチ
バグ修正パッチは、バグを確認したバージョンのブランチではなく、基本的にmasterブランチに対して作成する。
masterブランチへのパッチのコミット時に、コミッタが、バグが存在する他のバージョンへのバックポートを行う。
① masterブランチでソースを最新化して、バグ修正用のブランチを作成する。
$ git checkout master
$ git pull
$ git checkout -b bugfix
② バグを修正して、その修正内容をコミットする。
$ emacs ...
$ git commit -a -m "Fix bug ..."
③ masterブランチからバグ修正用ブランチへのソース差分をパッチとして作成する。
$ git format-patch master
$ ls *.patch
0001-Fix-bug.patch
パッチ作成
3
© 2022 NTT DATA Corporation 37
互換性の保証
マイナーバージョン間の互換性を保証するため、基本的に、バグ修正パッチは以下を変更してはならない。
• ユーザインタフェース
例えば、コマンドやオプション、設定パラメータなどの名前を変更すること
• システムカタログ
例えば、システム関数を追加・削除するなどしてpg_procなどのシステムカタログを変更すること
• データレイアウト
例えば、ストレージ上のDBデータやWALの物理レイアウトを変更すること
• 通信プロトコル
例えば、ストリーミングレプリケーションのプライマリからスタンバイへのWAL転送プロトコルを変更すること
• ABI (Application Binary Interface)
例えば、エクステンションなどから参照される可能性があるPostgreSQL内部の関数や構造体、変数などについて
名前や構造を変更すること
パッチ作成
3
© 2022 NTT DATA Corporation 38
ABIの互換性が保証されないと パッチ作成
3
エクステンション pg_exclusive_backup のソース
https://github.com/MasaoFujii/pg_exclusive_backup/blob/main/pg_exclusive_backup.c
PostgreSQL15のソース
https://github.com/postgres/postgres/blob/REL_15_STABLE/src/include/access/xlog.h
https://github.com/postgres/postgres/blob/REL_15_STABLE/src/backend/access/transam/xlog.c
例えば、PostgreSQLの内部関数 do_pg_backup_start() の名前や引数などが変更
されると、その関数を呼んでいるエクステンション pg_exclusive_backup が動かなくなる。
© 2022 NTT DATA Corporation 39
COMMIT AND CHAINや
SAVEPOINTを含む
テストしたいSQLを登録
テストするSQLの
あるべき実行結果を登録
テストの追加
将来的に同じバグが再度混入しないように、リグレッションテストにバグのテストを追加する。
https://www.postgresql.jp/document/current/html/regress.html
• テストを追加するには、テストしたいSQLとそのあるべき実行結果を登録する。
• リグレッションテストの実行では、登録されているSQLを実行して、その実行結果が登録されているあるべき実行結果と一致
するか確認する。
以下は、COMMIT AND CHAINとSAVEPOINTのバグ修正で追加されたテスト(の一部)
src/test/regress/sql/transactions.sql
+START TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE, DEFERRABLE;
+SHOW transaction_isolation;
+SHOW transaction_read_only;
+SHOW transaction_deferrable;
+SAVEPOINT x;
+COMMIT AND CHAIN; -- TBLOCK_SUBCOMMIT
・・・
src/test/regress/expected/transactions.out
+START TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE, DEFERRABLE;
+SHOW transaction_isolation;
+ transaction_isolation
+-----------------------
+ repeatable read
+(1 row)
・・・
パッチ作成
3
© 2022 NTT DATA Corporation 40
バグ修正パッチの投稿はいつでも
2021年度 2022年度
6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11
CF CF CF CF CF
v15開発
v14開発
v16開発
CF CF
Beta / RC
Beta / RC
Feature
Freeze リリース
リリース
コミュニティサポート
CF
CommitFest
パッチレビューに
集中する期間
パッチ投稿
4
© 2022 NTT DATA Corporation 41
バグ修正パッチのCommitFestへの登録
コミットまで時間がかかりそうな場合は、バグ修正パッチについてコミュニティが忘れてしまわないように、
直近のCommitFestに登録しておく。
https://commitfest.postgresql.org/
パッチ投稿
4
© 2022 NTT DATA Corporation 42
おわりに
© 2022 NTT DATA Corporation 43
困ったときは日本のコミュニティで相談も
例えば、ほぼ月1ペースで開催のアンカンファレンスでバグのLTをするなど
© 2022 NTT DATA Corporation 44
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。

More Related Content

What's hot

Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
Masahiko Sawada
 
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
NTT DATA Technology & Innovation
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
 
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングまずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
Kosuke Kida
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
NTT DATA Technology & Innovation
 
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
NTT DATA Technology & Innovation
 
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
NTT DATA Technology & Innovation
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
Masahiko Sawada
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
NTT DATA Technology & Innovation
 
Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会Masahiko Sawada
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
Hironobu Suzuki
 
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA OSS Professional Services
 
並列クエリを実行するPostgreSQLのアーキテクチャ
並列クエリを実行するPostgreSQLのアーキテクチャ並列クエリを実行するPostgreSQLのアーキテクチャ
並列クエリを実行するPostgreSQLのアーキテクチャ
Kohei KaiGai
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
NTT DATA Technology & Innovation
 

What's hot (20)

Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングまずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
 
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
 
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦
 
並列クエリを実行するPostgreSQLのアーキテクチャ
並列クエリを実行するPostgreSQLのアーキテクチャ並列クエリを実行するPostgreSQLのアーキテクチャ
並列クエリを実行するPostgreSQLのアーキテクチャ
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 

Similar to PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japan 2022 発表資料)

PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
NTT DATA Technology & Innovation
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
Atomu Hidaka
 
【NGINXセミナー】 Ingressを使ってマイクロサービスの運用を楽にする方法
【NGINXセミナー】 Ingressを使ってマイクロサービスの運用を楽にする方法【NGINXセミナー】 Ingressを使ってマイクロサービスの運用を楽にする方法
【NGINXセミナー】 Ingressを使ってマイクロサービスの運用を楽にする方法
NGINX, Inc.
 
Prometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdfPrometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdf
勇 黒沢
 
Microservices and Servcie Mesh on Azure
Microservices and Servcie Mesh on AzureMicroservices and Servcie Mesh on Azure
Microservices and Servcie Mesh on Azure
Tsukasa Kato
 
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-Hiroki Kondo
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3openrtm
 
The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)
Kimihiko Kitase
 
Reactive Workflow Argo Eventsの紹介
Reactive Workflow Argo Eventsの紹介Reactive Workflow Argo Eventsの紹介
Reactive Workflow Argo Eventsの紹介
Daisuke Taniwaki
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
NTT DATA Technology & Innovation
 
D1-2-OS2_オンプレミスのVMワークロードをGCPへ移行する
D1-2-OS2_オンプレミスのVMワークロードをGCPへ移行するD1-2-OS2_オンプレミスのVMワークロードをGCPへ移行する
D1-2-OS2_オンプレミスのVMワークロードをGCPへ移行する
Hideaki Tokida
 
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
IT エンジニアのための 流し読み Windows 10 - 入門!System Center Configration Manager
IT エンジニアのための 流し読み Windows 10 - 入門!System Center Configration ManagerIT エンジニアのための 流し読み Windows 10 - 入門!System Center Configration Manager
IT エンジニアのための 流し読み Windows 10 - 入門!System Center Configration Manager
TAKUYA OHTA
 
220523JS7.pdf
220523JS7.pdf220523JS7.pdf
220523JS7.pdf
OSSラボ株式会社
 
第1回『いまさら聞けない!システム運用・管理のコツ』 『クラウド管理・運用サービス「E.C.O」のご紹介』
第1回『いまさら聞けない!システム運用・管理のコツ』 『クラウド管理・運用サービス「E.C.O」のご紹介』第1回『いまさら聞けない!システム運用・管理のコツ』 『クラウド管理・運用サービス「E.C.O」のご紹介』
第1回『いまさら聞けない!システム運用・管理のコツ』 『クラウド管理・運用サービス「E.C.O」のご紹介』
Naoya Hashimoto
 
【de:code 2020】 リモートワークの端末を安全に使ってもらおう どこがパワフル Microsoft Endpoint Manager の Wi...
【de:code 2020】 リモートワークの端末を安全に使ってもらおう  どこがパワフル Microsoft Endpoint Manager の Wi...【de:code 2020】 リモートワークの端末を安全に使ってもらおう  どこがパワフル Microsoft Endpoint Manager の Wi...
【de:code 2020】 リモートワークの端末を安全に使ってもらおう どこがパワフル Microsoft Endpoint Manager の Wi...
日本マイクロソフト株式会社
 
Lagopus Router v19.07.1
Lagopus Router v19.07.1Lagopus Router v19.07.1
Lagopus Router v19.07.1
Tomoya Hibi
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をAtsuhiro Kubo
 
Hyperledger Fabric のプラットフォームおよびインフラ運用
Hyperledger Fabric のプラットフォームおよびインフラ運用Hyperledger Fabric のプラットフォームおよびインフラ運用
Hyperledger Fabric のプラットフォームおよびインフラ運用
Hyperleger Tokyo Meetup
 

Similar to PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japan 2022 発表資料) (20)

PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
 
【NGINXセミナー】 Ingressを使ってマイクロサービスの運用を楽にする方法
【NGINXセミナー】 Ingressを使ってマイクロサービスの運用を楽にする方法【NGINXセミナー】 Ingressを使ってマイクロサービスの運用を楽にする方法
【NGINXセミナー】 Ingressを使ってマイクロサービスの運用を楽にする方法
 
Prometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdfPrometheus超基礎公開用.pdf
Prometheus超基礎公開用.pdf
 
Microservices and Servcie Mesh on Azure
Microservices and Servcie Mesh on AzureMicroservices and Servcie Mesh on Azure
Microservices and Servcie Mesh on Azure
 
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
 
The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)
 
Reactive Workflow Argo Eventsの紹介
Reactive Workflow Argo Eventsの紹介Reactive Workflow Argo Eventsの紹介
Reactive Workflow Argo Eventsの紹介
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
D1-2-OS2_オンプレミスのVMワークロードをGCPへ移行する
D1-2-OS2_オンプレミスのVMワークロードをGCPへ移行するD1-2-OS2_オンプレミスのVMワークロードをGCPへ移行する
D1-2-OS2_オンプレミスのVMワークロードをGCPへ移行する
 
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
IT エンジニアのための 流し読み Windows 10 - 入門!System Center Configration Manager
IT エンジニアのための 流し読み Windows 10 - 入門!System Center Configration ManagerIT エンジニアのための 流し読み Windows 10 - 入門!System Center Configration Manager
IT エンジニアのための 流し読み Windows 10 - 入門!System Center Configration Manager
 
220523JS7.pdf
220523JS7.pdf220523JS7.pdf
220523JS7.pdf
 
第1回『いまさら聞けない!システム運用・管理のコツ』 『クラウド管理・運用サービス「E.C.O」のご紹介』
第1回『いまさら聞けない!システム運用・管理のコツ』 『クラウド管理・運用サービス「E.C.O」のご紹介』第1回『いまさら聞けない!システム運用・管理のコツ』 『クラウド管理・運用サービス「E.C.O」のご紹介』
第1回『いまさら聞けない!システム運用・管理のコツ』 『クラウド管理・運用サービス「E.C.O」のご紹介』
 
【de:code 2020】 リモートワークの端末を安全に使ってもらおう どこがパワフル Microsoft Endpoint Manager の Wi...
【de:code 2020】 リモートワークの端末を安全に使ってもらおう  どこがパワフル Microsoft Endpoint Manager の Wi...【de:code 2020】 リモートワークの端末を安全に使ってもらおう  どこがパワフル Microsoft Endpoint Manager の Wi...
【de:code 2020】 リモートワークの端末を安全に使ってもらおう どこがパワフル Microsoft Endpoint Manager の Wi...
 
Lagopus Router v19.07.1
Lagopus Router v19.07.1Lagopus Router v19.07.1
Lagopus Router v19.07.1
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
 
Hyperledger Fabric のプラットフォームおよびインフラ運用
Hyperledger Fabric のプラットフォームおよびインフラ運用Hyperledger Fabric のプラットフォームおよびインフラ運用
Hyperledger Fabric のプラットフォームおよびインフラ運用
 

More from NTT DATA Technology & Innovation

YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
NTT DATA Technology & Innovation
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
NTT DATA Technology & Innovation
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
NTT DATA Technology & Innovation
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
NTT DATA Technology & Innovation
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
NTT DATA Technology & Innovation
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
NTT DATA Technology & Innovation
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
NTT DATA Technology & Innovation
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
NTT DATA Technology & Innovation
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
NTT DATA Technology & Innovation
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
NTT DATA Technology & Innovation
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
NTT DATA Technology & Innovation
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
NTT DATA Technology & Innovation
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
NTT DATA Technology & Innovation
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 

More from NTT DATA Technology & Innovation (20)

YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Recently uploaded

Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 

Recently uploaded (8)

Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 

PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japan 2022 発表資料)

  • 1. © 2022 NTT DATA Corporation 1 PostgreSQL Conference Japan 2022 PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~ 2022年11月11日 株式会社NTTデータ 藤井 雅雄
  • 2. © 2022 NTT DATA Corporation 2 自己紹介 藤井 雅雄 Database Technical Lead @ NTTデータ データベース研究開発 PostgreSQL 技術支援 PostgreSQLコミッタ レプリケーション WAL圧縮 バックアップ進捗確認 pg_bigm(全文検索モジュール) コミッタ fujii_masao MasaoFujii v15に対応済!
  • 3. © 2022 NTT DATA Corporation 3 本講演について 講演資料は、NTTデータのSlideShareアカウント上で公開予定です。 https://www.slideshare.net/nttdata-tech 本講演では、PostgreSQLドキュメントにあるバグレポートガイドラインに沿いつつ、 一部主観や実例を交えながら、PostgreSQLのバグとの使い方を説明します。 ・ バグだと思ったら ・・・ PostgreSQLのバグの確認方法 ・ コミュニティに共有しよう ・・・ バグ報告のやり方 ・ 修正パッチを書いてみよう ・・・ パッチ提供と議論 (*) バグレポートガイドライン https://www.postgresql.jp/document/current/html/bug-reporting.html
  • 4. © 2022 NTT DATA Corporation 4 PostgreSQLにおけるバグ
  • 5. © 2022 NTT DATA Corporation 5 PostgreSQLはバグが少ないと言われることがあるが 2011 Coverity Scan Open Source Integrity Report 不具合密度(1000行あたりの不具合の数)が、 「Linux 2.6: 0.62」>「OSS平均: 0.45」>「PostgreSQL 9.1: 0.21」 https://codezine.jp/article/detail/6436 PostgreSQL開発コミュニティの信頼性に対する姿勢 ・ PostgreSQLの信頼性に関するFAQ https://wiki.postgresql.org/wiki/FAQ/ja#.E4.BF.A1.E9.A0.BC.E6.80.A7.28Reliability.29 我々は、DBMSの信頼性が高くなくてはその価値が無いことを理解しています。 十分テストして、安定したコードに対してバグを最小にしてからリリースするように努めてます。 ・ バグレポートガイドライン https://www.postgresql.jp/document/current/html/bug-reporting.html 最大限の注意を払っても、全てのプラットフォーム、全ての環境でPostgreSQLの機能全てが 正常に動くことは保証できません。
  • 6. © 2022 NTT DATA Corporation 6 PostgreSQLにおけるバグとは バグと見なされるのは、ドキュメントなどで謳っている仕様と実際の挙動が異なるケース ・ 各プログラムが、入力に対して間違った(仕様とは異なる)結果を返却する ・ PostgreSQL提供の各プログラムが、セグメンテーションフォルトなどで意図せずクラッシュする ...など 仕様として謳われていないことを問題報告してもバグとは見なされない ・ 仕様にない(まだサポートされていない)機能が利用できない ・ 各プログラムの実行性能が単に低い ...など 最終的には、バグと見なされるかどうかは、コミュニティ内の議論で決まる
  • 7. © 2022 NTT DATA Corporation 7 バグと見なされなかった例 pg_stat_statements: rows not updated for CREATE TABLE AS SELECT statements https://www.postgresql.org/message-id/flat/1584293755198-0.post%40n3.nabble.com ・ v13で、CREATE TABLE AS SELECTなどのユーティリティコマンドが取り扱った行数が、 pg_stat_statementsのrowsカラムにカウントされない ・ ユーティリティコマンドによるrowsカラムのカウントについて、v13ではドキュメントにそのような仕様がなく、 バグではなく機能不足と見なされて、v13では改修されず、v14で新機能として取り込み =# CREATE TABLE test AS SELECT * FROM pg_class; SELECT 387 =# SELECT query, calls, rows FROM pg_stat_statements WHERE query LIKE 'CREATE TABLE test%'; -[ RECORD 1 ]-------------------------------------- query | CREATE TABLE test AS SELECT * FROM pg_class calls | 1 rows | 0 v13以前では、CREATE TABLE AS SELECTで 387行を取り扱ったのに、rowsカラムは0のまま
  • 8. © 2022 NTT DATA Corporation 8 コミュニティの賛同でバグ扱いになることも Speedup of relation deletes during recovery https://www.postgresql.org/message- id/flat/CAHGQGwHVQkdfDqtvGVkty%2B19cQakAydXn1etGND3X0PHbZ3%2B6w%40mail.gmail.com ・ v11において、同一トランザクション内で複数のリレーションを削除すると、そのリカバリ性能が大幅に劣化 ・ この問題は仕様に反しているわけではないが、既存ユーザへの問題の影響などから、 コミュニティ内の複数の開発者がバグ扱いとすることに賛同して、v11にも問題の改修を取り込み プライマリ スタンバイ BEGIN; DROP TABLE tbl01; DROP TABLE tbl02; ... COMMIT; レプリケーション リカバリ リカバリ処理が完全停止したように見えるほど、 リカバリ性能が大幅に劣化することがあった
  • 9. © 2022 NTT DATA Corporation 9 バグ修正の取り込み バグ修正は、サポート対象のバージョン(v11~v15)と現在開発中のバージョン(v16dev)に取り込み ※()内は2022年11月11日時点のバージョン PostgreSQL開発コミュニティは、メジャーバージョンについて初回リリースから約5年間をサポート サポート終了した古いバージョン についてはバグ修正されない! https://www.postgresql.org/support/versioning/
  • 10. © 2022 NTT DATA Corporation 10 バグだと思ったら ・・・ PostgreSQLのバグの確認方法
  • 11. © 2022 NTT DATA Corporation 11 問題解決の流れ 問題の検知 問題やトラブル、期待通りでない挙動を検知する。 問題の分析や解決に必要な情報を収集する。 問題の切り分け 問題の原因となる誤り・ミス(操作誤り、設定誤り、ドキュメントの読 み違いなど)がないか確認する。 誤り・ミスの確認 問題の原因となる既知バグがないか確認する。 コミュニティへの問題報告などにより未知バグを確認する。 バグの確認 原因に応じた対策を実施して、問題を解決する。 1 2 3 4 問題の解決 5 問題の発生個所を特定する。 PostgreSQL、エクステンション、アプリケーション、OSなど 繰 り 返 し
  • 12. © 2022 NTT DATA Corporation 12 既知バグの確認 PostgreSQL開発コミュニティにはバグ管理システムがない バグ管理システムから、バグの報告内容や関連する議論、バグの対応ステータス(非バグ、未修正、修正対応中、 修正済など)などを確認できない。 PostgreSQLコミュニティの複数の情報源から既知バグかどうか確認する必要がある 1. 各マイナーバージョンのリリースノート 2. ソースレポジトリのコミットログ 3. PostgreSQL開発コミュニティのML 4. 日本PostgreSQLユーザ会のMLやSlackチャンネル 5. PostgreSQL関連ブログ記事など一般サイト など
  • 13. © 2022 NTT DATA Corporation 13 既知バグの確認例 期待する挙動 =# BEGIN; =*# SAVEPOINT s1; =*# CREATE TABLE test (i int); =*# COMMIT AND CHAIN; =*# INSERT INTO test VALUES (1); =*# ROLLBACK; =# SELECT count(*) FROM test; count ------- 0 (1 row) v13.1での挙動 =# BEGIN; =*# SAVEPOINT s1; =*# CREATE TABLE test (i int); =*# COMMIT AND CHAIN; =# INSERT INTO test VALUES (1); =# ROLLBACK; WARNING: there is no transaction in progress =# SELECT count(*) FROM test; count ------- 1 (1 row) ・ v13.1において、SAVEPOINTがあるトランザクションでCOMMIT AND CHAINを 実行したとき、次のトランザクションが開始されない ・ COMMIT AND CHAINは、現在のトランザクションをコミットして、そのトランザクションと 同じ特性(トランザクション分離レベルなど)で次のトランザクションをすぐに開始するコマンド 既知バグ の例
  • 14. © 2022 NTT DATA Corporation 14 1. リリースノートからの既知バグの確認例 問題が発生したマイナーバージョンの次のバージョンから、最新のマイナーバージョンまで、リリースノートを見て、 問題の修正が含まれていないか確認する。 各マイナーバージョンのリリースノートは、そのメジャーバージョンのドキュメントに含まれる。 例えば、v13.xのリリースノートは、v13のドキュメントから確認できる。 https://www.postgresql.org/docs/13/release.html 今回の例ではv13.1で問題が発生したため、v13.2以降のリリースノートを確認していく。 v13.3のリリースノートに今回の問題のバグ修正を確認できる。 Fix COMMIT AND CHAIN to work correctly when the current transaction has live savepoints (Fujii Masao) https://www.postgresql.org/docs/13/release-13-3.html バグ修正を確認できたマイナーバージョン(今回はv13.3)以降で問題が再現するか確認し、再現しなければ 既知バグと判断できる。
  • 15. © 2022 NTT DATA Corporation 15 2. コミットログからの既知バグの確認例 バグ修正のコミットを特定するための検索キーワードを決めて、①~④の方法で確認する。 今回の例では、「commit and chain」や「savepoints」を検索キーワードにする。 ① 手元環境にcloneしたgitソースレポジトリからgitコマンドで確認 $ git clone -b REL_13_STABLE git://git.postgresql.org/git/postgresql.git $ git log --grep="commit and chain" --grep="savepoints" -i --all-match ② PostgreSQLの公式gitソースレポジトリで検索 https://git.postgresql.org/gitweb/?p=postgresql.git;a=shortlog;h=refs/heads/REL_13_STABLE ③ GitHubにミラーされているPostgreSQLの gitソースレポジトリで検索 https://github.com/postgres/postgres ④ pgsql-committersのMLで検索 https://www.postgresql.org/search/?m=1
  • 16. © 2022 NTT DATA Corporation 16 ML 説明 pgsql-hackers 新機能の提案やバグ修正、開発課題などについて議論する pgsql-bugs ユーザからのバグ報告先。報告されたバグやその修正などについて議論する pgsql-docs ドキュメントやその問題、改修などについて議論する pgsql-committers コミットされた内容が通知される 3. PostgreSQL開発コミュニティのMLからの既知バグの確認例 PostgreSQL開発コミュニティでのコミュニケーションはMLが基本 ・ PostgreSQL公式サイトでコミュニティアカウントを作成することでMLを購読できる。 ・ バグ修正について議論されやすいMLは以下。 バグ修正の議論を特定するための検索キーワードを決めて、 MLの過去議論検索ページから確認する。 ・ 今回の例では、「commit and chain」と「savepoints」を 検索キーワードにする。 https://www.postgresql.org/search/?m=1 検索ページでは、検索キーワード(Search term)、 検索対象のML(List)、検索対象の期間(Date)、 検索結果の表示順(Sort By)を指定できる
  • 17. © 2022 NTT DATA Corporation 17 既知バグを確認する各情報源の特徴 項 番 情報源 修正済かつ リリース済 修正済かつ 未リリース 未修正 (未リリース) 1 各マイナーバージョンの リリースノート ○ 2 ソースレポジトリの コミットログ ○ ○ 3 PostgreSQL 開発コミュニティのML ○ ○ ○ 各情報源から確認できるバグの種類 開発者含む専門的なやりとり 具体的な情報 長大な議論 ユーザ向けの記述 概要レベルの情報 簡潔な説明
  • 18. © 2022 NTT DATA Corporation 18 各情報源の対応付け 1. リリースノートのソース https://github.com/postgres/postgres/blob/REL_13_STABLE/doc/src/sgml/release-13.sgml <!-- Author: Fujii Masao <fujii@postgresql.org> Branch: master [8a55cb5ba] 2021-02-19 21:57:52 +0900 Branch: REL_13_STABLE [422012c98] 2021-02-19 21:58:43 +0900 Branch: REL_12_STABLE [fadcc4e81] 2021-02-19 21:59:26 +0900 --> <para> Fix <command>COMMIT AND CHAIN</command> to work correctly when the current transaction has live savepoints (Fujii Masao) </para> 2. コミットログ $ git show 422012c98 commit 422012c98f8d929f9aa2b2e706b29512f61544e1 Author: Fujii Masao <fujii@postgresql.org> Date: Fri Feb 19 21:57:52 2021 +0900 Fix bug in COMMIT AND CHAIN command. (略) Reported-by: Arthur Nascimento Author: Fujii Masao Reviewed-by: Arthur Nascimento, Vik Fearing Discussion: https://postgr.es/m/16867-3475744069228158@postgresql.org リリースノートのソースに記載されている、各改修項目 のコミットIDから、対応するコミットログを特定 コミットログに記載されているURLから、 対応するML上の議論を特定 3. ML上の議論
  • 19. © 2022 NTT DATA Corporation 19 既知バグの修正の取り込み バグが修正されたマイナーバージョン(まだ未リリースであればリリースを待ってから)に アップデートすることで、バグ修正を取り込み • 既知バグの修正をすべて取り込めるように最新マイナーバージョンへのアップデートも検討する • ただし、取り込みたいバグ修正以外にも複数の改修項目がマイナーバージョンに含まれるため、必要に 応じてそれらがシステムやアプリケーションに影響しないか確認する必要がある • PostgreSQL開発コミュニティは、特定のバグ修正を個別パッチとして取り込む方法を提供しない
  • 20. © 2022 NTT DATA Corporation 20 コミュニティに共有しよう ・・・ バグ報告のやり方
  • 21. © 2022 NTT DATA Corporation 21 問題解決の流れ 問題の検知 問題やトラブル、期待通りでない挙動を検知する。 問題の分析や解決に必要な情報を収集する。 問題の切り分け 問題の原因となる誤り・ミス(操作誤り、設定誤り、ドキュメントの読 み違いなど)がないか確認する。 誤り・ミスの確認 問題の原因となる既知バグがないか確認する。 コミュニティへの問題報告などにより未知バグを確認す る。 バグの確認 原因に応じた対策を実施して、問題を解決する。 1 2 3 4 問題の解決 5 問題の発生個所を特定する。 PostgreSQL、エクステンション、アプリケーション、OSなど 繰 り 返 し
  • 22. © 2022 NTT DATA Corporation 22 バグ報告にあたり バグレポートガイドライン PostgreSQLに関してバグを発見した場合、ぜひ我々に連絡してください。 バグレポートはPostgreSQLをより信頼性の高いものにするために、大変重要になります。 ・・・ 私たちは、すべてのバグを直ちに修正することを約束することはできません。 そのバグが明確で、重大で、あるいは他の多くのユーザにも影響を与えるものであれば、 誰かがすぐに調査する可能性が高くなるでしょう。 ・・・ 現在計画中の大きな変更が終了するまで、バグを修正できないと判断する場合もあります。 また、単に修正が非常に困難であり、より重要な他の事項があることもあります。 早急に処置が必要な場合は、商用サポートの購入を検討してください。 https://www.postgresql.jp/document/current/html/bug-reporting.html
  • 23. © 2022 NTT DATA Corporation 23 バグ報告先 バグ報告先 説明 pgsql-bugs@lists.postgresql.org バグ報告先のML。報告されたバグやその修正などについて議論される https://www.postgresql.org/acc ount/submitbug/ バグ報告用Webフォーム。利用にはPostgreSQLコミュニティサイトへのサ インインが必要。報告内容はpgsql-bugsのMLに送信される pgsql-docs@lists.postgresql.org ドキュメントのバグ報告先のML。報告されたバグやその修正などについて議 論される security@postgresql.org セキュリティ問題のバグ報告先の非公開ML。MLには限られたメンバのみ参 加し、バグやその修正などについて非公開で議論される 報告するバグごとに適切な報告先を選ぶ 注意事項 • セキュリティ問題のバグなど公開が望ましくない報告は、pgsql-bugsやpgsql-docsの公開MLにしないこと • ユーザ向けML(pgsql-generalなど)や開発者向けML(pgsql-hackers)には、基本的にバグ報告しないこと • MLはモデレータ付のため、メールの配送が遅延する可能性がある
  • 24. © 2022 NTT DATA Corporation 24 バグ報告用Webフォーム https://www.postgresql.org/ https://www.postgresql.org/account/submitbug/
  • 25. © 2022 NTT DATA Corporation 25 報告すべきこと 問題やバグについて、事実のみをありのままに報告すること ① 問題を再現できる明確で具体的な手順 ② 問題発生時の出力結果そのもの SQL実行結果、エラーメッセージ、スタックトレースなど ③ どのような挙動や実行結果を期待していたか ④ プログラムに指定したオプションやデフォルトから変更した設定パラメータ値 ⑤ PostgreSQLのバージョン 可能であれば最新マイナーバージョンや最新メジャーバージョンで問題が再現するかの情報 ⑥ プラットフォーム情報 OSの種類やバージョンなど PostgreSQL開発者自身が問題を再現できることが、 バグ修正のための最大の一歩!!
  • 26. © 2022 NTT DATA Corporation 26 バグ報告例その1 Fix error message for MERGE foreign tables https://www.postgresql.org/message-id/flat/af88be42757c90e163fc4e27a2e29e0e%40oss.nttdata.com 外部テーブルへの 直のMERGE実行では 期待通りのエラーメッセージ パーティションテーブル経由の 外部テーブルへの MERGE実行では 想定外のエラーメッセージ パーティションテーブルA テーブル A2 外部 テーブル A1 テーブル A3 MERGE
  • 27. © 2022 NTT DATA Corporation 27 バグ報告例その2 Backup command and functions can cause assertion failure and segmentation fault https://www.postgresql.org/message-id/flat/3374718f-9fbf-a950-6d66-d973e027f44c%40oss.nttdata.com 問題の概要と バージョン情報 問題の 再現手順 エラーメッセージと スタックトレース
  • 28. © 2022 NTT DATA Corporation 28 バグ報告へのよくある反応と必要な対応 報告の問題をバグとして取り扱うべき根拠などを見直し、改めて説明する。 これは期待通りの挙動で、 バグではありません! 再現手順やその前提となる条件・設定などに漏れ・誤りがないか見直し、 再現手順を改めて提供する。 私の環境では問題を 再現できませんでした。 可能であれば、最新のマイナーバージョンやメジャーバージョンで問題が 再現するか確認した結果を報告する。 最新バージョンでも 問題は再現しますか? コミュニティWikiに記載の方法で、 問題発生時のスタックトレースを取得して報告する。 https://wiki.postgresql.org/wiki/Generating_a_stack_trace_of_a_PostgreSQL_backend 問題発生時のスタックトレース を提供してください。 必要な対応 よくある反応 可能であれば、手元にPostgreSQLの開発環境を用意して、 パッチを適用した版で問題が解消するか確認した結果を報告する。 バグ修正パッチを作成しました。 このパッチで問題が解消します か?
  • 29. © 2022 NTT DATA Corporation 29 報告したバグの修正がコミットされると バグの報告者として名前が コミットログに掲載される! 以降、バグ修正されたマイナーバージョンがリリースされたら、アップデートすることでバグ修正を取り込み
  • 30. © 2022 NTT DATA Corporation 30 修正パッチを書いてみよう ・・・ パッチ提供と議論
  • 31. © 2022 NTT DATA Corporation 31 バグ修正パッチを本当に自分が書くべきか? 基本的に、バグ修正パッチの作成はコミュニティの開発者に任せた方が、バグをいち早く確実に解消できる。 バグ修正に関与したい場合も、ML上での技術的な議論への参加やパッチレビューから始めるのがよい。 参考: 「PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)」 https://www.slideshare.net/nttdata-tech/postgresql-global-development-group-postgresql-conference-japan-2021-nttdata もし書くとしたら • バグ報告したが、誰も修正パッチを作成してくれないため • パッチ作成を通じて、PostgreSQLの実装を学びたいため • バグ修正者としてリリースノートに自分の名前を載せたい などあるが・・・
  • 32. © 2022 NTT DATA Corporation 32 バグ修正パッチの開発の流れ 開発環境準備 バグ解析 パッチ作成 パッチ投稿 1 2 3 4 レビュー対応 5 繰 り 返 し コミット 6 パッチを作成、適用、コンパイル、テストできる開発環境を準備する バグ関連のソースを読み、デバッガで動きを追い、バグやその原因を 実装レベルで解析する バグを修正するパッチを作成して、パッチにより問題が解消すること を確認する コミュニティでパッチをレビューして、パッチの不備を改修する コミッタがバグ修正パッチをPostgreSQLに取り込む バグの報告とともに修正パッチをコミュニティに投稿する
  • 33. © 2022 NTT DATA Corporation 33 デバッガによるバックエンドプロセスの処理実装の確認 ① PostgreSQLをデバッガで追いやすいように、--enable-debugとCFLAGS=-O0を指定してコンパイルする。 $ ./configure --prefix=/opt/pgsql --enable-debug --enable-cassert --enable-tap-tests CFLAGS=-O0 $ make -j 4 install ② PostgreSQLを起動して、psqlからPostgreSQLに接続し、バックエンドプロセスのpidを取得する。 $ initdb -D data --no-locale --encoding=UTF8 $ pg_ctl -D data start $ psql =# SELECT pg_backend_pid(); ③ gdbを起動して、②で取得したpidを指定してバックエンドプロセスにアタッチする。以下ではEmacs経由でgdb実行。 $ emacs & Emacs内で M-x gdb コマンドでgdbを起動 (gdb) attach <②で取得のpid> バグ解析 2 VSCodeでデバッグしたい場合は、 発表資料「VSCodeで作るPostgreSQL開発環境」を参考に。 https://www.slideshare.net/nttdata-tech/postgresql-vscode- development-environment-pgunconf25-nttdata
  • 34. © 2022 NTT DATA Corporation 34 デバッガによるバックエンドプロセスの処理実装の確認 ④ PostgreSQL内の関数をブレークポイントに設定する。 例えば、SQL実行の起点となるexec_simple_query関数を設定する。 (gdb) b exec_simple_query ⑤ ②で起動のpsqlから、デバッガで処理を追いたいSQLを実行する。 以下ではCOMMIT AND CHAINの処理実装を確認。 =# COMMIT AND CHAIN; ⑥ デバッガをブレークポイントまで進めて、 以降は、gdbのコマンドを使って、処理を1ステップずつ進めたり、変数の内容を調査するなどして処理実装を追っていく。 (gdb) c (gdb) ... バグ解析 2
  • 35. © 2022 NTT DATA Corporation 35 バグの原因となったコミットの特定 以前は期待通りの挙動で、いつの間にか問題が発生するようになったバグについては、バグを混入させたコミットを特定す ることで、バグ解析や修正検討の役に立つ。 例えば、以下では、v13.4以降でバグを混入させたコミットをgit bisectで特定する。 ① v13のブランチで、git bisectの探索範囲としてv13.4(REL_13_4)から最新(HEAD)までを指定する。 $ git checkout REL_13_STABLE $ git bisect start HEAD REL_13_4 ② バグを試験するスクリプトを用意して、git bisectでバグを混入させたコミットを探索する。 $ git bisect run /PATH_TO/test_script.sh ... 162ade612f1543389bd105fba82ea7e60c5b82c9 is the first bad commit commit 162ade612f1543389bd105fba82ea7e60c5b82c9 Author: Fujii Masao <fujii@postgresql.org> Date: Tue Jul 12 11:53:29 2022 +0900 Fix assertion failure and segmentation fault in backup code. バグ解析 2 PostgreSQLをコンパイル、起動して、 問題を再現させるSQLなどを実行
  • 36. © 2022 NTT DATA Corporation 36 パッチを作成するブランチ バグ修正パッチは、バグを確認したバージョンのブランチではなく、基本的にmasterブランチに対して作成する。 masterブランチへのパッチのコミット時に、コミッタが、バグが存在する他のバージョンへのバックポートを行う。 ① masterブランチでソースを最新化して、バグ修正用のブランチを作成する。 $ git checkout master $ git pull $ git checkout -b bugfix ② バグを修正して、その修正内容をコミットする。 $ emacs ... $ git commit -a -m "Fix bug ..." ③ masterブランチからバグ修正用ブランチへのソース差分をパッチとして作成する。 $ git format-patch master $ ls *.patch 0001-Fix-bug.patch パッチ作成 3
  • 37. © 2022 NTT DATA Corporation 37 互換性の保証 マイナーバージョン間の互換性を保証するため、基本的に、バグ修正パッチは以下を変更してはならない。 • ユーザインタフェース 例えば、コマンドやオプション、設定パラメータなどの名前を変更すること • システムカタログ 例えば、システム関数を追加・削除するなどしてpg_procなどのシステムカタログを変更すること • データレイアウト 例えば、ストレージ上のDBデータやWALの物理レイアウトを変更すること • 通信プロトコル 例えば、ストリーミングレプリケーションのプライマリからスタンバイへのWAL転送プロトコルを変更すること • ABI (Application Binary Interface) 例えば、エクステンションなどから参照される可能性があるPostgreSQL内部の関数や構造体、変数などについて 名前や構造を変更すること パッチ作成 3
  • 38. © 2022 NTT DATA Corporation 38 ABIの互換性が保証されないと パッチ作成 3 エクステンション pg_exclusive_backup のソース https://github.com/MasaoFujii/pg_exclusive_backup/blob/main/pg_exclusive_backup.c PostgreSQL15のソース https://github.com/postgres/postgres/blob/REL_15_STABLE/src/include/access/xlog.h https://github.com/postgres/postgres/blob/REL_15_STABLE/src/backend/access/transam/xlog.c 例えば、PostgreSQLの内部関数 do_pg_backup_start() の名前や引数などが変更 されると、その関数を呼んでいるエクステンション pg_exclusive_backup が動かなくなる。
  • 39. © 2022 NTT DATA Corporation 39 COMMIT AND CHAINや SAVEPOINTを含む テストしたいSQLを登録 テストするSQLの あるべき実行結果を登録 テストの追加 将来的に同じバグが再度混入しないように、リグレッションテストにバグのテストを追加する。 https://www.postgresql.jp/document/current/html/regress.html • テストを追加するには、テストしたいSQLとそのあるべき実行結果を登録する。 • リグレッションテストの実行では、登録されているSQLを実行して、その実行結果が登録されているあるべき実行結果と一致 するか確認する。 以下は、COMMIT AND CHAINとSAVEPOINTのバグ修正で追加されたテスト(の一部) src/test/regress/sql/transactions.sql +START TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE, DEFERRABLE; +SHOW transaction_isolation; +SHOW transaction_read_only; +SHOW transaction_deferrable; +SAVEPOINT x; +COMMIT AND CHAIN; -- TBLOCK_SUBCOMMIT ・・・ src/test/regress/expected/transactions.out +START TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE, DEFERRABLE; +SHOW transaction_isolation; + transaction_isolation +----------------------- + repeatable read +(1 row) ・・・ パッチ作成 3
  • 40. © 2022 NTT DATA Corporation 40 バグ修正パッチの投稿はいつでも 2021年度 2022年度 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 CF CF CF CF CF v15開発 v14開発 v16開発 CF CF Beta / RC Beta / RC Feature Freeze リリース リリース コミュニティサポート CF CommitFest パッチレビューに 集中する期間 パッチ投稿 4
  • 41. © 2022 NTT DATA Corporation 41 バグ修正パッチのCommitFestへの登録 コミットまで時間がかかりそうな場合は、バグ修正パッチについてコミュニティが忘れてしまわないように、 直近のCommitFestに登録しておく。 https://commitfest.postgresql.org/ パッチ投稿 4
  • 42. © 2022 NTT DATA Corporation 42 おわりに
  • 43. © 2022 NTT DATA Corporation 43 困ったときは日本のコミュニティで相談も 例えば、ほぼ月1ペースで開催のアンカンファレンスでバグのLTをするなど
  • 44. © 2022 NTT DATA Corporation 44 その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です。