Pular para o conteúdo
Skillpedia
Bancos de dados41 mil · #4840

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

https://github.com/wshobson/agents/blob/main/plugins/database-design/skills/postgresql-table-design/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/wshobson/agents/blob/main/plugins/database-design/skills/postgresql-table-design/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-design

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/database-design/skills/postgresql-table-design/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.

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; use UUID apenas 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 NUMERIC para 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; UUID para IDs distribuídos ou opacos, gerados com uuidv7() (PG18+) ou gen_random_uuid().
  • Números: BIGINT, a menos que o armazenamento seja crítico; DOUBLE PRECISION em vez de REAL; NUMERIC(p,s) para dinheiro e decimais exatos.
  • Strings: TEXT, com CHECK (LENGTH(col) <= n) quando um limite é necessário; BYTEA para binários. Consultas insensíveis a maiúsculas/minúsculas: índice de expressão em LOWER(col), ou CITEXT quando 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 ENUM apenas para conjuntos pequenos e estáveis; valores de negócios em evolução recebem TEXT + CHECK ou 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. Use DEFERRABLE INITIALLY DEFERRED para dependências circulares verificadas no commit.
  • UNIQUE: cria um índice B-tree; permite múltiplos NULLs, a menos que NULLS NOT DISTINCT (PG15+). Prefira NULLS 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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas