© 2021 NTT DATA Corporation
VSCodeで作るPostgreSQL開発環境
2021年7月6日 第25回PostgreSQLアンカンファレンス@オンライン
株式会社NTTデータ 技術開発本部
加藤 慎也
© 2021 NTT DATA Corporation 2
自己紹介
 名前
‒ 加藤 慎也 @ShinyaKato_
 所属
‒ 株式会社NTTデータ 技術開発本部
 経歴
‒ 入社2年目社員
‒ 第20回 PostgreSQLアンカンファレンス@オンラインで
「PostgreSQL初心者がパッチを提案してからコミットされるまで」を発表しました
‒ https://www.slideshare.net/nttdata-tech/postgresql-first-patch
‒ あたたかいコメントありがとうございました!
© 2021 NTT DATA Corporation 3
YouTubeチャンネル “NTT DATA Tech”
技術取り組み、活用情報を中心にお届けします
https://www.youtube.com/NTTDATATech
© 2021 NTT DATA Corporation 4
VSCodeで作るPostgreSQL開発環境
© 2021 NTT DATA Corporation 5
今回構築する環境のイメージ図
Windows 10
WSL
(Ubuntu 20.04)
PostgreSQL
VSCode
GUI
デバッグ
GDB
ブレークポイント
コールスタック
変数表示
動作環境
• Window 10
• 未確認ですがmacOSやLinuxでも構築できる
と思います
• WSL Ubuntu 20.04 LTS
• PostgreSQL 14 Beta 1
• GDB 9.2
• Visual Studio Code 1.57
© 2021 NTT DATA Corporation 6
モチベーション
 なぜVSCodeか?
‒ 個人的に一番使いやすい
‒ GUIで直感的に操作でき、習得コストが低い
 なぜデバッガを使うのか?
‒ PostgreSQLのような巨大なプログラムを目で追うのは大変
‒ 実際のコードの実行の流れを追うことによって、PostgreSQLの
動く仕組みが理解できる
‒ なので、PostgreSQLを開発する人だけでなく、PostgreSQL内部を
知りたい人にもおすすめ
© 2021 NTT DATA Corporation 7
準備 - WSLインストール
 Microsoft StoreからUbuntu 20.04 LTSをインストール
© 2021 NTT DATA Corporation 8
準備 - パッケージのインストール
 PostgreSQLのインストールに必要なパッケージ
 TAPテストに必要なパッケージをインストール
 GDBのインストール
$ sudo apt install gcc make flex libreadline-dev bison zlib1g-dev
$ sudo apt install gdb
$ sudo apt install libtest-simple-perl libtest-harness-perl libipc-
run-perl
© 2021 NTT DATA Corporation 9
準備 - PostgreSQLインストール
 ソースコードをダウンロードし、コンパイル、インストール
$ git clone http://git.postgresql.org/git/postgresql.git
$ cd postgresql
$ ./configure 
--enable-debug 
--enable-cassert 
--enable-tap-tests 
--prefix=/home/shinya/pgsql/master 
CFLAGS=-O0
$ make
$ make install
デバッグシンボル付きでコンパイル
アサーションチェックを有効
Perl TAPツールを使ったテストを有効
コンパイル時の最適化をオフ
インストール先を指定
デバッグしやすいように
オプションを指定する
© 2021 NTT DATA Corporation 10
準備 – PostgreSQL起動
 DBクラスタを作成し、PostgreSQL起動
$ cd /home/shinya/pgsql/master
$ bin/initdb –D data -–encoding=UTF8 –-no-locale
$ bin/pg_ctl –D data start
© 2021 NTT DATA Corporation 11
準備 - VSCodeインストール
 公式サイトからダウンロード、インストール
‒ https://azure.microsoft.com/ja-jp/products/visual-studio-code/
 以下の拡張機能をインストール
‒ Remote - WSL 0.56.5
‒ C/C++ 1.4.1
© 2021 NTT DATA Corporation 12
デバッグ手順
 Ctrl+Shift+Pでコマンドパレットを開き、
「Remote-WSL: New WSL Window」をクリック
 サイドバーの「Open Folder」をクリックし、
PostgreSQLをインストールしたフォルダを選択
 Ctrl+Shift+@でターミナルを起動
 PostgreSQLに接続
‒ $ bin/psql postgres
 バックエンドのプロセスIDを確認
‒ =# SELECT pg_backend_pid();
 F5を押しC++(GDB/LLDB)を選択すると、launch.jsonが作成される
 launch.jsonを記述し、F5を押すとデバッグが開始
© 2021 NTT DATA Corporation 13
launch.json
 デバッグ設定を記述
{
"version": "0.2.0",
"configurations": [
{
"name": "postgres",
"type": "cppdbg",
"request": "attach",
"program":
"${workspaceFolder}/bin/postgres",
"processId": 1172,
"MIMode": "gdb",
"miDebuggerPath":
"/usr/bin/gdb"
}
]
}
任意の名前を設定
デバッガのタイプを設定
プロセスをアタッチする場合、attachを設定
使用するデバッガ(gdbまたはlldb)を設定
プログラムの場所を設定
アタッチするプロセスのプロセスIDを設定
デバッガのパスを設定
© 2021 NTT DATA Corporation 14
launch.json(マルチプロセス)
 デバッグ設定を記述
{
"version": "0.2.0",
"configurations": [
{
"name": "postgres",
"type": "cppdbg",
"request": "attach",
"program": "${workspaceFolder}/bin/postgres",
"processId": 1172,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
},
{
"name": "checkpointer",
"type": "cppdbg",
"request": "attach",
"program": "${workspaceFolder}/bin/postgres",
"processId": 830,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
}
],
"compounds": [
{
"name": "postgres/checkpointer",
"configurations": ["postgres", "checkpointer"]
}
]
}
アタッチするプロセスの情報を記述
同時にデバッグするプロセスの名前を列挙
© 2021 NTT DATA Corporation 15
デバッグの開始
ブレークポイント
コールスタック
変数表示
ターミナル デバッグコンソール
F5:続行
F10:ステップオーバ
F11:ステップイン
Shift+F11:ステップアウト
© 2021 NTT DATA Corporation 16
ハマったところ
 プロセスにアタッチするのが失敗
‒ デフォルトではptraceシステムコールでプロセスにアタッチできないようになっている
‒ 一時的にアタッチできるようにする
‒ $ echo 0 > /proc/sys/kernel/yama/ptrace_scope
‒ 永続的にアタッチできるようにする
‒ /etc/sysctl.d/10-ptrace.conf の kernel.yama.ptrace_scope=0 に変更
 シグナルが送られてGDBが止まってしまう
‒ シグナルを無視するようにGDBを設定
‒ ~/.gdbinit に以下を書いておく
‒ handle SIGUSR1 nostop noprint pass
‒ handle SIGINT nostop noprint pass
© 2021 NTT DATA Corporation 17
まとめ
 VSCodeでPostgreSQLの開発をしましょう!
© 2021 NTT DATA Corporation
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。

VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)

  • 1.
    © 2021 NTTDATA Corporation VSCodeで作るPostgreSQL開発環境 2021年7月6日 第25回PostgreSQLアンカンファレンス@オンライン 株式会社NTTデータ 技術開発本部 加藤 慎也
  • 2.
    © 2021 NTTDATA Corporation 2 自己紹介  名前 ‒ 加藤 慎也 @ShinyaKato_  所属 ‒ 株式会社NTTデータ 技術開発本部  経歴 ‒ 入社2年目社員 ‒ 第20回 PostgreSQLアンカンファレンス@オンラインで 「PostgreSQL初心者がパッチを提案してからコミットされるまで」を発表しました ‒ https://www.slideshare.net/nttdata-tech/postgresql-first-patch ‒ あたたかいコメントありがとうございました!
  • 3.
    © 2021 NTTDATA Corporation 3 YouTubeチャンネル “NTT DATA Tech” 技術取り組み、活用情報を中心にお届けします https://www.youtube.com/NTTDATATech
  • 4.
    © 2021 NTTDATA Corporation 4 VSCodeで作るPostgreSQL開発環境
  • 5.
    © 2021 NTTDATA Corporation 5 今回構築する環境のイメージ図 Windows 10 WSL (Ubuntu 20.04) PostgreSQL VSCode GUI デバッグ GDB ブレークポイント コールスタック 変数表示 動作環境 • Window 10 • 未確認ですがmacOSやLinuxでも構築できる と思います • WSL Ubuntu 20.04 LTS • PostgreSQL 14 Beta 1 • GDB 9.2 • Visual Studio Code 1.57
  • 6.
    © 2021 NTTDATA Corporation 6 モチベーション  なぜVSCodeか? ‒ 個人的に一番使いやすい ‒ GUIで直感的に操作でき、習得コストが低い  なぜデバッガを使うのか? ‒ PostgreSQLのような巨大なプログラムを目で追うのは大変 ‒ 実際のコードの実行の流れを追うことによって、PostgreSQLの 動く仕組みが理解できる ‒ なので、PostgreSQLを開発する人だけでなく、PostgreSQL内部を 知りたい人にもおすすめ
  • 7.
    © 2021 NTTDATA Corporation 7 準備 - WSLインストール  Microsoft StoreからUbuntu 20.04 LTSをインストール
  • 8.
    © 2021 NTTDATA Corporation 8 準備 - パッケージのインストール  PostgreSQLのインストールに必要なパッケージ  TAPテストに必要なパッケージをインストール  GDBのインストール $ sudo apt install gcc make flex libreadline-dev bison zlib1g-dev $ sudo apt install gdb $ sudo apt install libtest-simple-perl libtest-harness-perl libipc- run-perl
  • 9.
    © 2021 NTTDATA Corporation 9 準備 - PostgreSQLインストール  ソースコードをダウンロードし、コンパイル、インストール $ git clone http://git.postgresql.org/git/postgresql.git $ cd postgresql $ ./configure --enable-debug --enable-cassert --enable-tap-tests --prefix=/home/shinya/pgsql/master CFLAGS=-O0 $ make $ make install デバッグシンボル付きでコンパイル アサーションチェックを有効 Perl TAPツールを使ったテストを有効 コンパイル時の最適化をオフ インストール先を指定 デバッグしやすいように オプションを指定する
  • 10.
    © 2021 NTTDATA Corporation 10 準備 – PostgreSQL起動  DBクラスタを作成し、PostgreSQL起動 $ cd /home/shinya/pgsql/master $ bin/initdb –D data -–encoding=UTF8 –-no-locale $ bin/pg_ctl –D data start
  • 11.
    © 2021 NTTDATA Corporation 11 準備 - VSCodeインストール  公式サイトからダウンロード、インストール ‒ https://azure.microsoft.com/ja-jp/products/visual-studio-code/  以下の拡張機能をインストール ‒ Remote - WSL 0.56.5 ‒ C/C++ 1.4.1
  • 12.
    © 2021 NTTDATA Corporation 12 デバッグ手順  Ctrl+Shift+Pでコマンドパレットを開き、 「Remote-WSL: New WSL Window」をクリック  サイドバーの「Open Folder」をクリックし、 PostgreSQLをインストールしたフォルダを選択  Ctrl+Shift+@でターミナルを起動  PostgreSQLに接続 ‒ $ bin/psql postgres  バックエンドのプロセスIDを確認 ‒ =# SELECT pg_backend_pid();  F5を押しC++(GDB/LLDB)を選択すると、launch.jsonが作成される  launch.jsonを記述し、F5を押すとデバッグが開始
  • 13.
    © 2021 NTTDATA Corporation 13 launch.json  デバッグ設定を記述 { "version": "0.2.0", "configurations": [ { "name": "postgres", "type": "cppdbg", "request": "attach", "program": "${workspaceFolder}/bin/postgres", "processId": 1172, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb" } ] } 任意の名前を設定 デバッガのタイプを設定 プロセスをアタッチする場合、attachを設定 使用するデバッガ(gdbまたはlldb)を設定 プログラムの場所を設定 アタッチするプロセスのプロセスIDを設定 デバッガのパスを設定
  • 14.
    © 2021 NTTDATA Corporation 14 launch.json(マルチプロセス)  デバッグ設定を記述 { "version": "0.2.0", "configurations": [ { "name": "postgres", "type": "cppdbg", "request": "attach", "program": "${workspaceFolder}/bin/postgres", "processId": 1172, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb", }, { "name": "checkpointer", "type": "cppdbg", "request": "attach", "program": "${workspaceFolder}/bin/postgres", "processId": 830, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb", } ], "compounds": [ { "name": "postgres/checkpointer", "configurations": ["postgres", "checkpointer"] } ] } アタッチするプロセスの情報を記述 同時にデバッグするプロセスの名前を列挙
  • 15.
    © 2021 NTTDATA Corporation 15 デバッグの開始 ブレークポイント コールスタック 変数表示 ターミナル デバッグコンソール F5:続行 F10:ステップオーバ F11:ステップイン Shift+F11:ステップアウト
  • 16.
    © 2021 NTTDATA Corporation 16 ハマったところ  プロセスにアタッチするのが失敗 ‒ デフォルトではptraceシステムコールでプロセスにアタッチできないようになっている ‒ 一時的にアタッチできるようにする ‒ $ echo 0 > /proc/sys/kernel/yama/ptrace_scope ‒ 永続的にアタッチできるようにする ‒ /etc/sysctl.d/10-ptrace.conf の kernel.yama.ptrace_scope=0 に変更  シグナルが送られてGDBが止まってしまう ‒ シグナルを無視するようにGDBを設定 ‒ ~/.gdbinit に以下を書いておく ‒ handle SIGUSR1 nostop noprint pass ‒ handle SIGINT nostop noprint pass
  • 17.
    © 2021 NTTDATA Corporation 17 まとめ  VSCodeでPostgreSQLの開発をしましょう!
  • 18.
    © 2021 NTTDATA Corporation その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です。

Editor's Notes

  • #4 情報発信については、NTT DATA Tech という YouTubeチャンネルを開設しました。 10月に開催したNTTデータ テクノロジーカンファレンスの模様や 技術トピックの解説映像などを、順次公開していきます。 こちらもあわせてご覧ください。