category: データベース
DATE : 2006/11/13 (Mon)
DATE : 2006/11/13 (Mon)
PostgreSQL ではセキュリティ上の観点から、PostgreSQLサーバアプリケーションを管理者アカウントから実行できないようになっています。サーバアプリケーションの中にはデータベースクラスタを初期化する initdb が含まれており、初期化するには非管理者アカウントが必要になります。
しかし、Windows 版 PostgreSQL のインストーラはインストール時に PostgreSQL 用のアカウントを作っています。ログオン画面には表示されませんが、コマンドプロンプトから次のコマンドを入力すると、確かに作られていることが分かります。(「>」はプロンプトを表します)
> NET USER
すると、このアカウントで initdb を実行すればデータベースクラスタを初期化できそうです。
インストール時に作成したアカウント(ここでは「postgres」という名前とします)で initdb を実行するには、方法が2通りあります。
- コマンドプロンプトのショートカットを右クリック→「別ユーザとして実行(A)...」で postgres としてのコマンドプロンプトを開く
- コマンドプロンプトで、次のように RUNAS コマンドを実行して postgres としてのコマンドプロンプトを開く(直接 initdb を実行することもできます)
> RUNAS /user:postgres cmd
ただし、上のように開いたコマンドプロンプトでは、PostgreSQL へのパスは通っていません。そのため、まずパスを設定するか、PostgreSQL の bin フォルダをカレントフォルダにしなければなりません。
以上で別アカウントで initdb を使用できるようになりました。
なお、データベースクラスタを構築するフォルダがすでにある場合はあらかじめ消しておき、initdb に作らせるようにします。そうしないと、フォルダに権限がないという理由で initdb の実行が失敗してしまいます。
参考文献
関連記事
(;^ω^)この記事の中でも似たようなことを書いているのですが、PostgreSQL をインストールするたびにこの部分でハマってしまうので、あえて再び取り上げました
PR
●この記事にコメントする
忍者ブログ [PR]