Предел длины первичного ключа 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 страницы буфера, не могут быть проиндексированы.
Таким образом, значения были разрешены, однако не вся строка была использована для проверки уникальности.
Ну, это очень большой объем данных, которые вы можете поместить в этот столбец. Однако, как отмечалось выше, ваш дизайн плохой, если вам придется использовать такие длинные значения, как ключи. Вы должны использовать искусственный первичный ключ.