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
Descubra o TimescaleDB: O banco de dados SQL para séries temporais
Hoje vamos falar um pouco sobre o TimescaleDB … Mas afinal, o que seria esse tal de TimescaleDB? Respondendo a pergunta acima, TimescaleDB (TSDB) é um banco de dados de
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
Descubra as vantagens e como utilizar o banco de dados NoSQL MongoDB
Caros leitores, hoje vamos tratar de um assunto que anda muito na moda ultimamente. Os bancos de dados conhecidos como não relacionais, ou NoSQL. Longe das brigas com relação à







