Como instalar e usar o PostgreSQL no Ubuntu 20.04

Introdução

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

O PostgreSQL, ou Postgres, é um sistema de gerenciamento de banco de dados relacional que fornece uma implementação da linguagem de consulta SQL. É compatível com padrões e possui muitos recursos avançados, como transações confiáveis e concorrência sem travamentos de leitura.

Este guia demonstra como instalar o Postgres em um servidor Ubuntu 20.04. Ele também fornece algumas instruções para administração geral de bancos de dados.

Implante um banco de dados PostgreSQL com um clique usando o Banco de Dados Gerenciados da DigitalOcean. Deixe a DigitalOcean cuidar da escalabilidade, manutenção e atualizações para o seu banco de dados.

Pré-requisitos

Para seguir este tutorial, você precisará de um servidor Ubuntu 20.04 que tenha sido configurado seguindo nosso guia Configuração Inicial do Servidor para Ubuntu 20.04. Após completar este tutorial pré-requisito, seu servidor deve possuir um usuário não-root com permissões de sudo e um firewall básico.

Passo 1 — Instalando o PostgreSQL

Os repositórios padrão do Ubuntu contêm pacotes do Postgres, então você pode instalá-los usando o sistema de empacotamento apt.

Se você ainda não o fez recentemente, atualize o índice local de pacotes do seu servidor:

  1. sudo apt update

Em seguida, instale o pacote do Postgres junto com um pacote -contrib que adiciona algumas utilidades e funcionalidades adicionais:

  1. sudo apt install postgresql postgresql-contrib

Assegure-se de que o servidor está em execução utilizando o comando systemctl start:

  1. sudo systemctl start postgresql.service

Agora que o software está instalado e em execução, podemos entender como ele funciona e como pode ser diferente de outros sistemas de gerenciamento de banco de dados relacionais que você possa ter usado.

Passo 2 — Utilizando Funções e Bancos de Dados do PostgreSQL

Por padrão, o Postgres usa um conceito chamado “funções” para lidar com autenticação e autorização. Estas são, em certo sentido, semelhantes a contas Unix tradicionais, mas o Postgres não faz distinção entre usuários e grupos e, em vez disso, prefere o termo mais flexível “função”.

Após a instalação, o Postgres está configurado para usar autenticação por pares, o que significa que ele associa funções do Postgres com uma conta de sistema Unix/Linux correspondente. Se uma função existe no Postgres, um nome de usuário Unix/Linux com o mesmo nome pode se autenticar como essa função.

O procedimento de instalação criou uma conta de usuário chamada postgres associada com a função padrão do Postgres. Para usar o Postgres, você pode logar nesta conta.

Existem algumas maneiras de usar esta conta para acessar o Postgres.

Mudança para a Conta postgres

Mude para a conta postgres no seu servidor digitando:

  1. sudo -i -u postgres

Agora você pode acessar o prompt do PostgreSQL imediatamente digitando:

  1. psql

A partir daí, você pode interagir com o sistema de gerenciamento de banco de dados de acordo com as necessidades.

Saia do prompt do PostgreSQL digitando:

  1. \q

Isso o retornará para o prompt de comando postgres do Linux.

Acessando um Prompt do Postgres sem Trocar de Contas

Você também pode executar o comando desejado com a conta postgres diretamente com sudo.

Por exemplo, no último exemplo, você foi instruído a chegar ao prompt do Postgres primeiro mudando para o usuário postgres e depois executando psql para abrir o prompt do Postgres. Você pode fazer isso em um único passo executando o comando único psql como o usuário postgres com sudo, assim:

  1. sudo -u postgres psql

Isso irá logá-lo diretamente no Postgres sem o shell intermediário bash no meio.

Novamente, você pode sair da sessão interativa do Postgres digitando:

  1. \q

Muitos casos de uso requerem mais de uma função do Postgres. Continue lendo para aprender como configurar estas.

Passo 3 — Criando uma Nova Função

Atualmente, você só tem a função postgres configurada no banco de dados. Você pode criar novas funções a partir da linha de comando com o comando createrole. A flag --interactive solicitará o nome da nova função e também perguntará se ela deve ter permissões de superusuário.

Se você estiver logado como a conta postgres, você pode criar um novo usuário digitando:

  1. createuser --interactive

Se, ao invés disso, preferir usar o sudo para cada comando sem mudar de sua conta normal, digite:

  1. sudo -u postgres createuser --interactive

O script solicitará algumas escolhas e, com base em suas respostas, executará os comandos corretos do Postgres para criar um usuário conforme suas especificações.

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

Você pode obter mais controle passando algumas flags adicionais. Confira as opções olhando na página man:

  1. man createuser

Sua instalação do Postgres agora tem um novo usuário, mas você ainda não adicionou nenhum banco de dados. A próxima seção descreve esse processo.

Passo 4 — Criando um Novo Banco de Dados

Outra suposição que o sistema de autenticação do Postgres faz por padrão é que para qualquer função usada para fazer login, essa função terá um banco de dados com o mesmo nome ao qual ela pode acessar.

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

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

  1. createdb sammy

Se, em vez disso, você preferir usar sudo para cada comando sem mudar de sua conta normal, você digitaria:

  1. sudo -u postgres createdb sammy

Essa flexibilidade oferece várias maneiras de criar bancos de dados conforme necessário.

Passo 5 — Abrindo um Prompt do Postgres com o Novo Papel

Para fazer login com autenticação peer, você precisará de um usuário Linux com o mesmo nome que seu papel e banco de dados do Postgres.

Se você não tiver um usuário Linux correspondente disponível, pode criar um com o comando adduser. Você terá que fazer isso a partir de sua conta não-root com privilégios sudo (ou seja, não conectado como o usuário postgres):

  1. sudo adduser sammy

Assim que esta nova conta estiver disponível, você pode alternar e se conectar ao banco de dados digitando:

  1. sudo -i -u sammy
  2. psql

Ou, você pode fazer isso em linha:

  1. sudo -u sammy psql

Este comando irá fazer o login automaticamente, assumindo que todos os componentes tenham sido configurados corretamente.

Se você deseja que seu usuário se conecte a um banco de dados diferente, você pode fazer isso especificando o banco de dados assim:

  1. psql -d postgres

Depois de fazer login, você pode verificar suas informações de conexão atuais digitando:

  1. \conninfo
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 não padrão ou com usuários não padrão.

Passo 6 — Criando e Excluindo Tabelas

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

A sintaxe básica para criar tabelas é 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)
);

Como você pode ver, esses comandos dão um nome à tabela e, em seguida, definem as colunas, bem como o tipo de coluna e o comprimento máximo dos dados do campo. Você também pode adicionar opcionalmente restrições de tabela para cada coluna.

Você pode aprender mais sobre como criar e gerenciar tabelas no Postgres aqui.

Para fins de demonstração, crie a seguinte tabela:

  1. CREATE TABLE playground (
  2. equip_id serial PRIMARY KEY,
  3. type varchar (50) NOT NULL,
  4. color varchar (25) NOT NULL,
  5. location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
  6. install_date date
  7. );

Este comando criará uma tabela que inventaria equipamentos de playground. A primeira coluna na tabela conterá números de ID de equipamento do tipo serial, que é um número inteiro de incremento automático. Esta coluna também possui a restrição de PRIMARY KEY, o que significa que os valores dentro dela devem ser únicos e não nulos.

As próximas duas linhas criam colunas para o equipamento tipo e cor respectivamente, sendo que nenhuma delas pode ficar vazia. A linha após essas cria uma coluna localização bem como uma restrição que requer que o valor seja um dos oito possíveis valores. A última linha cria uma coluna data que registra a data em que você instalou o equipamento.

Para duas das colunas (equip_id e install_date), o comando não especifica um comprimento de campo. O motivo para isso é que alguns tipos de dados não requerem um comprimento definido porque o comprimento ou formato são implícitos.

Você pode ver sua nova tabela digitando:

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

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

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

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

Com uma tabela pronta, vamos usá-la para praticar a gestão de dados.

Passo 7 — Adicionando, Consultando e Excluindo Dados em uma Tabela

Agora que você tem uma tabela, você pode inserir alguns dados nela. Como exemplo, adicione um escorregador e um balanço chamando a tabela que você deseja adicionar, nomeando as colunas e então fornecendo os dados para cada coluna, assim:

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

Você deve ter cuidado ao inserir os dados para evitar alguns problemas comuns. Primeiro, não coloque os nomes das colunas entre aspas, mas os valores das colunas que você insere precisam de aspas.

Outra coisa a se ter em mente é que você não insere um valor para a coluna equip_id. Isso ocorre porque isso é gerado automaticamente sempre que você adiciona uma nova linha à tabela.

Recupere as informações que você adicionou digitando:

  1. SELECT * FROM playground;
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 escorregador no playground quebrar e você precisar removê-lo, também pode remover a linha da sua tabela digitando:

  1. DELETE FROM playground WHERE type = 'slide';

Consulte a tabela novamente:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 2 | swing | yellow | northwest | 2018-08-16 (1 row)

Observe que a linha do slide já não faz parte da tabela.

Passo 8 — Adicionando e Removendo Colunas de uma Tabela

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

  1. ALTER TABLE playground ADD last_maint date;

Se você visualizar novamente as informações da sua tabela, verá que a nova coluna foi adicionada, mas nenhum dado foi inserido:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date | last_maint ----------+-------+--------+-----------+--------------+------------ 2 | swing | yellow | northwest | 2018-08-16 | (1 row)

Se você descobrir que sua equipe de trabalho utiliza uma ferramenta separada para acompanhar o histórico de manutenção, você pode excluir a coluna digitando:

  1. ALTER TABLE playground DROP last_maint;

Isso exclui a coluna last_maint e quaisquer valores encontrados dentro dela, mas deixa todos os outros dados intactos.

Passo 9 — Atualizando Dados em uma Tabela

Até agora, você aprendeu como adicionar registros a uma tabela e como excluí-los, mas este tutorial ainda não abordou como modificar entradas existentes.

Você pode atualizar os valores de uma entrada existente consultando o registro que deseja e definindo a coluna com o valor que deseja usar. Você pode consultar o registro swing (isso corresponderá a toda a balança na sua tabela) e mudar sua cor para vermelho. Isso pode ser útil se você pintou o conjunto de balanço:

  1. UPDATE playground SET color = 'red' WHERE type = 'swing';

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

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+-------+-----------+-------------- 2 | swing | red | northwest | 2018-08-16 (1 row)

Como você pode ver, o escorregador agora está registrado como sendo vermelho.

Conclusão

Você agora está configurado com o PostgreSQL no seu servidor Ubuntu 20.04. Se deseja aprender mais sobre o Postgres e como utilizá-lo, recomendamos que consulte os seguintes guias:

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-20-04