index row size 2720 exceeds btree version 4

Started by Daulatover 3 years ago3 messagesgeneral
Jump to latest
#1Daulat
daulat.dba@gmail.com

Hello Team,

We are facing an error while uploading data in a table that has two B-tree
indexes. As per the Postgres documentation there is a limitation of b-tree
index size but I need to know if there is any alternative to overcome this
issue.

Error:

" index row size 2720 exceeds btree version 4 maximum 2704 for index
""uk_gvoa_gi_ad"" 54000"
uk_gvoa_gi_ad

Index:

UNIQUE INDEX pk_gvoa_id ON test.groupedvuln_asset USING btree
(groupedvuln_orphanasset_id)"

UNIQUE INDEX uk_gvoa_gi_ad ON test.groupedvuln_asset USING btree (group_id,
hostip, macaddress, fqdn, scanid)"

Thanks

#2Albrecht Dreß
albrecht.dress@arcor.de
In reply to: Daulat (#1)
Re: index row size 2720 exceeds btree version 4

Am 10.08.22 06:57 schrieb(en) Daulat:

We are facing an error while uploading data in a table that has two B-tree
indexes. As per the Postgres documentation there is a limitation of b-tree
index size but I need to know if there is any alternative to overcome this
issue.

[snip]

UNIQUE INDEX uk_gvoa_gi_ad ON test.groupedvuln_asset USING btree (group_id,
hostip, macaddress, fqdn, scanid)"

I had a similar issue, which I solved by creating an index on the hash of the concatenation of the items, i.e. something like

CREATE UNIQUE INDEX uk_gvoa_gi_ad ON test.groupedvuln_asset
USING btree (sha256(group_id::bytea || hostip::bytea || macaddress::bytea || fqdn::bytea || scanid::bytea));

Not guaranteed to be 100% collision free, though, but should be sufficient for most real-world use cases.

Hth,
Albrecht.

#3Peter J. Holzer
hjp-pgsql@hjp.at
In reply to: Daulat (#1)
Re: index row size 2720 exceeds btree version 4

On 2022-08-10 10:27:46 +0530, Daulat wrote:

Error:

" index row size 2720 exceeds btree version 4 maximum 2704 for index
""uk_gvoa_gi_ad"" 54000"
uk_gvoa_gi_ad

Index:

UNIQUE INDEX pk_gvoa_id ON test.groupedvuln_asset USING btree
(groupedvuln_orphanasset_id)"

UNIQUE INDEX uk_gvoa_gi_ad ON test.groupedvuln_asset USING btree (group_id,
hostip, macaddress, fqdn, scanid)"

How are those fields defined? I would expect a group id to be 4 or 8
bytes, a host ip 16 bytes, a mac address 6 bytes and an fqdn at most 255
bytes. So without the scan id we are at 285 bytes. maybe a bit more due
to overhead. That leaves about 2400 bytes for the scan id. I don't know
what a scanid is, but 2000+ bytes for an id seems excessive.

hp

--
_ | Peter J. Holzer | Story must make more sense than reality.
|_|_) | |
| | | hjp@hjp.at | -- Charles Stross, "Creative writing
__/ | http://www.hjp.at/ | challenge!"