Executando várias versões do PostgreSQL no mesmo servidor Ubuntu

12

Eu tenho o PostgreSQL 8.4 e 9.0 em execução no mesmo servidor (Ubuntu Lucid).

Instalei os dois via apt-get (8.4 com as fontes de pacote padrão e 9.0 depois de adicionar o ppa em https://launchpad.net/~pitti/+archive/postgresql ).

Quando executo um comando como "createdb" na linha de comando ou inicio o shell "psql", o PostgreSQL versão 8.4 é usado por padrão no meu sistema.

Então, como forço esses comandos a usar o PostgreSQL 9.0 em vez do 8.4?

moedor de café
fonte
Relacionados: serverfault.com/q/582499/95758
krlmlr

Respostas:

11

Supondo que o Ubuntu faça a mesma coisa que o Debian, suas duas instâncias PostGreSQL estarão em execução em portas diferentes.

Você pode verificar facilmente os arquivos de configuração para ver qual versão está em qual porta:

$ grep -H '^port' /etc/postgresql/*/main/postgresql.conf
/etc/postgresql/8.4/main/postgresql.conf:port = 5432
/etc/postgresql/8.3/main/postgresql.conf:port = 5433

A maioria dos comandos do PostGreSQL usa a opção "-p ####" ou "--port = ####", para que você possa usá-lo para selecionar a versão desejada.

Gagravarr
fonte
7

Use a --clusteropção, por exemplo (assumindo que os dois clusters sejam nomeados como principal padrão):

psql --cluster 8.4/main
psql --cluster 9.0/main

Esquemas genéricos são:

--cluster version/name      # for local connections
--cluster version/host:port # for TCP/IP connections

Para listar todos os clusters instalados (nome, porta, status, diretório de dados etc.), use o pg_lsclusterscomando

Verifique man pg_wrapperpara mais informações.

Grzegorz Szpetkowski
fonte
Isso é brilhante, como é que isso não está no doc psql?
MarHoff
1
@MarHoff: Esta pg_wrapperé a extensão do Debian. Essencialmente, ele envolve o comando psql(isto é, psqlé um link simbólico para o pg_wrapperscript) com várias novas opções para facilitar o manuseio de vários clusters.
Grzegorz Szpetkowski
0

Você pode usar dpkg -L <packagename>para ver quais arquivos um pacote específico possui. Execute-o com o pacote postgresql 9 e veja onde o comando createdb para essa versão foi armazenado.

A maioria dos comandos do postgresql funcionaria na versão cruzada com a seleção apropriada do banco de dados por porta ou caminho, mas isso obviamente não se aplica aos scripts de início e aos comandos de criação.

Seth Robertson
fonte