Re: WIP: Rework access method interface - Mailing list pgsql-hackers

From Alexander Korotkov
Subject Re: WIP: Rework access method interface
Date
Msg-id CAPpHfduedTDmy6-X4QR5Jmaw8vMC=4-skFmn82+aniG4b4UsyQ@mail.gmail.com
Whole thread Raw
In response to Re: WIP: Rework access method interface  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: WIP: Rework access method interface  (Jim Nasby <Jim.Nasby@BlueTreble.com>)
List pgsql-hackers
On Mon, Aug 24, 2015 at 5:15 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
Alexander Korotkov <a.korotkov@postgrespro.ru> writes:
> On Mon, Aug 10, 2015 at 7:50 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> Hm.  So one way or the other we're going to end up violating relational
>> theory somewhere.  OK, I yield: let's say that pg_am has amname, amkind,
>> amhandler, and nothing else.  Then we will need SQL functions to expose
>> whatever information we think needs to be available to SQL code.

> There is second revision of this patch. Changes are so:

>  * AmRoutine was renamed to IndexAmRoutine assuming there could be other
> access methods in the future.
>  * amhandlers now return index_am_handler pseudotype.
>  * CHECK_PROCEDUREs are now is the place of original GET_REL_PROCEDUREs.
>  * amstrategies, amsupport, amcanorderbyop, amstorage, amkeytype are in
> both pg_am and IndexAmRoutine. Consistence of amhandler answer and pg_am
> tuple is checking.

[ scratches head... ]  I thought we'd just agreed we weren't going to keep
any of those pg_am columns?  If we keep them, we'll have to define what
they mean for sequence AMs etc.  ("Let them be NULL" would likely break
enough stuff that we might as well not have them.)

From the previous discussion I see following options:
1) Non-index access methods don't reuse pg_class.relam nor pg_am. Fully relational compliant but complex catalog structure.
2) Non-index access methods reuse pg_class.relam but don't reuse pg_am. This violates relational theory because single column reference multiple tables.
3) Non-index access methods reuse both pg_class.relam and pg_am. This violates relational theory because we store different objects in the same table.

I'd say we already have precedent of #2. It's pg_depend which reference objects of arbitrary types.
In the #3 we really shouldn't keep any specific to index am in pg_am.

But what we assume to be an access method in general? For instance, we have foreign data wrappers which aren't access methods (but looks quite similar from some degree). 

------
Alexander Korotkov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company 

pgsql-hackers by date:

Previous
From: Thor Lancelot Simon
Date:
Subject: Re: PostgreSQL for VAX on NetBSD/OpenBSD
Next
From: Joe Conway
Date:
Subject: Re: exposing pg_controldata and pg_config as functions