PostgreSQL
SkillDatabases & dataModelar, consultar, migrar e operar PostgreSQL com integridade, índices, concorrência, segurança, performance e recuperação. Use para schemas, SQL, EXPLAIN, locks, isolation levels, migrations, roles, backup ou tuning em Postgres; não use para outro banco relacional sem confirmar a semântica específica, e não use para RLS/Auth/Realtime de Supabase — combine com `specsfy-specialist-supabase` nesse caso.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the PostgreSQL skill
What this skill tells your AI
The instructions your AI receives, as published by promovaweb/specsfy in specialists/specsfy-specialist-postgres/SKILL.md and read by ahel’s review.
Quando usar
- Acionar para desenhar schema, escrever ou revisar SQL, escolher índice,
analisar plano (
EXPLAIN), diagnosticar lock/deadlock, planejar migration ou dimensionar backup/restore em Postgres. - Acionar também quando um ORM (Eloquent, Prisma, Drizzle) gerar SQL ineficiente e a causa raiz for modelagem ou índice, não a API do ORM.
- Não acionar para decisões específicas de Supabase (RLS, Auth, Realtime,
Edge Functions) — usar
$specsfy-specialist-supabase, que aplica Postgres por baixo com essas camadas adicionais. - Combinar com
$specsfy-specialist-laravelquando o ponto de entrada for Eloquent e com$specsfy-specialist-performance-engineeringquando o gargalo abranger além do banco (aplicação, rede, cache).
Fluxo
- Descobrir versão do Postgres, extensões instaladas, volume atual, crescimento esperado, workload (OLTP, analítico, misto) e quem é o owner dos dados antes de recomendar.
- Modelar invariantes com tipos precisos,
NOT NULL,CHECK,UNIQUE, chaves estrangeiras e normalização adequada ao caso de uso. - Escrever a consulta mais simples que expressa a regra e medir o plano
real com
EXPLAIN (ANALYZE, BUFFERS)sobre dados representativos, nunca sobre uma tabela vazia ou de desenvolvimento. - Selecionar índice pelo workload observado (predicados do
WHERE,ORDER BY,JOIN) — nunca por "essa coluna é consultada" isoladamente. - Analisar isolation level, duração de transação, ordem de aquisição de locks e concorrência esperada sob a carga real.
- Planejar a migration com compatibilidade entre a versão antiga e nova da aplicação durante o deploy, e um caminho de rollback testável.
- Marcar a execução como
[MIGRATION], apontar o arquivo versionado, aplicar em uma base de teste e consultar o histórico do migrador antes de concluir. - Validar backup, restore, monitoramento e capacidade no ambiente alvo antes de declarar a mudança pronta para produção.
Padrões
- Preferir constraint do banco (
NOT NULL,CHECK,UNIQUE, FK,EXCLUDE) para toda invariante que sempre deve valer — validação só na aplicação permite dado inconsistente por qualquer segundo caminho de escrita. - Evitar
SELECT *em código de produção, tipos imprecisos (textpara enum fechado,floatpara dinheiro) e índice redundante que duplica outro já existente com prefixo igual. - Nunca adicionar índice sem ler padrão de escrita, tamanho da tabela, seletividade do predicado e o plano antes/depois — índice mal escolhido piora escrita sem acelerar leitura.
- Manter transação curta (evitar I/O externo, espera de usuário ou chamada de rede dentro dela) e ordem de aquisição de locks consistente entre todos os caminhos de código para evitar deadlock.
- Rodar
EXPLAIN (ANALYZE, BUFFERS)somente em ambiente onde executar a consulta de verdade é seguro (não em produção semROLLBACK/replica). - Aplicar expand/contract em mudança de schema incompatível ou em tabela de alto volume: nunca renomear/remover coluna lida em produção no mesmo passo que a adiciona.
- Conceder o menor privilégio necessário e separar papéis de migration
(DDL), aplicação (DML) e leitura (
SELECTapenas) — a aplicação nunca conecta com um role que podeDROP TABLE.
Antipadrões
- Índice criado por "essa coluna aparece no WHERE", ignorando seletividade — em coluna de baixa cardinalidade (booleano, status com poucos valores) o planner frequentemente prefere seq scan e o índice só custa em escrita.
ALTER TABLE ... ADD COLUMN ... NOT NULL DEFAULTem versão antiga do Postgres (< 11) reescrevendo a tabela inteira sob lock — em versões atuais isso é otimizado paraDEFAULTconstante, masDEFAULTcom função volátil ainda reescreve.- Transação longa mantendo lock enquanto espera resposta de rede ou confirmação do usuário — bloqueia autovacuum de limpar tuplas mortas e aumenta bloat.
- Paginação por
OFFSETgrande em tabela que cresce — custo cresce linearmente com o offset; preferir paginação por keyset (WHERE id > :cursor ORDER BY id LIMIT :n). - Backup automatizado nunca restaurado — "temos backup" sem um restore completo testado é uma suposição não verificada, não uma garantia.
Validação
- Testar integridade (constraints violadas geram erro esperado), concorrência (dois writers simultâneos não corrompem invariante) e as queries críticas do caminho quente.
- Comparar
EXPLAIN (ANALYZE, BUFFERS)antes/depois com cardinalidade realista, não com a tabela vazia do ambiente de desenvolvimento. - Estimar o lock e o tempo de rewrite de qualquer DDL contra o tamanho real da tabela em produção antes de agendar a janela de deploy.
- Conferir cada tarefa
[MIGRATION]pelo arquivo, pelo comando de aplicação e pela consulta do histórico do migrador, todos registrados com saída zero. - Provar restore periodicamente a partir do backup real, incluindo o tempo que o processo leva (RTO) — backup sem restore testado não é uma garantia de recuperação.
- Não declarar uma mudança "sem impacto de performance" sem o plano comparado; não declarar um schema "íntegro" sem os testes de constraint e concorrência acima.
Skills relacionadas
$specsfy-specialist-data-modelingpara entidades, relações e ciclo de vida antes dos detalhes específicos do Postgres.$specsfy-specialist-application-securitydefine ameaça, autorização e isolamento que constraints, roles e RLS materializam no banco.$specsfy-specialist-supabasequando o Postgres for gerenciado por Supabase (RLS, Auth, Realtime, pooling específico).$specsfy-specialist-laravelquando o ponto de entrada for Eloquent e a correção precisar refletir em migration/model.$specsfy-specialist-performance-engineeringquando o gargalo não se resolver só com índice/plano (rede, cache, aplicação).$specsfy-specialist-observabilitypara métricas e alertas de banco em produção (conexões, locks, replicação, lag).$specsfy-specialist-redisquando parte do estado consultado estiver em cache fora do banco — o Postgres continua sendo a fonte de verdade que o Redis nunca substitui.$specsfy-specialist-dockerpara empacotar e operar o servidor Postgres em container (imagem oficial, volume de dados, healthcheck) — decisão de schema, índice e plano continuam aqui.
Leia references/standards.md para tipos, índices, concorrência, segurança, migrations, operação e fontes oficiais.
Signals
- GitHub stars
- 79
- Forks
- 37
- Last commit
- Sep 2026
ahel review
S4info
community integration — published by promovaweb, not postgres
Automated review, not a security audit. Ruleset v1.
Advanced
- Catalog kind
- skill
- Gateway key
specsfy-specialist-postgres- Source
- github.com/promovaweb/specsfy