ULC Lab · implementação reproduzível
Laboratório: Metabase com PostgreSQL para BI de Varejo Simulado
Você vai instalar Metabase e PostgreSQL em máquinas separadas, criar um modelo de dados bi_varejo simulado e conectar o Metabase para análise. Em cerca de 2 horas, terá dashboards operando sobre dados extraídos.

Roteiro para estudo em ambiente de laboratório ou de teste. Execute apenas em equipamentos, redes e contas que você tenha autorização para usar, com backup e homologação próprios. Comandos podem causar indisponibilidade ou perda de dados. Software e marcas citados pertencem aos seus titulares. Termos de Uso.
- Duração estimada
- 120 min
- Passos
- 11
- Validações
- 4
- Versões da documentação consultada
- Metabase v0.48.7 · PostgreSQL 15.x estável
Este laboratório ensina a montar uma bancada de BI baseada em código aberto, simulando a extração de dados do ERP CISSPoder ou CISSLive para um PostgreSQL, e conectando o Metabase para análise visual. O objetivo é demonstrar, em ambiente controlado, como estruturar a integração e análise sem acessar o banco de produção, usando um modelo didático (bi_varejo) para consultas de PDV, curva ABC e campanhas.
Topologia
Duas máquinas (ou VMs) em rede privada: uma roda PostgreSQL com o esquema bi_varejo, outra roda Metabase acessando o PostgreSQL por IP privado. O usuário do PostgreSQL tem permissão somente leitura no esquema bi_varejo. O acesso ao Metabase se dá via navegador na rede local.
[Navegador]
|
[Metabase VM]
192.168.56.10:3000
|
[PostgreSQL VM]
192.168.56.20:5432
|
[bi_varejo schema]
|
[dados simulados]
Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| VM Metabase | 2 vCPU, 2 GB RAM, 1 porta aberta (3000) |
| VM PostgreSQL | 2 vCPU, 2 GB RAM, 1 porta aberta (5432) |
| Metabase | AGPL v3 · v0.48.7 |
| PostgreSQL | PostgreSQL License · 15.x estável |
Roteiro
- Preparar as VMs e rede privada
Crie duas VMs Linux (Ubuntu Server 22.04 ou similar) em uma rede privada (exemplo: 192.168.56.0/24). Uma será para PostgreSQL, outra para Metabase.
O que você deve ver: Ambas as VMs se pingam mutuamente nos IPs privados.
- Instalar PostgreSQL
No servidor PostgreSQL, instale o PostgreSQL pelo gerenciador de pacotes.
sudo apt update && sudo apt install postgresqlO que você deve ver: Serviço postgresql ativo. Porta 5432 ouvindo.
- Criar usuário e banco de dados para BI
Crie um banco chamado bi_varejo e um usuário bi_readonly com permissão somente leitura.
sudo -u postgres psql -c "CREATE DATABASE bi_varejo;" sudo -u postgres psql -d bi_varejo -c "CREATE USER bi_readonly WITH PASSWORD 'senha_forte';" sudo -u postgres psql -d bi_varejo -c "GRANT CONNECT ON DATABASE bi_varejo TO bi_readonly;"O que você deve ver: Banco bi_varejo criado. Usuário bi_readonly criado.
- Criar esquema e tabelas simuladas
Implemente o esquema didático bi_varejo com tabelas fato_venda, fato_venda_item, dim_produto, dim_cliente, dim_loja, dim_campanha.
sudo -u postgres psql -d bi_varejo CREATE SCHEMA bi_varejo; SET search_path TO bi_varejo; CREATE TABLE dim_produto (id_produto serial PRIMARY KEY, nome text); CREATE TABLE dim_cliente (id_cliente serial PRIMARY KEY, nome text); CREATE TABLE dim_loja (id_loja serial PRIMARY KEY, nome text); CREATE TABLE dim_campanha (id_campanha serial PRIMARY KEY, descricao text); CREATE TABLE fato_venda (id_venda serial PRIMARY KEY, data_venda date, id_loja int, id_cliente int); CREATE TABLE fato_venda_item (id_venda int, id_produto int, quantidade int, valor_unitario numeric, id_campanha int);O que você deve ver: Tabelas criadas no esquema bi_varejo.
- Popular tabelas com dados de exemplo
Insira alguns registros em cada tabela para simular vendas, produtos, clientes, lojas e campanhas.
sudo -u postgres psql -d bi_varejo -c "INSERT INTO bi_varejo.dim_produto (nome) VALUES ('Arroz'),('Feijão'),('Açúcar');" sudo -u postgres psql -d bi_varejo -c "INSERT INTO bi_varejo.dim_cliente (nome) VALUES ('Maria'),('João');" sudo -u postgres psql -d bi_varejo -c "INSERT INTO bi_varejo.dim_loja (nome) VALUES ('Loja Centro'),('Loja Bairro');" sudo -u postgres psql -d bi_varejo -c "INSERT INTO bi_varejo.dim_campanha (descricao) VALUES ('Campanha Verão'),('Campanha Natal');" sudo -u postgres pql -d bi_varejo -c "INSERT INTO bi_varejo.fato_venda (data_venda, id_loja, id_cliente) VALUES ('2024-05-01',1,1),('2024-05-02',2,2);" sudo -u postgres psql -d bi_varejo -c "INSERT INTO bi_varejo.fato_venda_item (id_venda, id_produto, quantidade, valor_unitario, id_campanha) VALUES (1,1,2,5.00,1),(1,2,1,7.00,1),(2,3,3,4.00,2);"O que você deve ver: Dados de exemplo inseridos. SELECT retorna linhas.
- Conceder permissão somente leitura ao usuário
Garanta que bi_readonly só possa ler dados do esquema bi_varejo.
sudo -u postgres psql -d bi_varejo -c "GRANT USAGE ON SCHEMA bi_varejo TO bi_readonly;" sudo -u postgres psql -d bi_varejo -c "GRANT SELECT ON ALL TABLES IN SCHEMA bi_varejo TO bi_readonly;"O que você deve ver: Usuário bi_readonly acessa dados, mas não pode alterar.
- Liberar acesso remoto ao PostgreSQL
Edite o postgresql.conf para escutar em todas as interfaces e o pg_hba.conf para permitir acesso do IP do Metabase.
sudo nano /etc/postgresql/15/main/postgresql.conf # Altere: listen_addresses = '*' sudo nano /etc/postgresql/15/main/pg_hba.conf # Adicione: host bi_varejo bi_readonly 192.168.56.10/32 md5 sudo systemctl restart postgresqlO que você deve ver: PostgreSQL ouvindo em 0.0.0.0. Conexão remota possível.
- Instalar Metabase via Docker
No servidor Metabase, instale Docker e rode o container oficial do Metabase.
sudo apt update && sudo apt install docker.io sudo docker run -d -p 3000:3000 --name metabase metabase/metabase:latestO que você deve ver: Container Metabase rodando. Porta 3000 aberta.
- Acessar a interface web do Metabase
No navegador, acesse http://192.168.56.10:3000 para iniciar o setup.
O que você deve ver: Tela de boas-vindas do Metabase.
- Configurar conexão com PostgreSQL no Metabase
No assistente do Metabase, selecione PostgreSQL, informe IP (192.168.56.20), banco (bi_varejo), usuário (bi_readonly), senha, porta (5432).
O que você deve ver: Metabase conecta e lista as tabelas do esquema bi_varejo.
- Criar dashboard simples de vendas
No Metabase, crie uma consulta simples na tabela fato_venda_item, agregando quantidade por produto.
O que você deve ver: Dashboard exibe gráfico de vendas por produto.
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Conexão Metabase-PostgreSQL | Metabase lista tabelas do bi_varejo. | |
| Permissão somente leitura | Tente editar dados com bi_readonly | Acesso negado para INSERT/UPDATE/DELETE. |
| Consulta de vendas | SELECT * FROM bi_varejo.fato_venda_item; | Retorno de linhas simuladas. |
| Acesso web ao Metabase | curl http://192.168.56.10:3000 | Retorno HTTP 200 com conteúdo HTML do Metabase. |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| Metabase não conecta ao PostgreSQL | Firewall bloqueando porta 5432 ou configuração listen_addresses incorreta | Verifique regras de firewall e postgresql.conf. |
| Usuário bi_readonly não vê tabelas | Permissões insuficientes no esquema | Execute GRANT USAGE ON SCHEMA e GRANT SELECT ON ALL TABLES. |
| Erro de autenticação no Metabase | Senha incorreta ou pg_hba.conf não permite o IP | Confirme senha e entrada correta no pg_hba.conf. |
| Container Metabase não inicia | Porta 3000 já em uso ou falta de RAM | Libere a porta e aumente recursos da VM. |
Segurança e hardening
- Use senha forte para o usuário bi_readonly
- Permita acesso remoto apenas do IP do Metabase no pg_hba.conf
- Não exponha as portas 5432 e 3000 para a internet
- Remova dados simulados após o laboratório
- Desative ou apague o usuário de laboratório após uso
Checklist final
Referências
- Documentação oficial Metabase (conexão PostgreSQL) · Metabase (metabase.com)
- Documentação oficial PostgreSQL (GRANT) · PostgreSQL Global Development Group (postgresql.org)
- Documentação Docker (instalação no Ubuntu) · Docker, Inc. (docs.docker.com)
- Publicado
- 11/09/2026
- Última revisão
- 11/09/2026
- Versão do conteúdo
- 1.0
- Referências
- 3 oficiais
- Revisão técnica
- redação e revisão por IA, URLs conferidas na publicação
- Status
- Atual
