ページ更新: 2004-08-28 (土) (5255日前)

関連: Cygwin/PostgreSQL/セットアップ(cygserver版), ソフト/PostgreSQL, Windows/PostgreSQL

注意: Windows に正式対応した PostgreSQL 8.0 が 2005-01-19 にリリースされた。よって、今後は Cygwin の PostgreSQL を使う機会が減るはず。

本文書は Cygwinのpostgresql-7.4.1 パッケージの付属のREADMEに従ったセットアップの手順である。

Cygwin 及び PostgreSQL パッケージのインストール作業については本文書の範囲外とする。

本文書の手順は Cygwin の postgresql-7.3.4-2 (2003-09-02 リリース)postgresql-7.4.1-3 (2004-01-15 リリース) パッケージに適用できる。
これらのバージョンは cygipc パッケージ (cygipc-2.XX, ipc-daemon2.exe) を使用する。

より新しい postgresql-7.4.2-1 (2004-06-11 リリース) 以後は手順が異なる。 Cygwin/PostgreSQL/セットアップ(cygserver版) を参照のこと。

より古い postgresql-7.1.1-1 (2001-05-07 リリース)postgresql-7.3.4-1 (2003-08-01 リリース) も手順が一部異なる。
CygUtilscygipc-1.X を別途入手する、 UNIX Domain Socketが使えない(Cygwinのバージョンによる)のでTCP経由で接続する、など。 postgresパッケージのREADME を参照)
古い Cygwin と Cygwin 版 PostgreSQL は公式な入手手段がなく、書籍の付録か個人の配布に頼るしかないため、ここでは述べない。

パッケージのリリース情報については Cygwin/PostgreSQL/パッケージ更新情報 を参照のこと。

目次

[編集]

Cygwin付属の文書について #

[編集]

README #

Cygwin上での設定手順は /usr/share/doc/Cygwin/postgresql-7.4.1.README に記載されている。(-7.4.1 の部分は当然、postgresqlのバージョンによって変わる)

この文書はpostgresqlパッケージを使う場合、必ず読むべき文書である。

以下ではこの文書を単に「README」と記す。 この文書は、cygwinをC:\cygwinにインストールした場合、 C:\cygwin\usr\share\doc\Cygwin\postgresql-7.4.1.README にある。

[編集]

PostgreSQL付属の文書 #

Cygwin のパッケージではなく、オリジナルの PostgreSQL に元々付属する文書は /usr/share/doc/postgresql-7.4/ 以下にインストールされる。

この文書は英語だが、マニュアル (html/以下) の 日本語版が 日本 PostgreSQL ユーザ会 から入手できる。

また、日本語を使う上での注意は PostgreSQL 付属文書 README.mb.jp に日本語で、 Cygwin に対する説明は FAQ_MSWIN に英語で記載されている。 (この文書の日本語版は存在しないようだ)

[編集]

cygipc #

ipc-daemon2.exe など、cygipc パッケージに含まれるツール については /usr/share/doc/Cygwin/cygipc-2.03.README と、 /usr/share/doc/cygipc-2.03/ に記載されている。

[編集]

バージョン確認方法 #

Cygwinのパージョンはunameコマンドを用いて次のようにして確認する。

$ uname -a
CYGWIN_NT-5.1 hostname 1.5.7(0.109/3/2) 2004-01-30 19:32 i686 unknown unknown Cygwin

Cygwinパッケージのバージョンはcygcheckコマンドを用いて次のようにして確認する。

$ cygcheck -cd cygwin cygipc cygrunsrv postgresql
Cygwin Package Information
Package              Version
cygipc               2.03-2
cygrunsrv            0.98-1
cygwin               1.5.7-1
postgresql           7.4.1-3

なお、本文書の作業は次の日時に行った。日時とそのときのパッケージのバージョンを以下に示す。

  • 2004.03.20
    • cygipc 2.03-2
    • cygrunsrv 0.98-3
    • cygwin 1.5.9-1
    • postgresql 7.4.1-3
  • 2004.02.14
    • cygwin 1.5.7-1
    • cygipc 2.03-2
    • postgresql 7.4.1-3
    • cygrunsrv 0.98-1
    • +2003.12.01の環境
  • 2003.12.01
    • cygwin 1.5.5-1
    • cygipc 2.02-1
    • postgreSQL 7.4-1

OSは下記 1. を用いた。ただし、2. にて動作確認を行った個所もある。

  1. Windows XP Professional Service Pack 1
  2. Windows 2000 Professional Service Pack 4 (on VMware 4.5.1)

そのほか、次の設定を用いている。

  • 書籍「Cygwin+JE」本のパッケージと.bashrcなどの初期化スクリプト。(特に必要ではない)
  • Cygwinのインストールに使ったユーザを username とする。また、ユーザ usernameはAdministratorsグループに所属させる。
  • CygwinはC:\cygwinにインストールした。また、C:\cygwin\binをWindowsのシステム環境変数「Path」に追加し、いったん、Windowsを再起動している。(サービスに登録するとき必須)
[編集]

動かしてみる #

(原題: The following is the basic Cygwin PostgreSQL installation procedure)

READMEの「The following is the basic Cygwin PostgreSQL installation procedure」の手順に従って作業する。

[編集]

1. cygipcのipc-daemon2を起動する #

(原題: Start the cygipc ipc-daemon2)

最初に、ipc-daemon2 を起動する。

$ ipc-daemon2 &
[1] 3684

$ jobs                   ★起動確認
[1]+  Running                 ipc-daemon2 &

$ ps -a | grep ipc-daemon2   ★起動確認
     3684    3180    3684       3040  con 1004 23:07:16 /usr/bin/ipc-daemon2
[編集]

2. PostgreSQLを初期化する #

(原題: Initialize PostgreSQL)

次に、initdbしてデータベースクラスタを作成する。

$ initdb --no-locale -D /var/postgresql/data  ★ --no-locale を追加
The files belonging to this database system will be owned by user "username".
This user must also own the server process.

The database cluster will be initialized with locale C.

creating directory /var/postgresql/data... ok
creating directory /var/postgresql/data/base... ok
creating directory /var/postgresql/data/global... ok
creating directory /var/postgresql/data/pg_xlog... ok
creating directory /var/postgresql/data/pg_clog... ok
selecting default max_connections... 100
selecting default shared_buffers... 1000
creating configuration files... ok
creating template1 database in /var/postgresql/data/base/1... ok
initializing pg_shadow... ok
enabling unlimited row size for system tables... ok
initializing pg_depend... ok
creating system views... ok
loading pg_description... ok
creating conversions... ok
setting privileges on built-in objects... ok
creating information schema... ok
vacuuming database template1... ok
copying template1 to template0... ok

Success. You can now start the database server using:

    /usr/bin/postmaster -D /var/postgresql/data
or
    /usr/bin/pg_ctl -D /var/postgresql/data -l logfile start
[編集]

3. PostgreSQLのpostmasterを起動する #

(原題: Start the PostgreSQL postmaster)

postmasterを起動する。

$ postmaster -D /var/postgresql/data &   ★postmasterを常駐
[2] 3884

LOG:  shmdt(0xf80000) failed: Invalid argument   ★これ、ちょっときになるけど
LOG:  database system was shut down at 2003-11-29 11:26:13
LOG:  checkpoint record is at 0/9DE830
LOG:  redo record is at 0/9DE830; undo record is at 0/0; shutdown TRUE
LOG:  next transaction ID: 534; next OID: 17142
LOG:  database system is ready

$ jobs
[1]+  Running                 postmaster -D /var/postgresql/data &

なお、postmaster を直接実行する代わりに、PostgreSQL付属のpg_ctlスクリプトを使って起動するのが便利。

$ /usr/bin/pg_ctl -D /var/postgresql/data -l /var/log/postmaster.log start
postmaster successfully started

pg_ctlスクリプトの使用法はCygwinに依存するものではないので、 PostgreSQL自体のマニュアルを参照のこと。

[編集]

4. PostgreSQLに接続する #

(原題: Connect to PostgreSQL)

これでPostgreSQLのサーバプロセスが稼働したので、試しにDBに接続してみる。

$ psql template1
Welcome to psql 7.4, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

template1=# \q                 ★psqlを終了し、bashに戻る。
[編集]

5. PostgreSQLを停止する #

(注意:この項は、/usr/share/doc/Cygwin/postgresql-7.4.1.README には存在しない。)

PostgreSQLサーバプロセスを停止する。

pg_ctlスクリプトを使う場合は、stopモードを使って、こうする。

$ pg_ctl stop -D /var/postgresql/data
waiting for postmaster to shut down......done
postmaster successfully shut down

killコマンドを使う場合は、PostgreSQLサーバプロセスのプロセスIDを指定する。

プロセスIDが不明の時は次のようにして調べ、

$ cat /var/postgresql/data/postmaster.pid
3884       ★これがプロセスID
/var/postgresql/data/
  5432001       128

次のようにして、サーバプロセスを停止する。

$ kill 3884       ★PostgreSQLを停止 (SIGTERMシグナルを使う)
LOG:  received smart shutdown request
LOG:  shutting down
LOG:  database system is shut down

[2]+  Done                    postmaster -D /var/postgresql/data

もちろん、まとめて次のようにしてもよい。

$ kill `head -1 /var/postgresql/data/postmaster.pid`

postmasterをkillコマンドで止める場合のシグナルについては、マニュアルの以下の部分を参照のこと。

[編集]

6. ipc-daemon2を停止する #

(注意:この項は、/usr/share/doc/Cygwin/postgresql-7.4.1.README には存在しない。)

続いて、ipc-daemon2を止める。

$ ps -a | grep ipc-daemon2     ★プロセスIDを調べる
    3684    3180    3684       3040  con 1004 23:07:16 /usr/bin/ipc-daemon2
    ↑プロセスID
$ kill 3684                     ★ipc-daemon2を停止

[1]+  Done                    ipc-daemon2
[編集]

サービスとして実行 #

(原題: NT services Cygwin PostgreSQL installation procedure)

READMEの「The following is the NT services Cygwin PostgreSQL installation procedure」の手順に従って作業する。

[編集]

1. cygipcのipc-daemon2をサービスに登録する #

(原題: Install the cygipc ipc-daemon2 as a NT service)

ipc-daemon2 をWindowsのサービスに登録し、登録されたことを確認する。

$ ipc-daemon2 --install-as-service
$ cygrunsrv -Q ipc-daemon2
Service ipc-daemon2 exists                  ★サービスとして登録された。
Type                : Own Process
Current State       : Stopped               ★サービスは停止中。
Controls Accepted   :

ちなみに、サービスから削除するには次のようにする。
(/usr/share/doc/cygipc-2.03/README などを参照のこと)

$ ipc-daemon2 --remove-as-service   ★サービスから削除する。
$ cygrunsrv -Q ipc-daemon2          ★削除を確認する。
cygrunsrv: Error querying a service: OpenService:  Win32 error 1060:
指定されたサービスはインストールされたサービスとして存在しません。
[編集]

2. 「postgres」ユーザアカウントを作成する #

(原題: Create the "postgres" user account)

Windowsにユーザ postgres を追加する。(この操作の代わりに、Windowsのコントロールパネルから追加してもよい。)

「パスワード」部分にはこのユーザに付加するパスワードを入力すること。

$ net user postgres パスワード /add /fullname:postgres \
/comment:'PostgreSQL user account' /homedir:"$(cygpath -w /home/postgres)"
コマンドは正常に終了しました。

/etc/passwd に、postgres ユーザの情報を追加し、確認する。

$ mkpasswd -l -u postgres >> /etc/passwd     ★追加
$ tail -1 /etc/passwd                        ★確認(最後の1行を表示)
postgres:unused_by_nt/2000/xp:1014:513:postgres,U-HOSTNAME\postgres,S-1-5-21-4363740
69-688789844-839522115-1014:/home/postgres:/bin/bash
[編集]

3. 「postgres」ユーザに「サービスとしてログイン」を許可する #

(原題: Grant the "postgres" user the "Log on as a service" user right)

postgresユーザに「サービスとしてログイン」する権限を割り当てる。 次のようにして、「ローカル セキュリティ設定」を起動する。

$ cmd /c secpol.msc
postgres_secpol.png

「postgres」ユーザに「サービスとしてログイン」を許可する。

[編集]

4. postmasterをサービスに登録する #

(原題: Install postmaster as a NT service)

PostgreSQLをサービスに登録する。このとき、postgresユーザの作成で使ったパスワードが必要。

$ cygrunsrv --install postmaster --disp 'Cygwin PostgreSQL' --path \
> /usr/bin/postmaster --args "-D /var/postgresql/data -i" --dep ipc-daemon2 \
> --termsig INT --user postgres --shutdown
Enter password of user `XIAO\postgres':     ★postgresユーザのパスワードを入力
Reenter, please:                            ★パスワードをもう一度入力

$ cygrunsrv -Q postmaster
Service postmaster exists                   ★サービスとして登録された。
Type                : Own Process
Current State       : Stopped               ★サービスは停止中。
Controls Accepted   :

ちなみに、サービスから削除するには次のようにする(注意:この項は未確認)

$ cygrunsrv -R postmaster
[編集]

5. PostgreSQLのデータディレクトリを作成する #

(原題: Create the PostgreSQL data directory)

ユーザ postgres 用にデータ格納用ディレクトリを作る。

$ mkdir -p /var/postgresql/data

すでにディレクトリが存在し、その中にファイルが存在する場合、ファイルの権限や所有者を適切に設定すること。(あるいはデータが不要であれば、ディレクトリごと消去してもよい。)

[編集]

6. PostgreSQLのデータディレクトリの所有者を変更する #

(原題: Change ownership of the PostgreSQL data directory)

ディレクトリの所有者をユーザ postgres に変更する。

$ chown postgres /var/postgresql
$ chown postgres /var/postgresql/data
[編集]

7. cygipcのipc-daemon2を起動する #

(原題: Start the cygipc ipc-daemon2)

ipc-daemon2 サービスを起動する。

$ cygrunsrv -S ipc-daemon2  ★起動する
$ cygrunsrv -Q ipc-daemon2  ★起動したことを確認しておく。
Service ipc-daemon2 exists
Type                : Own Process
Current State       : Running
Controls Accepted   : Accept Stop, Accept Shutdown
[編集]

8. PostgreSQLを初期化する #

(原題: Initialize PostgreSQL)

postgresユーザでログインし、データベースクラスタを作成する。 (postgres ユーザーでログオンする方法 を参照)(2004-07-24)

$ initdb --no-locale -D /var/postgresql/data   ★ --no-locale を追加
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale C.

creating directory /var/postgresql/data... ok
creating directory /var/postgresql/data/base... ok
creating directory /var/postgresql/data/global... ok
creating directory /var/postgresql/data/pg_xlog... ok
creating directory /var/postgresql/data/pg_clog... ok
selecting default max_connections... 100
selecting default shared_buffers... 1000
creating configuration files... ok
creating template1 database in /var/postgresql/data/base/1... ok
initializing pg_shadow... ok
enabling unlimited row size for system tables... ok
initializing pg_depend... ok
creating system views... ok
loading pg_description... ok
creating conversions... ok
setting privileges on built-in objects... ok
creating information schema... ok
vacuuming database template1... ok
copying template1 to template0... ok

Success. You can now start the database server using:

    /usr/bin/postmaster -D /var/postgresql/data
or
    /usr/bin/pg_ctl -D /var/postgresql/data -l logfile start 

これでinitdbが成功した。

[編集]

9. postmasterを起動する #

(原題: Start postmaster)

postgreSQLをサービスとして起動する。

$ cygrunsrv -S postmaster
[編集]

10. postmasterの動作を確認する #

(原題: Verify postmaster is running)

postmasterサービスが起動したかどうか、確認する。

$ cygrunsrv -Q postmaster
Service postmaster exists
Type                : Own Process
Current State       : Running ★起動している
Controls Accepted   : Accept Stop, Accept Shutdown

$ cat /var/log/postmaster.log            ★ログも確認する
LOG:  shmdt(0xd00000) failed: Invalid argument  ★これ、気になるけど...
LOG:  database system was shut down at 2003-11-29 13:28:49
LOG:  checkpoint record is at 0/A18780
LOG:  redo record is at 0/A18780; undo record is at 0/0; shutdown TRUE
LOG:  next transaction ID: 554; next OID: 17147
LOG:  database system is ready
[編集]

11. PostgreSQLに接続する #

(原題: Connect to PostgreSQL)

psqlコマンドで試しに接続してみる。

$ psql -U postgres template1
Welcome to psql 7.4, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

template1-# \q
$