Compilar versões PostgreSQL e fazer a instalação manual em ambiente Linux Debian

Publicado: 04/09/2012 em Linux, Programação, Serviços IP
Tags:

Será utilizada a versão 8.4.10 do PostgreSQL

1) Baixar Postgres

minha_pasta$ wget -c http://ftp.postgresql.org/pub/source/v8.4.10/postgresql-8.4.10.tar.gz
minha_pasta$ wget -c http://ftp.postgresql.org/pub/source/v8.4.10/postgresql-8.4.10.tar.gz.md5

Verificando a integridade do arquivo baixado:

minha_pasta$ md5sum -c postgresql-8.4.10.tar.gz.md5
postgresql-8.4.10.tar.gz: SUCESSO

2) Documentação de instalação
Para o Postgres: http://www.postgresql.org/docs/8.4/static/index.html

3) Desempacotar o arquivo baixado
minha_pasta$ tar -vzxf nome_arquivo.tar.gz

4) Instalar Headers do Kernel
# apt-get install build-essential linux-headers-$(uname -r)

5) Instalar alguns pacotes requeridos por postgres

# apt-get install bison gawk python-setproctitle zlib1g-dev
# apt-get install libreadline5-dev libreadline6 libreadline6-dev ledit gcc g++ zlibc

6) Compilar Postgres, carregar e instalar
minha_pasta$ cd postgresql-8.4.10/
minha_pasta/postgresql-8.4.10$ ./configure --prefix=/usr/local/postgresql/pgsql8.4 --without-readline
minha_pasta/postgresql-8.4.10$ make

Se obter sucesso neste comando, a última mensagem será: “All of PostgreSQL successfully made. Ready to install”.

minha_pasta/postgresql-8.4.10# make install

Se obter sucesso neste comando, a última mensagem será: “PostgreSQL installation complete”. Neste momento estará criada a pasta especificada anteriormente “/usr/local/postgresql/pgsql8.4” com o conteúdo necessário para por em funcionamento o postgres versão 8.4.10.


# adduser postgres
# mkdir /usr/local/postgresql/pgsql8.4/data
# chown -R postgres:postgres /usr/local/postgresql
# su - postgres
postgres@nome_host:/$ /usr/local/postgresql/pgsql8.4/bin/initdb -D /usr/local/postgresql/pgsql8.4/data

// este último comando para inicializar o cluster de dados do postgres

Se tudo ocorreu corretamente, após o último comando acima a mensagem abaixo deve ser mostrada:

WARNING: enabling “trust” authentication for local connections You can change this by editing pg_hba.conf or using the -A option the next time you run initdb.
Success. You can now start the database server using:
/usr/local/postgresql/pgsql8.4/bin/postgres -D /usr/local/postgresql/pgsql8.4/data
or
/usr/local/postgresql/pgsql8.4/bin/pg_ctl -D /usr/local/postgresql/pgsql8.4/data -l logfile start

7. Deixar o Postgresql pronto para uso
Para iniciar o Postgres:
postgres@nome_host:/$ /usr/local/postgresql/pgsql8.4/bin/postgres -D /usr/local/postgresql/pgsql8.4/data &
Para verificar se processo postgres fora ativado:
$ ps -A | grep postgres
O que se obterá uma resposta semelhante a esta:

20705 pts/2    00:00:00 postgres
20707 ?        00:00:00 postgres
20708 ?        00:00:00 postgres

Criar uma base de dados “test” e iniciar sua utilização:
postgres@nome_host:/$ /usr/local/postgresql/pgsql8.4/bin/createdb test

CREATE DATABASE

postgres@nome_host:/$ /usr/local/postgresql/pgsql8.4/bin/psql test

psql (8.4.10)
Type “help” for help.
test=#

8. Automatizar o Postgresql
Antes de tudo, vamos parar os serviços postgresql que estejam rodando:
# killall postgres
Agora, aos procedimentos de automatização:
postgres@nome_host:/usr/local/postgresql/pgsql8.4/bin$ ln -s postgres postgres8.4
minha_pasta/postgresql-8.4.10# cp contrib/start-scripts/linux /etc/init.d/postgresql8.4
# chmod +x /etc/init.d/postgresql8.4
# mcedit /etc/init.d/postgresql8.4
e fazer 4 (quatro) alterações:

1_)  prefix=/usr/local/postgresql/pgsql8.4
2_)  PGDATA="/usr/local/postgresql/pgsql8.4/data"
3_)  DAEMON="$prefix/bin/postgres8.4"
4_)  echo -n "Starting PostgreSQL: "
     su - $PGUSER -c "$DAEMON -i -D '$PGDATA' &" >>$PGLOG 2>&1 

Agora o administrador já poderá utilizar os comandos:

# /etc/init.d/postgresql8.4 stop
# /etc/init.d/postgresql8.4 start
# /etc/init.d/postgresql8.4 restart

9. Verificações
Para verificar se o PostgreSQL está rodando na portão padrão, utilize o comando netstat:
# netstat -avnp |grep 5432
O resultado esperado deverá ser próximo de:

tcp        0      0 127.0.0.1:5432          0.0.0.0:*               OUÇA       22412/postgres8.4
unix  2      [ ACC ]     STREAM     OUVINDO       69035    22412/postgres8.4   /tmp/.s.PGSQL.5432
netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
netstat: no support for `AF X25' on this system.
netstat: no support for `AF NETROM' on this system.

10. Várias versões do Postgresql rodando na mesma máquina
Existem 3 arquivos principais de configuração que controlam o funcionamento básico de um servidor postgresql. Estes 3 arquivos estão todos localizados da pasta de dados default do Postgresql. Na forma como compilamos o Postgresql, estes arquivos estão na pasta /usr/local/postgresql/pgsql8.4/data. Os arquivos são pg_hba.conf, pg_ident.conf e postgresql.conf:
postgresql.conf: controla as definições gerais.
pg_hba.conf: controla a segurança.
pg_ident.conf: mapeia um login autenticado do OS para um usuário Postgresql. O menos utilizado.

Para se ter mais de uma versão do Postgresql sendo executadas na mesma máquina, algumas providências devem ser adotadas inclusive trocar a configuração da porta em que esta versão do servidor Postgresql estará respondendo, que está definida no arquivo postgresql.conf. Por exemplo, suponhamos que já compilamos e instalamos a versão 8.4 do Postgresql conforme os procedimentos descritos anteriormente e desejamos agora também disponibilizar a versão 9.2.3 do Postgresql na mesma máquina. Então, para termos também esta versão do Postgresql 9.2.3 rodando na mesma máquina teríamos que fazer os seguintes passos adicionais:

# su - postgres
postgres@nome_host:$ cd /usr/local/postgresql/pgsql9.2/bin 
postgres@nome_host:/usr/local/postgresql/pgsql9.2/bin$ ln -s postgres postgres9.2
minha_pasta/postgresql-9.2.3# cp contrib/start-scripts/linux /etc/init.d/postgresql9.2
# chmod +x /etc/init.d/postgresql9.2
# mcedit /etc/init.d/postgresql9.2
     prefix=/usr/local/postgresql/pgsql9.2
     PGDATA="/usr/local/postgresql/pgsql9.2/data"
     DAEMON="$prefix/bin/postgres9.2"
     echo -n "Starting PostgreSQL: "
            su - $PGUSER -c "$DAEMON -i -D '$PGDATA' &" >>$PGLOG 2>&1
    
# mcedit /usr/local/postgresql/pgsql9.2/data/postgresql.conf
     //  e trocar a diretiva 'port' para 'port = 5430'
     //  ou seja, mudamos a porta default 5432 para 5430.
    // OBS: não esquecer de reiniciar o Postgresql

Aqui já teríamos disponíveis os comandos:

# /etc/init.d/postgresql9.2 stop
# /etc/init.d/postgresql9.2 start
# /etc/init.d/postgresql9.2 restart

Para verficicar se as duas versões do Postgress estão rodando simultaneamente, use os comandos netstat e ps:
# netstat -avnp |grep 5432
# netstat -avnp |grep 5430
# ps -A | grep postgres
Para este último comando, a resposta poderá ser algo semelhante a:

 2271 pts/0    00:00:00 postgres8.4
 2278 ?        00:00:00 postgres8.4
 2279 ?        00:00:00 postgres8.4
 2423 pts/0    00:00:00 postgres9.2
 2431 ?        00:00:00 postgres9.2
 2432 ?        00:00:00 postgres9.2
 2433 ?        00:00:00 postgres9.2
 2434 ?        00:00:00 postgres9.2
 2435 ?        00:00:00 postgres9.2


10.1
Utilizando o psql com mais de uma instância do servidor Postgresql rodando
O utilitário de interface de linha de comando “psql” é empacotado junto com cada versão do Postgresql. Assim é importante utilizar a versão do psql que corresponde a versão do Postgresql. Para isto, é necessário chamar o psql definindo a porta em que o servidor Postgresql correspondente está respondendo. Para caso descrito anteriormente neste post, isto seria da seguinte forma:

$ /usr/local/postgresql/pgsql8.4/bin/psql -p 5432 -U postgres
$ /usr/local/postgresql/pgsql9.2/bin/psql -p 5430 -U postgres

10.2 Customizando as sessões do psql
O ambiente do psql pode ser customizado através do arquivo “.psqlrc”. Isto é feito colocando este arquivo na pasta raiz do usuário. Por exemplo, para o usuário postgres, criar o arquivo /home/postgres/.psqlrc com o seguinte conteúdo:
\set PROMPT1 '%n@%M:%>%x %/=# '
Ao este usuário chamar o psql (por exemplo, invocando /usr/local/postgresql/pgsql8.4/bin/psql -p 5432), o prompt do psql será apresentado da seguinte forma:
postgres@[local]:5432 postgres=#
Assim, fica mais fácil o usuário identificar qual a instância do Postgresql está sendo utilizada nesta sessão do psql.

11. Phppgadmin com mais de uma versão do Postgresql
A versão do Phppgadmin está ligada a versão do Postgresql. Por exemplo:
Phppgadmin 4.2.3: suporta Postgresql 7.0.x, 7.1.x, 7.2.x, 7.3.x, 7.4.x, 8.0.x, 8.1.x, 8.2.x, 8.3.x
Phppgadmin 5.0.4: suporta Postgresql 7.4.x, 8.0.x, 8.1.x, 8.2.x, 8.3.x, 8.4.x, 9.0.x

Observada esta relação de compatibilidade, uma configuração simples de ser feita para conectar o Phppgadmin a uma das instâncias do Postgresql que está rodando é alterar a configuração de porta no arquivo de configuração do Phppgadmin:
mcedit /etc/phppgadmin/config.inc.php
$conf[‘servers’][0][‘port’] = 5430;
Neste caso, conforme configurações anteriores citadas neste post, o Phppgadmin passará a se conectar com o Postgresql9.2.

Referências
1- Documentação psql 9.2
2- Repositório de arquivos fontes das versões do Postgresql

comentários
  1. andru disse:

    Eu uso uma ferramenta gratuita Valentina Estúdio com PostgreSQL no linux. Será que tudo que você precisa, e faz isso muito bem. http://www.valentina-db.com/en/valentina-studio-overview

Deixe um comentário, pois isto é muito motivante para continuarmos este trabalho

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s