Antes de fazer qualquer coisa, tenha certeza de que o sistema está atualizado:
# yum check-update
# yum
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.