Personal tools

Document Actions

FAQ_windows.ja.html

by shigehiro honda last modified 2007-01-09 23:28

Windowsネィティブ環境でのPostgreSQLのインストールと実行についてのよくある質問とその回答

最終更新日(原本): Date: 2006/10/08 19:37:35
最終更新日(日本語版): $Date: 2005/10/31 01:35:00 $

Current maintainer: Dave Page (dpage@postgresql.org)
(Japanese Translation maintainer: Shigehiro Honda honda at postgresql.jp)

本書の最新版はhttp://pginstaller.projects.postgresql.org/faq/FAQ_windows.htmlにあります。

Windowsネィティブ環境におけるPostgreSQLのコンパイルに関するFAQはhttp://www.postgresql.org/files/documentation/faqs/FAQ_MINGW.htmlにあります。

このFAQではWindowsネィティブ環境におけるPostgreSQLについてのみを扱います。Cygwinを使用する場合はそのFAQhttp://www.postgresql.org/files/documentation/faqs/text/FAQ_CYGWINを参照してください。


サポートされるプラットフォーム

1.1) どのバージョンのWindowsでPostgreSQLは動作しますか?
1.2) NT4もサポートされていると聞いたのだけれども本当ですか?
1.3) Winsows95や98、MEはどうなっていますか?

インストール

2.1) WindowsでPostgreSQLをインストールするためには何が必要ですか?
2.2) PostgreSQLをソースコードからコンパイルするためには何が必要ですか?
2.3) なぜPostgreSQLを実行するために管理者以外のアカウントが必要なのですか?
2.4) FATパーティションにPostgreSQLをインストールできますか?
2.5) PostgreSQLが必要とするファイルシステムの権限は何ですか?
2.6) なぜエンコーディングにUnicodeを選択できないのですか?
2.7) 英語以外の言語でインストールしたのだけれども、表示されるメッセージが全て英語になってます!

インストール時によくあるエラー

3.1) PostgreSQLやインストーラが起動時にクラッシュしたり、起動できなかったり、起動が固まったりします。
3.2) インストーラが指定したアカウントが管理者だと言い張ります。実際は管理者ではありません!
3.3) "the user has not been granted the requested logon type at this computer"などといったエラーになります
3.4) initdbのインストールと実行の時、権限に関するエラーが起こります。
3.5) ターミナルサービスセッションからはPostgreSQLをインストールできないというエラーメッセージが現れます。
3.6) ディレクトリを変更したはずなのにPostgreSQLがデフォルトディレクトリにインストールされてしまいます。
3.7) インストーラをアップグレードすると、administratorでログインしているにもかかわらず、サービスをインストールする権限がないというメッセージが現れます。
3.8) インストレーションパッケージを開くことができないというエラーメッセージが現れます。

実行時によるあるエラー

4.1) 手続き言語をインストールすると"dynamic load error"というエラーになります。
4.2) サーバを一回だけ起動したのですが、多くのpostgres.exeプロセスが存在します。


サポートされるプラットフォーム

1.1) どのバージョンのWindowsでPostgreSQLは動作しますか?

PostgreSQLはWindows 2000、XP、2003をサポートします。執筆時点では32ビットシステムでのみ動作が確認されています。

1.2) NT4もサポートされていると聞いたのだけれども本当ですか?

公式にはサポートされていません。しかし、以下のような若干の問題がありますが、PostgreSQLはWindows NT4でも動作します。

  • インストーラは正しく動作しません。そのため、手作業でコードをコンパイルしインストールしなければなりません。
  • PostgreSQLはテーブル空間を実装するためにNTFSファイルシステムの"リパースポイント"機能を使用しています。リパースポイントはNT4では使用できませんので、テーブル空間を使用することはできません。
  • 標準ではWindows NT4には'runas.exe'コマンドがありません。このため、管理者アカウントからPostgreSQLを起動することが難しくなっています。

最後にNT4での動作確認はほとんど行われていないことに注意してください。

1.3) Winsows95や98、MEはどうなっていますか?

PostgreSQLはこれらのプラットフォームでは使用できない機能を必要としていますので、これらのプラットフォームでは動作しません。 こうしたプラットフォームでPostgreSQLを実行する場合はCygwinの方を確認してください。こちらは9xプラットフォームをサポートしています。

インストール

2.1) WindowsでPostgreSQLをインストールするためには何が必要ですか?

WindowsにPostgreSQLをインストールする一番簡単な方法は、PostgreSQLのFTPサイトとそのミラーからダウンロードできる、Windowsインストーラパッケージを使用することです。 これは、コンパイル済みのバージョンのPostgreSQLをpgAdmin(管理・保守用のグラフィカルインタフェース)と一緒にインストールする他、特別な機能を追加する'contrib'モジュールや手続き言語を選択してインストールします。

インストーラを使用するためには、WindowsインストーラサービスをインストールするWindows 2000、XP、2003が動くマシンが必要です。 インストーラは必要に応じてサービスアカウントを作成し、データベースクラスタを初期化します。

インストーラはからダウンロードできます。

2.2) PostgreSQLをソースコードからコンパイルするためには何が必要ですか?

http://www.postgresql.org/files/documentation/faqs/FAQ_MINGW.html にあるWindowsコンパイルに関するFAQには、WindowsシステムでPostgreSQLをソースコードからコンパイルするための詳細が説明されています。

2.3) なぜPostgreSQLを実行するために管理者以外のアカウントが必要なのですか?

ハッカーがパッケージ内のソフトウェアの不具合を使用してコンピュータへの取っ掛かりを持った場合、ハッカーはそのサービスを稼動しているユーザアカウントの権限を持つことになります。 PostgreSQLではこうした不具合はまだありませんが、ハッカーがPostgreSQLの不具合を見つけ、それを悪用してシステムをハックしたとしても、損害が最小となるように管理者以外のサービスアカウントの使用を強制しています。

これはUnixの世界ではかなり前から常識的な方法でした。 Windowsの世界でも、Mixrosoftやほかのベンダーがそのシステムのセキュリティを高めるにつれて、標準的な方法になりつつあります。

PostgreSQLの最優先すべきことはデータの整合性を保つことです。 FATやFAT32ファイルシステムでは必要な信頼性を提供していません。 更に、FATではセキュリティ機能が提供されませんので、データファイルそのものが承認なしに変更されてしまうのを防ぐことはできません。 最後に、PostgreSQLは'リパースポイント'という機能を使用してテーブル空間を実装しています。 この機能はFATパーティションでは使用できません。

NTFSファイルシステムはジャーナリングファイルシステムであり、より優れた信頼性とクラッシュ時の復旧機能を持っています。 更に、判りやすいアクセス制御システムを持ち、PostgreSQLで使用するリパースポイントも提供します。

こうした理由により、PostgreSQLインストーラパッケージでは、NTFSパーティション以外にデータベースクラスタを初期化しません。 サーバとユーティリティはパーティションの種類は関係なくインストールされます。

しかし、開発者向けPCなどの一部のシステムではFATパーティションしか選べないかもしれません。 こうした場合、データベースクラスタを初期化させずに、通常通りにPostgreSQLをインストールすることもできます。 インストールが完了した時に、手作業でFATパーティションに対して'initdb.exe'プログラムを実行してください。 しかしセキュリティと信頼性については妥協することになりますし、また、テーブル空間の作成は失敗します。

2.5) PostgreSQLが必要とするファイルシステムの権限は何ですか?

PostgreSQLサービスアカウントには、サービスディレクトリまでの階層のディレクトリ全てに対する読み取り権限が必要です。 データディレクトリについては書き込み権限のみが必要です。 特に、バイナリファイルを格納するディレクトリに対しては、読み取り以外を許可してはなりません。 (インストール先のディレクトリ以下にある全てのディレクトリについてはインストーラが設定しますので、何も変更していなければ問題にならないはずです。)

また、PostgreSQLにはkernel32.dllやuser32.dllなどのシステムDLLへの読み取り権限が必要です。 これは通常デフォルトで許可されています。 CMD.EXEバイナリにも読み取り権限が必要ですが、こちらはロックされているかもしれませんのでその場合は解除しなければなりません。

マルチユーザシステムでPostgreSQLを稼動させる場合、PostgreSQLディレクトリから管理者以外の全てのユーザの権限を取り除かなければなりません。 PostgreSQLのファイルに対して権限が必要なユーザは決して存在しません。 全ての通信はlibpq接続を介して行われます。 データファイルに直接アクセスすると、情報の漏洩をもたらしたり、システムが不安定になったりします。

2.6) なぜエンコーディングにUnicodeを選択できないのですか?

NOTE! PostgreSQL 8.1では、Windows上で完全なUNICODE符号化方式(UTF8)をサポートしました。 本項はバージョン8.0の場合においてのみ有効です。

In PostgreSQL, "UNICODE" means "UTF8". UTF8 is not properly supported on Windows, and therefore cannot be used in version 8.0. The installer will allow you to select any encoding that is supported by both PostgreSQL and your version of Windows.

-->

WindowsではUnicodeが適切にサポートされていませんので、使用できません。 インストーラでは、PostgreSQLと使用するバージョンのWindowsの両方でサポートされるエンコーディングを選ぶことができます。

Unicodeの問題はpgsql-hackersメーリングリストにてAleksander Kmetecが説明しました:

Postgresは、一部の文字列関連の関数でオペレーティングシステムに依存しています。 そのため、OSはデータベースエンコーディングとして使用されるエンコーディングと同じものをサポートしなければなりません。 残念なことに、WindowsはPGサーバ側で利用可能なエンコーディングの一部をサポートしていません。

前の段落で示した状況が大した意味を持たなくなるような例を示します。 UNICODEデータベース(実際のところはUTF8)では、initdbを実行するときに互換性のあるロケールを使用しなければなりません。 例えば私の環境では、"sl_SI.utf8" (Linux)や"Slovenian_Slovenia.65001"(Windows)です。

65001はutf8用のWindowsコードページ番号です。 しかし本当は有効なコードページではありません。 この説明は元々はhttp://www.sharmahd.com/tm/codepages.htmlにありましたが、残念ながら今は削除されています。 そこでは以下のように述べられていました。

"65000 (UTF-7)と65001 (UTF-8)は仮想的なコードページです。 対応するNLSファイルは存在しません。 このコードページIDはWideCharToMultiByte()とMultiByteToWideChar()API呼び出しでのみ使用可能です。"

つまり、UPPER()やLOWER()、ORDER BY がunicodeデータベースでは正しく動作しません。 現在、65001エンコーディングを使用するロケールではinitdbすら動作させることができません。 少し変更してLC_COLLATEをSlovenian_Slovenia.65001に設定すればinitdbを動かすことができましたが、ソート順はまだ間違ったままです。 上の引用を検討すべきです。

いくつか検査をした後、以下のPGでサポートされるエンコーディング一覧にたどり着きましたが、Windowsでサポートされるかどうかの記載はありません。

  • UTF8
  • EUC_CN
  • EUC_TW
  • LATIN6 (ISO 8859-10/ECMA 144)
  • LATIN7 (ISO 8859-13)
  • LATIN8 (ISO 8859-14)
  • LATIN10 (ISO 8859-16/ASRO SR 14111)

2.7) 英語以外の言語でインストールしたのだけれども、表示されるメッセージが全て英語になってます!

この言語の選択はインストール時のみにインストーラが使用する言語を何にするかを決めるものです。 インストール後の製品のメッセージの言語を変更するためには、Natural language support機能付きでインストールしなければなりません。 その後、postgresql.confファイルを編集し、lc_messages パラメータの値を好みの言語に変更してください。

インストール時によくあるエラー

3.1) PostgreSQLやインストーラが起動時にクラッシュしたり、起動できなかったり、起動が固まったりします。

一番よくあるのは、アンチウィルスソフトやファイアーウォールが原因の場合です。 何らかのファイアーウォールソフトをマシンにインストールしているのであれば、それを無効にする、あるいは、アンインストールしてください。 何らかのアンチウィルスソフトをインストールしているのであれば、PostgreSQLで使用されるはずのディレクトリに対してそれを無効にしなければなりません。 これでうまくいかなければ、アンチウィルスソフトを完全にマシンからアンインストールする必要があるのかもしれません。

nod32アンチウィルス製品については問題がすでに報告されています。 この製品を使用している場合は、排除プロセスリストに"postmaster.exe" を追加してください。 (アドバンスオプションから設定可能です。) この問題については解決のための報告を行っています。

McAfeeやPandaアンチウィルスソフト、および、NetLimiterネットワーク監視ソフトについてもすでに問題が報告されています。 このソフトウェアパッケージと一緒にPostgreSQLが稼動しているケースがありますが、一部で動作しないことがあり、これに対するまだ具体的、あるいは推奨する方法はありません。 インストール時に特化した問題かもしれません。 アンインストールが必要な場合もありました。

cygwinをインストールし、かつ、cygwin\binディレクトリがシステムのPATH変数にある場合も問題があります。 このcygwinディレクトリにはインタープリタ言語(TCL、perl、python)に関連したDLLファイルが存在します。 が、これらにはインストーラやインストールされたPostgreSQLをハングさせたりクラッシュさせるような不具合があります。 インストーラを実行する前にパスからcygwin\binディレクトリを消去してください。

3.2) インストーラが指定したアカウントが管理者だと言い張ります。実際は管理者ではありません!

よくあるのは、そのつもりがなかったとしても、指定したアカウントがadministratorまたはpowerユーザであることです。 インストーラで使用している検査は具体的にいうとAdministratorsグループやPower Usersグループのメンバを検査しています。 作業を戻して、「Local Users and Groups」からAdministratorsグループを開き、メンバを確認してください。 更に、どのグループ(ドメインまたはローカル)がAdministratorsグループのメンバになっているか、そしてそのグループのグループメンバなどなどと確認してください。 PostgreSQLは入れ子のグループに対して全てのレベルを検査します。

3.3) "the user has not been granted the requested logon type at this computer"などといったエラーになります

指定したPostgreSQLアカウントが『サービスとしてログオン』権限と『ローカルにログオン』権限を持っていることを確認してください。 『ローカルにログオン』権限はインストール段階でのみ必要で、セキュリティポリシーが要求している場合インストール後に取り除くことができます。 (権限は『ローカルセキュリティポリシー』MMC スナップインを使用して付与したり削除したりできます。) 『ローカルにログオン』権限はデフォルトです。『サービスとしてログオン』権限は通常、インストーラによって自動的に付与されます。

まだ問題があるのであれば、監査を(『ローカルセキュリティポリシー』スナップインを使用して)有効にし、他にどんな権限がセットアップに必要かを知らせてください。

コンピュータがドメインのメンバである場合、グループポリシーを使用してドメインレベルでセキュリティポリシーが制御されているかもしれません。

3.4) initdbのインストールと実行の時、権限に関するエラーが起こります。

PostgreSQLサービスアカウントが、インストール先のディレクトリまでの階層全てに権限を持っているか確認してください。 インストーラはインストール先ディレクトリの権限を設定しますが、その親ディレクトリの権限は設定しません。 必要な権限については質問2.5 を参照してください。

3.5) ターミナルサービスセッションからはPostgreSQLをインストールできないというエラーメッセージが現れます。

残念ながらその通りです。 PostgreSQLのバックエンドはTSセッションからは実行しません。 また、initdbを行うために、インストーラはスタンドアロンのバックエンドを起動しなければなりません。 そのため、インストールはコンソールから行わなければなりません。 Windows Server 2003を使用している場合は、単なる管理用セッションではなく、実際のコンソールにリモートアクセスすることができることに注意してください。 このためには、mstsc /consoleを実行してリモートデスクトップ接続を開始し、その後は通常通りに接続してください。 これはサーバローカルのコンソールをロックし、そのセッション経由のコントロールを提供します。 この状況であれば、PostgreSQLをうまくインストールできるはずです。

3.6) ディレクトリを変更したはずなのにPostgreSQLがデフォルトディレクトリにインストールされてしまいます。

ルート機能のディレクトリを変更しているか確認してください。 PostgreSQLインストーラでは一部の機能に対して個々にディレクトリを変更することができます。 ルート機能("PostgreSQL")を変更している場合、副機能("Database Server"など)は全て自動的にデフォルトとしてこの値を継承します。 しかし、副機能だけを変更している場合は、インストールの他の部分ではデフォルトの場所のままになります。

3.7) インストーラをアップグレードすると、administratorでログインしているにもかかわらず、サービスをインストールする権限がないというメッセージが現れます。

この問題の回避方法は、 まず以前のバージョンをアンインストールすることです。 これが既存のデータを削除しないことに注意してください。 その後に新しいバージョンを再インストールし、確実に正確に同一のディレクトリを使用してください。 これで問題が解決するはずです。 これが、ダンプ/リロードが不要なマイナーバージョンのアップグレード(例えば8.0.1から8.0.2)でしか使えないことに注意してください。

3.8) インストレーションパッケージを開くことができないというエラーメッセージが現れます。

この原因には2種類あります。 よくあるのは、ZIPファイル内のMSIファイルをダブルクリックした場合です。 インストールを行うためには、ZIPファイルをすべて一時ディレクトリに伸長してから、実行しなければなりません。 もうひとつは、ダウンロードしたファイルが破損している場合です。 他のミラーサイトからダウンロードし直してください。

実行時によるあるエラー

4.1) 手続き言語をインストールすると"dynamic load error"というエラーになります。

その手続き言語用の実際の言語DLLが存在しないことを意味する場合がほとんどです。 PostgreSQLのDLLには言語バインディングのみしか含まれてません。 言語の分散DLLはシステムPATHに存在しなければなりません。 現時点の異なる手続き言語で必要なDLLの一覧に関しては、インストール手順を参照してください。

どのDLLが存在しないかを正確に調べるために、Microsoftが提供するdependsツールを使用することができます。 これは、インストール用とは別のWindows CDにあるWindows Support Toolsから利用可能です。 depends plpython.dll (PL/python用)を実行することで、どのインポートが存在しないかを表示します。

4.2) サーバを一回だけ起動したのですが、多くのpostgres.exeプロセスが存在します。

これは正常です。 PostgreSQLは複数プロセスアーキテクチャを使用しています。 空のシステムでは、2個から5個のプロセスが存在するかと思います。 クライアントが接続し始めると、プロセス数は増加します。

You are here: Home 分科会・委員会 文書・書籍関連分科会 FAQ_windows.ja.html