Banco de Dados
PostgreSQL 16 com extensão pgvector para busca semântica (RAG).
Tabelas principais
| Grupo | Tabelas |
|---|---|
| Multi-tenancy | organizations, plans, subscriptions, workspaces, users, workspace_members, teams, team_members, invitations |
| Canais | channels, tags, custom_field_definitions, bot_fields |
| Contatos | contacts, contact_tags, contact_field_values |
| Inbox | conversations, messages (particionada por mês) |
| Fluxos | flows, flow_versions, flow_executions |
| Automações | automations, automation_executions |
| Campanhas | campaigns, sequences, sequence_steps, sequence_subscriptions |
| Broadcasts | broadcasts, broadcast_recipients |
| IA | ai_assistants, ai_sessions, knowledge_bases, knowledge_chunks |
| API | outbound_webhooks, webhook_events, api_keys |
| LGPD | consent_records, data_subject_requests |
| Geral | audit_logs, quick_replies, message_templates, csat_surveys |
Extensões
CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- UUIDs
CREATE EXTENSION IF NOT EXISTS "vector"; -- pgvector para RAG
CREATE EXTENSION IF NOT EXISTS "pg_trgm"; -- busca por similaridade de texto
Particionamento
A tabela messages é particionada por mês para performance em alto volume:
CREATE TABLE messages (...) PARTITION BY RANGE (created_at);
CREATE TABLE messages_2026_04 PARTITION OF messages
FOR VALUES FROM ('2026-04-01') TO ('2026-05-01');
Particionar mensalmente garante que queries por período recente não escaneiam anos de histórico.