Re: [HACKERS] GSoC 2017: Foreign Key Arrays - Mailing list pgsql-hackers

From Alexander Korotkov
Subject Re: [HACKERS] GSoC 2017: Foreign Key Arrays
Date
Msg-id CAPpHfdvEgQZ539kiPcYBNjXzga_aHdvBQxvf9Nw2uRq0uNgFPg@mail.gmail.com
Whole thread Raw
In response to Re: [HACKERS] GSoC 2017: Foreign Key Arrays  (Mark Rofail <markm.rofail@gmail.com>)
Responses Re: [HACKERS] GSoC 2017: Foreign Key Arrays  (Mark Rofail <markm.rofail@gmail.com>)
[HACKERS] regproc and when to schema-qualify  (Chapman Flack <chap@anastigmatix.net>)
List pgsql-hackers
Hi, Mark!

On Tue, May 30, 2017 at 2:18 AM, Mark Rofail <markm.rofail@gmail.com> wrote:
rhaas=# select oid, * from pg_opfamily where opfmethod = 2742;
 oid  | opfmethod |    opfname     | opfnamespace | opfowner
------+-----------+----------------+--------------+----------
 2745 |      2742 | array_ops      |           11 |       10
 3659 |      2742 | tsvector_ops   |           11 |       10
 4036 |      2742 | jsonb_ops      |           11 |       10
 4037 |      2742 | jsonb_path_ops |           11 |       10
(4 rows)
I am particulary intrested in array_ops but I have failed in locating the code behind it. Where is it reflected in the source code

Let's look what particular opclass is consisting of.  Besides records in pg_opfamily, it also contains records in pg_opclass, pg_amproc and pg_amop.

=# select * from pg_opclass where opcfamily = 2745;
 opcmethod |  opcname  | opcnamespace | opcowner | opcfamily | opcintype | opcdefault | opckeytype
-----------+-----------+--------------+----------+-----------+-----------+------------+------------
      2742 | array_ops |           11 |       10 |      2745 |      2277 | t          |       2283
(1 row)

=# select * from pg_amproc where amprocfamily = 2745;
 amprocfamily | amproclefttype | amprocrighttype | amprocnum |           amproc
--------------+----------------+-----------------+-----------+----------------------------
         2745 |           2277 |            2277 |         2 | pg_catalog.ginarrayextract
         2745 |           2277 |            2277 |         3 | ginqueryarrayextract
         2745 |           2277 |            2277 |         4 | ginarrayconsistent
         2745 |           2277 |            2277 |         6 | ginarraytriconsistent
(4 rows)

=# select * from pg_amop where amopfamily = 2745;
 amopfamily | amoplefttype | amoprighttype | amopstrategy | amoppurpose | amopopr | amopmethod | amopsortfamily
------------+--------------+---------------+--------------+-------------+---------+------------+----------------
       2745 |         2277 |          2277 |            1 | s           |    2750 |       2742 |              0
       2745 |         2277 |          2277 |            2 | s           |    2751 |       2742 |              0
       2745 |         2277 |          2277 |            3 | s           |    2752 |       2742 |              0
       2745 |         2277 |          2277 |            4 | s           |    1070 |       2742 |              0
(4 rows)

These records of system catalog are defined in special headers the source code:
src/include/catalog/pg_amop.h
src/include/catalog/pg_amproc.h
src/include/catalog/pg_opclass.h
src/include/catalog/pg_opfamily.h
These records are written to system catalog during bootstrap process (see src/backend/catalog/README).

As you can see pg_amproc records refer some procedures.  Those procedures are actually the majority of source code behind of opclass.  Those procedures are defined in src/backend/access/gin/ginarrayproc.c.

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

pgsql-hackers by date:

Previous
From: Masahiko Sawada
Date:
Subject: Re: [HACKERS] Alter subscription..SET - NOTICE message is coming fortable which is already removed
Next
From: Amit Kapila
Date:
Subject: Re: [HACKERS] Proposal : For Auto-Prewarm.