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
Entrevista com Flavio Gurgel: Especialista discute sobre PostgreSQL
A 4Linux conversou sobre o PostgreSQL com Flavio Gurgel, entusiasta do software livre e especialista em banco de dados há quase 20 anos. Gurgel, atualmente, presta consultoria, suporte e treinamento
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 à
Configurando Alta Disponibilidade com MySQL InnoDB Cluster e MySQL Router
Alta disponibilidade é um recurso que os bancos de dados — sejam eles relacionais ou não (NoSQL) — devem possuir para serem respeitados no mercado. A topologia master-slave já é







