Estou tentando configurar o PostgreSQL 9.3 em uma caixa Centos 6.6 para manter os arquivos de configuração (postgresql.conf, pg_hba.conf, pg_ident.conf) em um diretório diferente do diretório de dados. De acordo com a documentação , devo ser capaz de definir a variável PGDATA para o diretório que contém o postgresql.conf e, em seguida, especificar o data_directory de dentro do postgresql.conf para apontar para o diretório que contém meus dados.
Eu instalei o PostgreSQL 9.3 através destas instruções .
Etapas que segui para configurar o Postgres ( /data
é uma partição diferente do sistema operacional):
mkdir -p /data/pgsql/data && mkdir /data/pgsql/config && sudo chown -R postgres:postgres /data/pgsql
sudo su postgres -c '/usr/pgsql-9.3/bin/initdb -D /data/pgsql/data'
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/
- Edite
/data/pgsql/config/postgresql.conf
, certificando-se de que essas variáveis sejam definidas da seguinte forma:hba_file = '/data/pgsql/config/pg_hba.conf'` ident_file = '/data/pgsql/config/pg_ident.conf' data_directory = '/data/pgsql/data'
sudo sh -c 'echo "export PGDATA=/data/pgsql/config" > /etc/sysconfig/pgsql/postgresql-9.3'
sudo service postgresql-9.3 start
Isso resulta na mensagem de erro:
/data/pgsql/config está faltando. Use "service postgresql-9.3 initdb" para inicializar o cluster primeiro.
Eu olhei para o script init ( /etc/init.d/postgresql-9.3
) e notei isso:
# Verifique a estrutura PGDATA if [ -f "$PGDATA/PG_VERSION" ] && [ -d "$PGDATA/base" ] então ... senão # Nenhum PGDATA existente! Avise o usuário para initdb nele. eco echo "$PGDATA está ausente. Use \"service $NAME initdb\" para inicializar o cluster primeiro." echo_failure eco saída 1 fi
Eu adicionei um echo e PGDATA está definido como /data/pgsql/config
, o que eu esperaria, mas não tenho certeza de como configurar PGDATA e data_directory poderia funcionar, porque o script init não está verificando postgresql.conf para obter o data_directory como a documentação diz deve. Estou fazendo algo errado? A documentação está errada?
Você não está fazendo nada de errado per se, e a documentação não está errada. Mas o initscript do CentOS não suporta você fazer as coisas dessa maneira, então você tem que mudar os initscripts para não verificar esses arquivos, pois o PostgreSQL irá verificar por si mesmo e apenas tentar iniciar o banco de dados mesmo que esses arquivos não estejam lá .
Então, para testá-lo, comente o if, then e todo o bloco else e deixe-o executar a
...
parte do script. O PostgreSQL deve ler as configurações corretamente e iniciar sem problemas. E você pode, é claro, informar às pessoas responsáveis pelo pacote CentOS que elas devem fazer isso de maneira diferente. Se não for executado, você deve receber uma mensagem de erro razoável do próprio PostgreSQL.