Предел длины первичного ключа PostgreSQL

Каков предел длины столбца первичного ключа? Я буду использовать varchar как первичный ключ. Я не нашел информации, как долго это может быть, поскольку PostgreSQL не требует указания предела varchar при использовании в качестве первичного ключа?

Ответы

Ответ 1

Я считаю, что максимальная длина varchar является настройкой конфигурации Postgres. Однако, похоже, он не может превышать 1 ГБ.

http://wiki.postgresql.org/wiki/FAQ#What_is_the_maximum_size_for_a_row.2C_a_table.2C_and_a_database.3F

Что, как было сказано, вероятно, неплохо иметь большой столбец varchar в качестве первичного ключа. Рассмотрите возможность использования серийного или bigserial (http://www.postgresql.org/docs/current/interactive/datatype-numeric.html#DATATYPE-SERIAL)

Ответ 2

Максимальная длина для значения в индексе B-дерева, который включает первичные ключи, составляет одну треть от размера страницы буфера, по умолчанию пол (8192/3) = 2730 байт.

Ответ 3

Вы должны сделать тест.

Я провел тесты с таблицей с единственным столбцом varchar в качестве первичного ключа на PostgreSQL 8.4. В результате я смог сохранить 235000 символов ASCII, 116000 польский диакритические символы (например, "ć" ) или 75000 китайцев (например, "汉" ). Для больших наборов у меня есть сообщение:
BŁĄD: размер строки индекса 5404 превышает максимум btree, 2712
Однако в сообщении говорилось, что:
Значения, превышающие 1/3 страницы буфера, не могут быть проиндексированы.
Таким образом, значения были разрешены, однако не вся строка была использована для проверки уникальности.

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