Pular para o conteúdo
🔴 TROUBLESHOOTING

Erros do PostgreSQL

O que significa cada código SQLSTATE que suas queries podem retornar, e como resolver.

Tabela de erros SQLSTATE

Quando uma query falha, o SuperDB devolve o código SQLSTATE do Postgres. Os mais comuns:

SQLSTATENomeCausa comumO que fazer
42P01undefined_table A tabela não existe no schema do projeto — ou você está apontando para o projeto errado. Confira o project passado ao SDK e se a tabela aparece em Database. Se criou agora, recarregue: o cache de schema leva alguns segundos.
42501insufficient_privilege A role da requisição não tem permissão. Quase sempre é RLS sem política — com RLS ligada e nenhuma policy, tudo é negado (é o comportamento seguro). Crie a política da tabela para authenticated (e para anon, se for leitura pública). Veja Advisors no dashboard.
23505unique_violation Valor duplicado em coluna UNIQUE ou chave primária. Use upsert em vez de insert: INSERT … ON CONFLICT DO UPDATE.
23503foreign_key_violation A FK aponta para um registro que não existe (ou você apagou o pai antes do filho). Insira o pai antes do filho. Para apagar em cascata, declare ON DELETE CASCADE.
23502not_null_violation Campo NOT NULL recebeu null — comum quando o front envia string vazia. Preencha o campo ou dê um DEFAULT à coluna.
42703undefined_column Coluna inexistente — normalmente erro de digitação ou um select() desatualizado. Confira o nome em Database. Lembre que nomes com maiúsculas precisam de aspas no SQL.
57014query_canceled A query estourou o tempo limite. Crie índice para as colunas do where/order by, reduza o intervalo e pagine com limit.
53300too_many_connections Conexões esgotadas — típico de abrir um cliente novo a cada requisição no backend. Reaproveite uma única instância do cliente. Em serverless, prefira as chamadas HTTP do SDK a conexões diretas ao Postgres.
28000invalid_authorization Credencial inválida na conexão direta ao banco. Gere de novo a string de conexão em Settings; se você regenerou as chaves, a anterior morreu.
3D000invalid_catalog_name Banco/schema inexistente na conexão. Use o schema do seu projeto (proj_<slug>) e confirme o slug.

Vendo o erro no SQL Editor

O caminho mais rápido é reproduzir a query em SQL Editor, no dashboard: o Postgres devolve o código, a mensagem e a posição exata. Para checar se o problema é RLS, compare o resultado da mesma query com e sem filtro de usuário — se só falha autenticado, é política.

sql — ver as políticas de uma tabela
SELECT policyname, cmd, roles
  FROM pg_policies
 WHERE schemaname = 'proj_<slug>' AND tablename = 'minha_tabela';

Nenhuma linha + RLS ligada = tudo negado. É a explicação da maioria dos 42501.

Essa página ajudou?