fix(db): Fase 6 pós-colapso — idle_*_timeout + log queries lentas#336
Conversation
…ós-colapso) Fecha 2 dos 3 itens P0/P1 pendentes do RELATORIO_COLAPSO_2026-05-24: - #3 idle_session_timeout = 0 -> 10min (ALTER DATABASE) idle_in_transaction_session_timeout = 0 -> 60s (ALTER DATABASE) - #10 log_min_duration_statement = -1 -> 2000ms (ALTER ROLE, via supautils) Aplicado via MCP em 2026-05-25 13:00-13:20 UTC. Conexão PostgREST zumbi de 10.9 dias (PID 2376) foi eliminada na hora pelo novo idle_session_timeout. Operações idempotentes - reaplicação pelo pipeline é segura. Restante pendente: #6 Auth Connection Strategy (so via Dashboard).
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
WalkthroughMigration SQL "Fase 6" que encerra sessões idle mais rapidamente (10 min geral, 60 seg em transação) via ALTER DATABASE e habilita logging de queries lentas (2000 ms) via ALTER ROLE. Inclui validações e instruções de verificação manual pós-deploy. ChangesPostgreSQL idle timeout and slow query logging configuration
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~5 minutos Suggested labels
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 06cab92ba1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| -- SELECT rolconfig FROM pg_roles WHERE rolname = 'postgres'; | ||
| -- -- retorna ["search_path=...", "log_min_duration_statement=2000"] | ||
| -- ---------------------------------------------------------------------------- | ||
| ALTER ROLE "postgres" SET "log_min_duration_statement" TO '2000'; -- 2 s em ms |
There was a problem hiding this comment.
Configure slow-query logging for API roles
Setting log_min_duration_statement on postgres only affects sessions that authenticate as that role; PostgreSQL role GUCs are applied at login for that specific role. In Supabase, user traffic through PostgREST typically runs as authenticator (and switches to anon/authenticated), so this migration can leave the main API query path unlogged and does not fully resolve the slow-query observability gap it targets.
Useful? React with 👍 / 👎.
…337) * fix(db): aplica idle_*_timeout e log_min_duration_statement (Fase 6 pós-colapso) Fecha 2 dos 3 itens P0/P1 pendentes do RELATORIO_COLAPSO_2026-05-24: - #3 idle_session_timeout = 0 -> 10min (ALTER DATABASE) idle_in_transaction_session_timeout = 0 -> 60s (ALTER DATABASE) - #10 log_min_duration_statement = -1 -> 2000ms (ALTER ROLE, via supautils) Aplicado via MCP em 2026-05-25 13:00-13:20 UTC. Conexão PostgREST zumbi de 10.9 dias (PID 2376) foi eliminada na hora pelo novo idle_session_timeout. Operações idempotentes - reaplicação pelo pipeline é segura. Restante pendente: #6 Auth Connection Strategy (so via Dashboard). * docs: adiciona STATUS_POS_COLAPSO_2026-05-25.md (auditoria do follow-up) Documenta a operação completa de fechamento das pendências do colapso de 24/05, com: - Linha do tempo consolidada 24/05 -> 25/05 (~24h) - Validação direta nas fontes dos 10 achados originais (queries + resultados) - Detalhe técnico das 2 correções aplicadas hoje: * ALTER DATABASE idle_session_timeout / idle_in_transaction_session_timeout * ALTER ROLE log_min_duration_statement (via supautils) - Tabela-resumo final: 6/10 resolvidos, 3/10 com nuance, 1/10 pendente - 5 licoes aprendidas (BPM / processo) - Pendencias ativas organizadas por P0/P1/P2 - Bloco de queries SQL prontas para auditoria futura Companheiro de leitura do RELATORIO_COLAPSO_2026-05-24.md.
🎯 Objetivo
Fecha 2 dos 3 itens P0/P1 pendentes do
docs/RELATORIO_COLAPSO_2026-05-24.md— agora registrados como migration versionada para coerência com o pipeline.idle_session_timeout0(nunca expira)600000ms (10 min)ALTER DATABASEidle_in_transaction_session_timeout0(nunca expira)60000ms (60 s)ALTER DATABASElog_min_duration_statement-1(nada logado)2000ms (2 s)ALTER ROLElog_min_duration_statementtemContext: superuserno Postgres.ALTER DATABASEretornaERROR 42501mesmo para o rolepostgresdo Supabase. A doc oficial documenta que a extensãosupautilslibera essa modificação apenas viaALTER ROLE— ref: https://supabase.com/docs/guides/database/custom-postgres-config#superuser-settings✅ Evidência de validação (aplicado e testado em prod)
Os 3 ALTERs foram aplicados via MCP em 2026-05-25 13:00–13:20 UTC antes deste PR. Validação imediata:
Settings persistidos:
Efeito imediato — a zumbi de 10.9 dias foi eliminada:
idleA conexão remanescente >1h é
supabase_admin(superuser interno), fora do alcance do role da aplicação. O novoidle_session_timeoutvai derrubá-la quando ela ficar idle 10 min após a próxima atividade.🔒 Por que é seguro reaplicar pelo pipeline
Os 3 ALTERs são idempotentes — re-executar não causa erro nem mudança de comportamento. A migration está sendo adicionada principalmente para registro histórico e rastreabilidade, alinhando o repo com o estado real do banco.
📋 Status atualizado do checklist pós-colapso
external-db-bridgeem loopenabled=true(intencional, Caminho B incompleto)purge-expired-security99% falhafn_run_schema_drift_check()no limiteprofiles_selectquebra anonpubliccron.job_run_detailsinchadolog_min_duration_statement = -1Resumo: dos 10 achados, 6 totalmente resolvidos, 3 com nuance documentada, 1 pendência manual (Auth Strategy via Dashboard).
⏭️ Próximos passos sugeridos (fora do escopo deste PR)
Absolute (10)→Percentage (15%)external-db-bridgenas últimas 24h para decidir se já dá pra desligar o kill-switch🤖 PR gerado como parte do follow-up da operação de 20 etapas do RELATORIO_COLAPSO_2026-05-24, executada por Abner Silva (TI Promo Brindes).
Summary by cubic
Configura
idle_session_timeout(10 min) eidle_in_transaction_session_timeout(60 s) e ativalog_min_duration_statement(2 s) para reduzir sessões ociosas longas e registrar queries lentas. Fecha os achados #3 e #10 do relatório pós-colapso.ALTER DATABASEaplica os timeouts para novas conexões.ALTER ROLE postgresdefinelog_min_duration_statement=2000(requersupautilspor ser setting de superuser).Written for commit 06cab92. Summary will update on new commits. Review in cubic
Summary by CodeRabbit
Notas de Lançamento