PostgreSQL: Tipos de Dados

O PostgreSQL, carinhosamente chamado de postgres, é um dos SGBDs (Sistemas Gerenciadores de Banco de Dados) mais famosos hoje em dia, sendo o SGBD open source mais querido pelos programadores atualmente (segundo minha experiência).

Nesse artigo busco apresentar os tipos de dados mais comuns suportados pelo postgres como ferramenta de consulta rápida e direta para outros desenvolvedores. Sem mais delongas, vamos ao conteúdo

Tipos de Dados

Numéricos

Inclui desde inteiros até números de ponto flutuante

  • smallint: armazena valores inteiros com sinal, ocupando 2 bytes de tamanho
  • integer: armazena valores inteiros com sinal, ocupando 4 bytes de tamanho
  • bigint: armazena valores inteiros com sinal, ocupando 8 bytes de tamanho
  • decimal: armazena valores com muitos dígitos. Geralmente usado para armazenar valores financeiros. O desenvolvedor pode especificar a precisão e a escala para esse tipo
  • numeric: um apelido para o tipo de dados decimal
  • real: armazena valores de ponto flutuante com 4 bytes e precisão de 6 dígitos decimais
  • double precision: armazena valores de ponto flutuante com 8 bytes e precisão de 15 dígitos decimais

Caractere

Usados para lidar com alfanumérico e com textos

  • char(n) : armazena strings de tamanho fixo com um tamanho n específico
  • varchar(n) : armazena strings de tamanho variável com com um tamanho n máximo
  • text : armazena strings de tamanho variável sem tamanho máximo

Binários

Inclui basicamente o tipo de dados Byte

  • bytea : armazena uma string de binários com tamanho variável, sem tamanho máximo

Data e Tempo

Diversas formas para lidar com datas e tempo

  • date : armazena datas sem informação de time zone (YYYY-MM-DD)
  • time : armazena valores de tempo sem informação de time zone (HH:MM:SS)
  • timestamp : armazena valores de tempo e de data sem informações de time zone
  • timestamptz : armazena valores de tempo e de data com informação de time zone
  • interval : um intervalo de tempo, como a diferença de dois timestamps

Booleano

Um tipo de dados para lidar com verdadeiro e falso

  • boolean

Enumerado

Criação de tipos de dados customizados, que consistem de um conjunto de valores ordenado e estático

  • CREATE TYPE AS ENUM

Exemplo:

CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');

Dados Geométricos e de Rede

  • point, line, lseg, box, polygon, path, circle: armazena pontos, linhas e várias outras formas
  • inet, cidr: armazena endereços IP e subredes

Conclusão

Com esse guia você tem uma referência inicial para conhecer os principais tipos de dados suportados pelo postgres, podendo seguir seus estudos a partir daqui dependendo da sua necessidade.

Esse artigo é um guia rápido para se orientar quando precisar achar um tipo de dados específico;.

Dúvidas, sugestões e correções de conteúdo são sempre muito bem vindas. Espero que você tenha gostado do conteúdo. Espero te ver no meu próximo artigo. Até lá!

Complementado:

Dois tipos de dados notáveis no PostgreSQL são JSON e JSONB, que são usados para armazenar dados não estruturados. O tipo de dado JSON é usado para armazenar dados no formato JSON, este tipo mantém a ordem exata dos dados a formatação original. O JSONB armazena dados em um formato binário. Isso significa que os dados são mais eficientemente parseados e acessados, mas a ordem dos elementos e espaços em bracos não é preservada. A grande vantagem do JSONB é a sua capacidade de ser indexado e de realizar consultas e manipulações diretamente nos campos do JSON.

Outro tipo extremamente poderoso e único do Postgres, é o range, que é eficaz em armazenar e gerenciar intervalos, de uma maneira que reduz a complexidade e melhora a eficiência. Por exemplo, os tipos numrange para intervalos de números decimais é muito útil para lidar com faixas de preços. O tsrange para intervalos de timestamps é particularmente útil em cenários como agendamentos. Uma das principais vantagens dos tipos de dado range é a capacidade de utilização de índices GiST, que melhoram significativamente a performance em consultas complexas que envolvem a sobreposição ou comparação de intervalos.

Assim como o JSON/JSONB transformou o PostgreSQL em uma opção viável para bancos de dados de documentos, oferecendo a flexibilidade dos dados não estruturados com as garantias e funcionalidades do modelo relacional, os tipos de dado range estendem ainda mais sua versatilidade e poder, realçando o motivo do PostgreSQL ser o banco de dados open-source mais avançado do mundo!

o SGBD open source mais querido pelos programadores atualmente

tem fonte disso?

É possível criar seus próprios tipos.

Espero ter ajudado.


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

Pior que na verdade não, falei com base em experiência. Vou deixar isso mais claro no texto. Quanto a criação de seus próprios tipos, isso está escrito na sessão "Enumerado" Obrigado pelo comentário.

Um detalhe importante sobre sua descrição dos tipos numéricos, por exemplo o integer, é que ele não armazena "até 4 bytes de tamanho".

Independente do valor, ele sempre vai acomodar o integer em 4 bytes. Ou seja, mesmo que seja o número zero, um espaço de 4 bytes sempre será usado.

Uma descrição mais precisa seria:

integer: armazena valores inteiros com sinal com 4 bytes de tamanho, cujos valores variam de -2147483648 até +2147483647.

Eu peguei o integer como exemplo, mas esta observação vale para os outros tipos numéricos que vc descreveu.

                                                           |
Muito obrigado pelo comentário, amigo. Na verdade, minha ideia era dizer que o tamanho máximo que um número pode assumir com esse tipo é o tamanho que 4 bytes consegue armazenar, mas eu entendi que ficou ambíguo. Vou corrigir.

Para armazenar um campo de valor (Dinheiro), o interessante seria usar decimal então ?

Na verdade, já vi discussões aconselhando usar inteiro. Para fazer isso, você só armazena os dados em centavos. Por exemplo: Ao invés de armazenar 5 reais e 60 centavos, você armazena 560 centavos. Na hora de apresentar para o usuário, no front end adiciona uma vírgula. Assim, temos muito menos riscos de problemas na hora de conversões ou contas matemáticas.