Generalnie nie ma nie minusem używania text pod względem wydajności/pamięci. Wręcz przeciwnie:text jest optymalny. Inne typy mają mniej lub bardziej istotne wady. text jest dosłownie "preferowanym" typem wśród typów łańcuchowych w systemie typów Postgres, co może wpływać na rozdzielczość funkcji lub typu operatora.
W szczególności nigdy użyj (alias dla char(n) ), chyba że wiesz, co robisz. character(n) char lub char są po prostu skrótem od character(1) , więc wszystko jedno. Nazwa wewnętrzna to bpchar (oznacza „znak z wypełnieniem pustym”). Typ jest tam tylko dla zgodności ze starym kodem i standardami. W dzisiejszych czasach ma to bardzo mało sensu, marnuje pamięć i może powodować problemy:
- Porównaj varchar z char
- Długość pola tekstowego w Postgres SQL
Możesz użyć varchar(n) z modyfikatorem długości (alias dla character varying(n) ). Ale zwykle wskazuje na nieporozumienie przeniesione z innych RDBMS, gdzie może to być lokalne optimum wydajności. W Postgresie modyfikator długości varchar(255) (255) nie ma specjalnego znaczenia i rzadko ma sens.
- Czy powinienem dodać dowolny limit długości do kolumn VARCHAR?
Starsze wersje powodowały różne problemy podczas próby zmiany modyfikatora długości varchar(n) później. Większość z nich została złagodzona we współczesnym Postgresie, ale text lub varchar (alias dla character varying ) bez specyfikatora długości (i CHECK ograniczenia zamiast tego) nigdy nie miał żadnego z tych problemów.
CHECK ograniczenie jest tak samo szybkie i mniej prawdopodobne, że spowoduje problemy z zależnymi widokami, funkcjami, ograniczeniami FK itp., które zależą od typu kolumny. I może zrobić coś więcej niż tylko wymusić maksymalną długość znaków — wszystko, co można umieścić w wyrażeniu logicznym. Zobacz:
- Zmień kolumny PostgreSQL używane w widokach
Wreszcie jest też "char" (z podwójnymi cudzysłowami):1-bajtowy typ danych dla pojedynczej litery ASCII używany jako tani typ wewnętrznego wyliczenia.
Rzadko używam czegokolwiek poza text dla danych znaków w Postgresie.