Você está na página 1de 5

Criando tabelas, importando dados e

executando consultas no PostgreSQL


 Paulo Vitor  PostgreSQL  09 setembro 2017 8 minutos
O PostgreSQL é um SGBD (Sistema de Gerenciamento de Banco de Dados) do tipo objeto-
relacional. Ele é um projeto de código aberto coordenado pelo PostgreSQL Global Development
Group. É um dos mais robustos SGBDs da atualidade e é gratuito, sendo considerado uma
alternativa poderosa aos softwares proprietários. Nele é possível armazenar diversos tipos de
dados, criar funções, configurar usuários com diferentes perfis de acesso, etc. Essa definição é
objetiva e, para saber mais detalhes sobre a ferramenta, seu potencial e suas características,
deixo aqui o link para o site oficial: https://www.postgresql.org/.
Para fazer o download do PostgreSQL, acesse: https://www.postgresql.org/download/, onde
existem várias opções de formato. Alternativamente,
acesse: https://www.enterprisedb.com/downloads/postgres-postgresql-downloads, selecione a
versão desejada (aqui é utilizada a 9.6) e seu sistema operacional. Atenção com a arquitetura da
sua máquina (32 ou 64 bits).

O processo de instalação do software é bem intuitivo, mas requer atenção. Para auxiliar a
vencer essa etapa, a página Processamento Digital fez um vídeo suficientemente explicativo,
ensinando a instalar não só o PostgreSQL, mas também o complemento para dados espaciais
PostGIS. Acesse: http://www.processamentodigital.com.br/2016/10/25/postgresql96-
postgis23-instalacao-no-windows10-32bits/
Se tudo correu bem na instalação, você deve ter acesso ao pgAdmin, que é uma interface onde é
possível administrar os bancos de dados, configurar usuários, executar comandos, etc. Por ora,
é onde iremos trabalhar.
No Menu Iniciar, acesse PostgreSQL 9.6 > pgAdmin 4
Já no pgAdmin, vamos criar a tabela que vai receber os dados com os quais iremos trabalhar. 
Vamos fazer isso dentro do banco de dados postgres, já existente no seu servidor. Você precisará
informar o usuário e a senha que definiu durante a instalação. Vá em Servers > PostgreSQL 9.6 >
Databases > postgres > Schemas. Clique com o botão direito no schema public e depois em CREATE
Script, conforme imagem abaixo.
Será aberta uma aba como na imagem abaixo. Você pode excluir o script preexistente.

Trabalharemos com dados fictícios de vendas de uma rede de lojas; construí no Excel utilizando
fórmulas que criam números aleatórios para os valores das vendas. Talvez você ache os nomes
dos vendedores familiares. O arquivo está no formato .csv (arquivo de valores separados por
vírgulas) e pode ser baixado aqui.
Voltando ao pgAdmin, vamos digitar o seguinte script:
CREATE TABLE vendas (
id SERIAL PRIMARY KEY NOT NULL,
data DATE NOT NULL,
funcionario VARCHAR(50) NOT NULL,
vendas NUMERIC(6, 2) NOT NULL,
dia_semana VARCHAR(15) NOT NULL
)
Vamos entender cada parte do script.
CREATE TABLE vendas: cria uma tabela denominada vendas.
id SERIAL PRIMARY KEY: cria um campo com o nome id e que será SERIAL (é uma notação por
meio da qual o programa se encarrega de criar uma sequência de números inteiros e associá-la
ao campo, para que ele sofra auto incremento) e a chave primária da tabela (o que significa que
este campo não aceitará valores nulos ou repetidos). Servirá para garantir que cada registro
tenha uma identificação única, como você e seu CPF.
data DATE NOT NULL: cria um campo com o nome data, que aceitará dados em formato de data e
que não aceitará valores nulos.
funcionario VARCHAR(50) NOT NULL: cria um campo com o nome funcionario, que aceitará dados
do tipo texto com comprimento máximo de 50 caracteres, e que não aceitará valores nulos.
vendas NUMERIC(6, 2) NOT NULL: cria um campo com o nome vendas, que aceitará dados do tipo
número com precisão máxima igual a 6 (número total de dígitos) e escala máxima igual a 2
(número de dígitos à direita do sinal decimal). Por exemplo, o número 8,56 tem precisão igual a
3 e escala igual a 2. Atenção: no Brasil utilizamos a vírgula como sinal decimal, mas o
PostgreSQL utiliza o padrão americano, que é o ponto (8.56).
dia_semana VARCHAR(15) NOT NULL: cria um campo com o nome dia_semana, que aceitará dados
do tipo texto com comprimento máximo de 15 caracteres, e que não aceitará valores nulos.
Tenha atenção com as vírgulas e com o abre e fecha parênteses. Note que após o comando que
cria o campo dia_semana não existe vírgula, pois é o último. Todo o script pode estar na mesma
linha, mas é preferível estruturar de forma que torne o script mais cognoscível.
Inserido e entendido o script, apertamos F5 ou clicamos no botão com o desenho de um raio
(Execute/Refresh).

Pronto, criamos nossa tabela. Agora, vamos importar os dados do arquivo .csv para a tabela
criada. Fazemos isso através do script:
COPY vendas(data, funcionario, vendas, dia_semana)
FROM 'C:/temp/aula/vendas.csv'
DELIMITER ';'
CSV HEADER;
Entenda o código:
COPY vendas(data, funcionario, vendas, dia_semana): copiar para a tabela vendas, especificamente
para os campos especificados entre parênteses, nesta ordem. Atenção com a ordem, pois deve
ser a mesma do arquivo a ser importado.
FROM 'C:/temp/aula/vendas.csv': especifica o endereço em que o arquivo está armazenado.
DELIMITER ';': especifica o delimitador, o que separa os campos, que no nosso caso é ponto-e-
vírgula.
CSV HEADER: informa ao PostgreSQL que a primeira linha do arquivo não deve ser importada,
pois é o cabeçalho.
Execute o script. Se retornou algum erro, verifique o seguinte:
É preciso ficar atento à codificação do seu banco de dados. Ela deve ser compatível com a do
arquivo a ser importado, que neste caso está em UTF-8. Para ver qual é a codificação do seu
banco de dados, execute o script
SELECT pg_client_encoding()
Caso você esteja trabalhando com outro arquivo, saiba que o Excel permite exportar dados em
várias codificações. Basta ir em Salvar como > Ferramentas > Opções da Web > Codificação, como na
imagem abaixo.

Uma dica útil e rápida é utilizar o Bloco de Notas do Windows para transformar a codificação
do seu arquivo, caso necessário. Para isso, abra o arquivo no Bloco de Notas e vá em Salvar como
> Codificação, como mostra a imagem a seguir. As opções são bem limitadas, mas podem
“quebrar um galho”, principalmente se o Excel falhar. Não esqueça de adicionar “.csv” ao final
do nome do seu arquivo, para que ele não perca os delimitadores.
Além da codificação, outro cuidado importante é garantir que há compatibilidade entre o dado
a ser importado e a coluna à qual será destinado. Por exemplo, o PostgreSQL retornará erro se
para a coluna vendas (numeric) tentar ser importado um texto. Apenas uma linha com dado
incompatível é o suficiente para o programa retornar erro. Ainda bem.
Se você verificou os pontos acima e mesmo assim continua retornando erro, descreva-o nos
comentários que tentarei ajudá-lo.
Se tudo correu bem até aqui, estamos prontos pra efetuar consultas no nosso banco de dados.
SELEÇÃO SIMPLES
A forma mais básica de efetuar uma consulta é a seguinte:
SELECT * FROM vendas;
Estamos selecionando todas as colunas da tabela vendas.
O asterisco indica que devem ser selecionadas todas as colunas. Para selecionar colunas
específicas, separe-as com vírgula:
SELECT data, funcionario FROM vendas
ORDENAR A SELEÇÃO
É possível ordenar os registros por meio da cláusula ORDER BY, assim:
SELECT * FROM vendas ORDER BY vendas DESC
Neste caso, estamos ordenando pelos valores da coluna vendas por ordem decrescente (DESC).
Para ordenar por ordem crescente, utilize ASC.
SELEÇÃO CONDICIONAL
Por vezes é necessário fazer a seleção com base numa condição ou conjunto de condições.
Podemos fazer isso por meio da cláusula WHERE:
SELECT * FROM vendas WHERE funcionario = 'BARNEY STINSON'
Estamos selecionando todas as colunas da tabela vendas em que o nome do funcionário seja
BARNEY STINSON. O PostgreSQL é case-sensitive para consultas, o que significa que
diferencia maiúsculas de minúsculas.
Podemos adicionar mais condições por meio dos operadores AND e OR:
SELECT * FROM vendas WHERE funcionario = 'BARNEY STINSON' AND data <= '2017-04-
10'
Seleção de registros em que o nome do funcionário seja BARNEY STINSON e a data seja menor
ou igual a 10 de abril de 2017 (escrita no padrão de data americano).
SELECT * FROM vendas WHERE funcionario = 'BARNEY STINSON' OR funcionario = 'JON
SNOW'
Seleção de registros em que o nome do funcionário seja BARNEY STINSON ou JON SNOW.
CALCULAR MEDIDAS
O PostgreSQL também pode calcular medidas para nós. Por exemplo, para obter o valor
máximo da coluna vendas, execute:
SELECT MAX(vendas) FROM vendas
Você deverá perceber que o nome da coluna retornado não é vendas, mas MAX, que é a função
que utilizamos. Podemos atribuir outro nome:
SELECT MAX(vendas) AS max_vendas FROM vendas
SELECIONAR POR GRUPO
Podemos agrupar nossas seleções por meio da cláusula GROUP BY. Isso é especialmente
interessante quando precisamos calcular medidas por grupo. Por exemplo:
SELECT data, SUM(vendas) AS total_vendas FROM vendas GROUP BY data ORDER BY data
ASC
Estamos selecionando a coluna data e a soma (SUM) da coluna vendas (que se
chamará total_vendas), agrupando pela coluna data e ordenando de forma crescente também pela
coluna data. Isso resultará numa soma para cada data.
ANINHAR SELEÇÕES
Quem já possui algum conhecimento em Excel deve conhecer o termo “aninhar”, que significa
colocar uma fórmula dentro da outra. No PostgreSQL também podemos aninhar seleções. Por
exemplo:
SELECT * FROM vendas WHERE vendas = (SELECT max(vendas) FROM vendas)
Estamos selecionando todas as colunas da tabela vendas em que o valor de vendas seja igual ao
valor máximo da coluna vendas da tabela vendas. Basicamente, saberemos quem foi o funcionário
que efetuou o maior volume de vendas num dia, em que data isso ocorreu e quanto ele vendeu.
COMBINAÇÃO ENTRE TABELAS
É possível fazer também combinação entre tabelas. Como até agora só temos uma, vamos
precisar inserir outra tabela no nosso banco de dados. Execute o script:
CREATE TABLE funcionarios (
id SERIAL PRIMARY KEY,
funcionario VARCHAR(50) NOT NULL,
loja VARCHAR(30) NOT NULL
)
Faça o download do arquivo func_loja.csv aqui. Este arquivo informa em qual loja cada
funcionário trabalha. Façamos a importação:
COPY funcionarios(funcionario, loja)
FROM 'C:/temp/aula/func_loja.csv'
DELIMITER ';'
CSV HEADER;
Existem várias formas de combinar duas ou mais tabelas. A que eu particularmente mais utilizo
é a cláusula INNER JOIN, que faz uma união interna por meio de um operador de comparação
entre colunas. Por exemplo, suponhamos que queiramos obter a soma das vendas agrupada por
loja. Bem, temos o valor das vendas por funcionário numa tabela, e a loja em que cada
funcionário trabalha noutra tabela. Podemos obter o resultado pretendido da seguinte forma:
SELECT funcionarios.loja, SUM(vendas.vendas) AS total_vendas FROM vendas
INNER JOIN funcionarios ON(vendas.funcionario =    funcionarios.funcionario)
GROUP BY funcionarios.loja ORDER BY total_vendas DESC
Vamos por partes. Observe que agora, como temos mais de uma tabela, é interessante que
especifiquemos a tabela e o campo (tabela.campo, como em funcionarios.loja). Não só é
interessante como também é necessário quando temos colunas com o mesmo nome. O
operador ON especifica quais campos deverão ser associados na união interna, neste caso, o
nome do funcionário da tabela vendas (vendas.funcionario) e o nome do funcionario da tabela
funcionarios (funcionarios.funcionario).
Estamos portanto selecionando o nome das lojas da tabela funcionarios, a soma das vendas da
tabela vendas (denominada total_vendas) da combinação interna entre a tabela vendas e a
tabela funcionarios por meio da associação entre as colunas funcionario da
tabela vendas e funcionario da tabela funcionarios, agrupando por loja e ordenando pela soma
efetuada de forma decrescente.

Você também pode gostar