Armazene e consulte pedidos de clientes

PostgreSQLBeginner
Pratique Agora

Introdução

A aplicação de pedidos tem uma conexão ao banco, mas ainda não tem uma tabela de pedidos. Você definirá um pequeno esquema, armazenará três pedidos de clientes e consultará os dados que a aplicação lê.

Conclua primeiro o laboratório anterior de conexão. Este laboratório começa de forma independente com uma instância PostgreSQL, uma aplicação e a AWS CLI configurada. Você removerá o banco de exercício após testar os resultados.

Relação com certificações

Este laboratório oferece prática introdutória para os seguintes tópicos de exames.

Defina a tabela de pedidos

Nesta etapa, você criará um esquema com um identificador exclusivo, nome do cliente e total para cada pedido.

Uma tabela armazena linhas com colunas definidas. SQL é a linguagem usada para definir e consultar essas linhas. A API do RDS gerencia a instância; SQL opera nos dados dentro do mecanismo PostgreSQL.

Carregue as configurações SQL preparadas e inspecione a instância fornecida:

cd /home/labex/project
source database.env
aws rds \
  describe-db-instances \
  --db-instance-identifier orders-db \
  --query 'DBInstances[0].{Database:DBName,Endpoint:Endpoint,Status:DBInstanceStatus}'

A instância está disponível e contém o banco orders. Sua conexão psql está preparada como service=orders-db.

Crie a tabela usando um heredoc. O texto entre as duas linhas SQL é passado ao psql como instruções SQL:

psql \
  "service=orders-db" \
  --set=ON_ERROR_STOP=1 <<'SQL'
CREATE TABLE orders (
  order_id integer PRIMARY KEY,
  customer text NOT NULL,
  total numeric(8,2) NOT NULL CHECK (total > 0)
);
SQL

A chave primária impede duas linhas de compartilharem um ID de pedido. NOT NULL exige um valor. numeric(8,2) armazena um decimal com duas casas decimais, e CHECK rejeita um total não positivo. Essas restrições fazem o banco rejeitar dados inválidos.

Inspecione a tabela:

psql \
  "service=orders-db" \
  --command '\d orders'

Espere encontrar três colunas, uma chave primária e a verificação de total positivo. A tabela ainda não tem linhas.

Armazene três pedidos de clientes

Nesta etapa, você inserirá um pequeno conjunto de dados e o lerá imediatamente.

INSERT grava linhas. Nomear as colunas torna explícita a relação de cada valor com sua coluna:

psql \
  "service=orders-db" \
  --set=ON_ERROR_STOP=1 <<'SQL'
INSERT INTO orders (order_id, customer, total)
VALUES
  (101, 'Maya', 49.90),
  (102, 'Owen', 18.50),
  (103, 'Nina', 25.25);

SELECT order_id, customer, total
FROM orders
ORDER BY order_id;
SQL

Espere encontrar três linhas com os valores acima. SELECT lê dados armazenados; ORDER BY torna a exibição previsível. Sem uma cláusula de ordenação, o banco não garante uma ordem específica das linhas.

O AWS View deve mostrar os mesmos três pedidos. A aplicação lê o PostgreSQL quando recebe uma solicitação; adicionar a tabela e as linhas transforma uma lista indisponível em dados úteis da aplicação.

Consulte os pedidos e verifique a aplicação

Nesta etapa, você responderá a uma pergunta de negócio e comparará os dados SQL com a resposta da aplicação.

A equipe quer pedidos de pelo menos 25.00. WHERE filtra as linhas antes de incluí-las no resultado:

psql \
  "service=orders-db" \
  --command 'SELECT order_id, customer, total FROM orders WHERE total >= 25.00 ORDER BY order_id;'

Espere encontrar os pedidos 101 e 103. O filtro não exclui o pedido 102; ele apenas seleciona as linhas retornadas.

Uma agregação combina valores de várias linhas. Conte todos os pedidos e calcule o total combinado:

psql \
  "service=orders-db" \
  --command 'SELECT count(*) AS order_count, sum(total) AS order_total FROM orders;'

Espere encontrar 3 pedidos e um total de 93.65.

Solicite a lista de pedidos da aplicação:

curl \
  --silent \
  --show-error \
  --fail \
  http://127.0.0.1:8080/application/orders | jq

Espere encontrar os três pedidos, o banco orders, o usuário orders_admin e read_only: false. SQL e a aplicação leem os mesmos dados armazenados. A aplicação retorna a lista completa; a consulta SQL anterior aplicou o filtro solicitado.

O usuário mestre do banco é útil para criar este esquema. O próximo laboratório fornece à aplicação uma identidade com menos permissões para que o acesso rotineiro não exija privilégios administrativos. A aplicação lê os três pedidos armazenados no PostgreSQL primário.

Remova o banco de exercício

Nesta etapa, você removerá o banco deste laboratório e seus dados de pedidos.

A instância fornecida pertence a este exercício. Não é necessário manter os pedidos de exemplo nem um snapshot final:

aws rds \
  delete-db-instance \
  --db-instance-identifier orders-db \
  --skip-final-snapshot \
  --query 'DBInstance.DBInstanceIdentifier'
aws rds \
  wait db-instance-deleted \
  --db-instance-identifier orders-db
aws rds \
  describe-db-instances \
  --query 'DBInstances[].DBInstanceIdentifier'

Espere encontrar []. Excluir a instância remove o banco que contém a tabela; é uma operação mais ampla que DELETE, que remove linhas selecionadas dentro de uma tabela existente. Mantenha a aplicação e os recursos de rede preparados.

Resumo

Você definiu um esquema de pedidos com restrições, inseriu três registros e usou filtros e agregações SQL para responder perguntas sobre os dados. A aplicação leu as mesmas linhas do PostgreSQL. Depois, removeu o banco de exercício, preservando a aplicação e a rede fornecidas.

O próximo laboratório restringe o acesso de rede e os privilégios da aplicação no banco.