PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Y a-t-il des inconvénients à utiliser du texte de type de données pour stocker des chaînes ?

Généralement, il n'y a non inconvénient de l'utilisation de text en termes de performances/mémoire. Au contraire :text est l'optimum. D'autres types ont des inconvénients plus ou moins pertinents. text est littéralement le type "préféré" parmi les types de chaîne dans le système de type Postgres, ce qui peut affecter la résolution du type de fonction ou d'opérateur.

En particulier, jamais utilisez char(n) (alias pour character(n) ), sauf si vous savez ce que vous faites. char ou char sont simplement l'abréviation de character(1) , donc tout de même. Le nom interne est bpchar (représente "caractère rempli de blanc"). Le type n'est là que pour la compatibilité avec l'ancien code et les normes. Cela n'a plus beaucoup de sens de nos jours, gaspille de la mémoire et est susceptible de causer des problèmes :

  • Comparer varchar avec char
  • Longueur du champ de chaîne dans Postgres SQL

Vous pouvez utiliser varchar(n) avec modificateur de longueur (alias pour character varying(n) ). Mais varchar(255) indique généralement un malentendu transmis par d'autres RDBMS où il pourrait s'agir d'un optimum local pour les performances. Dans Postgres, le modificateur de longueur (255) n'a pas de signification particulière et a rarement un sens.

  • Dois-je ajouter une limite de longueur arbitraire aux colonnes VARCHAR ?

Les anciennes versions provoquaient divers problèmes lors de la tentative de modification du modificateur de longueur de varchar(n) plus tard. La plupart d'entre eux ont été atténués dans Postgres moderne, mais text ou varchar (alias pour character varying ) sans spécificateur de longueur (et un CHECK contrainte à la place) n'a jamais eu aucun de ces problèmes.

Un CHECK La contrainte est tout aussi rapide et moins susceptible de causer des problèmes avec les vues, les fonctions, les contraintes FK, etc. qui dépendent du type de colonne. Et il peut faire plus que simplement imposer une longueur maximale de caractères - tout ce que vous pouvez mettre dans une expression booléenne. Voir :

  • Modifier les colonnes PostgreSQL utilisées dans les vues

Enfin, il y a aussi "char" (avec guillemets doubles) :un type de données de 1 octet pour une seule lettre ASCII utilisée comme type d'énumération interne bon marché.

J'utilise rarement autre chose que text pour les données de caractères dans Postgres.