Postgresql の開発環境の作成

Postgresql の開発環境を構築する。

ソースコードの入手

postgresql のソースコードは git 上で管理されており `https://git.postgresql.org/git/postgresql.git` に存在するので、これを拾ってくる。

必要なライブラリのインストール

そのままではビルドが通らないので、ビルドに必要な開発パッケージをインストールする。
(https://wiki.postgresql.org/wiki/Compile_and_Install_from_source_code)

$ sudo apt-get install build-essential libreadline-dev zlib1g-dev flex bison libxml2-dev libxslt-dev libssl-dev libxml2-utils xsltproc ccache

ビルド

ライブラリのインストールが済んだら、 ./configure コマンドを発行して問題が起きないか確認する。個人的な話だが、手動でビルドしたプログラムは ~/.usr に配置するようにしたいので、その設定も行う。(もちろん PATH は通してある)

$ ./configure --prefix="${HOME}/.usr"
$ make
$ make install

configure: error: ICU library not found が発生する

master ブランチが 17devel の作業を行っているとき、 ./configure を実行したら configure: error: ICU library not found が発生した。正確には、 ICU はあるけれども icu-ucicu-i18n がないよ、という内容。 (ICU すらないといわれた場合、 libicu-dev をインストールする必要がある)

checking whether to build with ICU support... yes
checking for icu-uc icu-i18n... no
configure: error: ICU library not found
If you have ICU already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
Use --without-icu to disable ICU support.

ICU 自体は見つかるのに icu-ucicu-i18n が見つからないらしいけどなんでだろう…… と思ったら、ここ (https://stackoverflow.com/questions/76477533/installing-age-pg16-beside-postgresql-v16beta1-giving-bison-is-missing-while-it) に解決策があった。

$ sudo apt update
$ sudo apt install libicu-dev pkgconf

確認

$ ls -1 ~/.usr/bin/
clusterdb
createdb
# --- OMMITED ---
postgres
psql
reindexdb
vacuumdb

$ ls -1 ~/.usr/lib/
libecpg.a
libecpg_compat.a
# --- OMMITED ---
libpq.a
libpq.so
libpq.so.5
libpq.so.5.17
pkgconfig
postgresql

$ psql
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
        Is the server running locally and accepting connections on that socket?

サーバー自体はまだ起動していないので応答しないが、 psql はちゃんと読み込めているみたい。

command not found が発生する

ソフトウェアにパスが通ってない可能性がある。 ~/.bashrc などに export PATH=/home/username/.usr/bin:$PATH などの記述をする必要がある。 source ~./bashrc で設定を読み直し、 which psql などで意図した位置のファイルが見えることを確認する。

cannot open shared object file が発生する

共有ライブラリにパスが通っていない可能性がある。 ~/.bashrc などに export LD_LIBRARY_PATH=/home/username/.usr/lib:$LD_LIBRARY_PATH などの記述をする。 ( LD_LIBRARY_PATH を正しく設定する)

最後に

./postgres/src ディレクトリ以下には postgresql のソースコードが存在するので、煮るなり焼くなりして改造できる。

git 上では 1日 10コミット程度ツリーが進んでいるので、それを追いかけるのも悪くない。