Instalação do PostgreSQL no CentOS 7

Antes de fazer qualquer coisa, tenha certeza de que o sistema está atualizado:

# yum check-update
# yum

Agora, para instalar o PostgreSQL no CentOS 7, siga os passos abaixo.

1) Instalação do PostgreSQL:

Depois que o sistema estiver atualizado, como root, instale o PostgreSQL:

# yum install postgresql-server postgresql-pltcl postgresql-plpython postgresql-plperl postgresql-contrib postgresql-devel postgresql-docs postgresql postgresql-libs postgresql-odbc postgresql-upgrade

O comando acima instalará o servidor do PostgreSQL, as languages PL/TCL, PL/Phyton e PL/Perl, os pacotes adicionais do repositório contrib, as bibliotecas devel, a documentação, bibliotecas adicionais e o cliente de linha de comando. Obviamente você NÃO PRECISA instalar tudo isso, instale somente o que você realmente precisa.

Se quiser que uma instalação Apache/PHP instalada no mesmo host acesse o PostgreSQL, instale também o seguinte pacote:

# yum install php-pgsql

O PostgreSQL será instalado em /var/lib/pgsql e o usuário postgres será criado.

2) Inicialização do cluster do PostgreSQL:

Segure o teclado e NÃO INICIE o PostgreSQL ainda pois não geramos nenhum cluster de banco de dados ainda. Se você tentar iniciar o banco de dados receberá uma bela mensagem de erro.

No CentOS 7 existe um script que deve ser rodado como root para inicializar o cluster do PostgreSQL: /usr/bin/postgresql-setup.

A documentação do CentOS é um pouco falha sobre este script, pois não informa se é possível personalizar a inicialização sem alterar o script. Por segurança eu faço uma cópia desse script e modifico a linha específica de inicialização do cluster para alterar o locale e o encoding do cluster. Faça isso:

Altere a linha original, disso:

# Initialize the database
 initdbcmd="$PGENGINE/initdb --pgdata='$PGDATA' --auth='ident'"

Para isso:

# Initialize the database
initdbcmd="$PGENGINE/initdb --locale=C --encoding=utf8 --pgdata='$PGDATA' --auth='ident'"

Agora basta rodar o script, como root:

# postgresql-setup initdb

Agora você tem um cluster de banco de dados em /var/lib/pgsql/data e já pode iniciar o PostgreSQL. Faça isso, como root:

# systemctl enable postgresql.service
# systemctl start postgresql.service

Com os comandos acima você informou ao CentOS que é para iniciar o PostgreSQL durante o boot do sistema e iniciou imediatamente o banco de dados.

3) Outros ajustes no PostgreSQL:

Eu gosto de instalar outras “languages” no template de banco de dados para permitir que desenvolvedores utilizem essas languages para programar procedures, funções, etc. Como usuário postgres, faça isso:

# su - postgres
$ createlang plpgsql template1
$ createlang pltcl template1
$ createlang plperl template1
$ createlang plpythonu template1
$ createlang -l template1

Agora vamos alterar algumas configurações padronizadas para uso no Brasil. Edite o arquivo /var/lib/pgsql/data/postgresql.conf e modifique as seguintes variáveis para:

listen_addresses = 'localhost, <IP do host, se necessário>'

log_timezone = 'Brazil/East'

datestyle = 'iso, dmy'

timezone = 'Brazil/East'

lc_monetary = 'pt_BR.UTF-8'

lc_numeric = 'pt_BR.UTF-8'

lc_time = 'pt_BR.UTF-8'

default_text_search_config = 'pg_catalog.portuguese'

Agora crie uma senha para o usuário postgres acessar o banco de dados. Como usuário postgres, entre na linha de comando do PostgreSQL e crie uma senha (em vermelho está o que você deve digitar na linha de comando do psql):

$ psql
psql (9.2.13)
Type "help" for help.

postgres=# ALTER ROLE postgres
postgres-# ENCRYPTED PASSWORD '<senha>';
ALTER ROLE
postgres=# \q

$

Agora você precisa editar o arquivo de permissões de acesso do PostgreSQL e exigir uma senha para a conexão dos usuários. Edite o arquivo /var/lib/pgsql/data/pg_hba.conf e deixe as configurações do seguinte modo:

# "local" is for Unix domain socket connections only
local     all     all                      md5
#local    all     all                      peer

# IPv4 local connections:
host      all     all     127.0.0.1/32     ident

# IPv6 local connections:
host     all     all     ::1/128          ident

# Allow replication connections from localhost, by a user with the
# replication privilege.
#local    replication     postgres               peer
#host     replication     postgres  127.0.0.1/32 ident
#host     replication     postgres  ::1/128      ident

Para aplicar todas as alterações, reinicie o PostgreSQL, como root:

# systemctl restart postgresql.service

Para acessar o PostgreSQL, como usuário postgres, agora será obrigatório a senha:

# psql -U postgres
Password for user postgres: <digite a senha aqui>
psql (9.2.13)
Type "help" for help.

postgres=#

Outros ajustes podem ser feitos posteriormente, de acordo com suas necessidades.