Tipos de dados do PostgreSQL: Caractere | Numérico | Binário | boleano

O PostgreSQL oferece um rico conjunto de tipos de dados nativos para os usuários. Os usuários podem adicionar novos tipos com a ajuda do comando CREATE TYPE. Também torna as consultas mais simples e legíveis.

Tipos de dados em PostgreSQL

PostgreSQL suporta os seguintes tipos de dados:

  • Tipos de Texto
  • Tipos Numéricos
  • Datas e horas
  • XML
  • JSON
  • boleano
  • Bits
  • Dados binários
  • Rede
  • Arrays
  • Crie seu tipo de dados
  • boleano
  • Temporário
  • UUID
  • Variedade
  • JSON
  • Tipos de dados especiais para armazenar um endereço de rede e dados geométricos.

Vamos estudar os tipos de dados PostgreSQL em detalhes

Tipos de dados de caracteres

PostgreSQL suporta tipos de dados de caracteres para armazenar valores de texto. O PostgreSQL cria tipos de dados de caracteres a partir das mesmas estruturas internas. O PostgreSQL oferece três tipos de dados de caracteres: CHAR (n), VARCHAR (n) e TEXT.

NomeDescrição
varchar (n)Permite que você declare comprimento variável com um limite
Char (n)Comprimento fixo, preenchido em branco
TextoUse pode usar este tipo de dados para declarar uma variável com comprimento ilimitado

Tipos de dados numéricos

PostgreSQL suporta dois tipos distintos de números:

  • Inteiros
  • Números de ponto flutuante
NomeTamanho da lojaFaixa
smallint2 bytes-32768 a +32767
inteiro4 bytes-2147483648 a +2147483647
bigint8 bytes-9223372036854775808 a 9223372036854775807
decimalvariávelSe você o declarou como decimal, o tipo de dados varia de 131072 dígitos antes da vírgula até 16383 dígitos depois da vírgula
numéricovariávelSe você declará-lo como o número, poderá incluir um número de até 131072 dígitos antes da vírgula decimal e 16383 dígitos depois da vírgula
real4 bytesPrecisão de 6 dígitos decimais
Duplo8 bytesPrecisão de 15 dígitos decimais

Tipos de dados binários

Uma string binária é uma sequência de octetos ou bytes. Os tipos de dados binários do Postgres são divididos de duas maneiras.

  • Strings binários permitem o armazenamento de probabilidades de valor zero
  • Bytes não imprimíveis

As cadeias de caracteres não permitem zero octetos e também proíbem quaisquer outros valores de octetos e sequências que sejam inválidos de acordo com as regras de codificação do conjunto de caracteres do banco de dados.

NomeTamanho de armazenamentoDescrição
Byte1 a 4 bytes mais o tamanho da string bináriaString binária de comprimento variável

Tipo de endereço de rede

Muitos aplicativos armazenam informações de rede, como endereço IP de usuários ou

sensores. O PostgreSQL possui três tipos nativos que ajudam a otimizar os dados da rede.

NomeTamanhoDescrição
cidra7 ou 19 tchauRedes IPV4 e IPv6
Inet7 ou 19 bytesHost e redes IPV4 e IPV5
macaddr6 bytesEndereços MAC

O uso de tipos de endereço de rede tem as seguintes vantagens

  1. Economia de espaço de armazenamento
  2. Verificação de erro de entrada
  3. Funções como pesquisar dados por sub-rede

Tipo de pesquisa de texto

O PostgreSQL fornece dois tipos de dados que são projetados para suportar pesquisa de texto completo. A pesquisa de texto completo é pesquisar em uma coleção de documentos em linguagem natural para pesquisar aqueles que melhor correspondem a uma consulta.

  • Pesquisa de texto Tsvector Os tipos de variáveis ​​do PostgreSQL representam um documento em um formato otimizado para pesquisa de texto
  • A pesquisa de texto do tipo de consulta armazena as palavras-chave que precisam ser pesquisadas

Tipos de dados de data / hora

O carimbo de data / hora PostgreSQL oferece precisão de microssegundos em vez de precisão de segundos. Além disso, você também tem a opção de armazenar com fuso horário ou sem. O PostgreSQL converterá o carimbo de data / hora com fuso horário em UTC na entrada e o armazenará.

A entrada de data e hora é aceita em vários formatos, incluindo Postgres tradicional, ISO 8601. Compatível com SQL etc.

PostgreSQL suporta ordenação por Dia / Mês / Ano. Os formatos suportados são DMY, MDY, YMD

Tipos de dados temporais

NomeTamanhoFaixaResolução
Timestamp sem fuso horário8 bytes4713 AC a 294276 DC1 microssegundo / 14 dígitos
Timestamp com fuso horário8 bytes4713 AC a 294276 DC1 microssegundo / 14 dígitos
encontro4 bytes4713 AC a 294276 DCUm dia
Tempo sem fuso horário8 bytes00:00:00 às 24:00:001 microssegundo / 14 dígitos
Tempo com fuso horário12 bytes00:00:00 + 1459 a 24: 00: 00-14591 microssegundo / 14 dígitos
Intervalo12 bytes-178000000 a 178000000 anos1 microssegundo / 14 dígitos

Exemplos:

EntradaDescrição
2025-09-07ISO 8601, 7 de setembro com qualquer estilo de data (formato recomendado)
7 de setembro de 20257 de setembro com qualquer estilo de data
09/07/20257 de setembro com MDY, 9 de julho com DMY
09/07/257 de setembro de 2025, com MDY
2025-set-77 de setembro com qualquer estilo de data
07/09/20187 de setembro com qualquer estilo de data
7 de setembro de 257 de setembro de 2025, com YMD
20250907ISO 8601,7 Set 20225 em qualquer modo
2.025.250ano e dia do ano, neste caso, 7 de setembro de 2025
J25250Data juliana

Hora / hora com entrada de fuso horário

EntradaDescrição
11: 19: 38.507 11:19:38 11:19 111938ISO 8601
11h19Igual a 11:19
23h19igual a 23:19
23: 19-3 23: 19-03: 00 231900-03ISO 8601, igual a 23:19 EST
23:19 ESTfuso horário especificado como EST, o mesmo que 23:19 EST

Tipo Booleano

Um tipo de dados booleano pode conter

  • Verdade
  • Falso
  • nulo

valores.

Você usa um bool ou boleano palavra-chave para declarar uma coluna com o tipo de dados booleano.

Quando você insere valores em uma coluna booleana, o Postgre converte valores como

  • sim
  • e
  • 1
  • t
  • verdade

em 1.

Enquanto valores como

  • Não
  • N
  • 0
  • F
  • Falso

são convertidos para 0

Ao selecionar os dados, os valores são novamente convertidos para sim, verdadeiro, y, etc.

Tipos de dados geométricos

Os tipos de dados geométricos representam objetos espaciais bidimensionais. Eles ajudam a realizar operações como rotações, dimensionamento, tradução, etc.

NomeTamanho de ArmazenamentoRepresentaçãoDescrição
Apontar16 bytesAponte em um avião(x, y)
Linha32 bytesLinha infinita((xl.yl). (x2.y2))
Lseg32 bytesSegmento de linha finita((xl.yl). (x2.y2))
Caixa32 bytesCaixa Retangular((xl.yl). (x2.y2))
Caminho16n + 16n bytesFechar e abrir caminho((xl.yl), ...)
Polígono40 + 16n bytesPolígono[(xl.yl) ....]
Círculo24 bytesCírculo(ponto central e raio)

Tipos Enumerados

O tipo de dados PostgreSQL enumerado é útil para representar informações que raramente mudam, como código de país ou ID de filial. O tipo de dados Enumerados é representado em uma tabela com chaves estrangeiras para garantir a integridade dos dados.

Exemplo:

A cor do cabelo é bastante estática em um banco de dados demográfico

CREATE TYPE hair_color AS ENUM ('brown','black','red','grey','blond')

Tipo de intervalo

Muitos aplicativos de negócios requerem dados em intervalos. Normalmente, duas colunas (exemplo: data de início, data de término) são definidas para lidar com intervalos. Isso é ineficiente e difícil de manter.

Postgre construiu tipos de intervalo como segue

  • int4range - intervalo de exibição de inteiro
  • int8range - Faixa de exibição de bigint
  • numrange - mostra o intervalo numérico
  • tstrange - Ajuda a exibir carimbo de data / hora sem fuso horário
  • estranho - permite exibir carimbo de data / hora com fuso horário
  • intervalo de datas - intervalo de datas

Tipo UUID

Identifica universalmente única (UUID) é uma quantidade de 128 bits que é gerada por um algoritmo. É muito improvável que o mesmo identificador seja gerado por outra pessoa no mundo usando o mesmo algoritmo. É por isso que, para os sistemas distribuídos, esses identificadores são a escolha ideal, pois oferecem exclusividade em um único banco de dados. Um UUID é escrito como um grupo de dígitos hexadecimais minúsculos, com vários grupos separados por hifens.

PostgreSQL tem um tipo de dados UUID nativo que consome 16 bytes de armazenamento. UUID é um tipo de dados ideal para chaves primárias.

Exemplo:

d5f28c97-b962-43be-9cf8-ca1632182e8e

Postgre também aceita formas alternativas de entradas UUID como todas as maiúsculas, sem hifens, colchetes, etc.

Tipo XML

PostgreSQL permite armazenar dados XML em um tipo de dados, mas nada mais é do que uma extensão para um tipo de dados de texto. Mas a vantagem é que ele verifica se o XML de entrada está bem formado.

Exemplo:

XMLPARSE (DOCUMENT 'Data Type...')

Tipo JSON

Para armazenar dados JSON, o PostgreSQL oferece 2 tipos de dados

  1. JSON
  2. JSONB
jsonJsonb
Uma extensão simples de um tipo de dados de texto com validação JSONUma representação binária dos dados JSON
A inserção é rápida, mas a recuperação de dados é relativamente lenta.A inserção é lenta, mas selecione (a recuperação de dados é rápida)
Salva os dados inseridos exatamente como estão, incluindo os espaços em branco.Suporta indexação. Pode otimizar o espaço em branco para tornar a recuperação mais rápida.
Reprocessamento na recuperação de dadosNenhum reprocessamento necessário na recuperação de dados

O tipo de dados JSON mais amplamente usado nos usa jsonb, a menos que haja alguma necessidade especializada de usar o tipo de dados JSON.

Exemplo:

 CREATE TABLE employee ( id integer NOT NULL, age integer NOT NULL, data jsonb ); 
INSERT INTO employee VALUES (1, 35, '{'name': 'Tom Price', 'tags': ['Motivated', 'SelfLearner'], 'onboareded': true}'); 

Pseudotipos

O PostgreSQL possui muitas entradas de propósito especial chamadas de pseudo-tipos. Você não pode usar pseudo-tipos como tipos de coluna do PostgreSQL. Eles são usados ​​para declarar o argumento ou o tipo de retorno da função.

Cada um dos pseudotipos disponíveis é útil em situações em que os documentos de comportamento de uma função não correspondem a simplesmente obter ou retornar um valor de um tipo de dados SQL específico.

NomeDescrição
AlgumA função aceita todos os tipos de dados de entrada.
Uma matrizA função aceita qualquer tipo de dado array.
Qualquer elementoA função aceita qualquer tipo de dados.
Qualquer enumA função aceita qualquer tipo de dados enum.
NonarrayA função aceita qualquer tipo de dados não array.
CstringA função aceita ou retorna string C terminada em nulo.
internoA função interna aceita ou retorna o tipo de dados interno do servidor.
Language_handlerEle é declarado para retornar o manipulador de linguagem.
RegistroEncontre uma função que retorne um tipo de linha não especificado.
DesencadearUma função de gatilho é usada para retornar o gatilho.

É importante que o usuário que está usando esta função tenha certeza de que a função terá um comportamento seguro quando um pseudo-tipo for usado como tipo de argumento.

Melhores práticas usando tipos de dados

  • Use o tipo de dados 'texto' a menos que você queira limitar a entrada
  • Nunca use 'char'.
  • Inteiros usam 'int.' Use bigint apenas quando você tiver números realmente grandes
  • Use 'numérico' quase sempre
  • Use float no PostgreSQL se você tiver a fonte de dados IEEE 754

Resumo

  • PostgreSQL oferece um rico conjunto de tipos de dados nativos para usuários
  • PostgreSQL suporta tipos de dados de caracteres para armazenar valores de texto
  • O PostgreSQL suporta dois tipos distintos de números: 1. Inteiros, 2. Números de ponto flutuante
  • Uma string binária é uma sequência de bytes ou octetos
  • PostgreSQL tem tipo de endereço de rede para ajudá-lo a otimizar o armazenamento de dados de rede
  • Pesquisa de texto As estruturas de dados do PostgreSQL são projetadas para suportar pesquisa de texto completo
  • Os tipos de dados PSQL de data / hora permitem informações de data e hora em vários formatos
  • Os tipos de campo Boolean Postgres podem conter três valores 1. Verdadeiro 2. Falso 3. Nulo
  • Os tipos de dados geométricos do PostgreSQL representam objetos espaciais bidimensionais
  • Os tipos de dados enumerados no PostgreSQL são úteis para representar informações que raramente mudam, como código de país ou ID de filial
  • Identifica universalmente única (UUID) é uma quantidade de 128 bits que é gerada por um algoritmo
  • PostgreSQL tem muitas entradas de propósito especial que são chamadas de pseudo-tipos
  • É uma prática recomendada usar o tipo de dados 'texto' a menos que você queira limitar a entrada