Remove special BKI_LOOKUP magic for namespace and role OIDs.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 3 Feb 2021 17:01:48 +0000 (12:01 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 3 Feb 2021 17:01:48 +0000 (12:01 -0500)
Now that commit 62f34097c attached BKI_LOOKUP annotation to all the
namespace and role OID columns in the catalogs, there's no real reason
to have the magic PGNSP and PGUID symbols.  Get rid of them in favor
of implementing those lookups according to genbki.pl's normal pattern.

This means that in the catalog headers, BKI_DEFAULT(PGNSP) becomes
BKI_DEFAULT(pg_catalog), which seems a lot more transparent.
BKI_DEFAULT(PGUID) becomes BKI_DEFAULT(POSTGRES), which is perhaps
less so; but you can look into pg_authid.dat to discover that
POSTGRES is the nonce name for the bootstrap superuser.

This change also means that if we ever need cross-references in the
initial catalog data to any of the other built-in roles besides
POSTGRES, or to some other built-in schema besides pg_catalog,
we can just do it.

No catversion bump here, as there's no actual change in the contents
of postgres.bki.

Discussion: https://postgr.es/m/3240355.1612129197@sss.pgh.pa.us

19 files changed:
doc/src/sgml/bki.sgml
src/backend/catalog/genbki.pl
src/include/catalog/pg_authid.dat
src/include/catalog/pg_class.h
src/include/catalog/pg_collation.h
src/include/catalog/pg_conversion.h
src/include/catalog/pg_database.h
src/include/catalog/pg_language.h
src/include/catalog/pg_namespace.h
src/include/catalog/pg_opclass.h
src/include/catalog/pg_operator.h
src/include/catalog/pg_opfamily.h
src/include/catalog/pg_proc.h
src/include/catalog/pg_tablespace.h
src/include/catalog/pg_ts_config.h
src/include/catalog/pg_ts_dict.h
src/include/catalog/pg_ts_parser.h
src/include/catalog/pg_ts_template.h
src/include/catalog/pg_type.h

index 6d3c5be67f8d1742ffd288736cdbb451caaa86a9..db1b3d5e9a028a435c17cce252a14f4a54f0c2ff 100644 (file)
       expected to be in the <literal>pg_catalog</literal> schema.
      </para>
     </listitem>
-
-    <listitem>
-     <para>
-      In addition to the generic lookup mechanisms, there is a special
-      convention that <literal>PGNSP</literal> is replaced by the OID of
-      the <literal>pg_catalog</literal> schema,
-      and <literal>PGUID</literal> is replaced by the OID of the bootstrap
-      superuser role.  These usages are somewhat historical but so far
-      there hasn't been a need to generalize them.
-     </para>
-    </listitem>
    </itemizedlist>
 
    <para>
index 5bdc7adc44022087f2f10b499dcd509cf4aaf62a..b15995811234ada97db0c2dd492ff6ccf110b348 100644 (file)
@@ -184,15 +184,9 @@ my $GenbkiNextOid = $FirstGenbkiObjectId;
 # within a given Postgres release, such as fixed OIDs.  Do not substitute
 # anything that could depend on platform or configuration.  (The right place
 # to handle those sorts of things is in initdb.c's bootstrap_template1().)
-my $BOOTSTRAP_SUPERUSERID =
-  Catalog::FindDefinedSymbolFromData($catalog_data{pg_authid},
-       'BOOTSTRAP_SUPERUSERID');
 my $C_COLLATION_OID =
   Catalog::FindDefinedSymbolFromData($catalog_data{pg_collation},
        'C_COLLATION_OID');
-my $PG_CATALOG_NAMESPACE =
-  Catalog::FindDefinedSymbolFromData($catalog_data{pg_namespace},
-       'PG_CATALOG_NAMESPACE');
 
 
 # Fill in pg_class.relnatts by looking at the referenced catalog's schema.
@@ -213,11 +207,12 @@ foreach my $row (@{ $catalog_data{pg_am} })
        $amoids{ $row->{amname} } = $row->{oid};
 }
 
-# There is only one authid at bootstrap time, and we handle it specially:
-# the usually-defaulted symbol PGUID becomes the bootstrap superuser's OID.
-# (We could drop this in favor of writing out BKI_DEFAULT(POSTGRES) ...)
+# role OID lookup
 my %authidoids;
-$authidoids{'PGUID'} = $BOOTSTRAP_SUPERUSERID;
+foreach my $row (@{ $catalog_data{pg_authid} })
+{
+       $authidoids{ $row->{rolname} } = $row->{oid};
+}
 
 # class (relation) OID lookup (note this only covers bootstrap catalogs!)
 my %classoids;
@@ -240,11 +235,12 @@ foreach my $row (@{ $catalog_data{pg_language} })
        $langoids{ $row->{lanname} } = $row->{oid};
 }
 
-# There is only one namespace at bootstrap time, and we handle it specially:
-# the usually-defaulted symbol PGNSP becomes the pg_catalog namespace's OID.
-# (We could drop this in favor of writing out BKI_DEFAULT(pg_catalog) ...)
+# namespace (schema) OID lookup
 my %namespaceoids;
-$namespaceoids{'PGNSP'} = $PG_CATALOG_NAMESPACE;
+foreach my $row (@{ $catalog_data{pg_namespace} })
+{
+       $namespaceoids{ $row->{nspname} } = $row->{oid};
+}
 
 # opclass OID lookup
 my %opcoids;
index a643a09588abd7a54e2cf13a04d792d3ecf521e2..87d917ffc3843eea6b48e92ac6dec26567bb1468 100644 (file)
 # The C code typically refers to these roles using the #define symbols,
 # so make sure every entry has an oid_symbol value.
 
+# The bootstrap superuser is named POSTGRES according to this data and
+# according to BKI_DEFAULT entries in other catalogs.  However, initdb
+# will replace that at database initialization time.
+
 { oid => '10', oid_symbol => 'BOOTSTRAP_SUPERUSERID',
   rolname => 'POSTGRES', rolsuper => 't', rolinherit => 't',
   rolcreaterole => 't', rolcreatedb => 't', rolcanlogin => 't',
index bb6938caa23fdd7196c583f9900aaaa4e1d4301f..3e377294361cac28b6527f63ad4294792c41bd3a 100644 (file)
@@ -38,7 +38,7 @@ CATALOG(pg_class,1259,RelationRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(83,Relat
        NameData        relname;
 
        /* OID of namespace containing this class */
-       Oid                     relnamespace BKI_DEFAULT(PGNSP) BKI_LOOKUP(pg_namespace);
+       Oid                     relnamespace BKI_DEFAULT(pg_catalog) BKI_LOOKUP(pg_namespace);
 
        /* OID of entry in pg_type for relation's implicit row type, if any */
        Oid                     reltype BKI_LOOKUP_OPT(pg_type);
@@ -47,7 +47,7 @@ CATALOG(pg_class,1259,RelationRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(83,Relat
        Oid                     reloftype BKI_DEFAULT(0) BKI_LOOKUP_OPT(pg_type);
 
        /* class owner */
-       Oid                     relowner BKI_DEFAULT(PGUID) BKI_LOOKUP(pg_authid);
+       Oid                     relowner BKI_DEFAULT(POSTGRES) BKI_LOOKUP(pg_authid);
 
        /* access method; 0 if not a table / index */
        Oid                     relam BKI_DEFAULT(heap) BKI_LOOKUP_OPT(pg_am);
index 3bd7873c6885fe5e60eb07fe962f0610d63b3b60..c6394ca22216550568149c4063fd798e08363048 100644 (file)
@@ -30,9 +30,12 @@ CATALOG(pg_collation,3456,CollationRelationId)
 {
        Oid                     oid;                    /* oid */
        NameData        collname;               /* collation name */
-       Oid                     collnamespace BKI_DEFAULT(PGNSP) BKI_LOOKUP(pg_namespace);      /* OID of namespace
-                                                                                                                                                        * containing collation */
-       Oid                     collowner BKI_DEFAULT(PGUID) BKI_LOOKUP(pg_authid); /* owner of collation */
+
+       /* OID of namespace containing this collation */
+       Oid                     collnamespace BKI_DEFAULT(pg_catalog) BKI_LOOKUP(pg_namespace);
+
+       /* owner of collation */
+       Oid                     collowner BKI_DEFAULT(POSTGRES) BKI_LOOKUP(pg_authid);
        char            collprovider;   /* see constants below */
        bool            collisdeterministic BKI_DEFAULT(t);
        int32           collencoding;   /* encoding for this collation; -1 = "all" */
index 96bb92f251b1e013bedfa03c07027160eed8f554..ca556f6030f0dd5510a22bf27b7a992b49578945 100644 (file)
@@ -35,10 +35,10 @@ CATALOG(pg_conversion,2607,ConversionRelationId)
        NameData        conname;
 
        /* namespace that the conversion belongs to */
-       Oid                     connamespace BKI_DEFAULT(PGNSP) BKI_LOOKUP(pg_namespace);
+       Oid                     connamespace BKI_DEFAULT(pg_catalog) BKI_LOOKUP(pg_namespace);
 
        /* owner of the conversion */
-       Oid                     conowner BKI_DEFAULT(PGUID) BKI_LOOKUP(pg_authid);
+       Oid                     conowner BKI_DEFAULT(POSTGRES) BKI_LOOKUP(pg_authid);
 
        /* FOR encoding id */
        int32           conforencoding BKI_LOOKUP(encoding);
index f0240c58cf1a339bfb4f95e782084c0b40ddca8f..d3de45821c2f9d0a217f792cbef64293f2529c8f 100644 (file)
@@ -35,7 +35,7 @@ CATALOG(pg_database,1262,DatabaseRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_OID
        NameData        datname;
 
        /* owner of database */
-       Oid                     datdba BKI_DEFAULT(PGUID) BKI_LOOKUP(pg_authid);
+       Oid                     datdba BKI_DEFAULT(POSTGRES) BKI_LOOKUP(pg_authid);
 
        /* character encoding */
        int32           encoding;
index e9df9dac09f30ffffbbc924285108752405c274c..3e56597ece7f1c0a4055683947ae6941d13c7c2a 100644 (file)
@@ -34,7 +34,7 @@ CATALOG(pg_language,2612,LanguageRelationId)
        NameData        lanname;
 
        /* Language's owner */
-       Oid                     lanowner BKI_DEFAULT(PGUID) BKI_LOOKUP(pg_authid);
+       Oid                     lanowner BKI_DEFAULT(POSTGRES) BKI_LOOKUP(pg_authid);
 
        /* Is a procedural language */
        bool            lanispl BKI_DEFAULT(f);
index d920c6cfc64a3b8804a8b39437606400bf342b0f..fe87a947ee792494396677a526e77f4be51bf944 100644 (file)
@@ -37,7 +37,7 @@ CATALOG(pg_namespace,2615,NamespaceRelationId)
        Oid                     oid;                    /* oid */
 
        NameData        nspname;
-       Oid                     nspowner BKI_DEFAULT(PGUID) BKI_LOOKUP(pg_authid);
+       Oid                     nspowner BKI_DEFAULT(POSTGRES) BKI_LOOKUP(pg_authid);
 
 #ifdef CATALOG_VARLEN                  /* variable-length fields start here */
        aclitem         nspacl[1];
index 9f321f2a85ce508fa628007d7f313b5f24350e56..7b2cf259208ad2dd3fd1fc0368f5cd6335222dff 100644 (file)
@@ -57,10 +57,10 @@ CATALOG(pg_opclass,2616,OperatorClassRelationId)
        NameData        opcname;
 
        /* namespace of this opclass */
-       Oid                     opcnamespace BKI_DEFAULT(PGNSP) BKI_LOOKUP(pg_namespace);
+       Oid                     opcnamespace BKI_DEFAULT(pg_catalog) BKI_LOOKUP(pg_namespace);
 
        /* opclass owner */
-       Oid                     opcowner BKI_DEFAULT(PGUID) BKI_LOOKUP(pg_authid);
+       Oid                     opcowner BKI_DEFAULT(POSTGRES) BKI_LOOKUP(pg_authid);
 
        /* containing operator family */
        Oid                     opcfamily BKI_LOOKUP(pg_opfamily);
index 7f06abaeec1ef28264c00bdc1a99e2102564f90f..d32fcdc64e6f9e50828c65bbafe45e20b227b1f6 100644 (file)
@@ -36,10 +36,10 @@ CATALOG(pg_operator,2617,OperatorRelationId)
        NameData        oprname;
 
        /* OID of namespace containing this oper */
-       Oid                     oprnamespace BKI_DEFAULT(PGNSP) BKI_LOOKUP(pg_namespace);
+       Oid                     oprnamespace BKI_DEFAULT(pg_catalog) BKI_LOOKUP(pg_namespace);
 
        /* operator owner */
-       Oid                     oprowner BKI_DEFAULT(PGUID) BKI_LOOKUP(pg_authid);
+       Oid                     oprowner BKI_DEFAULT(POSTGRES) BKI_LOOKUP(pg_authid);
 
        /* 'l' for prefix or 'b' for infix */
        char            oprkind BKI_DEFAULT(b);
index 1a723b76f63923e882551f7f6073048227f5738b..129102b57679dad1d1dfd6d9ff87e80b489f0470 100644 (file)
@@ -37,10 +37,10 @@ CATALOG(pg_opfamily,2753,OperatorFamilyRelationId)
        NameData        opfname;
 
        /* namespace of this opfamily */
-       Oid                     opfnamespace BKI_DEFAULT(PGNSP) BKI_LOOKUP(pg_namespace);
+       Oid                     opfnamespace BKI_DEFAULT(pg_catalog) BKI_LOOKUP(pg_namespace);
 
        /* opfamily owner */
-       Oid                     opfowner BKI_DEFAULT(PGUID) BKI_LOOKUP(pg_authid);
+       Oid                     opfowner BKI_DEFAULT(POSTGRES) BKI_LOOKUP(pg_authid);
 } FormData_pg_opfamily;
 
 /* ----------------
index 2f54aa171edd239a8dc63e42b2d7f1bca1879056..78f230894bd33fed270bc1436c3ccc926df1e0fd 100644 (file)
@@ -35,10 +35,10 @@ CATALOG(pg_proc,1255,ProcedureRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(81,Proce
        NameData        proname;
 
        /* OID of namespace containing this proc */
-       Oid                     pronamespace BKI_DEFAULT(PGNSP) BKI_LOOKUP(pg_namespace);
+       Oid                     pronamespace BKI_DEFAULT(pg_catalog) BKI_LOOKUP(pg_namespace);
 
        /* procedure owner */
-       Oid                     proowner BKI_DEFAULT(PGUID) BKI_LOOKUP(pg_authid);
+       Oid                     proowner BKI_DEFAULT(POSTGRES) BKI_LOOKUP(pg_authid);
 
        /* OID of pg_language entry */
        Oid                     prolang BKI_DEFAULT(internal) BKI_LOOKUP(pg_language);
index ed38e6950ddcb468145444ace67db4a7f59e5c70..58bb1087a3e8e8af00ec318f9871a671a92f5c02 100644 (file)
@@ -30,7 +30,9 @@ CATALOG(pg_tablespace,1213,TableSpaceRelationId) BKI_SHARED_RELATION
 {
        Oid                     oid;                    /* oid */
        NameData        spcname;                /* tablespace name */
-       Oid                     spcowner BKI_DEFAULT(PGUID) BKI_LOOKUP(pg_authid);      /* owner of tablespace */
+
+       /* owner of tablespace */
+       Oid                     spcowner BKI_DEFAULT(POSTGRES) BKI_LOOKUP(pg_authid);
 
 #ifdef CATALOG_VARLEN                  /* variable-length fields start here */
        aclitem         spcacl[1];              /* access permissions */
index e705899b179e04ba1fec61d71410b91a345445ba..2e0263962df3b161429ca8d3d253adfe9b8c8728 100644 (file)
@@ -36,10 +36,10 @@ CATALOG(pg_ts_config,3602,TSConfigRelationId)
        NameData        cfgname;
 
        /* name space */
-       Oid                     cfgnamespace BKI_DEFAULT(PGNSP) BKI_LOOKUP(pg_namespace);
+       Oid                     cfgnamespace BKI_DEFAULT(pg_catalog) BKI_LOOKUP(pg_namespace);
 
        /* owner */
-       Oid                     cfgowner BKI_DEFAULT(PGUID) BKI_LOOKUP(pg_authid);
+       Oid                     cfgowner BKI_DEFAULT(POSTGRES) BKI_LOOKUP(pg_authid);
 
        /* OID of parser */
        Oid                     cfgparser BKI_LOOKUP(pg_ts_parser);
index 57f626e7b592cadf202d3d0a968ff84aad8bd24b..e53eead82901bc654fb4e6aa126a85552530dfe2 100644 (file)
@@ -35,10 +35,10 @@ CATALOG(pg_ts_dict,3600,TSDictionaryRelationId)
        NameData        dictname;
 
        /* name space */
-       Oid                     dictnamespace BKI_DEFAULT(PGNSP) BKI_LOOKUP(pg_namespace);
+       Oid                     dictnamespace BKI_DEFAULT(pg_catalog) BKI_LOOKUP(pg_namespace);
 
        /* owner */
-       Oid                     dictowner BKI_DEFAULT(PGUID) BKI_LOOKUP(pg_authid);
+       Oid                     dictowner BKI_DEFAULT(POSTGRES) BKI_LOOKUP(pg_authid);
 
        /* dictionary's template */
        Oid                     dicttemplate BKI_LOOKUP(pg_ts_template);
index e0d705fd9ae57d1e189eb62e97087983b6db3c9a..0231051cee38f8ae4f9eddc6d82cf6be1cea525e 100644 (file)
@@ -34,7 +34,7 @@ CATALOG(pg_ts_parser,3601,TSParserRelationId)
        NameData        prsname;
 
        /* name space */
-       Oid                     prsnamespace BKI_DEFAULT(PGNSP) BKI_LOOKUP(pg_namespace);
+       Oid                     prsnamespace BKI_DEFAULT(pg_catalog) BKI_LOOKUP(pg_namespace);
 
        /* init parsing session */
        regproc         prsstart BKI_LOOKUP(pg_proc);
index 2ee1ae4e85f62ad2029bf7a55a1764ea53f66363..194b921136209b56528dc24b6ab58b46b892e900 100644 (file)
@@ -34,7 +34,7 @@ CATALOG(pg_ts_template,3764,TSTemplateRelationId)
        NameData        tmplname;
 
        /* name space */
-       Oid                     tmplnamespace BKI_DEFAULT(PGNSP) BKI_LOOKUP(pg_namespace);
+       Oid                     tmplnamespace BKI_DEFAULT(pg_catalog) BKI_LOOKUP(pg_namespace);
 
        /* initialization method of dict (may be 0) */
        regproc         tmplinit BKI_LOOKUP_OPT(pg_proc);
index 1ec860670381155bac4be5e8c5abcebca5342c72..8ee5fa0507a3784aba54d470d4809e368ed7c86d 100644 (file)
@@ -41,10 +41,10 @@ CATALOG(pg_type,1247,TypeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71,TypeRelati
        NameData        typname;
 
        /* OID of namespace containing this type */
-       Oid                     typnamespace BKI_DEFAULT(PGNSP) BKI_LOOKUP(pg_namespace);
+       Oid                     typnamespace BKI_DEFAULT(pg_catalog) BKI_LOOKUP(pg_namespace);
 
        /* type owner */
-       Oid                     typowner BKI_DEFAULT(PGUID) BKI_LOOKUP(pg_authid);
+       Oid                     typowner BKI_DEFAULT(POSTGRES) BKI_LOOKUP(pg_authid);
 
        /*
         * For a fixed-size type, typlen is the number of bytes we use to