Перейти к основному содержимому

Ограничения Pangolin

В таблице ниже описаны различные жесткие ограничения Pangolin. Однако практические ограничения, такие как ограничения производительности или доступное дисковое пространство, могут применяться до достижения абсолютных жестких ограничений.

ЭлементВерхний пределКомментарий
Размер базы данныхНеограниченный
Количество баз данных4,294,950,911
Отношений на базу данных1,431,650,303
Размер отношения32 ТБС настройками по умолчанию BLCKSZ 8192 байта
Строки на таблицуОграничено количеством кортежей, которые могут поместиться на 4,294,967,295 страниц
Колонки на таблицу1 600Дополнительно ограничено размером кортежа, который помещается на одной странице; см. примечание ниже
Столбцы в результирующем наборе1,664
Размер поля1 ГБ
Индексы на таблицуНеограниченноОграничено максимальным количеством связей на базу данных
Колонки на индекс32Может быть увеличено путем перекомпиляции Pangolin
Ключи раздела32Может быть увеличено путем перекомпиляции Pangolin
Длина идентификатора127 байтМожет быть увеличена путем перекомпиляции Pangolin
Аргументы функции100Может быть увеличено путем перекомпиляции Pangolin
Параметры запроса65,535

Максимальное количество столбцов для таблицы дополнительно ограничено, так как кортеж, который хранится, должен помещаться на одной странице кучи размером 8192 байта. Например, исключая заголовок кортежа, кортеж, состоящий из 1600 столбцов типа int, займет 6400 байт и может быть размещен на странице кучи. Однако кортеж из 1600 столбцов типа bigint займет 12800 байт и, следовательно, не поместится на странице кучи. Переменные поля типов, таких как text, varchar и char, могут хранить свои значения вне строки в TOAST-таблице, если значения достаточно велики для этого. Внутри кортежа в таблице кучи остается только 18-байтовый указатель. Для переменных полей меньшей длины используется либо 4-байтовый, либо 1-байтовый заголовок поля, а значение хранится внутри кортежа в куче.

Столбцы, которые были удалены из таблицы, также учитываются в ограничении на максимальное количество столбцов. Более того, хотя значения удаленных столбцов для новых кортежей внутренне помечаются как NULL в битовой карте NULL кортежа, сама битовая карта также занимает место.

Каждая таблица может хранить теоретический максимум 2^32 значений вне строки; подробное обсуждение хранения вне строки см. в разделе «TOAST». Это ограничение возникает из-за использования 32-битного OID для идентификации каждого такого значения. Практический лимит значительно меньше теоретического, так как по мере заполнения пространства OID поиск свободного OID может стать дорогостоящим, что, в свою очередь, замедляет выполнение операторов INSERT и UPDATE. Обычно это становится проблемой только для таблиц, содержащих многие терабайты данных; возможным решением является партиционирование.