По принцип не ест недостатък на използването на text по отношение на производителност/памет. Напротив:text е оптималното. Други видове имат повече или по-малко подходящи недостатъци. text е буквално „предпочитаният“ тип сред типовете низове в системата тип Postgres, което може да повлияе на разделителната способност на функция или тип оператор.
По-специално, никога използвайте (псевдоним за char(n) ), освен ако не знаете какво правите. character(n)). char или character са просто съкратени от character(1) , така че все едно. Вътрешното име е bpchar (означава "черно-подплатен знак"). Типът е там само за съвместимост със стария код и стандарти. В днешно време има много малко смисъл, губи памет и е вероятно да причини проблеми:
- Сравнете varchar с char
- Дължина на полето на низ в Postgres SQL
Можете да използвате varchar(n) с модификатор на дължина (псевдоним за character varying(n) ). Но обикновено показва недоразумение, пренесено от други RDBMS, където може да е локален оптимум за производителност. В Postgres, модификаторът на дължина varchar(255) (255) няма специално значение и рядко има смисъл.
- Трябва ли да добавя ограничение за произволна дължина към колоните VARCHAR?
По-старите версии причиниха различни проблеми при опит за промяна на модификатора на дължина на varchar(n) по късно. Повечето от тях са облекчени в съвременния Postgres, но text или varchar (псевдоним за character varying ) без спецификатор на дължина (и CHECK ограничение) никога не е имал нито един от тези проблеми.
A CHECK ограничението е също толкова бързо и по-малко вероятно да причини проблеми със зависими изгледи, функции, FK ограничения и т.н., които зависят от типа на колоната. И може да направи повече от просто да наложи максимална дължина на символа - всичко, което можете да поставите в булев израз. Вижте:
- Промяна на колоните на PostgreSQL, използвани в изгледите
И накрая, има и "char" (с двойни кавички):1-байтов тип данни за една ASCII буква, използвана като евтин вътрешен тип изброяване.
Рядко използвам нещо друго освен text за символни данни в Postgres.