Size of TOAST pointer

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

Hello,

I was looking at the documentation for TOAST (
http://www.postgresql.org/docs/devel/static/storage-toast.html) and it's
specified that the toast pointer occupies 18 bytes. However, the struct
representing the toast pointer is defined as follows

typedef struct varatt_external
{
int32 va_rawsize; /* Original data size
(includes header) */
int32 va_extsize; /* External saved size
(doesn't) */
Oid va_valueid; /* Unique ID of
value within TOAST table */
Oid va_toastrelid; /* RelID of TOAST table
containing it */
} varatt_external;

Assuming that the pointer is aligned to a 4 byte boundary, doesn't it sum
up to 16 bytes?

Could someone please explain why the documentation specifies it as 18 bytes?

I am pretty new to the source code and the C language in general so I
apologize if this question has an obvious answer.

Thanks,
Vignesh.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Vignesh Raghunathan (#1)
Re: Size of TOAST pointer

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

I was looking at the documentation for TOAST (
http://www.postgresql.org/docs/devel/static/storage-toast.html) and it's
specified that the toast pointer occupies 18 bytes. However, the struct
representing the toast pointer is defined as follows
typedef struct varatt_external

The data that actually ends up on disk is a varattrib_1b_e wrapping a
varatt_external, and that header is where the extra 2 bytes come from.

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