Pular para conteúdo

supabase-schema — banco de dados (55 tabelas PostgreSQL)

TL;DR

PostgreSQL via Supabase Cloud. 55 tabelas com RLS. Project ref: elefbabxkaigusjiiflu. Schema completo em pd-framework/times/produto/cadencia/context/supabase-schema.json.

Identidade

  • Tipo: PostgreSQL + Row Level Security
  • Project ref: elefbabxkaigusjiiflu
  • URL: https://elefbabxkaigusjiiflu.supabase.co
  • Migrations: supabase/migrations/*.sql
  • Status: ativo

Tabelas-chave

Tabela O que guarda
tenants Tenant cadastrado (slug, nome, status)
users Tabela pública de usuários (FK para auth.users)
user_tenant_roles Roles por tenant (owner, admin, member)
tenant_config JSON config por tenant (email, visual, flags, SOUL)
tenant_plans Planos e créditos por tenant (pode ter múltiplos ativos)
tenant_onboarding Fase atual do onboarding
tenant_dossier Dossier de marca gerado pelos workers
tenant_profile Big5 + DPR signaling consolidado
profile_responses Respostas brutas do perfilamento
editorials 3 editoriais por tenant
content_ideas Ideias de conteúdo com editorial_id FK
generation_queue Fila de geração (created/processing/completed/failed)
content_documents Documento de conteúdo gerado (slides, rendering status)
published_posts Posts publicados com todos os canais (blog, seinfeld, linkedin, instagram, newsletter)
tenant_themes Cache do theme engine por tenant
style_configs Configurações visuais por Big5 + signaling
scoring_events Log de eventos de scoring (fire-and-forget)
api_call_logs Log de chamadas LLM (custo tracking)

Acesso

# Management API (DDL + DML)
gh api "repos/felipeluissalgueiro/cadencia-app/..." # não usar pra SQL

# Via Management API direta:
curl -X POST "https://api.supabase.com/v1/projects/elefbabxkaigusjiiflu/database/query"   -H "Authorization: Bearer <PAT>" -H "User-Agent: Mozilla/5.0"   -d '{"query": "SELECT ..."}'
# PAT: 1Password → vault databases → "Supabase - ClaudeCode - CLI" → credencial

Don'ts

  • Service_role bypassa RLS — nunca usar em código client-side
  • Após CREATE TABLE via Management API: NOTIFY pgrst, 'reload schema' (PostgREST cache)
  • generation_queue.channel vs channels: schema inconsistente (PDL-171 — verificar antes de alterar)

Quando usar

  • Toda persistência de dados do produto. 55 tabelas, RLS habilitado.
  • Migrations: supabase/migrations/*.sql — versionado em git.
  • Management API para SQL ad-hoc + analytics: https://api.supabase.com/v1/projects/elefbabxkaigusjiiflu/database/query.

Quando NÃO usar

  • ❌ Storage de imagens grandes (>10MB) — usar Supabase Storage, não tabela.
  • ❌ Service_role em código client — bypassa RLS, vaza dados entre tenants.
  • ❌ Migrations rodando direto em produção sem revisão — staging primeiro.

Por que funciona assim

  • ADR-0006 — Multi-tenant via RLS, não DBs separados.
  • Policies otimizadas em PDL-159 a PDL-166 (2026-05-19) — (SELECT auth.uid()) em vez de auth.uid() para evitar reavaliação por linha.
  • Schema completo em pd-framework/times/produto/cadencia/context/supabase-schema.json.

🚫 Don'ts

  • Não rodar migration de RLS sem testar com tenant específico (caso tenant_users inexistente — ver incident).
  • Não usar auth.uid() direto na policy — usar (SELECT auth.uid()) para performance.
  • Não esquecer NOTIFY pgrst, 'reload schema' após CREATE TABLE via Management API.
  • Não confundir generation_queue.channel (singular antigo) com channels (plural novo) — PDL-171.

🪦 Já tentamos

  • 2026-05-19 — Migration RLS tenant_users inexistente: migration referenciava tabela que não existia naquele ambiente. Ver 2026-05-19_migration-rls-tenant-users-inexistente.md.
  • PDL-159 a 166 — otimizar RLS policies, drop unused indexes, drop realtime publication. Resultado: queries pesadas 10x mais rápidas.

🔥 Troubleshooting

Sintoma Causa provável Fix
Query degradou após policy nova auth.uid() direto reavalia por linha Reescrever com (SELECT auth.uid())
PostgREST 404 após CREATE TABLE Schema cache stale NOTIFY pgrst, 'reload schema'
Migration falha em produção Tabela ref não existe / dependência ausente Reverter + testar staging
Cloudflare 1010 ao chamar Management API UA default Python urllib Setar User-Agent: Mozilla/5.0
Vazamento entre tenants RLS policy mal escrita Auditar todas policies com service_role em mente

📚 Referências cruzadas

  • supabase/migrations/ — Migrations versionadas
  • ADR: 0006 RLS multi-tenant
  • pd-framework/times/produto/cadencia/context/supabase-schema.json — Schema completo
  • CONTEXT.md — Entidades