Using HeapTuple.t_len to verify size of tuple

Started by Vignesh Raghunathanover 10 years ago5 messages
#1Vignesh Raghunathan
vignesh.pgsql@gmail.com

Hello,

Can the t_len field in HeapTuple structure be used to verify the length of
the tuple?

That is, if I calculate the length from the contents of the tuple using
data from pg_attribute for fixed length fields and the data from the header
for varlena fields, should it always match the value stored in t_len?

Thanks,
VIgnesh

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Vignesh Raghunathan (#1)
Re: Using HeapTuple.t_len to verify size of tuple

Vignesh Raghunathan <vignesh.pgsql@gmail.com> writes:

Can the t_len field in HeapTuple structure be used to verify the length of
the tuple?

That is, if I calculate the length from the contents of the tuple using
data from pg_attribute for fixed length fields and the data from the header
for varlena fields, should it always match the value stored in t_len?

If t_len were *less* than that, it would be a bug. But I think it's
fairly common for t_len to be rounded up to the next maxalign boundary.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#3Vignesh Raghunathan
vignesh.pgsql@gmail.com
In reply to: Tom Lane (#2)
Re: Using HeapTuple.t_len to verify size of tuple

On Tue, Aug 25, 2015 at 2:56 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Vignesh Raghunathan <vignesh.pgsql@gmail.com> writes:

Can the t_len field in HeapTuple structure be used to verify the length

of

the tuple?

That is, if I calculate the length from the contents of the tuple using
data from pg_attribute for fixed length fields and the data from the

header

for varlena fields, should it always match the value stored in t_len?

If t_len were *less* than that, it would be a bug. But I think it's
fairly common for t_len to be rounded up to the next maxalign boundary.

regards, tom lane

I have modified heap_deform_tuple code to check whether the 'off' variable
matches the tuple's t_len field for a project. In the code, off is not
updated in case of null fields. However, when I run it for pg_class table,
the code throws an error saying that the value of off does not match t_len.
It turns out that for all tuples even if the attribute attacl is null,
t_len field is set to be the sizeof(FormData_pg_class). Is this normal
behavior?

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Vignesh Raghunathan (#3)
Re: Using HeapTuple.t_len to verify size of tuple

Vignesh Raghunathan <vignesh.pgsql@gmail.com> writes:

On Tue, Aug 25, 2015 at 2:56 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

If t_len were *less* than that, it would be a bug. But I think it's
fairly common for t_len to be rounded up to the next maxalign boundary.

I have modified heap_deform_tuple code to check whether the 'off' variable
matches the tuple's t_len field for a project. In the code, off is not
updated in case of null fields. However, when I run it for pg_class table,
the code throws an error saying that the value of off does not match t_len.
It turns out that for all tuples even if the attribute attacl is null,
t_len field is set to be the sizeof(FormData_pg_class).

You mean "even if relacl is not null"? Sounds improbable: AFAIR, pg_class
tuples are built with heap_form_tuple, same as anything else.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#5Vignesh Raghunathan
vignesh.pgsql@gmail.com
In reply to: Tom Lane (#4)
Re: Using HeapTuple.t_len to verify size of tuple

You mean "even if relacl is not null"? Sounds improbable: AFAIR, pg_class
tuples are built with heap_form_tuple, same as anything else.

regards, tom lane

I am sorry. It was a bug in my code. I did not add the size of the tuple's
header field to the off variable before comparing it with t_len. Thank you
for the help.