Geralmente, não há não desvantagem de usar
text
em termos de desempenho/memória. Ao contrário:text
é o ideal. Outros tipos têm desvantagens mais ou menos relevantes. text
é literalmente o tipo "preferido" entre os tipos de string no sistema de tipos Postgres, o que pode afetar a resolução do tipo de função ou operador. Em particular, nunca use
char(n)
character(n)
char
ou character
são abreviações de character(1)
, então tudo igual. O nome interno é bpchar
(significa "caractere preenchido em branco"). O tipo existe apenas para compatibilidade com códigos e padrões antigos. Faz muito pouco sentido hoje em dia, desperdiça memória e provavelmente causará problemas:- Compare varchar com char
- Tamanho do campo de string no Postgres SQL
Você pode usar
varchar(n)
com modificador de comprimento (alias para character varying(n)
). Mas varchar(255)
(255)
não tem significado especial e raramente faz sentido. - Devo adicionar um limite de comprimento arbitrário às colunas VARCHAR?
Versões mais antigas causavam vários problemas ao tentar alterar o modificador de comprimento de
varchar(n)
mais tarde. A maioria deles foi aliviada no Postgres moderno, mas text
ou varchar
(alias para character varying
) sem especificador de comprimento (e um CHECK
restrição) nunca teve nenhum desses problemas. Um
CHECK
restrição é tão rápida e menos provável de causar problemas com visualizações, funções, restrições FK etc. dependentes que dependem do tipo de coluna. E ele pode fazer mais do que apenas impor um comprimento máximo de caractere - qualquer coisa que você possa colocar em uma expressão booleana. Ver:- Alterar as colunas do PostgreSQL usadas nas visualizações
Finalmente, há também
"char"
(com aspas duplas):um tipo de dados de 1 byte para uma única letra ASCII usada como tipo de enumeração interna barata. Eu raramente uso algo além de
text
para dados de caracteres no Postgres.