PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Alguma desvantagem de usar texto de tipo de dados para armazenar strings?


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) (alias para character(n) ), a menos que você saiba o que está fazendo. 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) normalmente indica um mal-entendido transportado de outro RDBMS onde pode ser um ótimo local para desempenho. No Postgres, o modificador de comprimento (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.