PC上にPostgreSQLサービスをセットアップする

“postgres”ユーザアカウント作成

アカウントpostgresの新規作成

 コントロールパネル⇒ユーザーアカウント⇒新しいアカウントを作成する。
コントロールパネルから作成してみた。

制限付きアカウントに設定する。

アカウントpostgresにパスワードを付加

 コントロールパネル⇒ユーザーアカウント⇒「postgres」を選択⇒パスワードを作成する

/etc/passwd は作り直した。

$mkpasswd -l > /etc/passwd

“postgres”ユーザに“サービスとしてログイン”権限を許可

紹介されている

$ cmd /c secpol.msc

とは、要するに、
 コントロールパネル⇒管理ツール⇒ローカルセキュリティーポリシー
と同じこと。
 ユーザ「postgres」を探し出して
 セキュリティーの設定⇒ローカルポリシー⇒ユーザー権限の割り当て⇒「サービスとしてログオン」
に登録する。

postmasterをサービスに登録

 ここの記述に全面的にたよった。

$ vi postgresql-cygserver-config.sh
ここに記述されているスクリプトをそのままコピーペーストした】
$ chmod +x postgresql-cygserver-config.sh 【★スクリプトに実行権限付与】
$ ./postgresql-cygserver-config.sh 【★スクリプト実行】
Enter password of user `PCname\postgres': 【“postgres”ユーザのパスワードを入力】
Reenter, please: 【同じもの(“postgres”ユーザのパスワード)を再度入力】

サービス登録内容を確認

$ cygrunsrv -Q postmaster 【★cygrunsrvコマンドで確認】
Service postmaster exists 【★サービスに登録されていた】
Type : Own Process
Current State : Stopped
Controls Accepted :
$ sc query postmaster 【★scコマンドで確認】
SERVICE_NAME: postmaster
TYPE : 10 WIN32_OWN_PROCESS
STATE : 1 STOPPED
(NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 1077 (0x435)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0

PostgreSQLの初期化

/var/postgresql/dataを消去

$ cd /var/postgresql/
$ rm -rf data

initdbをpostgresユーザで実行するため、 /usr/bin/postgres.exe へ postgresユーザで実行できるような権限(o+rx)を追加

$ ls -l /usr/bin/postgres.exe 【★事前確認】
-rwxr-x---+ 1 username Users 2361344 Aug 26 2004 /usr/bin/postgres.exe*
$ chmod o+rx /usr/bin/postgres.exe 【★r(read) と x(execute) の権限をその他のグループ(o≡other users not in the file's group)へ追加(+)】
$ ls -l /usr/bin/postgres.exe 【★事後確認】
-rwxr-xr-x+ 1 username Users 2361344 Aug 26 2004 /usr/bin/postgres.exe*

initdbをpostgresユーザで実行

runasコマンドを用いてpostgresユーザでログインしたbash端末を発生させる。

以下は、この端末での作業(runasのやり方は参照先にて。明日まとめる)。

initdb実行。

$ whoami 【★この bash が postgres ユーザーで実行されていることを確認】
postgres
echo $CYGWIN 【★環境変数 CYGWIN に 'server' が入っていることを確認】
server
$ initdb --no-locale -D /var/postgresql/data
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale C.

creating directory /var/postgresql/data... mkdir: cannot create directory `/var/
postgresql/data': Permission denied

initdb: failed

dataは消したが、/var/postgresディレクトは他ユーザで作ってそのままだった。postgresでは書き込めない可能性がある。ので、いちばん安直な回避手段はディレクトリ自体消してしまうことだった。

$ rm -rf /var/postgresql 【★単に消した】
$ initdb --no-locale -D /var/postgresql/data 【★再挑戦】
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale C.

creating directory /var/postgresql/data... ok
creating directory /var/postgresql/data/base... ok
creating directory /var/postgresql/data/global... ok
creating directory /var/postgresql/data/pg_xlog... ok
creating directory /var/postgresql/data/pg_clog... ok
selecting default max_connections... 40
selecting default shared_buffers... 1000
creating configuration files... ok
creating template1 database in /var/postgresql/data/base/1... ok
initializing pg_shadow... ok
enabling unlimited row size for system tables... ok
initializing pg_depend... ok
creating system views... ok
loading pg_description... ok
creating conversions... ok
setting privileges on built-in objects... ok
creating information schema... ok
vacuuming database template1... ok
copying template1 to template0... ok

Success. You can now start the database server using:

/usr/bin/postmaster -D /var/postgresql/data
or
/usr/bin/pg_ctl -D /var/postgresql/data -l logfile start
 【★うまくいったようだ。】

 …ところが、ここで問題発生。
 その次の作業を実施してみたところ、記述どおり実行

$ cygrunsrv -S postmaster

$ net start postmaster

$ sc start postmaster

しても全て悉くエラー(“システムエラー5番”????)となってしまったのだ。
 この問題の解決以下は明日。