PostgreSQLエラー「データベースを初期化中: mkdir: ディレクトリ `/var/lib/pgsql/data/pg_log' を作成できません: ファイルが存在します」の原因と解決方法
LinuxサーバでPostgreSQLを起動しようとすると、
データベースを初期化中: mkdir: ディレクトリ `/var/lib/pgsql/data/pg_log' を作成できません: ファイルが存在します
といったエラーが出て困ることがあるかもしれない。
《例》
[root@nobuneko data]# /etc/rc.d/init.d/postgresql start
データベースを初期化中: mkdir: ディレクトリ `/var/lib/pgsql/data/pg_log' を作成できません: ファイルが存在します
[失敗]
postgresql サービスを開始中: [失敗]
/var/log/messagesを見てみると、以下のエラーメッセージが記録されていた。
Oct 31 23:12:02 nobuneko postgres[12846]: [1-1] FATAL: "/var/lib/pgsql/data" is not a valid data directory
Oct 31 23:12:02 nobuneko postgres[12846]: [1-2] DETAIL: File "/var/lib/pgsql/data/PG_VERSION" is missing.
なんと、エラーメッセージによると、/var/lib/pgsql/data/配下にあるべき「PG_VERSION」というファイルがなくなっていることがPostgreSQLが起動できない原因のようだった。
他のまともにPostgreSQLが動作しているLinuxサーバで確認してみると、/var/lib/pgsql/data/配下に「PG_VERSION」というファイルがあったので、それを見てみる。
ls -ahlで見てみると、権限などは、
-rw------- 1 postgres postgres 4 10月 23 00:24 PG_VERSION
となっており、このファイルの中身は、
[root@nobuneko2 data]# cat PG_VERSION
8.1
となっていた。
つまり、「PG_VERSION」の中身は、「8.1」という文字列だけか...。PostgreSQLのバージョン番号を書いているだけなのだろうけれど、なんて単純なファイル(笑)。
そこで、PostgreSQLの起動に失敗しているLinuxサーバの/var/lib/pgsql/data/配下にまともにPostgreSQLが動作しているサーバのPG_VERSIONファイルをコピーしてそのまま設置してみた(ファイルの権限もまともに動作しているサーバと同じにしておく)。
すると、PostgreSQLの起動に成功した。
原因と解決方法が分かり、嬉しいのだけれど、そもそも、「PG_VERSION」ファイルが何故ないのかという理由を考えると...、そうかぁ...ハードディスクが壊れたのでファイルが色々と消えたんだっけ、ということを今さらながら思い出す。
「PG_VERSION」ファイルが消えていたのは、そんな恐ろしい理由...。
つまり、誤って手動で「PG_VERSION」ファイルだけを削除したのでもない限り、今回のようなエラーメッセージにはなかなか遭遇しないのかもなぁ。