postgresql-table-design
Faz seu agente projetar e revisar a estrutura de tabelas em bancos de dados PostgreSQL. Ele garante que o design seja eficiente, seguro e siga as melhores práticas para otimizar o desempenho.
O que ela faz
Este agente ajuda a criar e revisar o design de tabelas para bancos de dados PostgreSQL. Ele sugere as melhores práticas para tipos de dados, índices e regras para garantir que seu banco de dados funcione bem.
Quando usar
- ✓Ao criar um novo banco de dados.
- ✓Ao escolher os tipos de dados corretos para suas colunas.
- ✓Ao decidir como organizar seus dados para melhor desempenho.
Exemplo do que pedir para a IA
“Como devo criar uma tabela para armazenar informações de clientes, garantindo que os emails sejam únicos?”
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
Mensagem pronta para colar
Como funciona
Ele analisa suas necessidades e sugere as melhores opções de colunas, índices e regras específicas do PostgreSQL. Ele considera o desempenho e as melhores práticas.
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 wshobson/agents --skill postgresql-table-designOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/database-design/skills/postgresql-table-design/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Design de Tabelas PostgreSQL
Quando Usar
- Ao projetar um novo esquema PostgreSQL, ou ao revisar um antes que ele seja implementado.
- Ao escolher tipos de coluna, chaves, restrições ou índices especificamente para PostgreSQL.
- Ao decidir se e como particionar uma tabela grande, ou como armazenar dados semiestruturados.
- Ao planejar uma alteração de esquema em um banco de dados ativo sem tempo de inatividade.
As regras e pontos de decisão para um esquema PostgreSQL. O catálogo completo de tipos de dados, padrões de carga de trabalho (com muitas atualizações, muitas inserções, upsert, evolução de esquema), extensões, indexação JSONB e exemplos de DDL trabalhados estão em references/details.md; abra-o quando uma seção abaixo apontar para lá.
Regras Principais
- Defina uma CHAVE PRIMÁRIA para tabelas de referência (usuários, pedidos, etc.). Nem sempre é necessária para dados de séries temporais/eventos/logs. Quando usada, prefira
BIGINT GENERATED ALWAYS AS IDENTITY; useUUIDapenas quando a unicidade global/opacidade for necessária. - Normalize primeiro (para 3FN) para eliminar redundância de dados e anomalias de atualização; desnormalize apenas para leituras medidas, de alto ROI, onde o desempenho de junção se provou problemático.
- Adicione NOT NULL onde for semanticamente exigido; use DEFAULTs para valores comuns.
- Crie índices para caminhos de acesso que você realmente consulta: PK/único (automático), colunas FK (manual!), filtros/ordenações frequentes e chaves de junção.
- Prefira TIMESTAMPTZ para tempo de evento; NUMERIC para dinheiro; TEXT para strings; BIGINT para inteiros; DOUBLE PRECISION para floats (ou
NUMERICpara aritmética decimal exata).
Armadilhas do PostgreSQL
- Identificadores: sem aspas → minúsculas. Evite nomes entre aspas/com maiúsculas e minúsculas misturadas; use
snake_case. - Único + NULLs: UNIQUE permite múltiplos NULLs. Use
UNIQUE NULLS NOT DISTINCT (...)(PG15+) para restringir a um NULL. - Índices FK: O PostgreSQL não indexa automaticamente colunas FK. Adicione-os.
- Sem coerções silenciosas: estouros de comprimento/precisão geram erro (sem truncamento). Inserir 999 em
NUMERIC(2,0)falha, ao contrário de bancos de dados que truncam ou arredondam silenciosamente. - Sequências/identidade têm lacunas (normal; não "consertar"). Rollbacks, falhas e transações concorrentes deixam lacunas (1, 2, 5, 6...).
- Armazenamento Heap: sem PK clusterizado por padrão;
CLUSTERé uma reorganização única, não mantida em inserções posteriores. - MVCC: atualizações/exclusões deixam tuplas mortas; o vacuum cuida delas — projete para evitar churn de linha larga quente.
Tipos de Dados
- IDs:
BIGINT GENERATED ALWAYS AS IDENTITY;UUIDpara IDs distribuídos ou opacos, gerados comuuidv7()(PG18+) ougen_random_uuid(). - Números:
BIGINT, a menos que o armazenamento seja crítico;DOUBLE PRECISIONem vez deREAL;NUMERIC(p,s)para dinheiro e decimais exatos. - Strings:
TEXT, comCHECK (LENGTH(col) <= n)quando um limite é necessário;BYTEApara binários. Consultas insensíveis a maiúsculas/minúsculas: índice de expressão emLOWER(col), ouCITEXTquando uma restrição deve ser insensível a maiúsculas/minúsculas. - Tempo:
TIMESTAMPTZ,DATE,INTERVAL.now()é o início da transação;clock_timestamp()é o relógio de parede. - Booleanos:
BOOLEAN NOT NULL, a menos que seja necessário um tri-estado. - Enums:
CREATE TYPE ... AS ENUMapenas para conjuntos pequenos e estáveis; valores de negócios em evolução recebemTEXT+CHECKou uma tabela de consulta. - JSONB em vez de JSON, indexado com GIN, apenas para atributos opcionais/semiestruturados.
- Tipos de array, intervalo, rede, geométricos, full-text, domínio, composto e vetor, além de armazenamento TOAST e controle de collation: veja
references/details.md.
Tipos a evitar
| Evitar | Usar em vez disso |
|---|---|
timestamp (sem fuso horário) |
timestamptz |
char(n), varchar(n) |
text (+ CHECK no comprimento, se necessário) |
money |
numeric |
timetz |
timestamptz |
timestamptz(0) ou qualquer precisão |
timestamptz |
serial |
generated always as identity |
Restrições
- PK: UNIQUE + NOT NULL implícito; cria um índice B-tree.
- FK: especifique
ON DELETE/UPDATE(CASCADE,RESTRICT,SET NULL,SET DEFAULT). Indexe a coluna referenciadora. UseDEFERRABLE INITIALLY DEFERREDpara dependências circulares verificadas no commit. - UNIQUE: cria um índice B-tree; permite múltiplos NULLs, a menos que
NULLS NOT DISTINCT(PG15+). PrefiraNULLS NOT DISTINCT, a menos que NULLs duplicados sejam desejados. - CHECK: local da linha; NULL passa (lógica de três valores). Combine com
NOT NULL:price NUMERIC NOT NULL CHECK (price > 0). - EXCLUDE: impede sobreposições com operadores, por exemplo,
EXCLUDE USING gist (room_id WITH =, booking_period WITH &&)impede reservas duplas. Requer um tipo compatível com GiST.
Indexação
…
Perguntas frequentes
Por que não devo usar 'varchar(n)'?
O tipo 'text' é geralmente preferível em PostgreSQL, pois não tem limitações de tamanho e o desempenho é similar. Você pode adicionar uma regra (CHECK) se precisar limitar o tamanho.
O PostgreSQL cria índices automaticamente para chaves estrangeiras?
Não, o PostgreSQL não cria índices automaticamente para colunas de chave estrangeira. Você precisa adicioná-los manualmente para garantir um bom desempenho nas consultas.
O que são 'gotchas' do PostgreSQL?
'Gotchas' são peculiaridades ou comportamentos inesperados do PostgreSQL que podem causar problemas se você não estiver ciente deles, como a forma como os identificadores são tratados ou a ausência de índices automáticos em chaves estrangeiras.
Detalhes
Descrição original do autor
Use this skill when designing or reviewing a PostgreSQL-specific schema. Covers best-practices, data types, indexing, constraints, performance patterns, and advanced features
repo: wshobson/agents
Popularidade
- Estrelas no GitHub
- 41 mil
- Posição no ranking
- #4840
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
screen-reader-testing
Faz seu agente testar sites usando leitores de tela para garantir que sejam acessíveis.
wshobson/agents
wcag-audit-patterns
Ajuda seu agente a auditar sites para acessibilidade e corrigir problemas de acordo com as diretrizes WCAG.
wshobson/agents
multi-reviewer-patterns
Faz seu agente coordenar revisões de código paralelas, deduplicando achados e consolidando relatórios.
wshobson/agents
parallel-debugging
Permite ao agente depurar problemas complexos com investigações paralelas e análise de causa raiz.
wshobson/agents
Skills parecidas
clickhouse-io
Ajuda seu agente a otimizar consultas e esquemas no banco de dados ClickHouse. Ele aplica as melhores práticas para cargas de trabalho analíticas de alta performance. Use quando consultas analíticas demoram muito.
affaan-m/ECC
scientific-db-pubmed-database
Ajuda seu agente a buscar artigos científicos na área biomédica. É útil para pesquisas que precisam de informações médicas específicas.
affaan-m/ECC
scientific-db-uspto-database
Permite ao agente consultar dados oficiais de patentes e marcas registradas dos EUA. É útil para pesquisas de propriedade intelectual.
affaan-m/ECC