PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

60
1 PostgreSQLで始める OSS開発 日本PostgreSQLユーザ会 花田茂 オープンソースカンファレンス 2014 Hiroshima 2014.09.20

description

2014.09.20のオープンソースカンファレンス 2014 Hiroshimaの講演資料です。

Transcript of PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

Page 1: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

1

PostgreSQLで始めるOSS開発

日本PostgreSQLユーザ会花田茂

オープンソースカンファレンス2014 Hiroshima

2014.09.20

Page 2: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

2

自己紹介

氏名 :花田 茂メール :[email protected]:@s87ブログ:http://d.hatena.ne.jp/s87/経歴:

PostgreSQL触る前はOracle+業務アプリ開発PostgreSQLの検証や周辺ツールの開発PostgreSQL本体開発(外部テーブルサポートなど)pgCon2012開発者会議@Ottawa参加

Page 3: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

3

日本PostgreSQLユーザ会について

• PostgreSQLの普及促進を目的に活動する特定非営利活動法人(NPO)です。

• http://postgresql.jp/• 略称は「JPUG」

• 北は北海道から南は沖縄まで9つの支部があり、それぞれが特徴を出した活動をしています。– 勉強会やOSCへの出展/講演等

• いくつかの分科会活動があり、ドキュメントの充実や技術検証等を行っています。– 仕組み分科会、文書・書籍関連分科会など

Page 4: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

4

はじめに

みなさん

PostgreSQL使ってますか?

Page 5: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

5

はじめに

• VACUUMすると止まるんでしょ?• 検索とか、MySQLの方が速いし…• レプリケーションできるの?• DB使ってないんで!(うらやましいw)• Etc.

Page 6: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

6

はじめに

今日お話しするのは、そういった

「PostgreSQLを実際に使うに当たって絶対に知っておくべきこと」ではありません!

日々の実務的な話は、明日(9/21)の

中国地方DB勉強会で…

Page 7: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

7

はじめに

データベースって、所詮道具ですから–速い–安い–美味い(ビジネス的に)ならいいわけです

Page 8: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

8

はじめに

というわけで、今日のお話は「データベースを選ぶときの基準に

開発し易いを入れてみませんか?」というご提案です

いろんな意味で

Page 9: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

9

関数 SQLから呼び出す関数を追加 dblink()、など

データ型 独自データ型を追加 IPアドレス、幾何図形、JSONなどインデックス 特性に合ったインデックスを追加 B-Tree、GIN、GiSTなど

PL/Perl、PL/pgSQLなどPL/Perl、PL/pgSQLなど手続き言語 関数を実装する新しい言語を追加フック関数 PostgreSQLの処理を差し替え auto_explainなど外部データラッパ 外部データを通常の表と同様に検索 postgres_fdw、oracle_fdwなど

PostgreSQLに含まれる同種のもの

PostgreSQLの拡張性

PostgreSQLには、いくつかの機能拡張の仕組みがあります

PostgreSQLに備わった機能拡張の仕組み概要

演算子 データ型に応じた演算子を追加 幾何演算など

集約 集約関数を追加 max()、sum()、count()など

Page 10: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

10

特徴

関数/集約

SQL文で事前に定義した処理を利用可能標準でC言語、SQL、PL/pgSQL、Tcl、Perl、Python等をサポートCREATE FUNCTION文でカタログに登録配列を含むSQLデータ型が利用可能で、戻り値は複数列/複数行も可ユーザ定義の集約関数も追加可能トランザクションは制御できない

使用例

•Orafce•Oracleの標準関数をPostgreSQLに移植したもの•PGXNで配布(http://pgxn.org/dist/orafce/)

•json_accessors•JSON型へのアクセスを容易にする関数群•PGXNで配布(http://pgxn.org/dist/json_accessors/)

Page 11: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

11

特徴

演算子

SQL文で使える演算子を追加可能内部的には関数のシンタックスシュガー事前に定義した関数をCREATE OPERATOR文で演算子に割り当て被演算データ型でのオーバーロードも可能COMUTATOR、NAGATOR、MERGEなどの最適化オプション指定可能

使用例

•parray_gin•文字列配列の部分一致検索をサポートする演算子を提供•PGXNで配布(http://pgxn.org/dist/parray_gin/)

Page 12: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

12

特徴

データ型

ビジネスオブジェクトを表すデータ型を追加可能新しいデータ型を処理する関数群を事前に定義CREATE TYPE文でカタログに登録データ型に応じた演算子を定義するとより便利に

使用例

•ksj•そのまま演算可能な漢数字型(例: 五百拾六 + 二百参 → 七百拾九)•githubで公開(https://github.com/nuko-yokohama/ksj)

Page 13: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

13

特徴

インデックス

B-TreeやGIN、GiSTとは別にインデックスを追加可能インデックス用の関数や演算子クラスを定義した後、pg_amに行を追加CREATE INDEX文のUSING句に新しいインデックスを指定PostgreSQLのインデックス機構の把握が必要でハードルは高め

使用例

•textsearch_ja•sennaやgroongaをエンジンに使った日本語全文検索機能を提供•pgFoundryで配布(http://textsearch-ja.projects.pgfoundry.org/)

Page 14: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

14

特徴

手続き言語

PL/pgSQLやPL/Perlのような手続き言語を追加可能処理に向いた言語で関数を実装できるようになるハンドラ関数を定義してからCREATE LANGUAGE文でカタログに登録言語処理系の理解が必要でハードルは高め

使用例

•PL/v8•JavaScriptで関数を記述できる•Google Codeで配布(http://code.google.com/p/plv8js/)

Page 15: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

15

特徴

フック関数

PostgreSQLの内部処理に直接手を入れることが可能(特定箇所のみ)C言語で関数を記述し、フック関数として登録プランナやエグゼキュータの処理をカスタマイズできるPostgreSQLの内部処理の理解が必要でハードルはかなり高め

使用例

•pg_statsinfo•各種SQLコマンドの実行をフックし追加の性能情報を自動的に取得•pgFoundryで配布(http://pgstatsinfo.projects.pgfoundry.org/)

Page 16: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

16

特徴

外部データラッパ

外部データをDMLで操作可能(9.3から更新もOK)C言語でハンドラ関数やオプション検証関数を記述基本的には列ごとの文字列データが取得できれば対応可能

使用例

•mongo_fdw•Mongo DBの内容をPostgreSQLへのSELECT文で取得可能•PGXNで配布(http://pgxn.org/dist/mongo_fdw/)

•oracle_fdw•Oracleの持つデータをDMLで操作•GitHubで配布(http://laurenz.github.io/oracle_fdw/)

WHERE句の条件をリモートに渡すことも可能

ソート済みの結果が得られるならば、ローカルでのソートを省略可能

展示ブースでデモ

やってます!

Page 17: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

17

エクステンション

関数やその他のオブジェクトがバラバラにあると管理しづらいので…

EXTENSIONとは?• 複数のオブジェクトを統合して管理•アンインストール用のSQLスクリプトは不要• pg_dumpによる移行やアップグレードもサポート• 同梱追加モジュールはほとんどがEXTENSION•OraleのPACKAGEとはちょっと違う…

EXTENSIONでパッケージ化しましょう

Page 18: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

18

いくつかのサイトで公開/配布されています

既存の拡張モジュールは…

pgFoundry

PGXN

SourceForge/github/

Google Code

古くから運営されている公式(?)のプロジェクトホスティングサイトhttp://pgfoundry.org/

一般のプロジェクトホスティングサイトhttp://sourceforge.org/、http://github.com/http://code.google.com/

EXTENSIONを配布するサイトで、CPANライクなコマンドpgxnclientでインストール可能http://pgxn.org/

Page 19: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

19

ピッタリくるのがなければ

• フォークした製品から探してみましょう

– https://wiki.postgresql.org/wiki/PostgreSQL_derived_databases

現在もアクティブにメンテナンスされているものだけでも19製品!

Page 20: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

20

ピッタリくるのがなければ

• 分析系– Pivotal Greenplum Database(Pivotal)– Netteza(IBM)– Postgres XL

• DWH– Vertica(HP)– Red Shift(Amazon)

• RAC対抗?– Postgres XC

• Oracle互換– Postgres Plus Advanced Server(EnterpriseDB)

Page 21: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

21

それでも足りない!

• ならば、作りましょう!

Page 22: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

22

PostgreSQLの進化

• 9.4の主な変更点– 論理ログ出力

• 【Andres Freund】– 動的バックグラウンドワーカー

• 【Robert Haas】– 共有メモリセグメントの動的確保

• 【Robert Haas, Amit Kapila】– マテリアライズドビュー更新のロックレベル低減

• 【Kevin Grittner】– 構造化(非テキスト)JSONデータ型(JSONB)の追加

• 【Oleg Bartunov, Teodor Sigaev, Alexander Korotkov, Peter Geoghegan, and Andrew Dunstan】

– ALTER SYSTEM SQLコマンドによる設定ファイル編集• 【Amit Kapila】

– いくつかのALTER TABLEコマンドのロックレベル低減• 【Simon Riggs, Noah Misch, Robert Haas】

Page 23: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

23

PostgreSQLの進化(3)

• PostgreSQLはオープンソースソフトウェア• コミュニティが著作権を持つ• 一定の条件を満たせば誰でも開発に参加可能!

Page 24: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

24

PostgreSQLの進化(4)

• 例:View関連のリリースノート

Page 25: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

25

PostgreSQLの進化(5)

• 例:View関連のリリースノート

機能追加のクレジットは個人名所属企業やスポンサー企業の名前はメーリングリストでの言及のみOK

Page 26: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

26

PostgreSQL開発の流れ(1)

• メジャーリリースは一年に一度– 一ヶ月ごとに開発→マージのサイクルを繰り返します– マージ期間を「CommitFest」と呼びます

• 9.5の開発スケジュール– 2014年

• Developer Meeting(5月)• CommitFest(6月、8月、10月、12月)

– 2015年• CommitFest(2月)• βテスト(5月〜?)• 正式リリース(9月?)

Page 27: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

27

PostgreSQL開発の流れ(2)

• Developer Meeting– 主要な開発者が集まって、F2Fで議論

• 次バージョンで開発したい内容の提案• 開発の進め方の議論

– オタワで開催されるPGconと同時期に開催• Developer Meeting以外にもCluster Summit等も

–議論の内容はwikiで公開• http://wiki.postgresql.org/wiki/PgCon_2014_Developer_Meeting

Page 28: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

28

PostgreSQL開発の流れ(3)

• CommitFest(コミットフェスト)– 過去の苦い経験から生まれた、新機能取り込みのサイクル

• 以前は、パッチを投稿してもレビューしてもらえず埋もれていった機能も

• 機能開発期間とレビュー・取り込み期間を明確にして、開発リソースを効率よく活用するための仕組み

• 詳細情報はPostgreSQL Wikiにて– http://wiki.postgresql.org/wiki/CommitFest

– 最近はCommitFest Managerという進行役がいて、レビュー状況などを管理

Page 29: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

29

PostgreSQL開発の流れ(4)

• CommitFestアプリ– 投稿されたパッチは、専用Webアプリで管理

• https://commitfest.postgresql.org• 利用にはPostgreSQLコミュニティアカウントが必要

– https://www.postgresql.org/account/signup/

Page 30: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

30

PostgreSQL開発の流れ(5)

• CommitFestの状態– Future

• 将来開催予定– Open

• パッチ登録受付中– In Progress

• 現在進行中– Closed

• 終了

Page 31: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

31

PostgreSQL開発の流れ(6)

• CommitFestでのパッチ管理– パッチは、Webベースの専用アプリで管理

• https://commitfest.postgresql.org• PostgreSQLコミュニティアカウントが必要

– パッチを作成したら、pgsql-hackers MLに投稿し、そのメールのMessage-IDを「Open」状態のCommitFestに登録

– CommitFestが始まると、レビュワーがついてパッチをレビューしてくれるので、開発者はレビューコメントに対応

Page 32: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

32

PostgreSQL開発の流れ(7)

• CommitFestでのパッチ状態– Needs Review

• 開発者がパッチを投げてレビュー待ち– Waiting on Author

• レビューコメントが付いて開発者対応待ち– Ready for Committer

• レビューワーがOKを出してコミッタの判断待ち– Committed

• 晴れてコミット!– Returned with Feedback

• 本CFではこれ以上扱わない、次回以降に再挑戦

Page 33: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

33

PostgreSQL開発の流れ(8)

• CommitFestでのレビュー– レビューの仕方は日本語ドキュメントで!

• http://wiki.postgresql.org/wiki/Reviewing_a_Patch/ja– 永安さんのブログにも整理されています!

• http://pgsqldeepdive.blogspot.jp/2013/06/commitfestpatchreview.html

– Round Robin Reviewerという制度も!• 比較的簡単なパッチをCF Managerが割り当ててくれます

Page 34: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

34

PostgreSQL開発の流れ(9)

• レビューは開発参加の第一歩!– パッチを提案する人は必ず他者のパッチをレビューする決まり

• つまり、レビューできないとパッチが投げられない!– いきなり全体を把握するのは困難(というか無理)なので、簡単なパッチのレビューをとっかかりにするのは効果的!

– 正式にレビュワーとして登録しなくても、他者のレビュー結果を自分のものと比べると勉強になります!

Page 35: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

35

パッチレビュー(1)

• 何をレビューすればいいの?–提案レビュー

• パッチフォーマット• パッチ適用可否• ドキュメントやテストの充足

–仕様レビュー• パッチの目的適合性、必要性、重複度• SQL標準への準拠• 他の箇所との整合性

Page 36: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

36

パッチレビュー(2)

• 何をレビューすればいいの?– 機能レビュー

• 公言している機能の実現度• コーナーケース(重箱の隅)の完成度• アサーション違反やクラッシュケースの確認

– 性能試験• 性能低下を招かないこと• 性能向上パッチの場合の性能改善度

Page 37: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

37

パッチレビュー(3)

• 何をレビューすればいいの?– コーティングレビュー

• コーディング規約の準拠– http://wiki.postgresql.org/wiki/Developer_FAQ#What.27s_the_formatting_style_used_in_PostgreSQL_source_code.3F

• 移植性や多環境での動作確認• コードと整合した適切なコメント• セキュリティ上の考慮

– アーキテクチャレビュー• アーキテクチャ・他の機能・モジュールとの整合性• 将来的に問題となる依存性などがないか

– レビューのレビュー• レビューが適切になされたか

Page 38: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

38

パッチレビュー(4)

• レビューしたいけど環境がない!–レビューワーはVMが無料で借りられます!

As part of an ongoing effort to encourage patch review for thePostgreSQL project, we will be funding cloud servers for patch reviewersand testers who need them for CommitFests. That is, if you want to helpwith reviewing or testing a patch for a CommitFest, and don't have yourown test server to use, the PostgreSQL project (via our funds atSoftware In the Public Interest) will pay for you to use a cloud serverfor the duration of your review/testing.

So, if "I don't have anywhere to test it" was your excuse for notreviewing in the past, time to stop making excuses and start reviewing!

Since these are cloud servers, they won't work well for performancetesting. 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氏のメールより

Page 39: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

39

パッチレビュー(5)

• レビューしたいけど環境がない!– VMでCentOS入れとけば十分です!

• Windowsでのビルドはちょっと手間がかかるので、Linux環境がお勧め

– 一応マニュアルにやり方載ってます• 逆に言うと、Windows環境でもレビューすると喜

ばれるでしょう!–Macならいくつかツール入れれば簡単に用意できます

Page 40: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

40

開発環境の用意(1)

• 開発環境に必要なもの– OS

• Unix、Linux、Mac OS Xなど–ツール

• gccなどのCコンパイラ• bison/fex/perl• DocBook(ドキュメントコンパイル用)• git• お好みのエディタ(私はvim)

Page 41: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

41

開発環境の用意(2)

• ソース持ってきましょう– gitで開発リポジトリをクローン

• git://git.postgresql.org/git/postgresql.git• 全versionの変更履歴が手元に届きます• githubにもミラーがあります

[tmp]$ time git clone git://git.postgresql.org/git/postgresql.gitCloning 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.138suser 0m32.854ssys 0m6.458s

新宿のルノアールのau wifで計測au LTEでは7分程度

Page 42: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

42

開発環境の用意(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)]$

Page 43: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

43

開発環境の用意(4)

• ソースコードの構成[postgresql(master)]$ ls -F | catCOPYRIGHT 著作権表記GNUmakefile.in Makefile生成元Makefile MakefileREADME PostgreSQLの簡単な説明README.git INSTALL等がない説明aclocal.m4 autoconf用ファイルconfig/ autoconf用ファイル群configure* configureスクリプトconfigure.incontrib/ contribモジュールdoc/ ドキュメントのソースsrc/ プログラムソース

Page 44: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

44

開発環境の用意(5)

• ソースコードの構成(src)[postgresql(master)]$ ls -F src/* | catbackend/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チュートリアル

Page 45: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

45

開発環境の用意(6)

• ソースコードの構成(src/backendの一部)[postgresql(master)]$ ls -F src/backend/* | cataccess/bootstrap/catalog/commands/executor/optimizer/parser/postmaster/replication/rewrite/storage/tcop/

アクセスメソッド(インデックス)起動・初期化システムカタログ定義SQLコマンドエグゼキュータプランナ・オプティマイザパーササーバプロセスのエントリポイントレプリケーション関連リライタバッファ・ストーレジ・ロック管理リクエストディスパッチ(Trafc COP)

Page 46: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

46

開発環境の用意(7)

• PostgreSQLの処理の流れ– クライアントがクエリ実行– バックエンド(postgres)がメッセージを受け付ける– パーサがクエリ文字列を解析し構文木を生成

• 解析の過程でカタログを参照– リライタが構文木を書き換え(ビュー展開など)– プランナ・オプティマイザが実行計画を生成

• 生成の過程で統計情報を参照– エグゼキュータが実行計画に基づいて実行

• 共有バッファや抽象化されたストレージを利用– 結果をクライアントに返却

Page 47: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

47

PostgreSQLのビルド

• いつも通りの3ステップです– confgure、make、make install

• ただし、レビュー・開発用には少し工夫を– --enable-cassert

• Assert()マクロを有効化して、プログラムバグの検出を容易に(これがないといきなりクラッシュしたり)

– --enable-debug• コンパイラに-gオプション渡したり

– --prefx=$HOME/pgsql-study• インストール先を分けたり

– CFLAGS=-O0• コンパイラの最適化を無効にして関数や変数を実体化

Page 48: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

48

ソース読んでみましょう(1)

• とりあえず、もう一工夫–タグファイルを作成してタグジャンプしましょう

• src/tools/make_ctags• src/tools/make_etags

• さて、どこから読みましょう?

Page 49: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

49

ソース読んでみましょう(2)

• まずはエグゼキュータやSQLコマンドあたりがお手頃– SELECTってどう動くの?– VACUUMって結局何やってるの?– EXPLAINのJSONフォーマットってどう実現しているの?

• 慣れてきたら、普段気になっている部分を見てみるのも

Page 50: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

50

動きを見てみましょう

• gdbを使って処理を追ってみましょう– psqlで接続– pg_backend_pid()でバックエンドプロセス特定– gdbでアタッチ– 適当なところにブレークポイント設定

• exec_simple_query()→1クエリ実行の流れ• errfnish()→エラー発生箇所を特定

– psqlからクエリ実行(または適当なアクション)– gdbでブレークしたところからステップ実行

Page 51: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

51

改造してみましょう(1)

• ソースコードは書き換え放題!– オープンソースですから。– gitでブランチ切っておくと幸せになれます

• いつでも戻せる、差分が分かる、Etc.– ソース書き換えたら、新しいバイナリに切り替え

• ビルド、インストール、再起動が必要!• ビルドはsrc/backendで実行すればOK

Page 52: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

52

改造してみましょう(2)

• デバッグ時のTips– elog()でのprintfデバッグ

• プロトタイプ:elog(level, fmt, ...)• 例:

intfunc(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);...

}

Page 53: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

53

改造してみましょう(3)

• デバッグ時の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;

Page 54: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

54

改造してみましょう(4)

– 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;

Page 55: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

55

提案してみましょう(1)

• どんなネタで?– バグを修正(CF外で提案可能)

• pgsql-bugsにもネタあり– 欲しい機能を実現

• pgsql-generalにもネタあり– 遅い部分を改善

• pgsql-performaneにもネタあり– TODOリストからピックアップ

• http://wiki.postgresql.org/wiki/Todo– ドキュメント間違いを修正

• pgsql-doc

Page 56: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

56

提案してみましょう(2)

• 提案のステップ– pgsql-hackersに外部仕様等を提案– 意見がまとまってきたらPoCパッチを作成したり– コンセンサスが得られたらCommitFestに登録– CommitFestが始まったら

• 他者のパッチをレビュー• レビューコメントに対応

– Committed!• or Returned with Feedback→再挑戦…

Page 57: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

57

提案してみましょう(3)

• 提案のポイント– 実装の前に設計

• いきなり実装せず、設計を議論(将来性・拡張性を重視)• 最初は難しいので、否定されてもくじけずにチャレンジを!

– 意見がまとまってきたらPoCパッチ• 動きを見せると意外と意見が変わります• コーナーケースもきちんと見ましょう!

– コーディングは周辺に合わせて!• 不用意に関係ない箇所を書き換えない!• バックパッチのし易さも重要な基準です

– とにかく議論!• 「Low-context」の世界です

Page 58: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

58

開発関連の情報源

• Development Information(PostgreSQL wiki)– 開発者向け情報– http://wiki.postgresql.org/wiki/Development_information

• Developer FAQ– 開発のことを知りたい人はまずここを熟読すべし– http://wiki.postgresql.org/wiki/Developer_FAQ

• hackers-jp– JPUG主催の開発者向け?日本語ML– http://ml.postgresql.jp/mailman/listinfo/hackers-jp

Page 59: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

59

PostgreSQLの情報源

• 日本PostgreSQLユーザ会– 日本でのPostgreSQLの普及等– 勉強会も年4回程度開催(Ustream中継あり)– http://www.postgresql.jp

• Let's Postgres– 日本語情報のポータルサイト– http://lets.postgresql.jp

• pgsql-jp– JPUG主催のユーザ向け日本語ML– http://ml.postgresql.jp/mailman/listinfo/pgsql-jp

Page 60: PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima

60

おわりに

• ご清聴ありがとうございました。