web-dev-qa-db-ja.com

postgresql.confのPostgreSQL data_directoryの設定が機能しない

Centos 6.6ボックスでPostgreSQL 9.3を構成して、構成ファイル(postgresql.conf、pg_hba.conf、pg_ident.conf)をデータディレクトリとは別のディレクトリに保持しようとしています。 documentation によると、PGDATA変数をpostgresql.confが含まれているディレクトリに設定し、postgresql.conf内からdata_directoryを指定して、データが含まれているディレクトリを指すようにする必要があります。

これらの手順 を使用してPostgreSQL 9.3をインストールしました。

Postgresを構成するために実行した手順(/dataはOSとは別のパーティションです):

  1. mkdir -p /data/pgsql/data && mkdir /data/pgsql/config && Sudo chown -R postgres:postgres /data/pgsql
  2. Sudo su postgres -c '/usr/pgsql-9.3/bin/initdb -D /data/pgsql/data'
  3. Sudo mv /data/pgsql/data/postgresql.conf /data/pgsql/config/ && Sudo mv /data/pgsql/data/pg_hba.conf /data/pgsql/config/ && Sudo mv /data/pgsql/data/pg_ident.conf /data/pgsql/config/
  4. /data/pgsql/config/postgresql.confを編集し、これらの変数が次のように設定されていることを確認します。
     hba_file = '/data/pgsql/config/pg_hba.conf'`
    ident_file =' /data/pgsql/config/pg_ident.conf'
    data_directory = '/ data/pgsql/data '
    
  5. Sudo sh -c 'echo "export PGDATA=/data/pgsql/config" > /etc/sysconfig/pgsql/postgresql-9.3'
  6. Sudo service postgresql-9.3 start

この結果、エラーメッセージが表示されます。

/data/pgsql/configがありません。 「service postgresql-9.3 initdb」を使用して、最初にクラスタを初期化します。

私はinitスクリプト(/etc/init.d/postgresql-9.3)を見て、これに気づきました:

#PGDATA構造を確認します
 if [-f "$ PGDATA/PG_VERSION"] && [-d "$ PGDATA/base"] 
その後
 .. 
 else 
#既存のPGDATAはありません! initdbするようにユーザーに警告します。
 
 echo 
 echo "$ PGDATA is missing。\" service $ NAME initdb\"を使用して、最初にクラスターを初期化します。" 
 echo_failure 
 echo 
 exit 1 
 fi 

エコーを追加し、PGDATAが/data/pgsql/configに設定されています。これは予想どおりですが、initスクリプトがpostgresql.confをチェックしてdata_directoryを取得していないため、PGDATAとdata_directoryの設定がどのように機能するかもわかりません。ドキュメントのように、それはそうすべきだと言っています私は何か間違ったことをしていますか?ドキュメントは間違っていますか?

2
KSletmoe

それ自体は何も悪いことをしておらず、ドキュメントも間違っていません。しかし、CentOSのinitscriptはこの方法での操作をサポートしていないため、PostgreSQLがそれ自体をチェックし、これらのファイルが存在しない場合でもデータベースを起動しようとするため、これらのファイルをチェックしないようにinitscriptを変更する必要があります。 。

テストするには、if、then、およびelseブロック全体をコメント化し、スクリプトの...部分を実行させます。 PostgreSQLは設定を正しく読み取り、問題なく起動するはずです。そしてもちろん、CentOSパッケージの責任者に別の方法で行う必要があることを通知することもできます。実行されない場合は、PostgreSQL自体から適切なエラーメッセージが表示されます。

1
Sami Kuhmonen