PostgreSQLファイル所有者の変更による例外処理


ローカルの1台のテスターで、同僚にルートディレクトリの下のすべてのファイルの所有者をrootに変更されました(
chown-R root:root/、これは穴のお父さんで危険な操作です)、postgresデータベースは他のユーザーでインストールされています.上には他のアプリケーションもあります.ここではpostgresデータベースのリカバリプロセスを簡単に説明します.
1.環境
OS:CentOS 6.2
DB:postgres 9.2.4
2.異常現象
a.データベースプロセスがなくなった
b.ログ状況
[postgresql@localhost pg_log]$ tail -f  postgresql-2013-05-06_000000.csv
2013-05-06 17:11:21.923 CST,"test","testdb",664,"172.25.10.1:13906",51876c10.298,3,"idle",2013-05-06 16:38:40 CST,37/0,0,WARNING,57P02,"terminating connection because of crash of another server process","The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.","In a moment you should be able to reconnect to the database and repeat your command.",,,,,,,""
2013-05-06 17:11:21.921 CST,"test","testdb",2633,"172.25.10.88:45681",5187730e.a49,3,"idle",2013-05-06 17:08:30 CST,14/0,0,WARNING,57P02,"terminating connection because of crash of another server process","The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.","In a moment you should be able to reconnect to the database and repeat your command.",,,,,,,""
.....
2013-05-06 17:11:21.926 CST,,,24842,,5162b7b7.610a,8,,2013-04-08 20:27:35 CST,,0,LOG,00000,"all server processes terminated; reinitializing",,,,,,,,,""
2013-05-06 17:11:21.955 CST,,,24842,,5162b7b7.610a,9,,2013-04-08 20:27:35 CST,,0,LOG,42501,"could not open file ""postmaster.pid"": Permission denied",,,,,,,,,""
2013-05-06 17:11:22.011 CST,,,24842,,5162b7b7.610a,10,,2013-04-08 20:27:35 CST,,0,PANIC,42501,"could not open control file ""global/pg_control"": Permission denied",,,,,,,,,""

3.リカバリプロセス
a.まずユーザ権限に戻す
[root@localhost ~]#chown -R postgresql:postgresql /var/postgres
[root@localhost ~]#chown -R postgresql:postgresql /data/pgdata
b.再起動
[postgresql@localhost pg_log]$ pg_start
server starting
[postgresql@localhost pg_log]$ FATAL:  could not open lock file "/tmp/.s.PGSQL.lock": Permission denied
could not open control file ""global/pg_control"": Permission denied
再起動時にデータベースがまだ起きていないことに気づきましたが、tmpでsocketファイルの権限が足りないという情報が表示されました.
rootユーザーに戻って権限を与え、再起動します.
[root@localhost home]#cd /tmp
[root@localhost tmp]#ls -a .s.PGSQL*
.s.PGSQL.5432  .s.PGSQL.5432.lock
[root@localhost tmp]#chown postgresql:postgresql ./.s.PGSQL*
[root@localhost tmp]#su - postgresql
[postgresql@localhost ~]$ pg_start
--        ,  socket         ,       DB,          

[root@localhost tmp]#rm -f ./.s.PGSQL*
[postgresql@localhost ~]$ pg_start
server starting
[postgresql@localhost ~]$ LOG:  could not bind Unix socket: Address already in use
HINT:  Is another postmaster already running on port 5432? If not, remove socket file "/tmp/.s.PGSQL.5432" and retry.
WARNING:  could not create Unix-domain socket
c.登録検査
[postgresql@localhost ~]$ psql
psql: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
[postgresql@localhost ~]$ psql -h 192.168.10.38 
Password: 
psql (9.2.4)
Type "help" for help.

postgres=# \q
チェックしたところ、さっき起動したときにtmpの下にsocketファイルが生成されず、psqlログインが直接エラーを報告した.psqlに直接ログインしてDBを再起動すると、サーバの起動に伴ってsocketファイルが生成されます.