I found that the best way to figure out the system catalogs was to do
the following steps
(i) Stare at the diagram in the html web pages until you are cross-eyed.
(ii) Look through the .h files in src/include/catalogs/ realising of
course that many of the fields/attributes that are defined are not used.
(iii) Use the \t command in a test database to inspect the actual
tables,
and try doing a bunch of SELECT queries with joins across catalogs to
figure out the relational structure (Schema).
Seriously, its not that bad once you get into the groove.
One interesting feature that I stumbled on was that at least one of the
methods that is required for the definition of indices requires more
than
8 arguments, the maximum number for a poastgres function if it is
entered with a CREATE FUNCTION command. This means that if you wish to
dynamically load a new type of index you have to use INSERT INTO
pg_proc commands to enter the index methods straight into the catalog
table.
Bernie