Modelo de Dados
Diagrama de Tabelas
Identificadores
Todas as tabelas usam UUID v4 como identificador primário, gerado pelo PostgreSQL via gen_random_uuid().
| Variação | Tabelas | Primary Key |
|---|---|---|
| Simples | tenants, types, configs, audit_logs | id UUID PRIMARY KEY DEFAULT gen_random_uuid() |
| Composta (particionada) | execution_runs, execution_items, http_logs, queue_logs | (id, timestamp) — PostgreSQL exige a coluna de partição na PK |
Na aplicação, quando o ID precisa ser gerado antes do insert (ex: referenciar um run_id em items), usa-se generateId() de @hg/core — wrapper de crypto.randomUUID().
Particionamento e Expurgo
| Tabela | Particionada | Chave | Retenção Sugerida |
|---|---|---|---|
execution_runs | Sim | started_at (mensal) | 6 meses |
execution_items | Sim | created_at (mensal) | 6 meses |
http_logs | Sim | created_at (mensal) | 30 dias |
queue_logs | Sim | created_at (mensal) | 30 dias |
audit_logs | Não | — | Permanente |
Expurgo: DROP TABLE <tabela>_YYYY_MM — operação instantânea, sem VACUUM.
Multi-tenant (RLS)
Todas as tabelas (exceto tenants e types) possuem Row Level Security:
ALTER TABLE configs ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON configs
USING (tenant_id = current_setting('app.tenant_id')::uuid);
O tenant é definido no início de cada transação:
SET LOCAL app.tenant_id = '<uuid>';
Scoped à transação — sem risco de vazamento entre requests.