Tipos Numéricos e de Texto
numérico vs float, texto vs varchar, noções básicas de collation. Padrões práticos de PostgreSQL para consultas de produção.
Receita
SELECT 0.1::float8 + 0.2::float8 AS float_sum,
0.1::numeric + 0.2::numeric AS numeric_sum;
SELECT 'café' COLLATE "en_US" < 'cafe' COLLATE "en_US";Quando usar este padrão: Este padrão aparece em SQL de aplicação ou de relatórios que você mantém.
Exemplo de Trabalho
CREATE TABLE app.products (
sku text NOT NULL PRIMARY KEY,
price numeric(10,2) NOT NULL,
description text NOT NULL
);O que isso demonstra:
- SQL executável contra esquemas de exemplo
- Sintaxe idiomática de PostgreSQL
- Padrões seguros para revisão com EXPLAIN
Mergulho Profundo
Como Funciona
- O PostgreSQL analisa o SQL em uma árvore de consulta.
- O planejador estima os custos usando estatísticas.
- O executor retorna linhas para o protocolo do cliente.
Notas
- Prefira SQL legível; otimizadores reescrevem internamente.
- Teste com contagens de linhas semelhantes à produção.
Armadilhas
- SELECT * em aplicativos - Novas colunas quebram serializadores. Correção: Liste as colunas explicitamente.
- Comparações NULL - = NULL é sempre desconhecido. Correção: Use IS NULL ou IS DISTINCT FROM.
- Conversões implícitas - Scans sequenciais inesperados em tipos incompatíveis. Correção: Combine os tipos do predicado com os tipos da coluna.
- Consultas ilimitadas - Falta de LIMIT em tabelas grandes. Correção: Paginar ou agregar intencionalmente.
- Estatísticas desatualizadas - Planos ruins após carga em massa. Correção: Execute ANALYZE nas tabelas afetadas.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Construtor de consultas ORM | A equipe padroniza em uma única stack | SQL complexo se torna opaco |
| View materializada | Agregados caros repetidos | Necessita de estratégia de atualização |
| Réplica de Data Warehouse | Scans pesados de BI | Não para latência OLTP |
FAQs
Devo formatar SQL em strings de aplicativo?
Use strings de template multilinhas ou arquivos SQL; faça lint em CI.
Quando DISTINCT é suficiente?
Quando você precisa de linhas únicas sem agregações.
ORDER BY prejudica índices?
A ordenação pode usar a ordem do índice se a consulta corresponder às colunas do índice.
Relacionado
- Noções Básicas de Tipos de Dados - visão geral
Versões da Stack: Esta página foi escrita para PostgreSQL 18.4 (estável 18, manutenção 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x e PostGIS 3.5+.