Pular para conteúdo

PostgreSQL - Banco de Dados Relacional

Visão Geral

PostgreSQL é um sistema de gerenciamento de banco de dados relacional open-source poderoso, com mais de 35 anos de desenvolvimento ativo. O Lumina Flow Builder oferece integração completa com PostgreSQL através de 5 operações principais.

Operações Disponíveis

1. Execute Query - Consultas SQL Personalizadas

Executa qualquer consulta SQL (SELECT, CREATE, ALTER, etc.) com total flexibilidade.

Quando usar: - SELECT com JOINs complexos - Agregações e relatórios - CTEs e subconsultas - DDL (CREATE TABLE, ALTER, etc.) - Queries personalizadas

Exemplo rápido:

{
  "operation": "executeQuery",
  "query": "SELECT * FROM clientes WHERE cidade = '{{cidade}}' LIMIT 10",
  "responseVariable": "clientes"
}

2. Insert - Inserir Registro

Insere novo registro na tabela de forma segura com prepared statements.

Quando usar: - Cadastro de novos clientes - Criar novo pedido - Registrar log de evento - Adicionar produto

Exemplo rápido:

{
  "operation": "insert",
  "table": "clientes",
  "values": {
    "nome": "{{nome}}",
    "email": "{{email}}",
    "data_cadastro": "CURRENT_TIMESTAMP"
  }
}

3. Update - Atualizar Registro

Atualiza registros existentes baseado em condições WHERE.

Quando usar: - Atualizar perfil de cliente - Mudar status de pedido - Corrigir dados incorretos - Atualização condicional

Exemplo rápido:

{
  "operation": "update",
  "table": "pedidos",
  "values": {
    "status": "enviado",
    "data_envio": "CURRENT_TIMESTAMP"
  },
  "conditions": {
    "id": "{{pedidoId}}"
  }
}

4. Delete - Deletar Registro

Remove registros da tabela baseado em condições WHERE.

Quando usar: - Cancelar pedido - Excluir conta de usuário - Limpar dados temporários - Remover item específico

IMPORTANTE: SEMPRE use com conditions! Nunca delete sem WHERE.

Exemplo rápido:

{
  "operation": "delete",
  "table": "sessoes",
  "conditions": {
    "expires_at": "< CURRENT_TIMESTAMP"
  }
}

5. InsertOrUpdate (Upsert) - Inserir ou Atualizar

Insere registro se não existe, atualiza se já existe (ON CONFLICT).

Quando usar: - Sincronização de dados externos - Operações idempotentes - Criar ou atualizar perfil - Import de dados

Exemplo rápido:

{
  "operation": "insertOrUpdate",
  "table": "produtos",
  "values": {
    "sku": "{{sku}}",
    "nome": "{{nome}}",
    "preco": "{{preco}}"
  },
  "conflictKeys": ["sku"]
}

Configuração de Conexão

Todas as operações requerem objeto config com credenciais:

{
  "host": "localhost",
  "port": 5432,
  "database": "nome_database",
  "user": "usuario",
  "password": "senha",
  "ssl": false
}

Segurança: NUNCA exponha credenciais em código! Use variáveis de ambiente.

Características do PostgreSQL

Vantagens

  • ACID completo: Transações confiáveis
  • SQL avançado: CTEs, window functions, arrays, JSON
  • Extensível: Tipos personalizados, funções, operadores
  • Full-text search: Busca textual nativa
  • JSON/JSONB: Suporte NoSQL híbrido
  • Replicação: Múltiplas opções de replicação
  • Open-source: Grátis e código aberto
  • Performance: Excelente para leitura e escrita

Recursos Avançados

  • CTEs Recursivas: Queries hierárquicas
  • Window Functions: Análises complexas
  • JSONB: Documentos com índices
  • Arrays: Colunas com múltiplos valores
  • Stored Procedures: Lógica no banco
  • Triggers: Automação de eventos
  • Particionamento: Dividir tabelas grandes
  • Foreign Data Wrappers: Acesso a outros bancos

Tipos de Dados Comuns

Tipo Descrição Exemplo
INTEGER Número inteiro 42
BIGINT Inteiro grande 9223372036854775807
NUMERIC(p,s) Decimal preciso 123.45
VARCHAR(n) Texto variável 'João Silva'
TEXT Texto ilimitado 'Descrição longa...'
BOOLEAN Verdadeiro/Falso true, false
DATE Data '2025-01-15'
TIMESTAMP Data e hora '2025-01-15 14:30:00'
TIMESTAMPTZ Com timezone '2025-01-15 14:30:00-03'
JSON/JSONB Objeto JSON '{"nome": "João"}'
ARRAY Array de valores ARRAY[1,2,3]
UUID Identificador único 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'

Boas Práticas Gerais

✅ Segurança

  • Use prepared statements (implementado automaticamente)
  • NUNCA concatene variáveis no SQL
  • Use SSL em produção
  • Crie usuário com permissões mínimas necessárias
  • Rotacione senhas regularmente

✅ Performance

  • Crie índices em colunas de WHERE e JOIN
  • Use LIMIT em queries de consulta
  • Execute EXPLAIN ANALYZE para otimizar
  • Use connection pooling
  • Normalize dados adequadamente (3FN)
  • Particione tabelas muito grandes

✅ Manutenção

  • Execute VACUUM e ANALYZE regularmente
  • Monitore tamanho de índices
  • Configure backups automáticos
  • Use transações para operações relacionadas
  • Documente estrutura do banco

❌ Evite

  • Não use SELECT * em produção
  • Não faça queries dentro de loops
  • Não ignore índices
  • Não exponha credenciais
  • Não delete/update sem WHERE
  • Não use DISTINCT quando GROUP BY resolve

Exemplo Completo: Sistema de Pedidos

{
  "name": "PostgreSQL - Sistema Pedidos Completo",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "data": { "label": "Início" }
    },
    {
      "id": "buscar_cliente",
      "type": "postgresql",
      "data": {
        "operation": "executeQuery",
        "query": "SELECT id, nome FROM clientes WHERE telefone = '{{phone}}'",
        "responseVariable": "cliente"
      }
    },
    {
      "id": "inserir_pedido",
      "type": "postgresql",
      "data": {
        "operation": "insert",
        "table": "pedidos",
        "values": {
          "cliente_id": "{{cliente.rows[0].id}}",
          "total": "{{total}}",
          "status": "pendente"
        },
        "responseVariable": "pedido"
      }
    },
    {
      "id": "atualizar_status",
      "type": "postgresql",
      "data": {
        "operation": "update",
        "table": "pedidos",
        "values": { "status": "pago" },
        "conditions": { "id": "{{pedido.insertedRow.id}}" }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "data": { "label": "Fim" }
    }
  ]
}

Automações Possíveis

1. CRM Automático

  • Inserir leads automaticamente
  • Atualizar status de oportunidades
  • Registrar interações
  • Gerar relatórios de vendas

2. E-commerce

  • Sincronizar produtos de API
  • Gerenciar inventário
  • Processar pedidos
  • Atualizar preços dinamicamente

3. Sistema de Tickets

  • Criar tickets de suporte
  • Atualizar status
  • Atribuir responsáveis
  • Gerar métricas SLA

4. Auditoria e Logs

  • Registrar ações de usuários
  • Monitorar acessos
  • Gerar relatórios de compliance
  • Limpar logs antigos

Recursos de Aprendizado

Documentação Oficial

Ferramentas Úteis

  • pgAdmin: Interface gráfica
  • DBeaver: Cliente universal
  • psql: CLI oficial
  • pg_dump: Backup e restore

Troubleshooting

Erro: "Connection refused"

  • Verifique se PostgreSQL está rodando
  • Confirme host e porta corretos
  • Verifique firewall

Erro: "Authentication failed"

  • Confirme usuário e senha
  • Verifique pg_hba.conf
  • Teste conexão com psql

Erro: "Relation does not exist"

  • Tabela não existe ou nome incorreto
  • Verifique schema (public por padrão)
  • Case-sensitive se usar aspas

Erro: "Duplicate key value violates unique constraint"

  • Tentando inserir valor duplicado em campo UNIQUE/PK
  • Use UPSERT (insertOrUpdate) se apropriado
  • Verifique se registro já existe

Suporte

Para questões sobre PostgreSQL no Lumina Flow Builder:

  1. Verifique documentação específica de cada operação
  2. Teste query no psql antes de usar no flow
  3. Use EXPLAIN ANALYZE para problemas de performance
  4. Consulte logs do PostgreSQL para erros detalhados

Próximos Passos

MySQL - Alternativa popular open-source → Microsoft SQL Server - Solução enterprise da Microsoft → MongoDB - Banco NoSQL para dados não-estruturados