Thread: access method: are disk pages mandatory?

access method: are disk pages mandatory?

From
Leonardo F
Date:
in bufpage.h:

"all blocks written out by an access method must be disk pages"

but in
http://www.postgresql.org/docs/8.4/static/storage-page-layout.html

"Actually, index access methods need not use this page format. All the
existing index methods do use this basic format, but the data kept on
index metapages usually doesn't follow the item layout rules."

I'm not getting it: am I supposed to use the "disk page format" when
writing an index access method, or it's just a "good practice" because
it makes the handling easier? Given the docs it looks "recommended",
but the comment on the code sounds more "mandatory".





Re: access method: are disk pages mandatory?

From
Heikki Linnakangas
Date:
On 23/06/10 18:17, Leonardo F wrote:
> in bufpage.h:
>
> "all blocks written out by an access method must be disk pages"
>
> but in
> http://www.postgresql.org/docs/8.4/static/storage-page-layout.html
>
> "Actually, index access methods need not use this page format. All the
> existing index methods do use this basic format, but the data kept on
> index metapages usually doesn't follow the item layout rules."
>
> I'm not getting it: am I supposed to use the "disk page format" when
> writing an index access method, or it's just a "good practice" because
> it makes the handling easier? Given the docs it looks "recommended",
> but the comment on the code sounds more "mandatory".

It's recommened because it makes life easier. Even if you don't use the 
normal page format, I think you need to have the LSN at the beginning of 
the page. The rest is up to you.

--   Heikki Linnakangas  EnterpriseDB   http://www.enterprisedb.com


Re: access method: are disk pages mandatory?

From
Tom Lane
Date:
Heikki Linnakangas <heikki.linnakangas@enterprisedb.com> writes:
> On 23/06/10 18:17, Leonardo F wrote:
>> I'm not getting it: am I supposed to use the "disk page format" when
>> writing an index access method, or it's just a "good practice" because
>> it makes the handling easier? Given the docs it looks "recommended",
>> but the comment on the code sounds more "mandatory".

> It's recommened because it makes life easier. Even if you don't use the 
> normal page format, I think you need to have the LSN at the beginning of 
> the page. The rest is up to you.

The bufpage.h comment is ancient and might not be 100% gospel anymore.
However, I believe the buffer manager does assume that any page in
shared buffers has a standard page header including LSN.  It definitely
assumes there's an LSN, and I think we have validity checks on the other
page header fields somewhere inside ReadBuffer.  You don't however need
to use the item-and-item-pointer-array structure if it's not useful to
you.
        regards, tom lane