Tihiroの頭を休めるIT教室

少しだけ頭使って後は根性

PostgreSQLをソースコードからビルドとインストール。

概要

PostgreSQLデバッグしたくなったので、ソースコードからビルドしてインストールして起動してみた。

第17章 Windowsにおけるソースコードからのインストール

↑を参考にした。

環境

GnuWinとかMigGwとかCygwinとかはPATHから除去しておく。

ビルド

前準備

PostgreSQLのフォルダの

/src/tools/msvc/config_default.pl

/src/tools/msvc/config.pl

に変更。

公式ドキュメントには

構築する前に、config.plファイルを編集して、変更したい設定オプションや使用する何らかのサードパーティ製のライブラリのパスを反映させる必要があるかもしれません。 まずconfig_default.plファイルを読み取り、解析することから始まり、そしてconfig.pl内の何らかの変更が適用されて、すべての設定が決定されます。

というようなことが書いてある。

ビルド実行!

VisualStudioをインストールした際に一緒にインストールされた「Visual Studio 用開発者コマンド プロンプト」とかいうものを起動してコマンドプロンプトを立ち上げる。スタートメニューのVisual Studio2017の中に発見したので、起動して

cd %PostgreSQLのフォルダ%/src/tools/msvc
build DEBUG

と、入力。5分ほど待っているとビルド完了。VisualStudioのプロジェクトファイルがぽこぽこ作成されていた。

ちなみに

開発者コマンドプロンプトで、CLコマンドとかLINKコマンドを実行できる。 CLコマンドはC言語プログラムをコンパイルするコマンド。 LINKコマンドはC言語プログラムをリンクするコマンド。いわゆるGCCに該当する。

インストール

installコマンドにインストール先となる場所を指定することでインストールできる。Visual Studio 用開発者コマンド プロンプト」とかいうものを起動してコマンドプロンプトを立ち上げて

cd %PostgreSQLのフォルダ%/src/tools/msvc
install c:/postgresql/10.3_debug/

とする。

エラー発生

ビルドがエラー

Can't locate Catalog.pm in @INC (you may need to install the Catalog module) (@INC contains: C:/Strawberry/perl/site/lib C:/Strawberry/perl/vendor/lib C:/Strawb erry/perl/lib) at genbki.pl line 17. BEGIN failed--compilation aborted at genbki.pl line 17.

Catalogモジュールが見つからない。というエラーの模様。このCatalogモジュールはCPANで公開されているものではなく、PostgreSQL用のCatalogモジュール?

対応としては「Strawberry Perl」をアンインストールして「ActivePerl」の再インストールで治りました。Pathから除去するのも忘れずに。

またもやビルドがエラー

C:\pgsql\source\postgresql-10.3\pgsql.sln.metaproj : error MSB4126: 指定されたソリューション構成 "Debug|MCD" は無効です。構成とプラットフォームのプロパティ (例: MSBuild.exe Solution.sln /p:Configuration=Debug /p:Platform="Any CPU") を使用して有効なソリューション構成を指定するか、または既定のソリューション構成を使用するために、それらのプロパティを空にしておいてください。 [C:\pgsql\source\postgresql-10.3\pgsql.sln] プロジェクト "C:\pgsql\source\postgresql-10.3\pgsql.sln" (既定のターゲット) のビルドが終了しました -- 失敗。

ビルドに失敗しました。

↓こちらに対応方法がありました。

www.projectgroup.info

HP製のパソコンで発生する模様。原因はレジストリキー「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment」に値が入っているのが原因。我が端末では「MCD」と入っていました。エラーメッセージ内の「"Debug|MCD"」の「MCD」に該当するようです。このレジストリキーの値を除去して再起動後、ビルドするとエラーは解消されました。

インストールでエラー

"you may need to install the install module"

install.plの

use Install qw(Install)

の前に

use FindBin qw( $RealBin );
use lib $RealBin;

追加する。

まとめ

インストールにPerlを利用しているのが不思議。