Personal tools

WindowsでPostgreSQLを使ってみよう

NTT オープンソースソフトウェアセンタ 板垣 貴裕


Windows Vista へ PostgreSQL をインストールし、データベースを利用するための環境を整えます。インストールには EnterpriseDB 社のバイナリ・パッケージを使います。解説の最後で、初期設定やデータの移動に関する、よくある質問についても補足します。

インストールの流れ

最初にインストールが何を行うのかと、インストールされるファイルを整理しておきます。PostgreSQL サーバ本体に関しては、ウィザードに従えば一括でインストールされます。

ダウンロード

バージョン 8.4 では、Windows 用のパッケージは EnterpriseDB 社によりメンテナンスされています。コミュニティのダウンロードページから辿れるインストーラを利用するのが手軽です。postgresql-8.4.0-1-windows.exe をダウンロードして実行するとインストールが始まります。

インストーラが行う操作

  1. PostgreSQL 実行ファイルのインストール
  2. Windows ユーザ "postgres" の作成
  3. PostgreSQL データベース・クラスタの作成
  4. PostgreSQL サービス「postgresql-8.4」の登録と開始
  5. (オプション) スタックビルダで追加アプリケーションのインストール

インストールされるファイル

  • 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. モジュールを登録する
この辺りも「データベース・クラスタの再作成」と同じです。

(2009年8月10日 公開)
  • 1
  • 2
 

You are here: Home 読み物 入門者向けの記事 WindowsでPostgreSQLを使ってみよう

Hello, everyone!