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

Pyr*_*cks 2 postgresql postgresql-11

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

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

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

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

jja*_*nes 5

它是块大小的函数,对于 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"
Run Code Online (Sandbox Code Playgroud)