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
ncaracteres, 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é
ncaracteres (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 noVARCHAR)
Comparativo final
| Tipo | Validação de tamanho | Preenchimento | Cabeçalho | Tamanho ocupado |
|---|---|---|---|---|
CHAR(n) | Sim | Sim (à direita) | 4 bytes | 4 + n bytes |
VARCHAR(n) | Sim | Não | 1–4 bytes | 1–4 + tamanho do conteúdo |
TEXT | Não | Não | 1–4 bytes | 1–4 + tamanho do conteúdo |
Conclusão
Use
TEXTpor 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.
About author
Você pode gostar também
Migração eficiente de instância MySQL para AWS RDS: Guia passo a passo
O desafio Recentemente recebemos um desafio de migrarmos uma instância MySQL com 1.7TB para a AWS RDS. A migração deveria obedecer os seguintes requisitos: Migrar integralmente todas as databases; A
Acesso a dados SQL Server através do PostgreSQL: um guia prático
Tenho um PostgreSQL e preciso acessar dados que estão no SQL Server! E agora?! Não! Não precisa entrar em pânico! Existe uma solução para isso. Digamos que em um determinado
Soft Skills: As Habilidades Essenciais para o Sucesso na Carreira de TI
Soft Skills: As Habilidades Essenciais para o Sucesso na Carreira de TI Em um mercado de tecnologia em constante evolução, as Soft Skills, ou habilidades interpessoais, se tornaram ferramentas indispensáveis







