Running & Installing PostgreSQL On Native Windows/ja

From PostgreSQL wiki

Jump to: navigation, search

Contents

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

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

少なくともバージョン9.0の時点では、PostgreSQLはWindows XP以上でサポートされます。32ビットおよび64ビットシステムで動作します。

より新しいメジャーバージョンのサーバがリリースされた後にリリースされた新しいバージョンのオペレーティングシステムについては、そのバージョンのサーバはテストされません。たとえばWindows 7はPostgreSQL 8.4の後にリリースされましたので、PostgreSQL 8.3ではWindows 7をサポートしません。同様に近い将来のRHEL 6がリリースされた時、PostgreSQL 9.0.xのみがそこでサポートされます。 私たちは少なくとも、Windowsの新しいバージョンを、そのリリースの後のPostgreSQLのメジャーバージョンでサポートすることを目標としています。

ワンクリックインストーラでサポートされるプラットフォームについては、メインダウンロードページではなく、インストーラのダウンロードページdownload page for windowsを参照してください。

Windows以外のプラットフォームについては、main FAQ and the main download pageを参照してください。

どのWindowsプラットフォームはサポート*されない*のでしょうか?

PostgreSQLインストーラは以下ではテストまたはサポートされません

  • Windows XP Embedded
  • Windows 2000
  • Windows NT 4
  • Windows NT 3.5.x
  • Windows 95/98/ME/3.x
  • Windows CE
  • Windows Mobile

これらのプラットフォームはサポートされません。こうしたプラットフォームでの援助をメーリングリストで頼まないでください。

組込みWindowsに関しては多少の情報があります。問題解消のためにinstallation on embedded versions of windowsを参照してください。

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

公式にはサポートされておらず、また、以下のような若干の問題がありますが、PostgreSQLはWindows NT4でも動作する可能性があります。。

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

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

  • Windows NT 4またはWindows 2000では試験は行われません。これらのプラットフォームではより新しいバージョンは動作しない可能性があります。

これらの古いプラットフォームについての問い合わせをメーリングリストで行わないでください。 けれども、professional supportの一部の企業が支援してくれるかもしれません。

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

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

Windows用に64ビットで構築されたPostgreSQLはありますか?

64bit Windows portPostgreSQL 9.0でリリースされました。

一般的に、32ビットで構築されたこれまでのバージョンのPostgreSQLは、64ビット版のWindowsでもうまく動作します。これらはおよそ1GB以上のshared_buffersを実質的に使用することができませんが、Windowsカーネルがディスク読み取りをキャッシュするためにメモリを使用しますので、4GB以上のメモリがあることの利点はまだあります。

64ビット版のODBCドライバについては?

執筆時点では、psqlODBCのソースコード版には64ビットサポートが存在しますが、64ビットODBCドライバの公式バイナリリリースはありません。詳しくはpsqlODBCのwebサイトを確認してください。

インストール

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

Windowsにおける各種ダウンロード方法、インストール方法についてはthe PostgreSQL for Windows download pageを参照してください。

WindowsにPostgreSQLをインストールする一番簡単な方法は、EnterPriseDBにより保守されているOne Click installer package]を使用することです。これは上でリンクされたページから入手することができます。 これは、コンパイル済みのバージョンのPostgreSQLをpgAdmin(管理・保守用のグラフィカルインタフェース)と一緒にインストールする他、特別な機能を追加する'contrib'モジュールや手続き言語を選択してインストールします。 必要になるかもしれないODBCやJDBCドライバなどの追加コンポーネントのダウンロードとインストールを補助する、StackBuilderと呼ばれるプログラムがインストールされます。

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

WindowsにおけるPostgreSQLのコンパイル方法、サポートされるコンパイラやツールについては文書を参照してください。

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

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

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

PostgreSQL リリース8.2では管理者アカウントで実行することが可能であるという点に注意してください。 PostgreSQL 8.2以降では、取り消せない方法で起動時に管理者権限を放棄することができるので、PostgreSQLが乗っ取られるという極めて起こりそうにない出来事があっても、その後のシステムの安全性を保証します。

FATパーティションにPostgreSQLをインストールできますか?

FAT32は何らかのデータベースを稼働させるためのファイルシステムとしてはひどいものですので、FAT32ファイルシステム上のPostgreSQLはサポートも試験もされていません。

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

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

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

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

人々がこの件について質問する最もよくある理由は、彼らがUSBキーや外部ハードドライブを持っていて、PostgreSQLデータベースをそこに置きたいからです。そのようなことはしないでください。USBキーや外部ハードドライブをNTFSでフォーマットすることができますので、もしデータベースをそこで実行したいのであればそうすべきです。FATはクラッシュセーフでなく、Windowsで「安全に取り外す」を用いずにハードドライブを取り外すことはハードドライブに関する限りクラッシュとしてカウントされます。かなりの確率で破損が起こるでしょう。PostgreSQLと共に使用してあなたが気にかけるなんらかのデータを保存するのであれば、リムーバブルドライブをNTFSで再フォーマットすることは大変重要です。

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

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

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

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

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

PostgreSQL 8.1からWindows上でUTF-8 UNICODE符号化方式を完全にサポートしました。 Unicode ODBCドライバはUTF-16をサポートし、また、JDBCドライバは完全にunicodeをサポートします。

PostgreSQLサーバは2バイトのUTF-16、4バイトのUTF-32 Unicode符号化方式を、内部データ格納やネットワーク通信においてサポートしません。 WindowsにおいてUTF-16がデフォルトの符号化方式であり、Windowsユーザはたいてい「Unicode」といえばこの符号化方式と考えますので、これが問題になるかと想像するかもしれませんが、ODBCおよびJDBCドライバが面倒を見てくれますので、実際のところは問題ありません。 libpqを直接使用するプログラムはこれに注意しなければなりません。が大した作業ではありません。

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

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

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

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

WindowsにおけるPostgreSQLのインストールと実行時の問題のよくある原因は、Windows Scripting Hostの問題、アンチウィルスソフトウェアの問題、(Microsoft以外の)サードパーティ製のソフトウェアファイアウォールです。 またpostgresサービスアカウントのパスワードで問題が発生することもあります。

以下の節でこれらの問題を説明します。インストーラの問題を問い合わせる前にこれらを読み、手順に従ってみてください。

アンチウィルスソフトウェア

何らかのアンチウィルスソフトをインストールしているのであれば、PostgreSQLで使用されるはずのデータディレクトリを対象から外す必要があります。 これでうまくいかなければ、アンチウィルスソフトを完全にマシンからアンインストールする必要があるのかもしれません。

PostgreSQLはMicrosoftによる文書に完全にしたがって動作するようにWindows内のファイルアクセスコマンドを要求しますので、アンチウィルスソフトウェアはPostgreSQLの操作に干渉することがあり得ます。 このため多くのアンチウィルスプログラムは、エラーまたは事故のような動作により、これらのコマンドを少し誤作動させてしまうように変更します。 かなり単純な方法でファイルにアクセスしますので、ほとんどのプログラムで気になることはありません。 PostgreSQLは継続的に複数のプロセスから同じファイル群を読み書きしますので、アンチウィルスソフトウェアのプログラムミスや設計ミスをもたらしがちです。 こうした問題のため、不規則かつ予期できないエラー、最悪データ破損を引き起こすことがあり得ます。

またアンチウィルスソフトウェアがPostgreSQLの動作を劇的に遅くすることがよくあります。 このためスキャナが無視するように少なくともpostgres.exeとデータディレクトリを対象から外さなければなりません

問題がないアンチウィルスソフトウエアには何がありますか?

Windowsインストーラを構築する際に使用しているシステムはいずれもSophos AVかAVGの無料版を使用しています。 またこれらのシステムでは、これらのプログラムを実行中であってもPostgreSQLのリグレッション試験を完全に通過しています。 Microsoft Security Essentialsも動作することを把握しています。

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

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

ソフトウェアファイアウォール

マシンにサードパーティ製のファイアウォールソフトウェアがインストールされている場合、無効またはアンインストールを試してください。 実際のところ、Microsoftにより提供される組み込みのファイアウォールが優れた処理を行いますので、Windows XP以降ではサードパーティ製のファイアウォールの必要性はありません。 一部のできがよくない、サードパーティ製のファイアウォールは正しくアンインストールすることができません。 このためアンインストールの後、tell Windows to repair its network settingsを行わなければならないかもしれません。

インストールの際に無効にし、アンインストールの時に元に戻すことに失敗する製品が多くあるため、過去サードパーティ製ファイアウォールを使用していて、アンインストールした場合、Windows Firewallが有効に戻っていることを確認してください。

インストーラがインストール時に実行エラーで終了してしまいます?

インストーラがAn error occured executing the Microsoft VC++ runtime installerなどのエラーで終了する可能性があります。 これはWindowsでのみ起こり得ます。

これが発生する原因には大きく2つあります。

1) Windows Scripting HostがVBscriptsを実行することができませんでした。 これは、スクリプトホストが無効な場合(あまりありません)、またはインストーレーションが破損していた場合に発生します。 この問題の兆候は、CScript Error: Can't find script engine "VBScript" for script "C:\...のようなメッセージです。 これはVBscriptインタプリタを再登録することで解消することがよくあります。 Start -> Runをクリックし、以下を入力、そしてOKをクリックしてください。

regsvr32 %systemroot%\system32\vbscript.dll

これが失敗する場合、古めのバージョンのWindowsであればupdating the scripting hostを試してください。

2) インストーラがシステムのTEMPディレクトリで適切にファイルを読み書きすることができませんでした。 これは、TEMPまたはTMP環境変数が標準以外の値に設定されている場合に起こります。 これは、ログファイル内の、スクリプトが実行できなかった、または見つからなかったことを示すメッセージによって確認することができます。 この問題を解消するためには、TEMPまたはTMP変数が正しい値に設定されていることを確認してください。

postgresユーザのパスワードに関する障害

使用されるパスワードの違いと、パスワードリセットなど一般的な問題を解決させる方法について、Dave Pageがブログ記事を記述しています。

PATH環境変数

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

libssl、libintl、またはその両方のバージョンを含むディレクトリがPATH環境変数に含まれている場合にも、問題が報告されています。

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

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

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

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

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

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

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

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

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

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

サービスアカウントの削除方法は?これはユーザリストに出てきません

WindowsのGUIツールは時々一部のアカウントを隠しますので、そこから削除することはできません。 これには自動的に作成(過去のインストレーションから引き継がれたのかもしれません)されたPostgreSQLサービスアカウントが含まれます。このアカウントを削除するためには、以下のようにコマンドラインからNETコマンドを使用してください。

NET USER <username> /DELETE

ここで<username>はユーザのWindowsログイン名、たとえばpostgresです。

実行時によるある問題

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

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

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

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

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

環境変数はどう設定すればいいのですか。

PostgreSQLは複数の設定のために環境変数を使用します。 ほとんどのバージョンのWindowsでは、環境変数を変更するためにマイコンピュータのプロパティを開き、「詳細設定」を選択します。 2種類の環境変数が存在することに注意してください。 ひとつは全ユーザに適用されるシステム環境変数、もうひとつは現在のユーザ向けの環境変数です。 PostgreSQLサービス向けの設定を行うための環境変数では、システム環境変数を変更しなければなりません。 システム環境変数を変更した後、サービスを再起動しなければなりません。

ハードウェアは十分ありますが、一度に125程度以上の接続で動作させることができません。

サービスとして使用すると、おおよそ125以上の同時接続で失敗することを経験するかもしれません。 PostgreSQLが依存するライブラリの一部がuser32.dllに依存することが原因で発生する可能性があります。 user32.dllはデスクトップヒープとして知られる領域からメモリを割り当てます。 デスクトップヒープはログインセッションごとに割り当てられ、通常、非対話型セッションでは512キロバイトが割り当てられます。 通常稼動する各postgresプロセスはおおよそ3.2キロバイトのデスクトップヒープを消費します。 これとその他のオーバーヘッドにより、おおよそ125接続近辺で割り当て可能なヒープがなくなります。 これはコマンドラインから起動した場合には発生しません(より正確には、もっと多くの接続で発生するようになります)。 対話型のログインセッションで通常3メガバイトのデスクトップヒープが割り当てられるからです。

Microsoft ナレッジベースの記事で紹介されているようにレジストリの第三SharedSection値を変更することで、非対話型デスクトップヒープを増やすことができます。 あまりに大きな値を指定するとシステムが起動できなくなる可能性がありますので、これには十分な注意が必要です。


Windowsのバージョン固有の問題

64ビット版Windowsに32ビット版のPostgreSQLをインストールすることはできますか

最近の32ビット版のPostgreSQL(8.3以降)は64ビット版のWindows XP以降にインストールし、使用することができます。しかし最大プロセスアドレス空間(とこれに伴う共有メモリ)に関して32ビットの制限が残っています。

32ビット版のPostgreSQLサーバに、サーバが稼動中のコンピュータ、またはプログラムの実行環境に64ビット版のlibpqもしくはpsqlODBCドライバがインストールされている場合はそのコンピュータ上の64ビット版のプログラムから接続することができます。

32ビット版のPostgreSQLサーバは32ビット版のlibpqとpsqlODBCしかインストールしませんので、追加で64ビット版のODBCドライバかlibpqをインストールしていない限り、サーバをインストールしたコンピュータ上では32ビット版のプログラムのみがそのデータベースを使用することができます。

PostgreSQL ODBCドライバはどこにありますか?64ビット版のWindowsで32ビット版のPostgreSQLを使用しています。

32ビット版のドライバを使用して32ビット版のアプリケーション用のデータソースを設定するためには32ビット版のODBC管理を使用しなければなりません。

psqlODBC64-bit versionを同時にインストールしていない限り、PostgreSQLの32ビット版のインストールでは32ビット版のODBCドライバしかありません。この32ビットODBCドライバは32ビットプログラムのみで使用することができ、「64ビット版ODBC管理では現れません」。

64ビット版のWindowsのc:\windows\system32\odbcad32は、この名前にも関わらず「64ビット」ODBCドライバ管理ですので、これは混乱を招きます。これはWindows開発の歴史による産物です。多くのアプリケーションとインストーラがこの名前とパスにあるodbcad32.exeに依存していることは明らかです。このためMicrosoftはばかげた名前になったにも関わらず面倒な状態に陥りました。「system32」ディレクトリが64ビット版Windowsでもこの名前であることも同じ理由です。PostgreSQLでこれをどうにかすることはできません。

参考文献: http://support.microsoft.com/kb/942976

この記事を読めば64ビット版Windowsにおける32ビット版のODBC管理が以下にあることが分かるでしょう。

%systemdrive%\Windows\SysWoW64\odbcad32.exe

上記パスを"Start->Run"に入力することで、これを起動することができます。32ビット版のODBC管理上にPostgreSQL ODBCドライバが現れます。

64ビット版のアプリケーションでは32ビット版のODBCドライバを使用することは「できません」。つまり、64ビット版のODBCドライバをインストールしていない限り32ビット版のアプリケーションでのみPostgreSQL ODBCドライバを使用することができます。

32ビット版のPostgreSQLサーバで64ビット版のODBCプログラムを使用することはできますか?

64ビット版の[1]ドライバをインストールしている場合のみです。インストール節を参照してください。

Personal tools