Skip to content

Tipos de dados PostgreSQL explicados

Todos os tipos de coluna PostgreSQL comuns, agrupados por família: números inteiros, decimais, texto, data e hora, booleanos e UUIDs, JSON, endereços de rede, tipos compostos e tipos de extensão. Cada linha mostra o que o tipo armazena e quando o escolher.

O PostgreSQL tem dezenas de tipos, mas o desenho diário de esquemas usa um núcleo. As escolhas recorrentes são: integer ou numeric para números, varchar ou text para cadeias (text serve na maioria dos casos), timestamp ou timestamptz (prefira timestamptz para qualquer momento real) e json ou jsonb (prefira jsonb, é binário e indexável). Escolha o tipo mais específico que ainda sirva; a base de dados impõe-no por si.

Tabela de referência · 46 entradas
46 of 46 rows
Números inteiros
Inteiro de 2 bytes de -32768 a 32767.Raro; apenas quando precisa de poupar espaço.
Inteiro de 4 bytes, cerca de mais/menos 2 mil milhões.A coluna predefinida para números inteiros.
Inteiro de 8 bytes, até cerca de ±9,2 × 10^18.Contagens muito grandes ou IDs externos.
Inteiro de 4 bytes com incremento automático.Chaves numeradas automaticamente legadas; desde o PG 10, GENERATED AS IDENTITY é a substituição recomendada.
As variantes de 2 e 8 bytes do serial.Numeração automática ajustada a uma coluna smallint ou bigint.
Um inteiro que a tabela gera por si (GENERATED ALWAYS AS IDENTITY).O serial moderno; padrão SQL e mais seguro contra inserções manuais.
Decimais e vírgula flutuante
Decimais exatos de precisão arbitrária.Dinheiro e tudo onde erros de arredondamento são inaceitáveis.
Vírgula flutuante de precisão simples, 4 bytes.Valores científicos aproximados onde a precisão não é crítica.
Vírgula flutuante de precisão dupla, 8 bytes.Geoespacial, estatística e valores de features de ML.
Um montante monetário com uma região fixa.Raro; numeric com um código de moeda na aplicação é mais portável.
Texto
Texto de comprimento fixo, preenchido com espaços.Códigos de largura conhecida; raramente necessário.
Texto de comprimento variável com limite opcional.Cadeias limitadas como nomes de utilizador ou emails.
Texto de comprimento variável sem limite.A coluna de cadeias para tudo; sem penalização de desempenho face ao varchar.
Data e hora
Uma data de calendário sem hora do dia.Aniversários e prazos.
Uma hora do dia, com ou sem fuso horário.Alarmes diários ou horários de loja.
Data e hora sem fuso horário.Esquemas legados; evite em trabalho novo.
Data e hora guardada em UTC, mostrada no fuso do cliente.A predefinição para qualquer momento real; prefira-a ao timestamp.
Um intervalo de tempo, como 2 dias ou 3 horas.Durações e aritmética de datas.
Booleano, UUID e bytes
Verdadeiro ou falso.Sinalizadores e opções.
Um identificador universal único de 128 bits.IDs não sequenciais seguros de expor (gere na aplicação ou com gen_random_uuid).
Bytes binários brutos.Blobs, imagens e payloads opacos; prefira armazenamento de objetos para ficheiros grandes.
Cadeias de bits de comprimento fixo ou variável.Sinalizadores empacotados e campos de protocolo; um único valor ligado/desligado continua a ser boolean.
JSON e semiestruturado
JSON analisado numa forma binária e indexável.Dados flexíveis ou aninhados; a coluna JSON recomendada (suporta índices GIN).
JSON mantido como o texto original.Raro; apenas quando deve preservar a ordem de chaves ou o espaço exato.
Texto XML.Integrações legadas que exigem XML.
Uma expressão de caminho compilada para navegar dados JSON.Filtragem dentro de jsonb com jsonb_path_query e os operadores SQL/JSON.
Rede e pesquisa
Um endereço IPv4 ou IPv6.Guardar IPs de clientes ou servidores.
Um bloco de rede IP, como 10.0.0.0/24.Regras de firewall e intervalos de sub-rede.
Um endereço MAC de 6 bytes ou 8 bytes (EUI-64).Identificadores de dispositivos e interfaces de rede.
Texto pré-processado para pesquisa integral.A pesquisa integrada do Postgres antes de recorrer a um motor externo.
Termos de pesquisa combinados com operadores AND, OR e prefixo.A metade de consulta da pesquisa integral, comparada a um tsvector com @@.
Uma posição no write-ahead log, o número de sequência do registo.Atraso de replicação e monitorização de cópias de segurança.
Composto e avançado
Uma matriz de qualquer tipo base, p. ex. integer[].Listas de valores simples; use uma tabela filha quando os itens precisam das suas próprias colunas.
Um valor de uma lista fixa que define.Campos de estado com um conjunto estável de opções.
Um tipo de linha personalizado com vários campos.Grupos de campos repetidos partilhados entre tabelas.
Um intervalo contíguo entre dois limites.Horários, faixas de preço e períodos de versões, com operadores de sobreposição.
Um tipo base com restrições que define.Regras reutilizáveis como um email não vazio, impostas em cada coluna que o usa.
Uma linha sem nome de valores tipados.Devoluções de funções PL/pgSQL e resultados intermédios de consultas.
Valores geométricos bidimensionais integrados.Geometria plana simples; localizações reais precisam de PostGIS.
Um identificador de objeto de sistema de 4 bytes sem sinal.Juntar catálogos de sistema; não para colunas de aplicação.
Uma cadeia interna de identificação de 63 caracteres.Consultas a catálogos; text normal para tudo voltado ao utilizador.
Tipos de extensão
Pares chave/valor de cadeias num único valor (extensão).Mapas planos; o jsonb cobre isto melhor hoje.
Um caminho de etiquetas hierárquico como news.tech.ai (extensão).Árvores com consultas de ancestrais e descendentes.
Texto que compara sem distinguir maiúsculas (extensão).Unicidade insensível a maiúsculas como emails, sem índice lower().
Objetos geográficos e geométricos da extensão PostGIS.Consultas de distância, contenção e índice espacial.
Funções de extensão que geram valores UUID.Geração legada; desde o PG 13, gen_random_uuid() é integrado.