Como gerenciar diferentes versões de servidores PostgreSQL no mesmo host?

2

Eu tenho o PostgreSQL 9.4 e 9.5 no mesmo host do Ubuntu 14.04. Meus problemas são:

  1. Quando executo service postgresql start|stop , as duas versões iniciam / param. Mas eu quero controlar qual deles fazer.
  2. Quando uso o psql para se conectar ao PostgreSQL, ele sempre se conecta a 9.4. Mas eu quero controlar qual servidor fazer. Eu sei que posso conectar por porta diferente, 5432 para 9,4 e 5433 para 9,5. Mas eu quero conectar por peer auth, ou seja, via socket Unix.

Consegui encontrar essas pistas para duas perguntas acima separadamente, mas ainda não resolvi meus problemas:

  1. Eu acho um comando pg_ctlcluster pode fazer o trabalho, mas eu não sei como especificar os parâmetros corretos, digamos, nome do cluster. Como eu poderia descobrir isso? Ou você tem outro jeito?
  2. O
  3. soquete Unix pode ser configurado por unix_socket_directories = '/var/run/postgresql' . Mas ambas as versões têm o mesmo diretório de configuração, dentro do qual existem subdiretórios 9.4-main.pg_stat_tmp 9.4-main.pid 9.5-main.pg_stat_tmp 9.5-main.pid para diferentes versões. Quando eu faço psql -h /var/run/postgresql , ele apenas se conecta à antiga versão 9.4.

Alguém poderia ajudar? Obrigado!

    
por Robert 01.09.2016 / 16:37

1 resposta

3

Bem, depois de um pouco mais de esforço, recebo as respostas:

  1. O Ubuntu e o Debian oferecem um pg_ctlcluster , bem como um comando serial pg_xxxcluster para gerenciar múltiplas versões / instâncias do PostgreSQL no mesmo host. Para descobrir a versão e o nome do cluster, basta fazer pg_lscluster , que gera como %código% Por exemplo, para parar 9.4, você usa 9.4 main 5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log 9.5 main 5433 online postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log . BTW, para desativar a inicialização automática 9.4, pg_ctlcluster stop 9.4 main
  2. edit /etc/postgresql/9.4/main/start.conf precisa da opção psql para saber em qual instância se conectar, mesmo para peer auth pelo Unix Socket, já que todas as versões têm o mesmo --port, -p . Por exemplo, unix_socket_directories pode se conectar pelo Unix Socket à versão 9.5 em execução com a porta 5433, enquanto o padrão psql -p 5433 dbname se conecta à porta padrão 5432, que pertence à minha antiga versão 9.4.

É isso aí!

    
por 02.09.2016 / 02:35

Tags