摘要PostgreSQL开发的基本操作
这是来自印度的投稿。
有一些幻燈片提供了有關PostgreSQL開發和加入PostgreSQL社區的有用信息,但作為文章似乎不太多見。因此,我將總結PostgreSQL社區中參與開發和審查所需的各種基本操作。
请参考2015年11月的PostgreSQL学习会上关于PostgreSQL社区开发的讨论和相关资料。
必需品 de
-
- PC(Windows, Linux, Mac)
Mac上に仮想マシン立てたLinuxで開発したい場合、「VirtualBox + SSHで接続」で十分だと思います。
PostgreSQLをコンパイル、実行できる環境を用意します。
デバッガ(gdbなど)が入ってるとbetter。
PostgreSQLのソースコード
後述するgitからHEADを取得する方法でもOK。場合によっては特定のバージョンを取得してもOK。
エディタ
Vim、Emacs、各種IDEなど
ネット環境
ソースコード入手、メールぐらいなのでテザリングでも十分だと思います。
基本动作
从获取源代码到启动
PostgreSQL的官方Git仓库地址是git://git.postgresql.org/git/postgresql.git。
或者,您可以从http://www.postgresql.org/ftp/source/下载并解压各个版本的源代码。
/* gitをつかって最新のソースコードを入手 */
$ git clone git://git.postgresql.org/git/postgresql.git
$ cd postgresql
$ ./configure --prefix=/home/hoge/pgsql/master --enable-debug --enable-cassert --enable-tap-tests CFLAGS=-O0
$ make -j 2
$ make install
/* ここまででインストール完了 */
$ cd /home/hoge/pgsql/master
$ bin/initdb -D data -E UTF8 --no-locale
$ bin/pg_ctl start -D data
/* ここまでで起動完了(起動ポートはデフォルトの5432) */
※”make -j 4″中的“-j”是编译时的并行度。对于多核机器来说,通过增加并行度可以更快地完成编译工作。
使用多个版本时
在同时使用多个PostgreSQL版本时,将其按以下方式进行目录结构布置会更容易管理。
/home/hoge
└ pgsql
├ 9.4.5 ← --prefixオプションで指定するパス
│ ├ postgresql-9.4.5 ← ソースコード本体
│ │ ├ src
│ │ ├ doc
│ │ :
│ ├ data ← データベースクラスタ
│ ├ bin
│ ├ include
│ ├ lib
│ └ share
├ master ← --prefixオプションで指定するパス
│ ├ postgresql ← ソースコード本体
│ │ ├ src
│ │ ├ doc
│ │ :
│ ├ data ← データベースクラスタ(initdbコマンドで指定)
│ ├ bin
│ ├ include
│ ├ lib
│ └ share
:
改变,以便它们不会相互干扰。
-
- バージョン9.4.5 -> 5945番ポート
-
- バージョン9.3.2 -> 5932番ポート
- gitから取得したHEAD -> 5432番ポート(デフォルト)
将端口号与版本关联起来可以更轻松地进行管理。
只需更改端口号就可以启动,而无需编辑postgresql.conf
使用命令$ pg_ctl start -D data -o “-p 5945” 可以更改端口号并启动。
查看源代码
我认为通过编辑器查看源代码是最好的方法。
然而,您也可以通过http://doxygen.postgresql.org以HEAD版本的源代码进行网络查看。
以下是使用Emacs进行标签跳转的例子。
/* タグジャンプの設定 */
$ cd <ソースコードのトップディレクトリに移動>
$ sh src/tools/make_stags
只需启动Emacs并输入M-.,然后输入您想跳转到的函数或变量名即可跳转。
代码审查和功能开发
请先查阅这份资料。它详细介绍了“补丁审核”的流程和方法。
如何進行補丁安裝
$ cd <ソースコードのトップディレクトリに移動>
$ patch -d. < /tmp/new_feature.patch
または
$ git apply /tmp/new_feature.patch
※ patch命令应用了所有可更改的部分,而git apply仅在所有更改都成功应用时才会应用更改。
git操作指的是使用Git版本控制系统进行各种操作的过程。
-
- ソースコードを最新の状態にする
-
- $ git pull origin master
-
- 新しい機能を作るためにブランチを切る
-
- $ git checkout -b new_feature
-
- 現在のブランチを確認する
-
- $ git branch -v
-
- 現在のブランチを切り替える
-
- $ git checkout new_feature
-
- これまで加えたソースコードの変更を元に戻す(HEADまで)
-
- $ git reset –hard HEAD
-
- ある行がどのコミットで変更されたかを確認するとき
-
- $ git blame src/backend/replication/syncrep.c
- 特定のブランチのdiffを出力する(new_featureブランチで新しい機能を作り、そのパッチを作成するときに使います)
$ git checkout new_feature
$ git diff master
/* パッチを作成するときは以下のようにします */
$ git diff master > new_feature.patch
回归测试
由于PostgreSQL具有回归测试功能,我们将利用该功能。
以下是在PostgreSQL中执行多重度为4的回归测试的示例,涵盖了所有功能(包括Contrib模块)。为了后续确认执行日志,我们使用了tee命令。
$ cd <ソースコードトップディレクトリへ移動>
$ make check-world -j 4 | tee /tmp/check-world.log
$ less /tmp/check-world.log
/* FAILEDなどのキーワードを探してテストの結果をチェックします */
- リグレッションテストの種類
$ make check-world
-PostgreSQL本体のみ$ make check
-PostgreSQLのクライアントツール(psqlやpg_dumpのみ)src/binに移動して$ make check
。または、$ make check -C src/bin
特定のツールのみをテストしたい場合はそのディレクトリ移動してmake check
。または-Cでディレクトリを指定する。PostgreSQLのContribモジュールcontribディレクトリに移動して$ make check
または$ make check -C contrib
特定のContribモジュールのみをテストしたい場合はそのディレクトリ移動してmake check
。または-Cでディレクトリを指定する。在回归测试中,您可以使用”make check -j 3″命令来提高并行度进行执行。
调试
在Emacs中,通过使用Emacs + gdb进行调试可以在查看源代码的同时高效地进行调试。
以下是附加到已启动的PostgreSQL服务器进程并进行调试的步骤。使用两个终端。
-
- ターミナルA : サーバへ接続し、SQLを入力。
- ターミナルB : Emacs+gdbを起動しデバッグ。
/* 事前にPostgreSQLサーバを起動しておきます */
$ psql -d postgres
psql (9.6devel)
Type "help" for help.
postgres(1)=#
/* サーバプロセスのpidを確認します。以下の例だと5145がアタッチするプロセスです。 */
$ ps x | grep postgres
5122 pts/7 S 0:00 /home/masahiko/pgsql/master/bin/postgres -D data
5124 ? Ss 0:00 postgres: checkpointer process
5125 ? Ss 0:00 postgres: writer process
5126 ? Ss 0:00 postgres: wal writer process
5127 ? Ss 0:00 postgres: autovacuum launcher process
5128 ? Ss 0:00 postgres: stats collector process
5144 pts/7 S+ 0:00 bin/psql -d postgres
5145 ? Ss 0:00 postgres: masahiko postgres [local] idle
5221 pts/9 S+ 0:00 grep postgres
/* Emacsを起動。-nwオプションをつけることでターミナル内でEmacsが起動可能。*/
$ emacs -nw
「M-x gdb」を入力し、
「Run gdb (like this): gdb --annotate=3」 と出たら、
「Run gdb (like this): gdb --annotate=3 attach 5145」 と入力しEnter。
以降は、gdbのコマンドを使用してデバッグを行います。
请发邮件。
可以使用现有的电子邮件地址,也可以新建一个用于社群开发的 Gmail 账号。
请从http://www.postgresql.org/community/lists/subscribe/ 上注册ML。
-
- pgsql-hackers
-
- pgsql-bugs
-
- pgsql-general
- pgsql-committers
您只需要一个选项,所以以下是用中文本地化的释义:
注册。
有关写电子邮件时的要点也在此资料中有提及。
此外,还有其他的。
-
- 英語のコメントや issue で頻出する略語の意味 (FYI, AFAIK, …)
http://qiita.com/uasi/items/86c3a09d17792ab62dfe
提交节
关于Commit Fest,请查看这里(Wiki)。
Commit Fest链接在这里。
- Commit Festのステータス一覧
选择“需要审核”的修补程序来进行审查时更容易着手。
点击相关资料的链接
-
- PostgreSQLコミュニティに飛び込もう
PostgreSQLハッキング 最初の一歩
https://www.slideshare.net/secret/t4EBtDL4qyMZjG
C言語によるユーザ定義関数の作り方
PostgreSQL開発ことはじめ
以上的是有关PostgreSQL开发的基本操作的总结。请务必加入PostgreSQL社区!JPUG主持的“PostgreSQL新手马拉松(临时名称)”也正在计划中,预计会在2016年2月或3月左右举行。
明天的 PostgreSQL Advent Calendar 将由 syobochim 担任。请多多关照。