postgresql-code-review
Faz seu agente revisar código de PostgreSQL, focando em boas práticas e padrões. Ajuda a garantir que o banco de dados seja eficiente e seguro.
O que ela faz
Esta ferramenta analisa seu código SQL para PostgreSQL, verificando se ele segue as melhores práticas e evita erros comuns específicos do PostgreSQL. Ela foca em como você usa tipos de dados como JSONB e arrays, o design do seu banco de dados e a segurança.
Quando usar
- ✓Ao escrever novas consultas ou funções em SQL para PostgreSQL.
- ✓Quando você quer otimizar o desempenho do seu banco de dados PostgreSQL.
- ✓Para garantir que seu código PostgreSQL seja seguro e siga os padrões.
Exemplo do que pedir para a IA
“Revise este código SQL para PostgreSQL, focando em otimização e boas práticas: [seu código SQL aqui]”
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
A ferramenta compara seu código com exemplos de boas práticas e erros comuns específicos do PostgreSQL. Ela identifica áreas como o uso de índices, tipos de dados (JSONB, arrays, ENUMs) e design de tabelas para sugerir melhorias.
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 github/awesome-copilot --skill postgresql-code-reviewOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/github/awesome-copilot/main/skills/postgresql-code-review/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.
Assistente de Revisão de Código PostgreSQL
Revisão especializada de código PostgreSQL para ${selection} (ou projeto inteiro se nenhuma seleção). Foco em melhores práticas, anti-padrões e padrões de qualidade específicos do PostgreSQL que são únicos para ele.
🎯 Áreas de Revisão Específicas do PostgreSQL
Melhores Práticas de JSONB
-- ❌ BAD: Inefficient JSONB usage
SELECT * FROM orders WHERE data->>'status' = 'shipped'; -- No index support
-- ✅ GOOD: Indexable JSONB queries
CREATE INDEX idx_orders_status ON orders USING gin((data->'status'));
SELECT * FROM orders WHERE data @> '{"status": "shipped"}';
-- ❌ BAD: Deep nesting without consideration
UPDATE orders SET data = data || '{"shipping":{"tracking":{"number":"123"}}}';
-- ✅ GOOD: Structured JSONB with validation
ALTER TABLE orders ADD CONSTRAINT valid_status
CHECK (data->>'status' IN ('pending', 'shipped', 'delivered'));
Revisão de Operações com Arrays
-- ❌ BAD: Inefficient array operations
SELECT * FROM products WHERE 'electronics' = ANY(categories); -- No index
-- ✅ GOOD: GIN indexed array queries
CREATE INDEX idx_products_categories ON products USING gin(categories);
SELECT * FROM products WHERE categories @> ARRAY['electronics'];
-- ❌ BAD: Array concatenation in loops
-- This would be inefficient in a function/procedure
-- ✅ GOOD: Bulk array operations
UPDATE products SET categories = categories || ARRAY['new_category']
WHERE id IN (SELECT id FROM products WHERE condition);
Revisão de Design de Schema PostgreSQL
-- ❌ BAD: Not using PostgreSQL features
CREATE TABLE users (
id INTEGER,
email VARCHAR(255),
created_at TIMESTAMP
);
-- ✅ GOOD: PostgreSQL-optimized schema
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email CITEXT UNIQUE NOT NULL, -- Case-insensitive email
created_at TIMESTAMPTZ DEFAULT NOW(),
metadata JSONB DEFAULT '{}',
CONSTRAINT valid_email CHECK (email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$')
);
-- Add JSONB GIN index for metadata queries
CREATE INDEX idx_users_metadata ON users USING gin(metadata);
Tipos Personalizados e Domínios
-- ❌ BAD: Using generic types for specific data
CREATE TABLE transactions (
amount DECIMAL(10,2),
currency VARCHAR(3),
status VARCHAR(20)
);
-- ✅ GOOD: PostgreSQL custom types
CREATE TYPE currency_code AS ENUM ('USD', 'EUR', 'GBP', 'JPY');
CREATE TYPE transaction_status AS ENUM ('pending', 'completed', 'failed', 'cancelled');
CREATE DOMAIN positive_amount AS DECIMAL(10,2) CHECK (VALUE > 0);
CREATE TABLE transactions (
amount positive_amount NOT NULL,
currency currency_code NOT NULL,
status transaction_status DEFAULT 'pending'
);
🔍 Anti-Padrões Específicos do PostgreSQL
Anti-Padrões de Performance
- Evitar índices específicos do PostgreSQL: Não usar GIN/GiST para tipos de dados apropriados
- Uso incorreto de JSONB: Tratar JSONB como um campo de texto simples
- Ignorar operadores de array: Usar operações de array ineficientes
- Seleção inadequada da chave de partição: Não aproveitar o particionamento do PostgreSQL de forma eficaz
Problemas de Design de Schema
- Não usar tipos ENUM: Usar VARCHAR para conjuntos de valores limitados
- Ignorar constraints: Falta de constraints CHECK para validação de dados
- Tipos de dados incorretos: Usar VARCHAR em vez de TEXT ou CITEXT
- Estrutura JSONB ausente: JSONB não estruturado sem validação
Problemas de Funções e Triggers
-- ❌ BAD: Inefficient trigger function
CREATE OR REPLACE FUNCTION update_modified_time()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW(); -- Should use TIMESTAMPTZ
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- ✅ GOOD: Optimized trigger function
CREATE OR REPLACE FUNCTION update_modified_time()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Set trigger to fire only when needed
CREATE TRIGGER update_modified_time_trigger
BEFORE UPDATE ON table_name
FOR EACH ROW
WHEN (OLD.* IS DISTINCT FROM NEW.*)
EXECUTE FUNCTION update_modified_time();
📊 Revisão de Uso de Extensões PostgreSQL
Melhores Práticas de Extensões
-- ✅ Check if extension exists before creating
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
CREATE EXTENSION IF NOT EXISTS "pg_trgm";
-- ✅ Use extensions appropriately
-- UUID generation
SELECT uuid_generate_v4();
-- Password hashing
SELECT crypt('password', gen_salt('bf'));
-- Fuzzy text matching
SELECT word_similarity('postgres', 'postgre');
…
Perguntas frequentes
O que são 'anti-padrões'?
Anti-padrões são soluções comuns para problemas que parecem funcionar, mas na verdade causam mais problemas a longo prazo, como lentidão ou dificuldade de manutenção.
O que é JSONB?
JSONB é um tipo de dado no PostgreSQL que armazena dados no formato JSON, mas de uma maneira mais eficiente para consultas e indexação, sendo ideal para dados semiestruturados.
O que é RLS (Row Level Security)?
RLS é um recurso de segurança do PostgreSQL que permite controlar quais linhas de uma tabela um usuário pode ver ou modificar, com base em regras específicas.
Detalhes
Descrição original do autor
PostgreSQL-specific code review assistant focusing on PostgreSQL best practices, anti-patterns, and unique quality standards. Covers JSONB operations, array usage, custom types, schema design, function optimization, and PostgreSQL-exclusive security features like Row Level Security (RLS).
repo: github/awesome-copilot
Popularidade
- Estrelas no GitHub
- 40 mil
- Posição no ranking
- #5274
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
acquire-codebase-knowledge
Ajuda seu agente a entender e documentar um projeto de código existente. É útil para novas pessoas entrarem no projeto ou para ter uma visão geral da arquitetura.
github/awesome-copilot
acreadiness-assess
Faz seu agente avaliar a prontidão de um projeto para IA e gerar um relatório. É útil para entender o quão bem um projeto está preparado para usar ferramentas de IA.
github/awesome-copilot
acreadiness-generate-instructions
Ajuda seu agente a criar instruções para ferramentas de IA baseadas em uma avaliação. É útil para melhorar a forma como a IA interage com o código e fecha lacunas identificadas.
github/awesome-copilot
acreadiness-policy
Faz seu agente ajudar a definir ou aplicar políticas para avaliação de projetos de IA. É útil para padronizar a forma como os projetos são avaliados e garantir conformidade.
github/awesome-copilot
Skills parecidas
api-connector-builder
Faz seu agente construir novas conexões com APIs seguindo o padrão já existente. Use quando precisar adicionar mais uma integração sem criar um novo jeito de fazer.
affaan-m/ECC
api-design
Ajuda seu agente a projetar APIs REST seguindo as melhores práticas. É útil para definir como as APIs se comunicam, como os erros são mostrados e como organizar os dados.
affaan-m/ECC
backend-patterns
Ajuda seu agente com padrões de arquitetura do lado do servidor e otimização de banco de dados. É útil para construir ou revisar o código que roda no servidor.
affaan-m/ECC