PostgreSQL выделяет длину столбца - PullRequest
0 голосов
/ 02 июня 2011

У меня проблема с одним столбцом в базе данных, размер которого может быть от 10 до 10000 байт.Знаете ли вы, поддерживает ли PostgreSQL разреженные данные (т. Е. Будет ли он всегда выделять 10 000 байт для каждой записи в столбце ... или только пространство, необходимое для каждой записи)?

Ответы [ 2 ]

2 голосов
/ 02 июня 2011

Postgres будет хранить длинные типы varlena в расширенном хранилище под названием TOAST .

В случае строк, он сохраняет данные в строке до 126 байт (потенциально означает меньше 126 символов для многобайтового содержимого), а затем отправляет его во внешнее хранилище.

Вы можете увидеть, где хранятся данные, используя psql:

\dt+ yourtable

Кроме того, обратите внимание, что с точки зрения Postgres, нет абсолютно никакой разницы (относительно хранения) между объявлением типа столбца как varchar или varchar(large_number) - он будет сохранен точно таким же образом. Однако использование varchar(large_number) приводит к очень небольшому снижению производительности из-за проверки длины строки.

0 голосов
/ 02 июня 2011

использовать varchar или text типы - они используют только пространство, фактически необходимое для хранения данных (плюс небольшие накладные расходы в 2 байта для каждого значения для хранения длины)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...