Thread: ERROR: index row size 2720 exceeds btree version 4 maximum 2704 for index in V14 but pg_column_size calculates 2701

Hi Folks

 

I am trying to figure out how to calculate a column size in my UTF8 encoded Postgresql V14 instance in order to avoid the error exceeds btree version 4 maximum 2704  and I am obviously not doing it correctly using pg_column_size as when I do I get 2701 which is lower than 2704.

 

 

What am I doing wrong in the select. I think I saw something in an internet page that a setting was added that reduced the 2704 down by 8 bytes to make it 2696 as a max but I am not sure.

 

Can you tell me if there is a configuration property that removes this 8 byte removal as I am taking dumps from another db and loading it here and failing.

 

See here

 

SELECT id,length(name) charlength_name,PG_COLUMN_SIZE(name) as column_size

FROM tony

order by 2 desc;

 

   id    charlength_name column_size

-------- --------------- -----------

37960058            3403        2701

37913542            2955          48

31834662            2481        1993

(3 rows)

 

 

create index tony1 on tony (name);

 

ERROR:  index row size 2720 exceeds btree version 4 maximum 2704 for index "tony1"

DETAIL:  Index row references tuple (0,3) in relation "tony".

HINT:  Values larger than 1/3 of a buffer page cannot be indexed.

Consider a function index of an MD5 hash of the value, or use full text indexing.

 

delete from tony where id = 37960058;

DELETE 1

 

create index tony1 on tony (name);

CREATE INDEX

 

SELECT id,length(name) charlength_name,PG_COLUMN_SIZE(name) as column_size

FROM tony

order by 2 desc;

 

   id    charlength_name column_size

-------- --------------- -----------

37913542            2955          48

31834662            2481        1993

(2 rows)

 

Thanks

Anthony Vitale

"Vitale, Anthony, Sony Music" <anthony.vitale@sonymusic.com> writes:
> I am trying to figure out how to calculate a column size in my UTF8 encoded Postgresql V14 instance in order to avoid
theerror exceeds btree version 4 maximum 2704  and I am obviously not doing it correctly using pg_column_size as when I
doI get 2701 which is lower than 2704. 

I think you're not accounting for overhead.  The reported index row
size would include the index tuple header (8 bytes) as well as
alignment padding.

            regards, tom lane