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



我引用 https://www.postgresql.org/docs/11/sql-createindex.html 关于INCLUDE子句:

明智的做法是保守地将非键列添加到索引中,尤其是宽列。如果索引元组超过索引类型允许的最大大小,则数据插入将失败。在任何情况下,非键列都会复制索引表中的数据并膨胀索引的大小,从而可能减慢搜索速度。

我想知道对于可能插入失败的 btree 索引来说,这个index tuple max size是什么。

用例:我正在考虑将 json 列(<1000 个字符(INCLUDE为唯一索引。

它是块大小的函数,对于 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"

最新更新