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 (alias pour char(n)
), sauf si vous savez ce que vous faites. character(n)
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 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 varchar(255)
(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.