PostgreSQL主键长度限制

时间:2010-12-27 14:50:17

标签: postgresql primary-key varchar

主键列的长度限制是多少?我将使用varchar作为主键。我发现没有信息,它可以多长时间,因为PostgreSQL在用作主键时不需要指定varchar限制?

3 个答案:

答案 0 :(得分:20)

B树索引中包含主键的值的最大长度是缓冲区页面大小的三分之一,默认为floor(8192/3)= 2730 字节

答案 1 :(得分:6)

我认为最大varchar长度是Postgres配置设置。但是,它看起来好像不能超过1GB。

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 :(得分:4)

你应该做一个测试。

我在PostgreSQL 8.4上使用table进行了测试,这些测试将单个varchar列作为主键。结果是,我能够存储235000个ASCII字符,116000个抛光的diactrical字符(f.g.'ć')或75000个中文(f.g.'汉')。对于较大的套装,我收到了一条信息:
BŁĄD:索引行大小5404超过btree最大值2712
但是,消息说: 大于缓冲区页面1/3的值无法编制索引。
因此允许值,但不是整个字符串用于唯一性检查。

嗯,这是您可以在该列中放入的大量数据。但是,如上所述,如果您必须使用如此长的值作为键,则您的设计很差。你应该使用人工主键。