Thread: Size of TOAST pointer
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.
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