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

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

https://github.com/github/awesome-copilot/blob/main/skills/postgresql-code-review/SKILL.md

Mensagem pronta para colar

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

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/github/awesome-copilot/main/skills/postgresql-code-review/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.

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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas