Pular para o conteúdo
Skillpedia
APIs e servidores (backend)280 mil · #98

postgres-patterns

Ajuda seu agente a otimizar bancos de dados PostgreSQL. Ele entende de design de tabelas, índices e segurança para consultas rápidas.

O que ela faz

Este agente ajuda a criar e otimizar bancos de dados PostgreSQL. Ele oferece sugestões sobre como organizar seus dados, criar índices eficientes e garantir a segurança.

Quando usar

  • ✓Ao criar a estrutura do seu banco de dados.
  • ✓Quando uma consulta ao banco de dados está muito lenta.
  • ✓Ao configurar permissões de acesso aos dados.

Exemplo do que pedir para a IA

“Como posso criar um índice para acelerar buscas por data em uma tabela de eventos?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/postgres-patterns/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/postgres-patterns/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ele funciona como um guia rápido, mostrando exemplos de código e boas práticas. Você pode consultar tabelas de referência para escolher os melhores tipos de dados e índices para suas necessidades.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill postgres-patterns

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/postgres-patterns/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Padrões do PostgreSQL

Referência rápida para as melhores práticas do PostgreSQL. Para orientação detalhada, use o agente database-reviewer.

Quando Ativar

  • Escrevendo consultas SQL ou migrações
  • Projetando esquemas de banco de dados
  • Solucionando consultas lentas
  • Implementando Segurança em Nível de Linha (RLS)
  • Configurando pooling de conexões

Referência Rápida

Tabela de Referência de Índices

Padrão de Consulta Tipo de Índice Exemplo
WHERE col = value B-tree (padrão) CREATE INDEX idx ON t (col)
WHERE col > value B-tree CREATE INDEX idx ON t (col)
WHERE a = x AND b > y Composto CREATE INDEX idx ON t (a, b)
WHERE jsonb @> '{}' GIN CREATE INDEX idx ON t USING gin (col)
WHERE tsv @@ query GIN CREATE INDEX idx ON t USING gin (col)
Intervalos de séries temporais BRIN CREATE INDEX idx ON t USING brin (col)

Tabela de Referência de Tipos de Dados

Caso de Uso Tipo Correto Evitar
IDs bigint int, UUID aleatório
Strings text varchar(255)
Timestamps timestamptz timestamp
Dinheiro numeric(10,2) float
Flags boolean varchar, int

Padrões Comuns

Ordem do Índice Composto:

-- Equality columns first, then range columns
CREATE INDEX idx ON orders (status, created_at);
-- Works for: WHERE status = 'pending' AND created_at > '2024-01-01'

Índice de Cobertura:

CREATE INDEX idx ON users (email) INCLUDE (name, created_at);
-- Avoids table lookup for SELECT email, name, created_at

Índice Parcial:

CREATE INDEX idx ON users (email) WHERE deleted_at IS NULL;
-- Smaller index, only includes active users

Política de RLS (Otimizada):

CREATE POLICY policy ON orders
  USING ((SELECT auth.uid()) = user_id);  -- Wrap in SELECT!

UPSERT:

INSERT INTO settings (user_id, key, value)
VALUES (123, 'theme', 'dark')
ON CONFLICT (user_id, key)
DO UPDATE SET value = EXCLUDED.value;

Paginação com Cursor:

SELECT * FROM products WHERE id > $last_id ORDER BY id LIMIT 20;
-- O(1) vs OFFSET which is O(n)

Processamento de Fila:

UPDATE jobs SET status = 'processing'
WHERE id = (
  SELECT id FROM jobs WHERE status = 'pending'
  ORDER BY created_at LIMIT 1
  FOR UPDATE SKIP LOCKED
) RETURNING *;

Detecção de Anti-Padrões

-- Find unindexed foreign keys
SELECT conrelid::regclass, a.attname
FROM pg_constraint c
JOIN pg_attribute a ON a.attrelid = c.conrelid AND a.attnum = ANY(c.conkey)
WHERE c.contype = 'f'
  AND NOT EXISTS (
    SELECT 1 FROM pg_index i
    WHERE i.indrelid = c.conrelid AND a.attnum = ANY(i.indkey)
  );

-- Find slow queries
SELECT query, mean_exec_time, calls
FROM pg_stat_statements
WHERE mean_exec_time > 100
ORDER BY mean_exec_time DESC;

-- Check table bloat
SELECT relname, n_dead_tup, last_vacuum
FROM pg_stat_user_tables
WHERE n_dead_tup > 1000
ORDER BY n_dead_tup DESC;

Modelo de Configuração

-- Connection limits (adjust for RAM)
ALTER SYSTEM SET max_connections = 100;
ALTER SYSTEM SET work_mem = '8MB';

-- Timeouts
ALTER SYSTEM SET idle_in_transaction_session_timeout = '30s';
ALTER SYSTEM SET statement_timeout = '30s';

-- Monitoring
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

-- Security defaults
REVOKE ALL ON SCHEMA public FROM public;

SELECT pg_reload_conf();

Relacionados

  • Agente: database-reviewer - Fluxo de trabalho completo de revisão de banco de dados
  • Skill: clickhouse-io - Padrões de análise do ClickHouse
  • Skill: backend-patterns - Padrões de API e backend

Baseado nas Skills do Agente Supabase (crédito: equipe Supabase) (Licença MIT)

Perguntas frequentes

O que é um índice?

Um índice é como o índice de um livro, ele ajuda o banco de dados a encontrar informações mais rápido sem precisar ler tudo.

Qual a diferença entre `text` e `varchar`?

Para textos longos, `text` é geralmente mais eficiente no PostgreSQL. `varchar(255)` é uma limitação desnecessária na maioria dos casos.

O que é RLS?

RLS significa Row Level Security (Segurança em Nível de Linha). Permite definir quem pode ver ou modificar quais dados diretamente no banco de dados.

Detalhes

Descrição original do autor

PostgreSQL database patterns for query optimization, schema design, indexing, and security. Based on Supabase best practices. Use when designing PostgreSQL schemas, indexes, or RLS policies, or when a query is too slow.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#98
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas