SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
Copyright 2013 Metro Systems. 1
PostgreSQL開発
ことはじめ
第27回 しくみ+アプリケーション勉強会
2013年10月5日
株式会社メトロシステムズ
花田 茂
Copyright 2013 Metro Systems. 2
自己紹介
●
氏名
– 花田 茂(はなだ しげる)
●
所属
– 株式会社メトロシステムズ
●
メールアドレス
– shigeru.hanada@gmail.com
●
Twitter
– @s87
●
ブログ
– http://d.hatena.ne.jp/s87/
Copyright 2013 Metro Systems. 3
アジェンダ
●
PostgreSQLの進化
●
PostgreSQL開発の流れ
●
パッチレビュー
●
開発環境の用意
●
PostgreSQLのビルド
●
ソースを読んでみましょう
●
動きを見てみましょう
●
改造してみましょう
●
提案してみましょう
●
開発関連の情報源
Copyright 2013 Metro Systems. 4
PostgreSQLの進化(1)
●
9.3の主な変更点
– Materialized Views(Kevin Grittner)
– Auto-Updatable Views(Dean Rasheed)
– Advanced JSON support(Andrew Danstan)
– LATERAL support(Tom Lane)
– Writable FDW(KaiGai Kohei)
– Add postgres_fdw(Shigeru Hanada)
– Event Triggers(Dimitri Fontaine, Robert Haas, Álvaro
Herrera)
– Checksum Data Pages(Simon Riggs, Jef Davis, Greg Smith,
Ants Aasma)
– Efcient Foreign Key Locks(Álvaro Herrera, Noah Misch,
Andres Freund, Alexander Shulgin, Marti Raudsepp)
– Reduce System V Memory requirement(Robert Haas)
Copyright 2013 Metro Systems. 5
PostgreSQLの進化(2)
●
9.3の主な変更点
– Materialized Views(Kevin Grittner)
– Auto-Updatable Views(Dean Rasheed)
– Advanced JSON support(Andrew Danstan)
– LATERAL support(Tom Lane)
– Writable FDW(KaiGai Kohei)
– Add postgres_fdw(Shigeru Hanada)
– Event Triggers(Dimitri Fontaine, Robert Haas, Álvaro
Herrera)
– Checksum Data Pages(Simon Riggs, Jef Davis, Greg Smith,
Ants Aasma)
– Efcient Foreign Key Locks(Álvaro Herrera, Noah Misch,
Andres Freund, Alexander Shulgin, Marti Raudsepp)
– Reduce System V Memory requirement(Robert Haas)
Committer
Major Contributor
Contributor
Others
Copyright 2013 Metro Systems. 6
PostgreSQLの進化(3)
●
PostgreSQLはオープンソースソフトウェア
●
コミュニティが著作権を持ち、一定の条件を
満たせば開発に参加可能!
Copyright 2013 Metro Systems. 7
PostgreSQLの進化(4)
●
例:View関連のリリースノート
Copyright 2013 Metro Systems. 8
PostgreSQLの進化(5)
●
例:View関連のリリースノート
機能追加のクレジットは個人名
所属企業やスポンサー企業の名前は
メーリングリストでの言及のみOK
Copyright 2013 Metro Systems. 9
PostgreSQL開発の流れ(1)
●
メジャーリリースは一年に一度
●
9.3の開発スケジュール
– 2012年
●
Developer Meeting(5月)
●
CommitFest(6月、9月、11月)
– 2013年
●
CommitFest(1月)
●
Feature Freeze・αテスト(4月)
●
βテスト(5月〜)
●
Release Candidateリリース(8月)
●
正式リリース(9月)
Copyright 2013 Metro Systems. 10
PostgreSQL開発の流れ(2)
●
Developer Meeting
– 主要な開発者が集まって、F2Fで議論
●
次バージョンで開発したい内容の提案
●
開発の進め方の議論
– オタワで開催されるPGconと同時期に開催
●
Developer Meeting以外にもCluster Summit等も
– 議論の内容はwikiで公開
●
http://wiki.postgresql.org/wiki/PgCon_2013_
Developer_Meeting
Copyright 2013 Metro Systems. 11
PostgreSQL開発の流れ(3)
●
CommitFest(コミットフェスト)
– 過去の苦い経験から生まれた、新機能取り込みの
サイクル
●
以前は、パッチを投稿してもレビューしてもらえず埋も
れていった機能も
●
機能開発期間とレビュー・取り込み期間を明確にし
て、開発リソースを効率よく活用するための仕組み
●
詳細情報はPostgreSQL Wikiにて
– http://wiki.postgresql.org/wiki/CommitFest
– 最近はCommitFest Managerという進行役がい
て、レビュー状況などを管理
Copyright 2013 Metro Systems. 12
PostgreSQL開発の流れ(4)
●
CommitFestアプリ
– 投稿されたパッチは、専用Webアプリで管理
●
https://commitfest.postgresql.org
●
利用にはPostgreSQLコミュニティアカウントが必要
– https://www.postgresql.org/account/signup/
Copyright 2013 Metro Systems. 13
PostgreSQL開発の流れ(5)
●
CommitFestの状態
– Future
●
将来開催予定
– Open
●
パッチ登録受付中
– In Progress
●
現在進行中
– Closed
●
終了
Copyright 2013 Metro Systems. 14
PostgreSQL開発の流れ(6)
●
CommitFestでのパッチ管理
– パッチは、Webベースの専用アプリで管理
●
https://commitfest.postgresql.org
●
PostgreSQLコミュニティアカウントが必要
– パッチを作成したら、pgsql-hackers MLに投稿
し、そのメールのMessage-IDを「Open」状態
のCommitFestに登録
– CommitFestが始まると、レビュワーがついて
パッチをレビューしてくれるので、開発者はレ
ビューコメントに対応
Copyright 2013 Metro Systems. 15
PostgreSQL開発の流れ(7)
●
CommitFestでのパッチ状態
– Needs Review
●
開発者がパッチを投げてレビュー待ち
– Waiting on Author
●
レビューコメントが付いて開発者対応待ち
– Ready for Committer
●
レビューワーがOKを出してコミッタの判断待ち
– Committed
●
晴れてコミット!
– Returned with Feedback
●
本CFではこれ以上扱わない、次回以降に再挑戦
Copyright 2013 Metro Systems. 16
PostgreSQL開発の流れ(8)
●
CommitFestでのレビュー
– レビューの仕方は日本語ドキュメントで!
●
http://wiki.postgresql.org/wiki/Reviewing_a_P
atch/ja
– 永安さんのブログにも整理されています!
●
http://pgsqldeepdive.blogspot.jp/2013/06/co
mmitfestpatchreview.html
– Round Robin Reviewerという制度も!
●
比較的簡単なパッチをCF Managerが割り当ててくれ
ます
Copyright 2013 Metro Systems. 17
PostgreSQL開発の流れ(9)
●
レビューは開発参加の第一歩!
– パッチを提案する人は必ず他者のパッチをレ
ビューする決まり
●
つまり、レビューできないとパッチが投げられない!
– いきなり全体を把握するのは困難(というか無
理)なので、簡単なパッチのレビューをとっかか
りにするのは効果的!
– 正式にレビュワーとして登録しなくても、他者の
レビュー結果を自分のものと比べると勉強になり
ます!
Copyright 2013 Metro Systems. 18
パッチレビュー(1)
●
何をレビューすればいいの?
– 提案レビュー
●
パッチフォーマット
●
パッチ適用可否
●
ドキュメントやテストの充足
– 仕様レビュー
●
パッチの目的適合性、必要性、重複度
●
SQL標準への準拠
●
他の箇所との整合性
Copyright 2013 Metro Systems. 19
パッチレビュー(2)
●
何をレビューすればいいの?
– 機能レビュー
●
公言している機能の実現度
●
コーナーケース(重箱の隅)の完成度
●
アサーション違反やクラッシュケースの確認
– 性能試験
●
性能低下を招かないこと
●
性能向上パッチの場合の性能改善度
Copyright 2013 Metro Systems. 20
パッチレビュー(3)
●
何をレビューすればいいの?
– コーティングレビュー
●
コーディング規約の準拠
– http://wiki.postgresql.org/wiki/Developer_FAQ#What.27s_
the_formatting_style_used_in_PostgreSQL_source_code.3F
●
移植性や多環境での動作確認
●
コードと整合した適切なコメント
●
セキュリティ上の考慮
– アーキテクチャレビュー
●
アーキテクチャ・他の機能・モジュールとの整合性
●
将来的に問題となる依存性などがないか
– レビューのレビュー
●
レビューが適切になされたか
Copyright 2013 Metro Systems. 21
パッチレビュー(4)
●
レビューしたいけど環境がない!
– レビューワーはVMが無料で借りられます!
As part of an ongoing effort to encourage patch review for the
PostgreSQL project, we will be funding cloud servers for patch reviewers
and testers who need them for CommitFests. That is, if you want to help
with reviewing or testing a patch for a CommitFest, and don't have your
own test server to use, the PostgreSQL project (via our funds at
Software In the Public Interest) will pay for you to use a cloud server
for the duration of your review/testing.
So, if "I don't have anywhere to test it" was your excuse for not
reviewing in the past, time to stop making excuses and start reviewing!
Since these are cloud servers, they won't work well for performance
testing. However, they will be excellent for testing replication.
If you need one of these, please contact me to allocate a VM for you.
2013-07-13 Josh Berkus氏のメールより
Copyright 2013 Metro Systems. 22
パッチレビュー(5)
●
レビューしたいけど環境がない!
– VMでCentOS入れとけば十分です!
●
Windowsでのビルドはちょっと手間がかかるの
で、Linux環境がお勧め
– 一応マニュアルにやり方載ってます
●
逆に言うと、Windows環境でもレビューすると喜ばれ
るでしょう!
– Macならいくつかツール入れれば簡単に用意でき
ます
Copyright 2013 Metro Systems. 23
開発環境の用意(1)
●
開発環境に必要なもの
– OS
●
Unix、Linux、Mac OS Xなど
– ツール
●
gccなどのCコンパイラ
●
bison/flex/perl
●
DocBook(ドキュメントコンパイル用)
●
git
●
お好みのエディタ(私はvim)
Copyright 2013 Metro Systems. 24
開発環境の用意(2)
●
ソース持ってきましょう
– gitで開発リポジトリをクローン
●
git://git.postgresql.org/git/postgresql.git
●
全versionの変更履歴が手元に届きます
●
githubにもミラーがあります
[tmp]$ time git clone git://git.postgresql.org/git/postgresql.git
Cloning into 'postgresql'...
remote: Counting objects: 478279, done.
remote: Compressing objects: 100% (81023/81023), done.
remote: Total 478279 (delta 400814), reused 472740 (delta 395295)
Receiving objects: 100% (478279/478279), 137.90 MiB | 1.81 MiB/s, done.
Resolving deltas: 100% (400814/400814), done.
real 2m9.138s
user 0m32.854s
sys 0m6.458s
新宿のルノアールのau wifiで計測
ここでは7:07程度@au LTE
Copyright 2013 Metro Systems. 25
開発環境の用意(3)
●
パッチ当てる場合は、ブランチに注意
– 次バージョンはmasterブランチで開発
●
過去バージョンはREL9_3_STABLEなどのブランチ
[postgresql(master)]$ git branch -r
origin/HEAD -> origin/master
origin/REL2_0B
origin/REL6_4
origin/REL6_5_PATCHES
origin/REL7_0_PATCHES
origin/REL7_1_STABLE
...
origin/REL8_3_STABLE
origin/REL9_1_STABLE
origin/REL9_2_STABLE
origin/REL9_3_STABLE
origin/Release_1_0_3
origin/WIN32_DEV
origin/ecpg_big_bison
origin/master
[postgresql(master)]$
Copyright 2013 Metro Systems. 26
開発環境の用意(4)
●
ソースコードの構成
[postgresql(master)]$ ls -F | cat
COPYRIGHT 著作権表記
GNUmakefile.in Makefile生成元
Makefile Makefile
README PostgreSQLの簡単な説明
README.git INSTALL等がない説明
aclocal.m4 autoconf用ファイル
config/ autoconf用ファイル群
configure* configureスクリプト
configure.in
contrib/ contribモジュール
doc/ ドキュメントのソース
src/ プログラムソース
Copyright 2013 Metro Systems. 27
開発環境の用意(5)
●
ソースコードの構成(src)
[postgresql(master)]$ ls -F src/* | cat
backend/
bin/
common/
include/
interfaces/
makefiles/
pl/
port/
template/
test/
timezone/
tools/
tutorial/
バックエンドサーバ
OSコマンド(psqlやpg_dumpなど)
フロントエンド/バックエンド共通
ヘッダファイル
フロントエンドI/F(libpqやECPG)
ビルド用ファイル
手続き言語(PL/pgSQLやPL/Perlなど)
環境依存コード
環境依存のビルド設定
リグレッションテスト
タイムゾーンデータベース
開発用ツール群
SQLチュートリアル
Copyright 2013 Metro Systems. 28
開発環境の用意(6)
●
ソースコードの構成(src/backendの一部)
[postgresql(master)]$ ls -F src/backend/* | cat
access/
bootstrap/
catalog/
commands/
executor/
optimizer/
parser/
postmaster/
replication/
rewrite/
storage/
tcop/
アクセスメソッド(インデックス)
起動・初期化
システムカタログ定義
SQLコマンド
エグゼキュータ
プランナ・オプティマイザ
パーサ
サーバプロセスのエントリポイント
レプリケーション関連
リライタ
バッファ・ストーレジ・ロック管理
リクエストディスパッチ(Traffic COP)
Copyright 2013 Metro Systems. 29
開発環境の用意(7)
●
PostgreSQLの処理の流れ
– クライアントがクエリ実行
– tcopがメッセージを受け付ける
– パーサがクエリ文字列を解析し構文木を生成
●
解析の過程でカタログを参照
– リライタが構文木を書き換え(ビュー展開など)
– プランナ・オプティマイザが実行計画を生成
●
生成の過程で統計情報を参照
– エグゼキュータが実行計画に基づいて実行
●
共有バッファや抽象化されたストレージを利用
– 結果をクライアントに返却
Copyright 2013 Metro Systems. 30
PostgreSQLのビルド(1)
●
いつも通りの3ステップです
– configure、make、make install
●
ただし、レビュー・開発用には少し工夫を
– --enable-cassert
●
Assert()マクロを有効化して、プログラムバグの検出
を容易に(これがないといきなりクラッシュしたり)
– --enable-debug
●
コンパイラに-gオプション渡したり
– CFLAGS=-O0
●
コンパイラの最適化を無効にして関数や変数を実体化
Copyright 2013 Metro Systems. 31
PostgreSQLのビルド(2)
●
いつも通りの3ステップです
– configure、make、make install
●
ただし、レビュー・開発用には少し工夫を
– --enable-cassert
●
Assert()マクロを有効化して、プログラムバグの検出を容易に
(これがないといきなりクラッシュしたり)
– --enable-debug
●
コンパイラに-gオプション渡したり
– --prefix=$HOME/pgsql-study
●
インストール先を分けたり
– CFLAGS=-O0
●
コンパイラの最適化を無効にして関数や変数を実体化
Copyright 2013 Metro Systems. 32
ソース読んでみましょう(1)
●
とりあえず、もう一工夫
– タグファイルを作成してタグジャンプしましょう
●
src/tools/make_ctags
●
src/tools/make_etags
●
さて、どこから読みましょう?
Copyright 2013 Metro Systems. 33
ソース読んでみましょう(2)
●
まずはエグゼキュータやSQLコマンドあたり
がお手頃
– EXPLAINのJSONフォーマットってどう実現し
ているの?
– SELECTの実行計画ってどう動くの?
– VACUUMって結局何やってるの?
●
慣れてきたら、普段気になっている部分を見
てみるのも
Copyright 2013 Metro Systems. 34
動きを見てみましょう(1)
●
gdbを使って処理を追ってみましょう
– psqlで接続
– pg_backend_pid()でバックエンドプロセス特定
– gdbでアタッチ
– 適当なところにブレークポイント設定
– psqlからクエリ実行(または適当なアクション)
– gdbでブレークしたところからステップ実行
Copyright 2013 Metro Systems. 35
改造してみましょう(1)
●
ソースコードは書き換え放題!
– オープンソースですから。
– gitでブランチ切っておくと幸せになれます
●
いつでも戻せる、差分が分かる、Etc.
– ソース書き換えたら、新しいバイナリに切り替え
●
ビルド、インストール、再起動が必要!
●
ビルドはsrc/backendで実行すればOK
Copyright 2013 Metro Systems. 36
改造してみましょう(2)
●
デバッグ時のTips
– elog()でのprintfデバッグ
●
プロトタイプ:elog(level, fmt, ...)
●
例:
int
func(int param)
{
int foo;
elog(WARNING, "%s() called with %d", __FUNCTION__, param);
...
elog(WARNING, "foo = %d before xxx", foo);
exec_xxx(...);
elog(WARNING, "foo = %d after xxx", foo);
...
}
Copyright 2013 Metro Systems. 37
改造してみましょう(3)
●
デバッグ時のTips
– elog()でのprintfデバッグ
●
プロトタイプ:elog(level, fmt, ...)
●
例:
int
func(int param)
{
int foo;
elog(WARNING, "%s() called with %d", __FUNCTION__, param);
...
elog(WARNING, "foo = %d before xxx", foo);
exec_xxx(...);
elog(WARNING, "foo = %d after xxx", foo);
...
}
Copyright 2013 Metro Systems. 38
改造してみましょう(4)
●
デバッグ時のTips
– NodeTag
●
NodeTagオブジェクト種別識別子
●
構造体の先頭にNodeTagを置き、その値でオブジェク
ト種別を識別
/*
* The first field of a node of any type is guaranteed to be the NodeTag.
* Hence the type of any node can be gotten by casting it to Node. Declaring
* a variable to be of Node * (instead of void *) can also facilitate
* debugging.
*/
typedef struct Node
{
NodeTag type;
} Node;
Copyright 2013 Metro Systems. 39
改造してみましょう(5)
– NodeTag(続き)
typedef struct JoinExpr
{
NodeTag type;
JoinType jointype; /* type of join */
bool isNatural; /* Natural join? Will need to shape table */
Node *larg; /* left subtree */
Node *rarg; /* right subtree */
List *usingClause; /* USING clause, if any (list of String) */
Node *quals; /* qualifiers on join, if any */
Alias *alias; /* user-written alias clause, if any */
int rtindex; /* RT index assigned for join, or 0 */
} JoinExpr;
Copyright 2013 Metro Systems. 40
提案してみましょう(1)
●
どんなネタで?
– バグを修正(CF外で提案可能)
●
pgsql-bugsにもネタあり
– 欲しい機能を実現
●
pgsql-generalにもネタあり
– 遅い部分を改善
●
pgsql-performaneにもネタあり
– TODOリストからピックアップ
●
http://wiki.postgresql.org/wiki/Todo
– ドキュメント間違いを修正
●
pgsql-doc
Copyright 2013 Metro Systems. 41
提案してみましょう(2)
●
提案のステップ
– pgsql-hackersに外部仕様等を提案
– 意見がまとまってきたらPoCパッチを作成したり
– コンセンサスが得られたらCommitFestに登録
– CommitFestが始まったら
●
他者のパッチをレビュー
●
レビューコメントに対応
– Committed!
●
or Returned with Feedback→再挑戦…
Copyright 2013 Metro Systems. 42
提案してみましょう(3)
●
提案のポイント
– Design First
●
いきなり実装せず、設計を議論(将来性・拡張性を重視)
●
最初は難しいので、否定されてもくじけずにチャレンジを!
– 意見がまとまってきたらPoCパッチ
●
動きを見せると意外と意見が変わります
●
コーナーケースもきちんと見ましょう!
– コーディングは周辺に合わせて!
●
不用意に関係ない箇所を書き換えない!
●
バックパッチのし易さも重要な基準です
– とにかく議論!
●
「Low-context」の世界です
Copyright 2013 Metro Systems. 43
開発関連の情報源
●
Development Information(PostgreSQL wiki)
– http://wiki.postgresql.org/wiki/Development_in
formation
●
Developer FAQ
– http://wiki.postgresql.org/wiki/Developer_FAQ
●
hackers-jp
– JPUG主催の日本語ML
– pgsql-jpよりもテクニカルな内容を議論する場
– 最近は流量が…復活させましょう!
Copyright 2013 Metro Systems. 44
おわりに
●
ご清聴ありがとうございました。

Mais conteúdo relacionado

Mais procurados

Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
YUKI Kaoru
 
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
mihararyosuke
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
Shota Umeda
 
バージョン管理のワークフロー
バージョン管理のワークフローバージョン管理のワークフロー
バージョン管理のワークフロー
add20
 

Mais procurados (20)

『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab
『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab
『超初心者向け!visual studio + git で始めるアジャイル開発』 .NETラボ勉強会 #dotnetlab
 
僕がAndroid開発する時にちょっと便利だと思うtips
僕がAndroid開発する時にちょっと便利だと思うtips僕がAndroid開発する時にちょっと便利だと思うtips
僕がAndroid開発する時にちょっと便利だと思うtips
 
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013
 
Git演習(2)
Git演習(2)Git演習(2)
Git演習(2)
 
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
 
Git flowについてまとめてみた
Git flowについてまとめてみたGit flowについてまとめてみた
Git flowについてまとめてみた
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
 
Metahub for github
Metahub for githubMetahub for github
Metahub for github
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
 
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
 
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作るAndroid アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
 
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
Git運用ダメ出し会 - ネクストスケープ 2014/05/27 パワーランチ資料
 
Androidの新ビルドシステム
Androidの新ビルドシステムAndroidの新ビルドシステム
Androidの新ビルドシステム
 
15分でわかるGit入門
15分でわかるGit入門15分でわかるGit入門
15分でわかるGit入門
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
 
バージョン管理のワークフロー
バージョン管理のワークフローバージョン管理のワークフロー
バージョン管理のワークフロー
 
from old JUnit to modern JUnit
from old JUnit to modern JUnitfrom old JUnit to modern JUnit
from old JUnit to modern JUnit
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
 
新人Git/Github研修公開用スライド(その2)
新人Git/Github研修公開用スライド(その2)新人Git/Github研修公開用スライド(その2)
新人Git/Github研修公開用スライド(その2)
 

Destaque

Destaque (9)

Extending PostgreSQL - PgDay 2012 Japan
Extending PostgreSQL - PgDay 2012 JapanExtending PostgreSQL - PgDay 2012 Japan
Extending PostgreSQL - PgDay 2012 Japan
 
OSS-DB Goldへの第一歩~実践!運用管理~
OSS-DB Goldへの第一歩~実践!運用管理~OSS-DB Goldへの第一歩~実践!運用管理~
OSS-DB Goldへの第一歩~実践!運用管理~
 
9.3で進化した外部テーブル
9.3で進化した外部テーブル9.3で進化した外部テーブル
9.3で進化した外部テーブル
 
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
 
外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張外部データラッパによる PostgreSQL の拡張
外部データラッパによる PostgreSQL の拡張
 
Foreign Data Wrapper Enhancements
Foreign Data Wrapper EnhancementsForeign Data Wrapper Enhancements
Foreign Data Wrapper Enhancements
 
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@KyotoPostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
 
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
 
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングまずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
 

Semelhante a PostgreSQL開発ことはじめ - 第27回しくみ+アプリケーション勉強会

成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
Hiroki Kondo
 

Semelhante a PostgreSQL開発ことはじめ - 第27回しくみ+アプリケーション勉強会 (20)

PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PostgreSQLではじめるOSS開発@OSC 2014 HiroshimaPostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
 
PostgreSQLコミュニティに飛び込もう
PostgreSQLコミュニティに飛び込もうPostgreSQLコミュニティに飛び込もう
PostgreSQLコミュニティに飛び込もう
 
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 発...
 
Gruntでjava script前作業の自動化!
Gruntでjava script前作業の自動化!Gruntでjava script前作業の自動化!
Gruntでjava script前作業の自動化!
 
Ossで作成するチーム開発環境
Ossで作成するチーム開発環境Ossで作成するチーム開発環境
Ossで作成するチーム開発環境
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
 
【BS2】.NET 6 最新アップデート
【BS2】.NET 6 最新アップデート【BS2】.NET 6 最新アップデート
【BS2】.NET 6 最新アップデート
 
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
 
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
 
Windows 7 オプショナルツール 一挙紹介
Windows 7 オプショナルツール 一挙紹介Windows 7 オプショナルツール 一挙紹介
Windows 7 オプショナルツール 一挙紹介
 
NET5 and Diagnostics
NET5 and DiagnosticsNET5 and Diagnostics
NET5 and Diagnostics
 
Real legacy
Real legacyReal legacy
Real legacy
 
Postgres Toolkitのご紹介
Postgres Toolkitのご紹介Postgres Toolkitのご紹介
Postgres Toolkitのご紹介
 
【Jpug勉強会】10大ニュースで振り返るpg con2013
【Jpug勉強会】10大ニュースで振り返るpg con2013【Jpug勉強会】10大ニュースで振り返るpg con2013
【Jpug勉強会】10大ニュースで振り返るpg con2013
 
IBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみたIBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみた
 
Robotech2012講習会v01最終版v2
Robotech2012講習会v01最終版v2Robotech2012講習会v01最終版v2
Robotech2012講習会v01最終版v2
 
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 発表資料)
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
 

Último

Último (10)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

PostgreSQL開発ことはじめ - 第27回しくみ+アプリケーション勉強会

  • 1. Copyright 2013 Metro Systems. 1 PostgreSQL開発 ことはじめ 第27回 しくみ+アプリケーション勉強会 2013年10月5日 株式会社メトロシステムズ 花田 茂
  • 2. Copyright 2013 Metro Systems. 2 自己紹介 ● 氏名 – 花田 茂(はなだ しげる) ● 所属 – 株式会社メトロシステムズ ● メールアドレス – shigeru.hanada@gmail.com ● Twitter – @s87 ● ブログ – http://d.hatena.ne.jp/s87/
  • 3. Copyright 2013 Metro Systems. 3 アジェンダ ● PostgreSQLの進化 ● PostgreSQL開発の流れ ● パッチレビュー ● 開発環境の用意 ● PostgreSQLのビルド ● ソースを読んでみましょう ● 動きを見てみましょう ● 改造してみましょう ● 提案してみましょう ● 開発関連の情報源
  • 4. Copyright 2013 Metro Systems. 4 PostgreSQLの進化(1) ● 9.3の主な変更点 – Materialized Views(Kevin Grittner) – Auto-Updatable Views(Dean Rasheed) – Advanced JSON support(Andrew Danstan) – LATERAL support(Tom Lane) – Writable FDW(KaiGai Kohei) – Add postgres_fdw(Shigeru Hanada) – Event Triggers(Dimitri Fontaine, Robert Haas, Álvaro Herrera) – Checksum Data Pages(Simon Riggs, Jef Davis, Greg Smith, Ants Aasma) – Efcient Foreign Key Locks(Álvaro Herrera, Noah Misch, Andres Freund, Alexander Shulgin, Marti Raudsepp) – Reduce System V Memory requirement(Robert Haas)
  • 5. Copyright 2013 Metro Systems. 5 PostgreSQLの進化(2) ● 9.3の主な変更点 – Materialized Views(Kevin Grittner) – Auto-Updatable Views(Dean Rasheed) – Advanced JSON support(Andrew Danstan) – LATERAL support(Tom Lane) – Writable FDW(KaiGai Kohei) – Add postgres_fdw(Shigeru Hanada) – Event Triggers(Dimitri Fontaine, Robert Haas, Álvaro Herrera) – Checksum Data Pages(Simon Riggs, Jef Davis, Greg Smith, Ants Aasma) – Efcient Foreign Key Locks(Álvaro Herrera, Noah Misch, Andres Freund, Alexander Shulgin, Marti Raudsepp) – Reduce System V Memory requirement(Robert Haas) Committer Major Contributor Contributor Others
  • 6. Copyright 2013 Metro Systems. 6 PostgreSQLの進化(3) ● PostgreSQLはオープンソースソフトウェア ● コミュニティが著作権を持ち、一定の条件を 満たせば開発に参加可能!
  • 7. Copyright 2013 Metro Systems. 7 PostgreSQLの進化(4) ● 例:View関連のリリースノート
  • 8. Copyright 2013 Metro Systems. 8 PostgreSQLの進化(5) ● 例:View関連のリリースノート 機能追加のクレジットは個人名 所属企業やスポンサー企業の名前は メーリングリストでの言及のみOK
  • 9. Copyright 2013 Metro Systems. 9 PostgreSQL開発の流れ(1) ● メジャーリリースは一年に一度 ● 9.3の開発スケジュール – 2012年 ● Developer Meeting(5月) ● CommitFest(6月、9月、11月) – 2013年 ● CommitFest(1月) ● Feature Freeze・αテスト(4月) ● βテスト(5月〜) ● Release Candidateリリース(8月) ● 正式リリース(9月)
  • 10. Copyright 2013 Metro Systems. 10 PostgreSQL開発の流れ(2) ● Developer Meeting – 主要な開発者が集まって、F2Fで議論 ● 次バージョンで開発したい内容の提案 ● 開発の進め方の議論 – オタワで開催されるPGconと同時期に開催 ● Developer Meeting以外にもCluster Summit等も – 議論の内容はwikiで公開 ● http://wiki.postgresql.org/wiki/PgCon_2013_ Developer_Meeting
  • 11. Copyright 2013 Metro Systems. 11 PostgreSQL開発の流れ(3) ● CommitFest(コミットフェスト) – 過去の苦い経験から生まれた、新機能取り込みの サイクル ● 以前は、パッチを投稿してもレビューしてもらえず埋も れていった機能も ● 機能開発期間とレビュー・取り込み期間を明確にし て、開発リソースを効率よく活用するための仕組み ● 詳細情報はPostgreSQL Wikiにて – http://wiki.postgresql.org/wiki/CommitFest – 最近はCommitFest Managerという進行役がい て、レビュー状況などを管理
  • 12. Copyright 2013 Metro Systems. 12 PostgreSQL開発の流れ(4) ● CommitFestアプリ – 投稿されたパッチは、専用Webアプリで管理 ● https://commitfest.postgresql.org ● 利用にはPostgreSQLコミュニティアカウントが必要 – https://www.postgresql.org/account/signup/
  • 13. Copyright 2013 Metro Systems. 13 PostgreSQL開発の流れ(5) ● CommitFestの状態 – Future ● 将来開催予定 – Open ● パッチ登録受付中 – In Progress ● 現在進行中 – Closed ● 終了
  • 14. Copyright 2013 Metro Systems. 14 PostgreSQL開発の流れ(6) ● CommitFestでのパッチ管理 – パッチは、Webベースの専用アプリで管理 ● https://commitfest.postgresql.org ● PostgreSQLコミュニティアカウントが必要 – パッチを作成したら、pgsql-hackers MLに投稿 し、そのメールのMessage-IDを「Open」状態 のCommitFestに登録 – CommitFestが始まると、レビュワーがついて パッチをレビューしてくれるので、開発者はレ ビューコメントに対応
  • 15. Copyright 2013 Metro Systems. 15 PostgreSQL開発の流れ(7) ● CommitFestでのパッチ状態 – Needs Review ● 開発者がパッチを投げてレビュー待ち – Waiting on Author ● レビューコメントが付いて開発者対応待ち – Ready for Committer ● レビューワーがOKを出してコミッタの判断待ち – Committed ● 晴れてコミット! – Returned with Feedback ● 本CFではこれ以上扱わない、次回以降に再挑戦
  • 16. Copyright 2013 Metro Systems. 16 PostgreSQL開発の流れ(8) ● CommitFestでのレビュー – レビューの仕方は日本語ドキュメントで! ● http://wiki.postgresql.org/wiki/Reviewing_a_P atch/ja – 永安さんのブログにも整理されています! ● http://pgsqldeepdive.blogspot.jp/2013/06/co mmitfestpatchreview.html – Round Robin Reviewerという制度も! ● 比較的簡単なパッチをCF Managerが割り当ててくれ ます
  • 17. Copyright 2013 Metro Systems. 17 PostgreSQL開発の流れ(9) ● レビューは開発参加の第一歩! – パッチを提案する人は必ず他者のパッチをレ ビューする決まり ● つまり、レビューできないとパッチが投げられない! – いきなり全体を把握するのは困難(というか無 理)なので、簡単なパッチのレビューをとっかか りにするのは効果的! – 正式にレビュワーとして登録しなくても、他者の レビュー結果を自分のものと比べると勉強になり ます!
  • 18. Copyright 2013 Metro Systems. 18 パッチレビュー(1) ● 何をレビューすればいいの? – 提案レビュー ● パッチフォーマット ● パッチ適用可否 ● ドキュメントやテストの充足 – 仕様レビュー ● パッチの目的適合性、必要性、重複度 ● SQL標準への準拠 ● 他の箇所との整合性
  • 19. Copyright 2013 Metro Systems. 19 パッチレビュー(2) ● 何をレビューすればいいの? – 機能レビュー ● 公言している機能の実現度 ● コーナーケース(重箱の隅)の完成度 ● アサーション違反やクラッシュケースの確認 – 性能試験 ● 性能低下を招かないこと ● 性能向上パッチの場合の性能改善度
  • 20. Copyright 2013 Metro Systems. 20 パッチレビュー(3) ● 何をレビューすればいいの? – コーティングレビュー ● コーディング規約の準拠 – http://wiki.postgresql.org/wiki/Developer_FAQ#What.27s_ the_formatting_style_used_in_PostgreSQL_source_code.3F ● 移植性や多環境での動作確認 ● コードと整合した適切なコメント ● セキュリティ上の考慮 – アーキテクチャレビュー ● アーキテクチャ・他の機能・モジュールとの整合性 ● 将来的に問題となる依存性などがないか – レビューのレビュー ● レビューが適切になされたか
  • 21. Copyright 2013 Metro Systems. 21 パッチレビュー(4) ● レビューしたいけど環境がない! – レビューワーはVMが無料で借りられます! As part of an ongoing effort to encourage patch review for the PostgreSQL project, we will be funding cloud servers for patch reviewers and testers who need them for CommitFests. That is, if you want to help with reviewing or testing a patch for a CommitFest, and don't have your own test server to use, the PostgreSQL project (via our funds at Software In the Public Interest) will pay for you to use a cloud server for the duration of your review/testing. So, if "I don't have anywhere to test it" was your excuse for not reviewing in the past, time to stop making excuses and start reviewing! Since these are cloud servers, they won't work well for performance testing. However, they will be excellent for testing replication. If you need one of these, please contact me to allocate a VM for you. 2013-07-13 Josh Berkus氏のメールより
  • 22. Copyright 2013 Metro Systems. 22 パッチレビュー(5) ● レビューしたいけど環境がない! – VMでCentOS入れとけば十分です! ● Windowsでのビルドはちょっと手間がかかるの で、Linux環境がお勧め – 一応マニュアルにやり方載ってます ● 逆に言うと、Windows環境でもレビューすると喜ばれ るでしょう! – Macならいくつかツール入れれば簡単に用意でき ます
  • 23. Copyright 2013 Metro Systems. 23 開発環境の用意(1) ● 開発環境に必要なもの – OS ● Unix、Linux、Mac OS Xなど – ツール ● gccなどのCコンパイラ ● bison/flex/perl ● DocBook(ドキュメントコンパイル用) ● git ● お好みのエディタ(私はvim)
  • 24. Copyright 2013 Metro Systems. 24 開発環境の用意(2) ● ソース持ってきましょう – gitで開発リポジトリをクローン ● git://git.postgresql.org/git/postgresql.git ● 全versionの変更履歴が手元に届きます ● githubにもミラーがあります [tmp]$ time git clone git://git.postgresql.org/git/postgresql.git Cloning into 'postgresql'... remote: Counting objects: 478279, done. remote: Compressing objects: 100% (81023/81023), done. remote: Total 478279 (delta 400814), reused 472740 (delta 395295) Receiving objects: 100% (478279/478279), 137.90 MiB | 1.81 MiB/s, done. Resolving deltas: 100% (400814/400814), done. real 2m9.138s user 0m32.854s sys 0m6.458s 新宿のルノアールのau wifiで計測 ここでは7:07程度@au LTE
  • 25. Copyright 2013 Metro Systems. 25 開発環境の用意(3) ● パッチ当てる場合は、ブランチに注意 – 次バージョンはmasterブランチで開発 ● 過去バージョンはREL9_3_STABLEなどのブランチ [postgresql(master)]$ git branch -r origin/HEAD -> origin/master origin/REL2_0B origin/REL6_4 origin/REL6_5_PATCHES origin/REL7_0_PATCHES origin/REL7_1_STABLE ... origin/REL8_3_STABLE origin/REL9_1_STABLE origin/REL9_2_STABLE origin/REL9_3_STABLE origin/Release_1_0_3 origin/WIN32_DEV origin/ecpg_big_bison origin/master [postgresql(master)]$
  • 26. Copyright 2013 Metro Systems. 26 開発環境の用意(4) ● ソースコードの構成 [postgresql(master)]$ ls -F | cat COPYRIGHT 著作権表記 GNUmakefile.in Makefile生成元 Makefile Makefile README PostgreSQLの簡単な説明 README.git INSTALL等がない説明 aclocal.m4 autoconf用ファイル config/ autoconf用ファイル群 configure* configureスクリプト configure.in contrib/ contribモジュール doc/ ドキュメントのソース src/ プログラムソース
  • 27. Copyright 2013 Metro Systems. 27 開発環境の用意(5) ● ソースコードの構成(src) [postgresql(master)]$ ls -F src/* | cat backend/ bin/ common/ include/ interfaces/ makefiles/ pl/ port/ template/ test/ timezone/ tools/ tutorial/ バックエンドサーバ OSコマンド(psqlやpg_dumpなど) フロントエンド/バックエンド共通 ヘッダファイル フロントエンドI/F(libpqやECPG) ビルド用ファイル 手続き言語(PL/pgSQLやPL/Perlなど) 環境依存コード 環境依存のビルド設定 リグレッションテスト タイムゾーンデータベース 開発用ツール群 SQLチュートリアル
  • 28. Copyright 2013 Metro Systems. 28 開発環境の用意(6) ● ソースコードの構成(src/backendの一部) [postgresql(master)]$ ls -F src/backend/* | cat access/ bootstrap/ catalog/ commands/ executor/ optimizer/ parser/ postmaster/ replication/ rewrite/ storage/ tcop/ アクセスメソッド(インデックス) 起動・初期化 システムカタログ定義 SQLコマンド エグゼキュータ プランナ・オプティマイザ パーサ サーバプロセスのエントリポイント レプリケーション関連 リライタ バッファ・ストーレジ・ロック管理 リクエストディスパッチ(Traffic COP)
  • 29. Copyright 2013 Metro Systems. 29 開発環境の用意(7) ● PostgreSQLの処理の流れ – クライアントがクエリ実行 – tcopがメッセージを受け付ける – パーサがクエリ文字列を解析し構文木を生成 ● 解析の過程でカタログを参照 – リライタが構文木を書き換え(ビュー展開など) – プランナ・オプティマイザが実行計画を生成 ● 生成の過程で統計情報を参照 – エグゼキュータが実行計画に基づいて実行 ● 共有バッファや抽象化されたストレージを利用 – 結果をクライアントに返却
  • 30. Copyright 2013 Metro Systems. 30 PostgreSQLのビルド(1) ● いつも通りの3ステップです – configure、make、make install ● ただし、レビュー・開発用には少し工夫を – --enable-cassert ● Assert()マクロを有効化して、プログラムバグの検出 を容易に(これがないといきなりクラッシュしたり) – --enable-debug ● コンパイラに-gオプション渡したり – CFLAGS=-O0 ● コンパイラの最適化を無効にして関数や変数を実体化
  • 31. Copyright 2013 Metro Systems. 31 PostgreSQLのビルド(2) ● いつも通りの3ステップです – configure、make、make install ● ただし、レビュー・開発用には少し工夫を – --enable-cassert ● Assert()マクロを有効化して、プログラムバグの検出を容易に (これがないといきなりクラッシュしたり) – --enable-debug ● コンパイラに-gオプション渡したり – --prefix=$HOME/pgsql-study ● インストール先を分けたり – CFLAGS=-O0 ● コンパイラの最適化を無効にして関数や変数を実体化
  • 32. Copyright 2013 Metro Systems. 32 ソース読んでみましょう(1) ● とりあえず、もう一工夫 – タグファイルを作成してタグジャンプしましょう ● src/tools/make_ctags ● src/tools/make_etags ● さて、どこから読みましょう?
  • 33. Copyright 2013 Metro Systems. 33 ソース読んでみましょう(2) ● まずはエグゼキュータやSQLコマンドあたり がお手頃 – EXPLAINのJSONフォーマットってどう実現し ているの? – SELECTの実行計画ってどう動くの? – VACUUMって結局何やってるの? ● 慣れてきたら、普段気になっている部分を見 てみるのも
  • 34. Copyright 2013 Metro Systems. 34 動きを見てみましょう(1) ● gdbを使って処理を追ってみましょう – psqlで接続 – pg_backend_pid()でバックエンドプロセス特定 – gdbでアタッチ – 適当なところにブレークポイント設定 – psqlからクエリ実行(または適当なアクション) – gdbでブレークしたところからステップ実行
  • 35. Copyright 2013 Metro Systems. 35 改造してみましょう(1) ● ソースコードは書き換え放題! – オープンソースですから。 – gitでブランチ切っておくと幸せになれます ● いつでも戻せる、差分が分かる、Etc. – ソース書き換えたら、新しいバイナリに切り替え ● ビルド、インストール、再起動が必要! ● ビルドはsrc/backendで実行すればOK
  • 36. Copyright 2013 Metro Systems. 36 改造してみましょう(2) ● デバッグ時のTips – elog()でのprintfデバッグ ● プロトタイプ:elog(level, fmt, ...) ● 例: int func(int param) { int foo; elog(WARNING, "%s() called with %d", __FUNCTION__, param); ... elog(WARNING, "foo = %d before xxx", foo); exec_xxx(...); elog(WARNING, "foo = %d after xxx", foo); ... }
  • 37. Copyright 2013 Metro Systems. 37 改造してみましょう(3) ● デバッグ時のTips – elog()でのprintfデバッグ ● プロトタイプ:elog(level, fmt, ...) ● 例: int func(int param) { int foo; elog(WARNING, "%s() called with %d", __FUNCTION__, param); ... elog(WARNING, "foo = %d before xxx", foo); exec_xxx(...); elog(WARNING, "foo = %d after xxx", foo); ... }
  • 38. Copyright 2013 Metro Systems. 38 改造してみましょう(4) ● デバッグ時のTips – NodeTag ● NodeTagオブジェクト種別識別子 ● 構造体の先頭にNodeTagを置き、その値でオブジェク ト種別を識別 /* * The first field of a node of any type is guaranteed to be the NodeTag. * Hence the type of any node can be gotten by casting it to Node. Declaring * a variable to be of Node * (instead of void *) can also facilitate * debugging. */ typedef struct Node { NodeTag type; } Node;
  • 39. Copyright 2013 Metro Systems. 39 改造してみましょう(5) – NodeTag(続き) typedef struct JoinExpr { NodeTag type; JoinType jointype; /* type of join */ bool isNatural; /* Natural join? Will need to shape table */ Node *larg; /* left subtree */ Node *rarg; /* right subtree */ List *usingClause; /* USING clause, if any (list of String) */ Node *quals; /* qualifiers on join, if any */ Alias *alias; /* user-written alias clause, if any */ int rtindex; /* RT index assigned for join, or 0 */ } JoinExpr;
  • 40. Copyright 2013 Metro Systems. 40 提案してみましょう(1) ● どんなネタで? – バグを修正(CF外で提案可能) ● pgsql-bugsにもネタあり – 欲しい機能を実現 ● pgsql-generalにもネタあり – 遅い部分を改善 ● pgsql-performaneにもネタあり – TODOリストからピックアップ ● http://wiki.postgresql.org/wiki/Todo – ドキュメント間違いを修正 ● pgsql-doc
  • 41. Copyright 2013 Metro Systems. 41 提案してみましょう(2) ● 提案のステップ – pgsql-hackersに外部仕様等を提案 – 意見がまとまってきたらPoCパッチを作成したり – コンセンサスが得られたらCommitFestに登録 – CommitFestが始まったら ● 他者のパッチをレビュー ● レビューコメントに対応 – Committed! ● or Returned with Feedback→再挑戦…
  • 42. Copyright 2013 Metro Systems. 42 提案してみましょう(3) ● 提案のポイント – Design First ● いきなり実装せず、設計を議論(将来性・拡張性を重視) ● 最初は難しいので、否定されてもくじけずにチャレンジを! – 意見がまとまってきたらPoCパッチ ● 動きを見せると意外と意見が変わります ● コーナーケースもきちんと見ましょう! – コーディングは周辺に合わせて! ● 不用意に関係ない箇所を書き換えない! ● バックパッチのし易さも重要な基準です – とにかく議論! ● 「Low-context」の世界です
  • 43. Copyright 2013 Metro Systems. 43 開発関連の情報源 ● Development Information(PostgreSQL wiki) – http://wiki.postgresql.org/wiki/Development_in formation ● Developer FAQ – http://wiki.postgresql.org/wiki/Developer_FAQ ● hackers-jp – JPUG主催の日本語ML – pgsql-jpよりもテクニカルな内容を議論する場 – 最近は流量が…復活させましょう!
  • 44. Copyright 2013 Metro Systems. 44 おわりに ● ご清聴ありがとうございました。