「PostgreSQL 8.0-beta の MinGW での開発」 2004−09−04 桑村 潤 1. 開発環境の構築 1) MinGWのインストール・設定 http://www.mingw.org/download.shtml より、 Current(Stable版)を取得します。 MinGW-3.1.0-1.exe MSYS-1.0.10.exe これらを上記順にインストールします。 MSYSのインストール時に、MinGWがインストールされた位置を注意して入力します。 デフォルトのインストール先は、それぞれ、 C:\MinGW C:\Msys\1.0 となります。 それと、PostgreSQLではBison,Flexが必要ですので http://sourceforge.net/projects/gnuwin32/ から m4-1.4.1 bison-1.857-3 flex-2.5.4a-1 を取ってきてインストールします。 環境変数の PATH に上記gnuwin32プログラムの実行モジュールのフォルダへのパス (デフォルトでは c:\Program Files\GnuWin32\bin )を設定します。 注意:後から、MSYS を起動してからPATH環境変数に設定してもだめです。(また、 MSYSのパスの通ったディレクトリに、GnuWin32の実行ファイルをコピーしてもだめ でした。) 2) includeの修正??? この版の問題かも知れませんが、 MinGW/include/unistd.h がちょっとおかしい。 //#ifndef __STRICT_ANSI__ //# ifndef __MINGW32__ # include # include //# else //# include_next //# endif /* __MINGW32__ */ //#endif /* __STRICT_ANSI__ */ と強引に修正する。 2. PostgreSQL 8.0 のインストール PostgreSQL.orgのミラーダウンロードサイトから、ベータ版を持ってくるか、もしくは、 以下のように、最新のソースを CVS から取ってきます。 # cvs -d :pserver:anoncvs@anoncvs.postgresql.org:/projects/cvsroot login (Passwd: anoncvs) # cvs -z3 -d :pserver:anoncvs@anoncvs.postgresql.org:/projects/cvsroot co pgsql (今回、テストに使ったのは 2004/08/27 版) 3) PostgreSQL-8.0 の作成 CVSから取得したPostgreSQL-8.0を展開し、展開されたディレクトリへ移動しする。 そして、configure プログラムを走らせる。 # ./configure --without-readline --without-zlib (※ここで、以下は 2004/08/27 版では不要だった) # cp src/makefiles/Makefile.win32 src/Makefile.port # cp src/backend/port/dynloader/win32.c src/backend/port/dynloader.c また、configure をしたときに生成される src/Makefile.global には、 -- FLEX = /c/Program Files/GnuWin32/bin/flex -- と設定されてしまうため、 -- FLEX = flex -- と書き換えます。 ※もし、Administrator権限のユーザでpostmasterを起動したい場合は、 src/backend/port/win32/security.c のpgwin32_is_admin(void)の頭で強引に、 return FALSE; とします。 コンパイルを実行します。 # make これで、無事に作成できるはず。 #※の修正を行い、Admin権限で行う場合には必要ありません。 #4) postgresユーザの作成 #Administrator権限のないpostgresqlユーザを作る #以下、postgresユーザにて行います。 5) テストを行います。 上記のmake をした場所で、 # make check を実行し、regression test を始めます。 現状では途中で無限ループに陥りますので注意してください。このときの 対処方法は以下で述べます。 /bin/sh.exe ./pg_regress --temp-install --top-builddir=../../.. --schedule=./parallel_schedule --multibyte=SQL_ASCII ============== creating temporary installation ============== ============== initializing database system ============== ============== starting postmaster ============== running on port 65432 with pid 2300 ============== creating database "regression" ============== CREATE DATABASE ALTER DATABASE ============== dropping regression test user accounts ============== ============== installing PL/pgSQL ============== ============== running regression test queries ============== parallel group (13 tests): text varchar char oid name float4 int2 boolean int8 int4 float8 bit numeric boolean ... ok char ... ok name ... ok varchar ... ok text ... ok int2 ... ok int4 ... ok int8 ... ok oid ... ok float4 ... ok float8 ... ok bit ... ok numeric ... ok test strings ... ok test numerology ... ok parallel group (20 tests): lseg path timetz time circle comments reltime abstime polygon point box tinterval inet interval timestamp timestamptz date type_sanity oidjoins opr_sanity point ... ok lseg ... ok box ... ok path ... ok polygon ... ok circle ... ok date ... ok time ... ok timetz ... ok timestamp ... ok timestamptz ... ok interval ... ok abstime ... ok reltime ... ok tinterval ... ok inet ... ok comments ... ok oidjoins ... ok type_sanity ... ok opr_sanity ... ok test geometry ... ok test horology ... ok test insert ... ok test create_function_1 ... ok test create_type ... ok test create_table ... ok test create_function_2 ... ok test copy ... ok parallel group (7 tests): create_operator create_aggregate triggers constraints vacuum inherit create_misc constraints ... ok triggers ... ok create_misc ... ok create_aggregate ... ok create_operator ... ok inherit ... ok vacuum ... ok parallel group (2 tests): create_view create_index create_index ... ok create_view ... ok test sanity_check ... ok test errors ... ok test select ... ok parallel group (18 tests): select_into select_having update namespace case select_implicit transactions select_distinct_on arrays union select_distinct random aggregates join portals hash_index btree_index subselect select_into ... ok select_distinct ... ok select_distinct_on ... ok select_implicit ... ok select_having ... ok subselect ... ok union ... ok case ... ok join ... ok aggregates ... ok transactions ... ok random ... ok portals ... ok arrays ... ok btree_index ... ok hash_index ... ok update ... ok namespace ... ok test privileges ... ok test misc ... ok parallel group (5 tests): portals_p2 cluster foreign_key rules select_views select_views ... ok portals_p2 ... ok rules ... ok foreign_key ... ok cluster ... ok parallel group (14 tests): limit copy2 truncate temp sequence rowtypes domain polymorphism rangefuncs prepare alter_table conversion without_oid plpgsql ******************************************** 走っている途中で、plpgsqlのところでsignalが取れずloopしているようです。(帰ってこない) そこで、タスクマネージャでCPUを99%食っていた postgres.exe をプロセスを殺します。 ******************************************** limit ... ok plpgsql ... FAILED copy2 ... ok temp ... ok domain ... ok rangefuncs ... ok prepare ... ok without_oid ... ok conversion ... ok truncate ... ok alter_table ... ok sequence ... ok polymorphism ... ok rowtypes ... ok test stats ... ok test tablespace ... ok ============== shutting down postmaster ============== postmaster stopped ======================= 1 of 96 tests failed. ======================= 失敗した plpgsql は内部の大幅書き直しがあるみたいなので、まだ調整中のもようです。 6) インストール # make install を実行すると /c/Msys/1.0/local/pgsqlの下にインストールされます。 7) 環境設定 ※現バージョンはちょっと変なので、次のように設定を行い起動します。 MinGWから起動するとpsqlの出力が変になります。 また、postmasterのip接続ができません。 そこでWindowsのコマンドプロンプトから起動できるようにします。 PGCOM.bat というファイルを下記内容で書きます。 -- set PATH=c:\msys\1.0\local\pgsql\bin;c:\msys\1.0\local\pgsql\lib;%PATH% set PGHOME=c:\msys\1.0\local\pgsql set PGDATA=c:\msys\1.0\home\data set TZ=JST-9 cmd -- これを起動するとコマンドプロンプトが出てきます。 起動するまえに、pg_hba.confを書き換えます。テスト用に、 -- host all all 0.0.0.0 0.0.0.0 trust -- *この設定は全ネットワークからのアクセスを受け付けますので注意してください。 # postmaster -i で起動します。 ※本来は、 pg_ctl start -U postgres とすればOKのはずなのですが、うまくip接続ができません。 unix側のクライアントからも、 $ psql -h xxx.xxx.xxx.xx template1 postgres でつながります。 データベースの初期化をします。 # initdb -E EUC_JP --no-locale psqlでアクセスするきに、日本語を正しく表示させるためには、 \encoding SJIS にします。 データベースを作成し、 $ createdb demo psql でつなぐことができました。 -- C:\msys\1.0\home\demo> psql demo Welcome to psql 8.0.0beta1, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit demo=# \encoding SJIS demo=# \d ... demo=# \q C:\msys\1.0\home\demo> -- あとは、いろいろとテストをしてみてください。 -- 謝辞:さいとう先生、ご指導ありがとうございました。