Como eu altero a localização do config_file de um banco de dados postgresql para “service postgresql start”?

1

Eu tinha um banco de dados PostgreSQL 9.1 que acabei de atualizar para 9.3 usando

/usr/lib/postgresql/9.3/bin/pg_upgrade -b /usr/lib/postgresql/9.1/bin -B /usr/lib/postgresql/9.3/bin -d /var/lib/postgresql/9.1/main/ -D /var/lib/postgresql/9.3/main/ -O "-c config_file=/etc/postgresql/9.3/main/postgresql.conf" -o "-c config_file=/etc/postgresql/9.1/main/postgresql.conf"

seguindo as instruções aqui , infelizmente percebendo depois que eu não tinha olhado de perto para o último bit.

Após a atualização (que foi bem sucedida), descobri que, em vez da localização padrão do diretório de dados (neste caso, /var/lib/postgresql/9.3/main ), a opção em a atualização agora configurou todos os meus arquivos de configuração do PostgreSQL para estarem localizados em /etc/postgresql/9.1/main / .

Eu passei um tempo procurando uma maneira de mudar isso e até agora descobri que, embora hba_file e ident_file possam ser facilmente alterados em postgresql.conf , o config_file não pode ser definido, exceto através da interface de linha de comando postgres .

Eu tentei usar postgres com a opção -o "-c config_file=/var/lib/postgresql/9.3/main" , mas parece que isso apenas tenta iniciar outra instância do serviço, separado do que um service postgresql start faz.

Executando pg_ctl status -D ~/9.3/main/ recebo

'/usr/lib/postgresql/9.3/bin/postgres "-D" "/var/lib/postgresql/9.3/main" "-c" "config_file=/etc/postgresql/9.3/main/postgresql.conf"'

o que eu entendo significa que -c... /etc... está sendo passado para o que inicia o serviço. Com base no meu conhecimento limitado, acredito que seja /etc/init.d/postgresql com o parâmetro start . Olhando para isso, parece fazer referência a /usr/share/postgresql-common/init.d-functions , que por sua vez contém o seguinte em direção ao topo

do_ctl_all() {
[ "$1" ] || { echo "Error: invalid command '$1'" >&2; exit 1; }
[ "$2" ] || { echo "Error: invalid version '$2'" >&2; exit 1; }
[ -d "/etc/postgresql/$2" ] || return 0
[ "$(ls /etc/postgresql/$2)" ] || return 0
[ -x "/usr/lib/postgresql/$2/bin/postmaster" ] || return 0
...

embora eu não tenha certeza se isso tem alguma relevância.

O que eu acho que estou perguntando é se existe alguma maneira de configurar a variável config_file ou personalizar como o serviço é iniciado.

Obrigado por qualquer ajuda! Desculpe pela minha falta de compreensão, estou tentando aprender mais!

    
por FLGMwt 11.12.2013 / 21:12

1 resposta

1

Copie todos os seus arquivos de configuração para /etc/postgresql/9.3/main/ . Faça os ajustes que você deseja fazer como parte da atualização. Então você deve ser capaz de iniciar o novo servidor usando

sudo pg_ctlcluster 9.3 main start

Como você descobriu, o pacote Debian do PostgreSQL requer que postgresql.conf esteja localizado naquele lugar, porque ele começa lá para descobrir onde todo o resto está localizado, incluindo o diretório de dados e os outros arquivos de configuração. Certifique-se de que seu postgresql.conf aponta para os lugares certos para eles.

Na próxima vez, use pg_upgradecluster -m upgrade 9.1 main e ele descobrirá tudo isso automaticamente.

    
por 12.12.2013 / 16:19