WindowsでPostgreSQLを使ってみよう
NTT オープンソースソフトウェアセンタ 板垣 貴裕
Windows Vista へ PostgreSQL をインストールし、データベースを利用するための環境を整えます。インストールには EnterpriseDB 社のバイナリ・パッケージを使います。解説の最後で、初期設定やデータの移動に関する、よくある質問についても補足します。
インストールの流れ
最初にインストールが何を行うのかと、インストールされるファイルを整理しておきます。PostgreSQL サーバ本体に関しては、ウィザードに従えば一括でインストールされます。
ダウンロード
バージョン 8.4 では、Windows 用のパッケージは EnterpriseDB 社によりメンテナンスされています。コミュニティのダウンロードページから辿れるインストーラを利用するのが手軽です。postgresql-8.4.0-1-windows.exe をダウンロードして実行するとインストールが始まります。
インストーラが行う操作
- PostgreSQL 実行ファイルのインストール
- Windows ユーザ "postgres" の作成
- PostgreSQL データベース・クラスタの作成
- PostgreSQL サービス「postgresql-8.4」の登録と開始
- (オプション) スタックビルダで追加アプリケーションのインストール
インストールされるファイル
- PostgreSQL サーバと管理ツール
- クライアント (psql, pgAdmin-III)
- contrib モジュール一式
- PostgreSQL 文書 (英語)
- スタックビルダ
- 開発用のC言語ヘッダとライブラリ
- (オプション) スタックビルダで選択したアプリケーション
インストール・ウィザードでの手順
それでは、インストール・ウィザードの手順を追っていきましょう。インストーラは英語ですが、それほど難しいことは聞かれないと思います。
- 0. インストーラの実行
- postgresql-8.4.0-1-windows.exe を実行する際に注意が必要なのは、「管理者として実行」する必要がある ことです。EXE ファイルの右クリックメニューから「管理者として実行」を選んでください。
- 1. Setup - PostgreSQL
- [日本語訳] PostgreSQL セットアップ・ウィザードへようこそ。
- インストール・ウィザードの最初のページです。'Next' をクリックします。
- 2. Installation Directory
- [日本語訳] PostgreSQL 実行ファイルのインストール先ディレクトリを指定してください。
- デフォルトでは "C:\Program Files\PostgreSQL\8.4" になっており、そのままで構わないでしょう。
- 3. Data Directory
- [日本語訳] データを保存するディレクトリを指定してください。
- デフォルトでは "C:\Program Files\PostgreSQL\8.4\data" になっていますが、変更したほうが良いかもしれません。C:\Program Files 配下のファイルは Windows Vista の保護対象であるため、設定ファイルの編集が面倒です。ここでは "C:\pgdata\8.4" に変更しておきます。
- 4. Password
- [日本語訳] データベース管理者とサービスのアカウント (postgres) のパスワードを指定してください。Windows にサービスのアカウントが既に作成済みの場合には、そのアカウントの現在のパスワードを入力する必要があります。アカウントが存在しない場合には、'Next' をクリックすると作成されます。
- ここでのパスワードは、Windows アカウントとデータベース管理者の両方で使われます。過去に PostgreSQL をインストールしたことがある場合、既に Windows に postgres アカウントが作成済みであることに注意してください。アカウントのパスワードを忘れてしまった場合は、「よくある質問/アカウントの管理」を参考にしてください。
- 5. Port
- [日本語訳] PostgreSQL サーバが接続を受け付けるポート番号を指定してください。
- デフォルトは "5432" になっています。通常はこのままで良いでしょう。
- 6. Advanced Options
- [日本語訳] 作成するデータベース・クラスタのロケールを指定してください。
- デフォルトは "[Default locale]" になっており、Windows 環境のロケール設定を参照するため、日本語版 Windows の場合には "Japanese_Japan.932" が選択されます。しかし、ロケールを "C" に変更することをお勧めします。その理由は「ロケール(国際化と地域化)」を参照してください。
- [日本語訳] pl/pgsql を template1 にインストールしますか?
- デフォルトでは "on" (インストールする) になっており、全てのデータベースで最初から、手続き言語 pl/pgsql を利用できます。手続き言語は後から追加することもできますが、すべてのデータベースの雛形になる template1 へインストールしておくことで、データベースそれぞれに手続き言語を登録する手間が省けます。
- 7. Ready to Install
- [日本語訳] PostgreSQL をインストールする準備が整いました。
- 'Next' をクリックすると実際のインストールが始まります。データベースの作成も併せて、数分でインストールは完了するはずです。
- 8. Completing the PostgreSQL Setup Wizard
- [日本語訳] PostgreSQL のインストールが完了しました。この後、スタックビルダを起動しますか? スタックビルダを使うと、PostgreSQL 用のツール、ドライバ、アプリケーションなどを追加でダウンロードし、インストールできます。
- スタックビルダはインストール完了後に別途起動することもできます。
- 9. スタックビルダへようこそ!
- スタックビルダはメッセージが日本語化されています。もしインストール後にスタックビルダを単独で実行している場合、Windows Vista では「管理者として実行」する必要がある ことに注意してください。スタートメニューの「PostgreSQL 8.4 > Application Stack Builder」の右クリックメニューから起動方法を選択できます。
- 10. インストールしたいアプリケーションを選択してください。
- ツール、ドライバ、ウェブアプリケーション、ウェブ開発にカテゴリ分けされている各種アプリケーションをインストールできます。今回の手順では、ここで "キャンセル" しました。
実行ファイルのインストール先を除けば、データベース・クラスタの場所などは後からでも変更できます。詳しくは「よくある質問/データベース・クラスタの再作成」を参照してください。
初期設定
インストールの途中でデータベース・クラスタも自動的に作成されます。このとき、手作業で initdb した場合の設定と比べると、インストーラが変更しているパラメータがあります。
サーバ・エンコーディング
サーバのエンコーディングは UTF-8 で固定されているようです。UTF-8 はトラブルが少ないのでお勧めですが、もし EUC_JP など、他のエンコードを使いたい場合には、新しいデータベースを作成する際に指定してください。データベースのデフォルトのエンコーディングを変更するには、データベース・クラスタの再作成が必要です。
ちなみに、SJIS (シフトJIS, CP932) はサーバ・エンコーディングとして使うことはできません。クライアント・エンコーディングとして利用することは可能です。)
postgresql.conf
- listen_addresses = '*' ('localhost')
- ネットワーク上の他のコンピュータからの接続を受け付ける設定になっています。もし同一コンピュータでウェブサーバを動作させるなど、PostgreSQL サーバ自体が外部からの接続を受け付ける必要が無いならば、'localhost' に変更しておくほうが安全です。
- log_destination = 'stderr' ('stderr, csvlog, eventlog')
- サーバログはテキスト形式で保存する設定になっています。イベントログや CSV ログとして保存したい場合は、log_destination へ eventlog や csvlog を追加します。
ただし、バージョン 8.4 以前では eventlog を指定すると、イベントログ内では日本語が文字化けします。SQLで日本語を扱う場合、ログの出力先は stderr または csvlog にすることをお勧めします。 9.0 以降のバージョンでは、この不具合は修正されていますので、eventlog でも大丈夫です。
- log_line_prefix = '%t' ('%t ')
- 出力時の時刻をログに追加するようになっていますが、このままだと
2009-08-01 12:34:56 JSTLOG: ...
のように時刻とログレベルが繋がってしまいます。スペースを追加 ('%t ') しておいたほうが良いかもしれません。 - client_encoding = sql_ascii (sjis)
- Windows のコマンド プロンプトから psql を使う場合には、sjis を指定しておくのが良いと思います。
pg_hba.conf
初期設定ではローカル・コンピュータからのアクセスでもパスワードの入力が必要な設定 (md5) になっています。もし毎回パスワードを入力することを避けたいのであれば、trust に変更しても良いでしょう。この場合、Windows へのログオンでアクセスを制限することになります。
変更前 (パスワード認証)# IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5変更後 (認証なし)
# IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust
よくある質問
インストール中にエラーが発生した
エラーの文章が「A non-fatal error ocuured whilst loading database modules.」の場合、PostgreSQL サーバの起動に失敗しています。エラー文は「モジュールのインストールに失敗」となっていますが、実際にはその前の段階のサーバ起動に失敗していることが多いようです。このとき、エラーログにも以下のメッセージが記録されていると思います。
Installing pl/pgsql in the template1 databases... psql: サーバに接続できませんでした: Connection refused (0x0000274D/10061) サーバはホスト"???"で稼動していますか? また、ポート5432でTCP/IP接続を受け付けていますか? サーバに接続できませんでした: Connection refused (0x0000274D/10061) サーバはホスト"???"で稼動していますか? また、ポート5432でTCP/IP接続を受け付けていますか? Failed to install pl/pgsql in the 'template1' database Installing the adminpack module in the postgres database...
エラーの原因は、いくつか考えられます。
- インストーラを管理者で無いユーザで実行してしまった → 「管理者として実行」しなおしてください。
- データベース・クラスタを作成するパスがジャンクションを含んでいる → いったん含まないパスにクラスタを作成してください。初期化後であれば、ジャンクションを含むパスにクラスタを移動しても大丈夫です。
アカウントの管理
通常、Windows のアカウントは「コントロールパネル > ユーザー アカウントと家族のための安全設定 > ユーザー アカウント > アカウントの管理」から管理すると思いますが、postgres アカウントはここには表れません。代わりに net user コマンドを使って管理します。詳しくは、記事『Windows の postgres ユーザを管理する』を参照してください。また、PostgreSQL をアンインストールしても、postgres アカウントは削除されません。
データベース・クラスタの再作成
データベース・クラスタを、配置ディレクトリを変更せずに再作成する方法を示します。ディレクトリを変更する場合には、「データベース・クラスタの移動」を参照してください。
- 1. PostgreSQL サーバを停止する
- スタートメニューから「Stop Server」を実行します。
この操作は「管理者として実行」する必要があります。 これ以降の操作(サーバの起動、停止、登録、解除)も、すべて管理者権限が必要になります。 - 2. 旧データベース・クラスタを削除 or 退避する
- 3. 新データベース・クラスタを作成する
- コマンド プロンプトから initdb を実行します。作成先のディレクトリ (-D) には、インストール時と同じ場所を指定してください。
> "C:\Program Files\PostgreSQL\8.4\bin\initdb.exe" (継続) -D "C:\pgdata\8.4" -U postgres --encoding=UTF8 --locale=C
- 4. postgres アカウントに新データベース・クラスタのアクセス権を与える
- データベース・クラスタは postgres アカウントから読み書きできなければなりません。ディレクトリのプロパティから「アクセス許可」を編集し、postgres アカウントに「フル コントロール」権を与えてください。
- 5. PostgreSQL サーバを再開する
- スタートメニューから「Start Server」を実行します。
- 6. モジュールを登録する
- pgAdmin から設定ファイル等を操作するための adminpack と、手続き言語 pl/pgsql を登録しておくと良いでしょう。postgres と template1 データベースに対して行います。
> "C:\Program Files\PostgreSQL\8.4\bin\psql.exe" (継続) -d postgres -U postgres (継続) -f "C:\Program Files\PostgreSQL\8.4\share\contrib\adminpack.sql" > "C:\Program Files\PostgreSQL\8.4\bin\createlang.exe" (継続) -d postgres -U postgres plpgsql # その後 -d template1 に対しても同様
データベース・クラスタの移動
データベース・クラスタの格納ディレクトリを移動する方法を示します。データの場所は、PostgreSQL サービスの起動パラメータに設定されています。データの移動には、サービスを再登録して起動パラメータを変更する必要があります。
- 1. PostgreSQL サーバを停止する
- 2. 新データベース・クラスタを作成する
- 3. postgres アカウントに新データベース・クラスタのアクセス権を与える
- この辺りは「データベース・クラスタの再作成」と同じです。
- 4. サービスを登録解除する
- サービスは「postgresql-8.4」の名前で登録されています。Windows のサービス・マネージャ (画像) から解除しても構いませんが、psql にも専用のコマンドがあります。こちらのほうがむしろ迷わずに済むかと思います。
> "C:\Program Files\PostgreSQL\8.4\bin\pg_ctl.exe" (継続) unregister -N postgresql-8.4
- 5. Windows を再起動する
- Windows ではサービスを登録解除してもすぐには削除されず、次の再起動で完全に削除されます。
- 6. サービスを再登録する
-
> "C:\Program Files\PostgreSQL\8.4\bin\pg_ctl.exe" (継続) register -N postgresql-8.4 -U postgres (継続) -D C:\pgdata\8.4-new -P パスワード -w
- 7. PostgreSQL サーバを再開する
- 8. モジュールを登録する
- この辺りも「データベース・クラスタの再作成」と同じです。
- 参考: Change the default PGDATA directory on Windows (PostgreSQL Wiki)