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
PGCONF: Maior Conferência de PostgreSQL do Brasil em São Paulo
PGCONF acontecerá nos dis 2 e 3 de agosto em São Paulo e terá a presença de vários palestrantes de renome. São Paulo será mais uma vez o palco da
O ‘Elefante’ faz aniversário.
No dia 8 de julho de 2024, o PostgreSQL comemora informalmente 28 anos de vida. O evento que serviu de base para a escolha desta data foi que em 8
PostgreSQL em Kubernetes: funciona?
Bom, se tem uma coisa pela qual eu sempre torci o nariz é a utilização de bancos de dados relacionais sem soluções de microserviços. Quem conhece um pouco sabe que







