主键列的长度限制是多少?我将使用varchar作为主键。我发现没有信息,它可以多长时间,因为PostgreSQL在用作主键时不需要指定varchar限制?
答案 0 :(得分:20)
B树索引中包含主键的值的最大长度是缓冲区页面大小的三分之一,默认为floor(8192/3)= 2730 字节
答案 1 :(得分:6)
我认为最大varchar长度是Postgres配置设置。但是,它看起来好像不能超过1GB。
有人说过,将一个大的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的值无法编制索引。
因此允许值,但不是整个字符串用于唯一性检查。
嗯,这是您可以在该列中放入的大量数据。但是,如上所述,如果您必须使用如此长的值作为键,则您的设计很差。你应该使用人工主键。