Postgres中的索引元组最大大小是多少?

3
我在以下引用的文档中阐述了关于“INCLUDE”子句的内容:https://www.postgresql.org/docs/11/sql-createindex.html
“添加非键列到索引时,尤其是宽列,最好保持谨慎。如果索引元组超过索引类型允许的最大大小,则数据插入将失败。无论如何,非键列会复制索引表中的数据并膨胀索引的大小,从而可能减缓搜索速度。”
我想知道btree索引的“索引元组最大大小”是多少,它可能导致插入失败。
用例:我正在考虑将JSON列(<1000个字符)包含在唯一索引中。
1个回答

7

这个大小是关于块大小的函数,btree索引略小于1/3。对于默认的8kB块大小,最大值为2704字节:

insert into foo select string_agg(x::text,'') from generate_series(1,940) f(x);
ERROR:  index row size 2728 exceeds btree version 4 maximum 2704 for index "foo_pkey"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接