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 PostgreSQLou Postgres é um sistema de gerenciamento de banco de dados relacionados que fornece uma implementação da linguagem estruturada SQL. É uma escolha popular para muitos projetos pequenos e grandes e tem a vantagem de ser compatível com padrões e ter muitas funcionalidades avançadas como transações confiáveis e simultaneidade sem bloqueios de leitura.
Este guia demonstra como instalar o Postgres em uma instância Ubuntu 18.04 VPS e também fornece instruções para a administração básica de banco de dados.
Para acompanhar este tutorial, você precisará de um servidor Ubuntu 18.04 que tenha sido configurado seguindo nosso guia Configuração Inicial de Servidor para Ubuntu 18.04[. Após concluir este tutorial pré-requisito, seu servidor deve ter um usuário não-root com permissões sudo e um firewall básico.
Os repositórios padrão do Ubuntu contêm pacotes Postgres, para que você possa instalar esses usando o sistema de empacotamento apt
.
Uma vez que essa é a primeira vez que você usa o apt
nesta sessão, atualize seu índice de pacotes local. Então, instale o pacote Postgres jutamente com um pacote -contrib
que adiciona alguns serviços e funcionalidade adicionais:
- sudo apt update
- sudo apt install postgresql postgresql-contrib
Agora que o software está instalado, podemos examinar como ele funciona e como ele pode ser diferente de sistemas similares de gerenciamento de banco de dados que você possa ter usado.
Por padrão, o Postgres usa um conceito chamado “roles” para lidar com a autenticação e autorização. Essas são, de certa forma, semelhantes a contas regulares estilo Unix, mas o Postgres não distingue entre os usuários e os grupos e, ao invés disso, prefere o termo “role” mais flexível.
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 Postgres, você pode logar naquela conta.
Existem algumas maneiras de utilizar essa conta para acessar o 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 irá trazer você de volta ao prompt de comando do Linux postgres
.
Você também pode executar o comando que você quiser com a conta postgres diretamente com o sudo
.
Por exemplo, no último exemplo, você foi instruído a ir ao prompt do Postgres trocando primeiramente para o usuário postgres e então executando o psql
para abrir o prompt do Postgres. Você poderia fazer isso em um passo executando o comando único psql
como usuário postgres com sudo
, dessa forma:
- sudo -u postgres psql
Isso irá logar você diretamente no Postgres sem o shell bash
intermediário.
Novamente, você pode sair da sessão interativa Postgres digitando:
- \q
Muitas formas de uso requerem mais de um role Postgres. Leia para aprender a configurá-los.
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 flag --interactive
irá te solicitar o nome do novo role e também perguntar se ele deveria ter permissões de superusuário.
Se você estiver logado com a conta postgres, você pode criar 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 irá te solicitar algumas escolhas e, com base nas suas respostas, executar os comandos corretos do Postgres para criar um usuário nas suas especificações.
OutputEnter name of role to add: sammy
Shall the new role be a superuser? (y/n) y
Você pode ter mais controle passando algumas bandeiras adicionais. Verifique as opções olhando para a página man
:
- 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 este processo.
Outra suposição que o sistema de autenticação do Postgres faz por padrão é que para qualquer role usado para logar, esse role terá um banco de dados com o mesmo nome que ele pode acessar.
Isso significa que, se o usuário que você criou na última seção for chamado sammy, esse role irá tentar se conectar a um banco de dados que também seja chamado “sammy” por padrão. Você pode criar o banco de dados apropriado 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.
Para logar com a autenticação baseada no ident
, você precisará de um usuário Linux com o mesmo nome que seu role e banco de dados do Postgres.
Se você não tiver um usuário do Linux que combine disponível, você pode criar um com o comando adduser
. Você terá que fazer isso através 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, você pode ou mudar e se conectar ao banco de dados digitando:
- sudo -i -u sammy
- psql
Ou você pode fazer isso em linha:
- sudo -u sammy psql
Este comando irá logar você automaticamente, supondo que todos os componentes tenham sido configurados corretamente.
Se você quiser que seu usuário se conecte a um banco de dados diferente, você pode fazer isso especificando o banco de dados dessa forma:
- psql -d postgres
Uma vez logado, você pode verificar sua informação de conexão atual digitando:
- \conninfo
OutputYou 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.
Agora que você sabe se conectar ao sistema de banco de dados do PostgreSQL, você pode aprender algumas tarefas básicas de gerenciamento do Postgres.
Primeiro, crie uma tabela para armazenar alguns dados. Como um exemplo, uma tabela que descreva alguns equipamentos do 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)
);
Como você pode ver, esses comandos dão à tabela um nome e então definem as colunas, além do 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.
Você pode aprender mais sobre como criar e gerenciar tabelas no Postgres aqui.
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 inventaria o equipamento do playground. Isso começa com um ID do equipamento que é 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 da primary key
, que significa que os valores devem ser únicos e não nulos.
Para duas das colunas (equip_id
e install_date
), os comandos não especificam um comprimento de 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 o type
e color
do equipamento respectivamente, cada um dos quais não pode ser vazio. O comando seguinte a esses cria uma coluna location
e cria uma restrição que exige que o valor seja um de oito valores possíveis. O último comando cria uma coluna de data que grava a data na qual você instalou o equipamento.
Você pode ver sua nova tabela digitando:
- \d
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
Output List of relations
Schema | Name | Type | Owner
--------+------------+-------+-------
public | playground | table | sammy
(1 row)
Agora que você tem uma tabela, você pode inserir alguns dados nela.
Como um exemplo, adicione um slide e um swing chamando a tabela na qual você queira adicionar, nomeando as colunas e então fornecendo dados para cada coluna, desta 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, mas 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 isso é gerado automaticamente sempre que uma nova linha na tabela seja criada.
Recupere a informação que você adicionou digitando:
- 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 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;
Output equip_id | type | color | location | install_date
----------+-------+--------+-----------+--------------
2 | swing | yellow | northwest | 2018-08-16
(1 row)
Você percebe que seu slide já não é uma parte da tabela.
Após criar uma tabela, você pode modificá-la para adicionar ou remover colunas com facilidade. 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ê ver sua informação da tabela novamente, você verá que a nova coluna foi adicionada (mas nenhum dado foi adicionado):
- SELECT * FROM playground;
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, você pode deletar da 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.
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” (isto irá corresponder a cada swing na sua tabela) e alterar sua cor para “vermelho”. Isso pode ser útil se você der ao conjunto swing um trabalho de pintura:
- 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;
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 vermelho.
Você agora está com o PostgreSQL configurado no seu servidor Ubuntu 18.04. No entanto, ainda há muito mais a aprender com o Postgres. Aqui estão mais alguns guias que cobrem como usar o Postgres:
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.