Entendendo CHAR, VARCHAR e TEXT no PostgreSQL

Entendendo CHAR, VARCHAR e TEXT no PostgreSQL

Ao modelar tabelas em PostgreSQL, uma das decisões mais comuns (e subestimadas) é a escolha do tipo de dado para armazenar texto. Embora CHAR, VARCHAR e TEXT sirvam ao mesmo propósito — guardar strings — eles possuem diferenças importantes que impactam validação de dados, uso de armazenamento e legibilidade do schema.

Mais do que uma simples escolha de tipo, entender como cada um desses formatos lida com o armazenamento em disco e com o cabeçalho interno (varlena) pode ajudar a construir bancos mais eficientes, robustos e com menos surpresas ao longo do tempo.

Antes de tudo: o que é o cabeçalho (header)?

No PostgreSQL, valores de tamanho variável são armazenados com uma estrutura chamada varlena, que inclui:

  • Um cabeçalho de 1 ou 4 bytes, indicando o tamanho do valor armazenado.

  • O conteúdo da string em si (em bytes).

O cabeçalho tem 1 byte se a string for menor que 126 bytes e não estiver armazenada em TOAST (compressão automática para valores grandes). Caso contrário, ele ocupa 4 bytes.


CHAR(n)

  • Armazena exatamente n caracteres, preenchendo espaços à direita.

  • Armazenamento:

    • Cabeçalho: 4 bytes fixos

    • Dados: n bytes (sempre completos independente da quantidade utilizada)

    • Exemplo: CHAR(10) com valor 'abc' ocupa 4 (header) + 10 = 14 bytes.


VARCHAR(n)

  • Armazena até n caracteres (sem preenchimento).

  • Armazenamento:

    • Cabeçalho: 1 a 4 bytes

    • Dados: somente os bytes da string real

    • Exemplo: 'abc' ocupa 1 (header) + 3 = 4 bytes


TEXT

  • Armazena textos de tamanho variável, sem limite imposto.

  • Internamente idêntico ao VARCHAR, mas sem validação de tamanho.

  • Armazenamento:

    • Cabeçalho: 1 a 4 bytes

    • Dados: número de bytes do conteúdo

    • Exemplo: 'abc'4 bytes totais (como no VARCHAR)


Comparativo final

TipoValidação de tamanhoPreenchimentoCabeçalhoTamanho ocupado
CHAR(n)SimSim (à direita)4 bytes4 + n bytes
VARCHAR(n)SimNão1–4 bytes1–4 + tamanho do conteúdo
TEXTNãoNão1–4 bytes1–4 + tamanho do conteúdo

Conclusão

  • Use TEXT por padrão: simples, eficiente e flexível.

  • Use VARCHAR(n) apenas quando precisar limitar o tamanho por regra de negócio.

  • Evite CHAR(n) a menos que o preenchimento fixo seja necessário.

Consulte a documentação oficial do PostgreSQL:

PostgreSQL Docs – Character Types

Quer conhecer mais sobre o PostgreSQL fazendo o melhor curso ?

Conheça o curso Administração PostgreSQL com Alta Disponibilidade da 4Linux.

Anterior IA para maiores - Estamos entrando na Era da Experiência
Próxima Atualização Proxmox VE 8 para 9: tudo o que você precisa saber

About author

Almeida Robson
Almeida Robson 4 posts

Administrador de Bancos de Dados com foco em PostgreSQL, Pai, amante da música, games e tecnologia.

View all posts by this author →

Você pode gostar também