摘要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) */
オプション意味–prefix=/home/…PostgreSQLをインストールするパス–enable-debugデバッグシンボルを付けてコンパイル–enable-cassertAssertを有効にする–enable-tap-testsTAPテストを有効にするため。 PerlのIPC::Runモジュールが必要になります。CFLAGS=-O0デフォルトだと-O2でコンパイル時に最適化されてしまうので-O0に変更する。これもデバックのため。

※”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などのキーワードを探してテストの結果をチェックします */
    リグレッションテストの種類
目的手順備考PostgreSQL本体 + Contribモジュール$ 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のステータス一覧
種類ステータス意味備考ActiveNeeds Reviewレビュー待ちのパッチ-ActiveWaiting on Authorパッチ作者の修正・更新待ち-ActiveReady for Committerコミッターのコミット待ちレビュワーの仕事は終了CloseCommittedコミット済み-CloseMove on next CF次のCFへレビューの時間が足りない場合になる時が多いですCloseRejected提案却下以降のCFで再度提案してもたぶん受け入れられませんCloseReturned with Feedback課題あり議論中に何か課題があり、それが解決ししたら再提案します

选择“需要审核”的修补程序来进行审查时更容易着手。

点击相关资料的链接

    • PostgreSQLコミュニティに飛び込もう

PostgreSQLハッキング 最初の一歩

https://www.slideshare.net/secret/t4EBtDL4qyMZjG

C言語によるユーザ定義関数の作り方

PostgreSQL開発ことはじめ

以上的是有关PostgreSQL开发的基本操作的总结。请务必加入PostgreSQL社区!JPUG主持的“PostgreSQL新手马拉松(临时名称)”也正在计划中,预计会在2016年2月或3月左右举行。

明天的 PostgreSQL Advent Calendar 将由 syobochim 担任。请多多关照。

广告
将在 10 秒后关闭
bannerAds