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
Entenda o Middleware: A espinha dorsal da conectividade digital
No cenário tecnológico atual, a conectividade é a espinha dorsal que sustenta nossa vida digital. Imagine um ecossistema complexo de aplicativos, serviços e dispositivos, todos operando em conjunto perfeito. Essa
Descubra as vantagens e diferenciais do Banco de Dados NoSQL e MongoDB
NoSQL refere-se a um banco de dados não relacional. Um banco de dados relacional é um formato de banco de dados rigidamente estruturado, baseado em tabelas, como o MySQL ou o Oracle. Os bancos
Cresce demanda por especialistas em banco de dados noSQL: 4Linux lança curso de MongoDB
Big Data e noSQL caminham juntos e com o crescimento de ‘analytics’ nas grandes corporações a busca por profissionais especialista em banco de dados noSQL aumentou na mesma proporção. Além







