Tutorial

Como instalar e utilizar o PostgreSQL no CentOS 8

PostgreSQLDatabasesCentOS 8

Introdução

Os sistemas de gerenciamento de banco de dados relacionados são um componente fundamental de muitos sites e aplicativos. Eles fornecem uma maneira estruturada de armazenar, organizar e acessar informações.

O PostgreSQL, conhecido também como Postgres, é um sistema de gerenciamento de banco de dados relacional, que fornece uma implementação da Linguagem de consulta estruturada, conhecida como SQL. Ele é usado por muitos projetos populares, grandes e pequenos. O Postgre é compatível com os padrões e possui muitos recursos avançados, como as transações confiáveis e a simultaneidade sem bloqueios de leitura.

Ao seguir este guia, você instalará a versão mais recente do PostgreSQL em um servidor CentOS 8.

Pré-requisitos

Para completar este tutorial, será necessário um servidor executando o CentOS 8. Este servidor deve ter um usuário não root com privilégios administrativos e um firewall configurado com o firewalld. Para configurar isso, consulte nosso Guia de configuração inicial de servidor para o CentOS 8.

Passo 1 — Instalando o PostgreSQL

O PostgreSQL está disponível no repositório de software padrão do CentOS 8, o AppStream, e existem várias versões que você pode instalar. Escolha entre essas versões habilitando a coleção apropriada de pacotes e dependências que se alinhem à versão que deseja instalar. Cada coleção é referida como um streaming de módulos.

No DNF (o gerenciador de pacotes padrão do CentOS 8), os módulos são coleções especiais de pacotes RPM que, juntos, formam um aplicativo maior. Isso visa tornar a instalação de pacotes e suas dependências em algo mais intuitivo para os usuários.

Liste os streamings disponíveis para o módulo postgresql usando o comando dnf:

  • dnf module list postgresql
Output
postgresql 9.6 client, server [d] PostgreSQL server and client module postgresql 10 [d] client, server [d] PostgreSQL server and client module postgresql 12 client, server PostgreSQL server and client module

Neste resultado, você pode ver que existem três versões do PostgreSQL disponíveis no repositório AppStream: 9.6, 10 e 12. O streaming que fornece a versão 10 do Postgres é o padrão, como indicado pelo [d] que o acompanha. Se quiser instalar essa versão, execute sudo dnf install postgresql-server e siga para o próximo passo. No entanto, embora a versão 10 ainda seja mantida, este tutorial instalará a versão 12 do Postgres, que era a versão mais recente disponível no momento em que este artigo foi escrito.

Para instalar a versão 12 do PostgreSQL, você deve habilitar o streaming do módulo daquela versão. Ao habilitar um streaming de módulo, você substitui o streaming padrão e torna disponíveis no sistema todos os pacotes relacionados ao streaming habilitado. Note que apenas é possível habilitar um streaming de módulo por vez em um sistema.

Para habilitar o streaming de módulo para a versão 12 do Postgres, execute o comando seguinte:

  • sudo dnf module enable postgresql:12

Quando solicitado, pressione y e, depois, ENTER para confirmar que deseja habilitar o streaming:

Output
==================================================================== Package Architecture Version Repository Size ==================================================================== Enabling module streams: postgresql 12 Transaction Summary ==================================================================== Is this ok [y/N]: y

Após habilitar o streaming de módulo da versão 12, instale o pacote postgresql-server para, em seguida, instalar o PostgreSQL 12 e suas dependências:

  • sudo dnf install postgresql-server

Quando o prompt aparecer, confirme a instalação pressionando y e, depois, ENTER:

Output
. . . Install 4 Packages Total download size: 16 M Installed size: 62 M Is this ok [y/N]: y

Agora que o software está instalado, você executará alguns passos de inicialização para preparar um novo cluster de banco de dados para o PostgreSQL.

Passo 2 — Criando um novo cluster de banco de dados PostgreSQL

Você precisa criar um novo cluster de banco de dados PostgreSQL antes de começar a criar tabelas e carregá-las com dados. Um cluster de banco de dados é uma coleção de banco de dados gerenciados por uma única instância de servidor. Criar um cluster de banco de dados consiste na criação de diretórios para armazenar os dados do banco de dados, gerando tabelas de catálogo compartilhadas e criando os bancos de dados template1 e postgres.

O banco de dados template1 é um modelo de tipos usado para criar novos bancos de dados; tudo o que for armazenado no template1, até mesmo objetos que você mesmo adicionar, será armazenado em novos bancos de dados quando esses forem criados. O banco de dados postgres é um banco de dados padrão projetado para o uso dos usuários, utilitários e aplicativos de terceiros.

O pacote Postgres que instalamos no passo anterior vem com um script útil chamado postgresql-setup, que auxilia na administração de um cluster de banco de dados de baixo nível. Para criar um cluster de banco de dados, execute o script usando sudo com a opção --initdb:

  • sudo postgresql-setup --initdb

Você verá o seguinte resultado:

Output
* Initializing database in '/var/lib/pgsql/data' * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log

Agora, inicie o serviço PostgreSQL usando o systemctl:

  • sudo systemctl start postgresql

Em seguida, use o systemctl mais uma vez para habilitar o serviço a sempre inicializar quando o servidor for iniciado:

  • sudo systemctl enable postgresql

Isso dará o seguinte resultado:

Output
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service.

Agora que o PostgreSQL está em funcionamento, passaremos a usar funções para aprender como funciona o Postgres e veremos como ele é diferente de sistemas de gerenciamento de banco de dados similares que você usou no passado.

Passo 3 — Usando funções e bancos de dados do PostgreSQL

O PostgreSQL utiliza um conceito chamado roles para lidar com a autenticação e a autorização de clientes. Essas são, de certa forma, semelhantes a contas regulares de estilo Unix, mas o Postgres não distingue entre os usuários e os grupos e, em vez disso, prefere o termo mais flexível: função.

Após a instalação, o Postgres é configurado para usar a autenticação ident, o que significa que ele associa os roles com uma conta do sistema Unix/Linux que combine. Se um role existe no Postgres, um nome de usuário Unix/Linux com o mesmo nome é capaz de fazer login como aquele role.

O procedimento de instalação criou uma conta de usuário chamada postgres que está associada ao role padrão do postgres. Para utilizar o PostgresSQL, faça login na conta.

Há algumas maneira de usar esta conta para acessar o prompt do PostgreSQL.

Mudando para a Conta postgres

Mude para a conta postgres no seu servidor digitando:

  • sudo -i -u postgres

Agora você pode acessar um prompt Postgres imediatamente digitando:

  • psql

Isso irá logar você no prompt do PostgreSQL, e daqui você está livre para interagir com o sistema de gerenciamento de banco de dados imediatamente.

Saia do prompt do PostgreSQL digitando:

  • \q

Isso trará você de volta ao prompt de comando Linux da conta postgres. Agora, volte para sua conta original com o seguinte:

  • exit

Acessando um Prompt do Postgres Sem Mudar de Contas

Você também pode executar comandos com a conta postgres usando o sudo diretamente.

No último exemplo, você foi instruído a acessar o prompt do Postgres trocando para o usuário postgres e, em seguida, executando o psql para abrir o prompt do Postgres. Como alternativa, você poderia fazer isso em um passo, executando o comando único psql como usuário postgres com sudo, dessa forma:

  • sudo -u postgres psql

Você fará o login diretamente no Postgres, sem o shell bash intermediário.

Novamente, é possível sair da sessão interativa Postgres digitando:

  • \q

Neste passo, você usou a conta postgres para acessar o prompt do psql. Mas muitos casos de uso requerem mais do que uma função Postgres. Leia para aprender a configurar novas funções.

Passo 4 — Criando uma nova função

Atualmente, você tem o role postgres configurado no banco de dados. Você pode criar novos roles na linha de comando com o comando createrole. A sinalização --interactive irá solicitar a você o nome do novo role e também perguntar se ele deve ter permissões de superusuário.

Se você estiver logado com a conta postgres, crie um novo usuário digitando:

  • createuser --interactive

Se, ao invés disso, você preferir usar o sudo para cada comando sem mudar da sua conta usual, digite:

  • sudo -u postgres createuser --interactive

O script mostrará algumas escolhas e, com base nas respostas, executará os comandos necessários do Postgres para criar um usuário nas suas especificações. Para este tutorial, crie uma função chamada sammy e dê a ela provilégios de superusuário digitando y quando solicitado:

Output
Enter name of role to add: sammy Shall the new role be a superuser? (y/n) y

Você pode ter mais controle passando alguns sinalizadores adicionais. Verifique as opções buscando na página man por createuser:

  • man createuser

Sua instalação do Postgres tem agora uma nova função, mas você ainda não adicionou nenhum banco de dados. A próxima seção descreve este processo.

Passo 5 — Criando um Novo Banco de Dados

Outra suposição que o sistema de autenticação do Postgres faz por padrão é que qualquer role usado para logar terá um banco de dados com o mesmo nome dele acessível.

Isso significa que, se o usuário que você criou na última seção for chamado de sammy, essa função tentará se conectar a um banco de dados também denominado “sammy”, por padrão. Você pode criar este banco de dados com o comando createdb.

Se você estiver logado com a conta postgres, você digitaria algo como:

  • createdb sammy

Se, ao invés disso, você preferir usar o sudo para cada comando sem mudar da sua conta usual, você digitaria:

  • sudo -u postgres createdb sammy

Esta flexibilidade proporciona vários caminhos para a criação de bancos de dados conforme necessário.

Agora que você criou um novo banco de dados, você fará login nele com sua nova função.

Passo 6 — Abrindo um Prompt do Postgres com a nova função

Para fazer o login com a autenticação baseada no ident, você precisará de um usuário Linux com o mesmo nome que sua função e banco de dados do Postgres.

Se você não tiver um usuário do Linux que combine disponível, crie um com o comando adduser. Você terá que fazer isso por meio da sua conta não root com privilégios sudo (ou seja, não logado como o usuário postgres):

  • sudo adduser sammy

Uma vez que essa nova conta estiver disponível, mude e se conecte ao banco de dados digitando:

  • sudo -i -u sammy
  • psql

Ou faça isso in-line:

  • sudo -u sammy psql

Este comando fará login automaticamente.

Se quiser que seu usuário se conecte a um banco de dados diferente, inclua o sinalizador -d e especifique o banco de dados desta forma:

  • psql -d postgres

Uma vez feito o login, verifique as informações atuais de sua conexão digitando:

  • \conninfo

Isso mostrará o seguinte resultado:

Output
You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".

Isso é útil se você estiver se conectando a bancos de dados fora do padrão ou com usuários que não sejam padrão.

Após se conectar ao seu banco de dados, tente criar e excluir tabelas.

Passo 7 — Criando e excluindo tabelas

Agora que você sabe se conectar ao sistema de banco de dados do PostgreSQL, vejamos algumas tarefas básicas de gerenciamento do Postgres.

Primeiro, crie uma tabela para armazenar alguns dados. Como exemplo, você fará uma tabela que descreve alguns equipamentos de um playground.

A sintaxe básica para este comando é a seguinte:

CREATE TABLE table_name (
    column_name1 col_type (field_length) column_constraints,
    column_name2 col_type (field_length),
    column_name3 col_type (field_length)
);

Estes comandos dão à tabela um nome e definem as colunas, assim como o tipo de coluna e o comprimento máximo dos dados do campo. Você também pode adicionar, de modo opcional, tabelas de restrições para cada coluna.

Para fins demonstrativos, crie uma tabela simples como essa:

  • CREATE TABLE playground (
  • equip_id serial PRIMARY KEY,
  • type varchar (50) NOT NULL,
  • color varchar (25) NOT NULL,
  • location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
  • install_date date
  • );

Estes comandos criarão uma tabela que faz um inventário de equipamentos de playground. Ele começa com uma ID do equipamento do tipo serial. Este tipo de dado é um número inteiro de incremento automático. Você também deu a essa coluna a restrição de PRIMARY KEY, que significa que os valores devem ser únicos e não nulos.

Para duas das colunas (equip_id e install_date), o comando não especifica o comprimento do campo. Isso é porque alguns tipos de coluna não requerem um comprimento específico porque o comprimento é implícito pelo tipo.

Os dois comandos seguintes criam colunas para type e color do equipamento, respectivamente, cada um dos quais não pode ser vazio. A linha seguinte a esta cria uma coluna location e uma restrição que exige que o valor seja um de oito valores possíveis. A última linha cria uma coluna de data que registra a data na qual você instalou o equipamento.

Veja sua nova tabela digitando:

  • \d

Isso mostrará o seguinte resultado:

Output
List of relations Schema | Name | Type | Owner --------+-------------------------+----------+------- public | playground | table | sammy public | playground_equip_id_seq | sequence | sammy (2 rows)

Sua tabela do playground está aqui, mas também há algo chamado playground_equip_id_seq que é do tipo sequence. Esta é uma representação do tipo serial que você deu à sua coluna equip_id. Isso mantém o rastro do próximo número na sequência e é criado automaticamente para colunas deste tipo.

Se você quiser ver apenas a tabela sem a sequência, você pode digitar:

  • \dt

Isso irá resultar no seguinte:

Output
List of relations Schema | Name | Type | Owner --------+------------+-------+------- public | playground | table | sammy (1 row)

Neste passo, você criou uma tabela amostral. No próximo passo, você tentará adicionar, consultar e excluir entradas na tabela.

Passo 8 — Adicionando, consultando e excluindo dados em uma tabela

Agora que você tem uma tabela, insira alguns dados nela.

Como um exemplo, adicione um slide e um swing chamando a tabela à qual você quer adicionar dados, nomeando as colunas e, em seguida, fornecendo dados para cada coluna da seguinte forma:

  • INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
  • INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');

Você deve tomar cuidado ao introduzir os dados para evitar alguns problemas comuns. Por exemplo, não envolva os nomes das colunas em aspas. No entanto, os valores de coluna que você digitar precisam de aspas.

Outra coisa para ficar atento é não digitar um valor para a coluna equip_id. Isso acontece porque esses valores são gerados automaticamente quando uma nova linha é criada na tabela.

Recupere a informação que você adicionou digitando:

  • SELECT * FROM playground;

Você verá o seguinte resultado:

Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 1 | slide | blue | south | 2017-04-28 2 | swing | yellow | northwest | 2018-08-16 (2 rows)

Aqui, você pode ver que seu equip_id foi preenchido com sucesso e que todos os seus outros dados foram organizados corretamente.

Se o slide no playground falhar e você tiver que removê-lo, você também pode remover a linha da sua tabela digitando:

  • DELETE FROM playground WHERE type = 'slide';

Consulte a tabela novamente:

  • SELECT * FROM playground;

Você verá o seguinte:

Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 2 | swing | yellow | northwest | 2018-08-16 (1 row)

Note que seu slide já não faz parte da tabela.

Agora que você adicionou e excluiu entradas em sua tabela, tente adicionar e excluir colunas.

Passo 9 — Adicionando e excluindo colunas de uma tabela

Após criar uma tabela, você pode modificá-la, adicionando ou excluindo colunas. Adicione uma coluna para mostrar a última visita de manutenção para cada peça de equipamento digitando:

  • ALTER TABLE playground ADD last_maint date;

Se você vir a informação da tabela novamente, você verá que a nova coluna foi adicionada (mas nenhum dado foi adicionado):

  • SELECT * FROM playground;

Você verá o seguinte:

Output
equip_id | type | color | location | install_date | last_maint ----------+-------+--------+-----------+--------------+------------ 2 | swing | yellow | northwest | 2018-08-16 | (1 row)

Deletar uma coluna é também bastante simples. Se você descobrir que sua equipe de trabalho usa uma ferramenta separada para acompanhar o histórico de manutenção, exclua a coluna digitando:

  • ALTER TABLE playground DROP last_maint;

Isso apaga a coluna last_maint e quaisquer valores encontrados nela, mas deixa todos os outros dados intactos.

Após ter adicionado e excluído colunas, tente, como passo final, atualizar dados já existentes.

Passo 10 — Atualizando dados em uma tabela

Até agora, você aprendeu a adicionar registros a uma tabela e como deletá-los, mas este tutorial ainda não cobriu como modificar os itens existentes.

Você pode atualizar os valores de um item existente consultando o registro que você quiser e definindo a coluna para o valor que você deseja usar. Você pode consultar o registro swing (isso corresponderá a cada swing na sua tabela) e alterar sua cor para red.

  • UPDATE playground SET color = 'red' WHERE type = 'swing';

Você pode verificar se a operação foi bem sucedida consultando os dados novamente:

  • SELECT * FROM playground;

Você verá o seguinte:

Output
equip_id | type | color | location | install_date ----------+-------+-------+-----------+-------------- 2 | swing | red | northwest | 2010-08-16 (1 row)

Como você pode ver, seu slide agora está registrado como sendo red.

Conclusão

Você configurou o PostgreSQL em seu servidor CentOS 8. No entanto, ainda há muito mais a aprender com o Postgres. Aqui estão mais alguns guias que cobrem como usar o Postgres:

Creative Commons License