]> granicus.if.org Git - postgresql/commitdiff
Replace our traditional initial-catalog-data format with a better design.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 8 Apr 2018 17:16:50 +0000 (13:16 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 8 Apr 2018 17:17:27 +0000 (13:17 -0400)
Historically, the initial catalog data to be installed during bootstrap
has been written in DATA() lines in the catalog header files.  This had
lots of disadvantages: the format was badly underdocumented, it was
very difficult to edit the data in any mechanized way, and due to the
lack of any abstraction the data was verbose, hard to read/understand,
and easy to get wrong.

Hence, move this data into separate ".dat" files and represent it in a way
that can easily be read and rewritten by Perl scripts.  The new format is
essentially "key => value" for each column; while it's a bit repetitive,
explicit labeling of each value makes the data far more readable and less
error-prone.  Provide a way to abbreviate entries by omitting field values
that match a specified default value for their column.  This allows removal
of a large amount of repetitive boilerplate and also lowers the barrier to
adding new columns.

Also teach genbki.pl how to translate symbolic OID references into
numeric OIDs for more cases than just "regproc"-like pg_proc references.
It can now do that for regprocedure-like references (thus solving the
problem that regproc is ambiguous for overloaded functions), operators,
types, opfamilies, opclasses, and access methods.  Use this to turn
nearly all OID cross-references in the initial data into symbolic form.
This represents a very large step forward in readability and error
resistance of the initial catalog data.  It should also reduce the
difficulty of renumbering OID assignments in uncommitted patches.

Also, solve the longstanding problem that frontend code that would like to
use OID macros and other information from the catalog headers often had
difficulty with backend-only code in the headers.  To do this, arrange for
all generated macros, plus such other declarations as we deem fit, to be
placed in "derived" header files that are safe for frontend inclusion.
(Once clients migrate to using these pg_*_d.h headers, it will be possible
to get rid of the pg_*_fn.h headers, which only exist to quarantine code
away from clients.  That is left for follow-on patches, however.)

The now-automatically-generated macros include the Anum_xxx and Natts_xxx
constants that we used to have to update by hand when adding or removing
catalog columns.

Replace the former manual method of generating OID macros for pg_type
entries with an automatic method, ensuring that all built-in types have
OID macros.  (But note that this patch does not change the way that
OID macros for pg_proc entries are built and used.  It's not clear that
making that match the other catalogs would be worth extra code churn.)

Add SGML documentation explaining what the new data format is and how to
work with it.

Despite being a very large change in the catalog headers, there is no
catversion bump here, because postgres.bki and related output files
haven't changed at all.

John Naylor, based on ideas from various people; review and minor
additional coding by me; previous review by Alvaro Herrera

Discussion: https://postgr.es/m/CAJVSVGWO48JbbwXkJz_yBFyGYW-M9YWxnPdxJBUosDC9ou_F0Q@mail.gmail.com

110 files changed:
doc/src/sgml/bki.sgml
doc/src/sgml/libpq.sgml
src/Makefile
src/backend/Makefile
src/backend/catalog/.gitignore
src/backend/catalog/Catalog.pm
src/backend/catalog/Makefile
src/backend/catalog/README [deleted file]
src/backend/catalog/genbki.pl
src/backend/utils/Gen_fmgrtab.pl
src/backend/utils/Makefile
src/include/Makefile
src/include/catalog/.gitignore
src/include/catalog/Makefile [new file with mode: 0644]
src/include/catalog/duplicate_oids
src/include/catalog/genbki.h
src/include/catalog/indexing.h
src/include/catalog/pg_aggregate.dat [new file with mode: 0644]
src/include/catalog/pg_aggregate.h
src/include/catalog/pg_am.dat [new file with mode: 0644]
src/include/catalog/pg_am.h
src/include/catalog/pg_amop.dat [new file with mode: 0644]
src/include/catalog/pg_amop.h
src/include/catalog/pg_amproc.dat [new file with mode: 0644]
src/include/catalog/pg_amproc.h
src/include/catalog/pg_attrdef.h
src/include/catalog/pg_attribute.h
src/include/catalog/pg_auth_members.h
src/include/catalog/pg_authid.dat [new file with mode: 0644]
src/include/catalog/pg_authid.h
src/include/catalog/pg_cast.dat [new file with mode: 0644]
src/include/catalog/pg_cast.h
src/include/catalog/pg_class.dat [new file with mode: 0644]
src/include/catalog/pg_class.h
src/include/catalog/pg_collation.dat [new file with mode: 0644]
src/include/catalog/pg_collation.h
src/include/catalog/pg_constraint.h
src/include/catalog/pg_conversion.h
src/include/catalog/pg_database.dat [new file with mode: 0644]
src/include/catalog/pg_database.h
src/include/catalog/pg_db_role_setting.h
src/include/catalog/pg_default_acl.h
src/include/catalog/pg_depend.h
src/include/catalog/pg_description.h
src/include/catalog/pg_enum.h
src/include/catalog/pg_event_trigger.h
src/include/catalog/pg_extension.h
src/include/catalog/pg_foreign_data_wrapper.h
src/include/catalog/pg_foreign_server.h
src/include/catalog/pg_foreign_table.h
src/include/catalog/pg_index.h
src/include/catalog/pg_inherits.h
src/include/catalog/pg_init_privs.h
src/include/catalog/pg_language.dat [new file with mode: 0644]
src/include/catalog/pg_language.h
src/include/catalog/pg_largeobject.h
src/include/catalog/pg_largeobject_metadata.h
src/include/catalog/pg_namespace.dat [new file with mode: 0644]
src/include/catalog/pg_namespace.h
src/include/catalog/pg_opclass.dat [new file with mode: 0644]
src/include/catalog/pg_opclass.h
src/include/catalog/pg_operator.dat [new file with mode: 0644]
src/include/catalog/pg_operator.h
src/include/catalog/pg_opfamily.dat [new file with mode: 0644]
src/include/catalog/pg_opfamily.h
src/include/catalog/pg_partitioned_table.h
src/include/catalog/pg_pltemplate.dat [new file with mode: 0644]
src/include/catalog/pg_pltemplate.h
src/include/catalog/pg_policy.h
src/include/catalog/pg_proc.dat [new file with mode: 0644]
src/include/catalog/pg_proc.h
src/include/catalog/pg_publication.h
src/include/catalog/pg_publication_rel.h
src/include/catalog/pg_range.dat [new file with mode: 0644]
src/include/catalog/pg_range.h
src/include/catalog/pg_replication_origin.h
src/include/catalog/pg_rewrite.h
src/include/catalog/pg_seclabel.h
src/include/catalog/pg_sequence.h
src/include/catalog/pg_shdepend.h
src/include/catalog/pg_shdescription.h
src/include/catalog/pg_shseclabel.h
src/include/catalog/pg_statistic.h
src/include/catalog/pg_statistic_ext.h
src/include/catalog/pg_subscription.h
src/include/catalog/pg_subscription_rel.h
src/include/catalog/pg_tablespace.dat [new file with mode: 0644]
src/include/catalog/pg_tablespace.h
src/include/catalog/pg_transform.h
src/include/catalog/pg_trigger.h
src/include/catalog/pg_ts_config.dat [new file with mode: 0644]
src/include/catalog/pg_ts_config.h
src/include/catalog/pg_ts_config_map.dat [new file with mode: 0644]
src/include/catalog/pg_ts_config_map.h
src/include/catalog/pg_ts_dict.dat [new file with mode: 0644]
src/include/catalog/pg_ts_dict.h
src/include/catalog/pg_ts_parser.dat [new file with mode: 0644]
src/include/catalog/pg_ts_parser.h
src/include/catalog/pg_ts_template.dat [new file with mode: 0644]
src/include/catalog/pg_ts_template.h
src/include/catalog/pg_type.dat [new file with mode: 0644]
src/include/catalog/pg_type.h
src/include/catalog/pg_user_mapping.h
src/include/catalog/reformat_dat_file.pl [new file with mode: 0644]
src/include/catalog/toasting.h
src/include/catalog/unused_oids
src/interfaces/ecpg/ecpglib/pg_type.h
src/tools/msvc/Solution.pm
src/tools/msvc/clean.bat
src/tools/pgindent/pgindent

index 33378b46eaa1ca62d442227bc21477bd54b67ca6..c4ffc61b84b71066d3a170222082b104b6d1c04d 100644 (file)
 <!-- doc/src/sgml/bki.sgml -->
 
 <chapter id="bki">
- <title><acronym>BKI</acronym> Backend Interface</title>
+ <title>System Catalog Declarations and Initial Contents</title>
 
  <para>
-  Backend Interface (<acronym>BKI</acronym>) files are scripts in a
-  special language that is understood by the
-  <productname>PostgreSQL</productname> backend when running in the
-  <quote>bootstrap</quote> mode.  The bootstrap mode allows system catalogs
-  to be created and filled from scratch, whereas ordinary SQL commands
-  require the catalogs to exist already.
-  <acronym>BKI</acronym> files can therefore be used to create the
-  database system in the first place.  (And they are probably not
-  useful for anything else.)
+  <productname>PostgreSQL</productname> uses many different system catalogs
+  to keep track of the existence and properties of database objects, such as
+  tables and functions.  Physically there is no difference between a system
+  catalog and a plain user table, but the backend C code knows the structure
+  and properties of each catalog, and can manipulate it directly at a low
+  level.  Thus, for example, it is inadvisable to attempt to alter the
+  structure of a catalog on-the-fly; that would break assumptions built into
+  the C code about how rows of the catalog are laid out.  But the structure
+  of the catalogs can change between major versions.
  </para>
 
  <para>
-  <application>initdb</application> uses a <acronym>BKI</acronym> file
-  to do part of its job when creating a new database cluster.  The
-  input file used by <application>initdb</application> is created as
-  part of building and installing <productname>PostgreSQL</productname>
-  by a program named <filename>genbki.pl</filename>, which reads some
-  specially formatted C header files in the <filename>src/include/catalog/</filename>
-  directory of the source tree.  The created <acronym>BKI</acronym> file
-  is called <filename>postgres.bki</filename> and is
-  normally installed in the
-  <filename>share</filename> subdirectory of the installation tree.
+  The structures of the catalogs are declared in specially formatted C
+  header files in the <filename>src/include/catalog/</filename> directory of
+  the source tree.  In particular, for each catalog there is a header file
+  named after the catalog (e.g., <filename>pg_class.h</filename>
+  for <structname>pg_class</structname>), which defines the set of columns
+  the catalog has, as well as some other basic properties such as its OID.
+  Other critical files defining the catalog structure
+  include <filename>indexing.h</filename>, which defines the indexes present
+  on all the system catalogs, and <filename>toasting.h</filename>, which
+  defines TOAST tables for catalogs that need one.
  </para>
 
  <para>
-  Related information can be found in the documentation for
-  <application>initdb</application>.
+  Many of the catalogs have initial data that must be loaded into them
+  during the <quote>bootstrap</quote> phase
+  of <application>initdb</application>, to bring the system up to a point
+  where it is capable of executing SQL commands.  (For
+  example, <filename>pg_class.h</filename> must contain an entry for itself,
+  as well as one for each other system catalog and index.)  This
+  initial data is kept in editable form in data files that are also stored
+  in the <filename>src/include/catalog/</filename> directory.  For example,
+  <filename>pg_proc.dat</filename> describes all the initial rows that must
+  be inserted into the <structname>pg_proc</structname> catalog.
  </para>
 
+ <para>
+  To create the catalog files and load this initial data into them, a
+  backend running in bootstrap mode reads a <acronym>BKI</acronym>
+  (Backend Interface) file containing commands and initial data.
+  The <filename>postgres.bki</filename> file used in this mode is prepared
+  from the aforementioned header and data files, while building
+  a <productname>PostgreSQL</productname> distribution, by a Perl script
+  named <filename>genbki.pl</filename>.
+  Although it's specific to a particular <productname>PostgreSQL</productname>
+  release, <filename>postgres.bki</filename> is platform-independent and is
+  installed in the <filename>share</filename> subdirectory of the
+  installation tree.
+ </para>
+
+ <para>
+  <filename>genbki.pl</filename> also produces a derived header file for
+  each catalog, for example <filename>pg_class_d.h</filename> for
+  the <structname>pg_class</structname> catalog.  This file contains
+  automatically-generated macro definitions, and may contain other macros,
+  enum declarations, and so on that can be useful for client C code that
+  reads a particular catalog.
+ </para>
+
+ <para>
+  Most Postgres developers don't need to be directly concerned with
+  the <acronym>BKI</acronym> file, but almost any nontrivial feature
+  addition in the backend will require modifying the catalog header files
+  and/or initial data files.  The rest of this chapter gives some
+  information about that, and for completeness describes
+  the <acronym>BKI</acronym> file format.
+ </para>
+
+ <sect1 id="system-catalog-declarations">
+  <title>System Catalog Declaration Rules</title>
+
+  <para>
+   The key part of a catalog header file is a C structure definition
+   describing the layout of each row of the catalog.  This begins with
+   a <literal>CATALOG</literal> macro, which so far as the C compiler is
+   concerned is just shorthand for <literal>typedef struct
+   FormData_<replaceable>catalogname</replaceable></literal>.
+   Each field in the struct gives rise to a catalog column.
+   Fields can be annotated using the BKI property macros described
+   in <filename>genbki.h</filename>, for example to define a default value
+   for a field or mark it as nullable or not nullable.
+   The <literal>CATALOG</literal> line can also be annotated, with some
+   other BKI property macros described in <filename>genbki.h</filename>, to
+   define other properties of the catalog as a whole, such as whether
+   it has OIDs (by default, it does).
+  </para>
+
+  <para>
+   The system catalog cache code (and most catalog-munging code in general)
+   assumes that the fixed-length portions of all system catalog tuples are
+   in fact present, because it maps this C struct declaration onto them.
+   Thus, all variable-length fields and nullable fields must be placed at
+   the end, and they cannot be accessed as struct fields.
+   For example, if you tried to
+   set <structname>pg_type</structname>.<structfield>typrelid</structfield>
+   to be NULL, it would fail when some piece of code tried to reference
+   <literal>typetup-&gt;typrelid</literal> (or worse,
+   <literal>typetup-&gt;typelem</literal>, because that follows
+   <structfield>typrelid</structfield>).  This would result in
+   random errors or even segmentation violations.
+  </para>
+
+  <para>
+   As a partial guard against this type of error, variable-length or
+   nullable fields should not be made directly visible to the C compiler.
+   This is accomplished by wrapping them in <literal>#ifdef
+   CATALOG_VARLEN</literal> ... <literal>#endif</literal> (where
+   <literal>CATALOG_VARLEN</literal> is a symbol that is never defined).
+   This prevents C code from carelessly trying to access fields that might
+   not be there or might be at some other offset.
+   As an independent guard against creating incorrect rows, we
+   require all columns that should be non-nullable to be marked so
+   in <structname>pg_attribute</structname>.  The bootstrap code will
+   automatically mark catalog columns as <literal>NOT NULL</literal>
+   if they are fixed-width and are not preceded by any nullable column.
+   Where this rule is inadequate, you can force correct marking by using
+   <literal>BKI_FORCE_NOT_NULL</literal>
+   and <literal>BKI_FORCE_NULL</literal> annotations as needed.  But note
+   that <literal>NOT NULL</literal> constraints are only enforced in the
+   executor, not against tuples that are generated by random C code,
+   so care is still needed when manually creating or updating catalog rows.
+  </para>
+
+  <para>
+   Frontend code should not include any <structname>pg_xxx.h</structname>
+   catalog header file, as these files may contain C code that won't compile
+   outside the backend.  (Typically, that happens because these files also
+   contain declarations for functions
+   in <filename>src/backend/catalog/</filename> files.)
+   Instead, frontend code may include the corresponding
+   generated <structname>pg_xxx_d.h</structname> header, which will contain
+   OID <literal>#define</literal>s and any other data that might be of use
+   on the client side.  If you want macros or other code in a catalog header
+   to be visible to frontend code, write <literal>#ifdef
+   EXPOSE_TO_CLIENT_CODE</literal> ... <literal>#endif</literal> around that
+   section to instruct <filename>genbki.pl</filename> to copy that section
+   to the <structname>pg_xxx_d.h</structname> header.
+  </para>
+
+  <para>
+   A few of the catalogs are so fundamental that they can't even be created
+   by the <acronym>BKI</acronym> <literal>create</literal> command that's
+   used for most catalogs, because that command needs to write information
+   into these catalogs to describe the new catalog.  These are
+   called <firstterm>bootstrap</firstterm> catalogs, and defining one takes
+   a lot of extra work: you have to manually prepare appropriate entries for
+   them in the pre-loaded contents of <structname>pg_class</structname>
+   and <structname>pg_type</structname>, and those entries will need to be
+   updated for subsequent changes to the catalog's structure.
+   (Bootstrap catalogs also need pre-loaded entries
+   in <structname>pg_attribute</structname>, but
+   fortunately <filename>genbki.pl</filename> handles that chore nowadays.)
+   Avoid making new catalogs be bootstrap catalogs if at all possible.
+  </para>
+ </sect1>
+
+ <sect1 id="system-catalog-initial-data">
+  <title>System Catalog Initial Data</title>
+
+  <para>
+   Each catalog that has any manually-created initial data (some do not)
+   has a corresponding <literal>.dat</literal> file that contains its
+   initial data in an editable format.
+  </para>
+
+  <sect2 id="system-catalog-initial-data-format">
+   <title>Data File Format</title>
+
+   <para>
+    Each <literal>.dat</literal> file contains Perl data structure literals
+    that are simply eval'd to produce an in-memory data structure consisting
+    of an array of hash references, one per catalog row.
+    A slightly modified excerpt from <filename>pg_database.dat</filename>
+    will demonstrate the key features:
+   </para>
+
+<programlisting>
+[
+
+# LC_COLLATE and LC_CTYPE will be replaced at initdb time with user choices
+# that might contain non-word characters, so we must double-quote them.
+
+{ oid =&gt; '1', oid_symbol =&gt; 'TemplateDbOid',
+  descr =&gt; 'database\'s default template',
+  datname =&gt; 'template1', datdba =&gt; 'PGUID', encoding =&gt; 'ENCODING',
+  datcollate =&gt; '"LC_COLLATE"', datctype =&gt; '"LC_CTYPE"', datistemplate =&gt; 't',
+  datallowconn =&gt; 't', datconnlimit =&gt; '-1', datlastsysoid =&gt; '0',
+  datfrozenxid =&gt; '0', datminmxid =&gt; '1', dattablespace =&gt; '1663',
+  datacl =&gt; '_null_' },
+
+]
+</programlisting>
+
+   <para>
+    Points to note:
+   </para>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      The overall file layout is: open square bracket, one or more sets of
+      curly braces each of which represents a catalog row, close square
+      bracket.  Write a comma after each closing curly brace.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Within each catalog row, write comma-separated
+      <replaceable>key</replaceable> <literal>=&gt;</literal>
+      <replaceable>value</replaceable> pairs.  The
+      allowed <replaceable>key</replaceable>s are the names of the catalog's
+      columns, plus the metadata keys <literal>oid</literal>,
+      <literal>oid_symbol</literal>, and <literal>descr</literal>.
+      (The use of <literal>oid</literal> and <literal>oid_symbol</literal>
+      is described in <xref linkend="system-catalog-oid-assignment"/>
+      below.  <literal>descr</literal> supplies a description string for
+      the object, which will be inserted
+      into <structname>pg_description</structname>
+      or <structname>pg_shdescription</structname> as appropriate.)
+      While the metadata keys are optional, the catalog's defined columns
+      must all be provided, except when the catalog's <literal>.h</literal>
+      file specifies a default value for the column.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      All values must be single-quoted.  Escape single quotes used within
+      a value with a backslash.  (Backslashes meant as data need not be
+      doubled, however; this follows Perl's rules for simple quoted
+      literals.)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Null values are represented by <literal>_null_</literal>.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      If a value is a macro to be expanded
+      by <application>initdb</application>, it should also contain double
+      quotes as shown above, unless we know that no special characters can
+      appear within the string that will be substituted.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Comments are preceded by <literal>#</literal>, and must be on their
+      own lines.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      To aid readability, field values that are OIDs of other catalog
+      entries can be represented by names rather than numeric OIDs.
+      This is described in <xref linkend="system-catalog-oid-references"/>
+      below.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Since hashes are unordered data structures, field order and line
+      layout aren't semantically significant.  However, to maintain a
+      consistent appearance, we set a few rules that are applied by the
+      formatting script <filename>reformat_dat_file.pl</filename>:
+
+      <itemizedlist>
+
+       <listitem>
+        <para>
+         Within each pair of curly braces, the metadata
+         fields <literal>oid</literal>, <literal>oid_symbol</literal>,
+         and <literal>descr</literal> (if present) come first, in that
+         order, then the catalog's own fields appear in their defined order.
+        </para>
+       </listitem>
+
+       <listitem>
+        <para>
+         Newlines are inserted between fields as needed to limit line length
+         to 80 characters, if possible.  A newline is also inserted between
+         the metadata fields and the regular fields.
+        </para>
+       </listitem>
+
+       <listitem>
+        <para>
+         If the catalog's <literal>.h</literal> file specifies a default
+         value for a column, and a data entry has that same
+         value, <filename>reformat_dat_file.pl</filename> will omit it from
+         the data file.  This keeps the data representation compact.
+        </para>
+       </listitem>
+
+       <listitem>
+        <para>
+         <filename>reformat_dat_file.pl</filename> preserves blank lines
+         and comment lines as-is.
+        </para>
+       </listitem>
+
+      </itemizedlist>
+
+      It's recommended to run <filename>reformat_dat_file.pl</filename>
+      before submitting catalog data patches.  For convenience, you can
+      simply change to <filename>src/include/catalog/</filename> and
+      run <literal>make reformat-dat-files</literal>.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      If you want to add a new method of making the data representation
+      smaller, you must implement it
+      in <filename>reformat_dat_file.pl</filename> and also
+      teach <function>Catalog::ParseData()</function> how to expand the
+      data back into the full representation.
+     </para>
+    </listitem>
+
+   </itemizedlist>
+  </sect2>
+
+  <sect2 id="system-catalog-oid-assignment">
+   <title>OID Assignment</title>
+
+   <para>
+    A catalog row appearing in the initial data can be given a
+    manually-assigned OID by writing an <literal>oid
+    =&gt; <replaceable>nnnn</replaceable></literal> metadata field.
+    Furthermore, if an OID is assigned, a C macro for that OID can be
+    created by writing an <literal>oid_symbol
+    =&gt; <replaceable>name</replaceable></literal> metadata field.
+   </para>
+
+   <para>
+    Pre-loaded catalog rows must have preassigned OIDs if there are OID
+    references to them in other pre-loaded rows.  A preassigned OID is
+    also needed if the row's OID must be referenced from C code.
+    If neither case applies, the <literal>oid</literal> metadata field can
+    be omitted, in which case the bootstrap code assigns an OID
+    automatically, or leaves it zero in a catalog that has no OIDs.
+    In practice we usually preassign OIDs for all or none of the pre-loaded
+    rows in a given catalog, even if only some of them are actually
+    cross-referenced.
+   </para>
+
+   <para>
+    Writing the actual numeric value of any OID in C code is considered
+    very bad form; always use a macro, instead.  Direct references
+    to <structname>pg_proc</structname> OIDs are common enough that there's
+    a special mechanism to create the necessary macros automatically;
+    see <filename>src/backend/utils/Gen_fmgrtab.pl</filename>.  Similarly
+    &mdash; but, for historical reasons, not done the same way &mdash;
+    there's an automatic method for creating macros
+    for <structname>pg_type</structname>
+    OIDs.  <literal>oid_symbol</literal> entries are therefore not
+    necessary in those two catalogs.  Likewise, macros for
+    the <structname>pg_class</structname> OIDs of system catalogs and
+    indexes are set up automatically.  For all other system catalogs, you
+    have to manually specify any macros you need
+    via <literal>oid_symbol</literal> entries.
+   </para>
+
+   <para>
+    To find an available OID for a new pre-loaded row, run the
+    script <filename>src/include/catalog/unused_oids</filename>.
+    It prints inclusive ranges of unused OIDs (e.g., the output
+    line <quote>45-900</quote> means OIDs 45 through 900 have not been
+    allocated yet).  Currently, OIDs 1-9999 are reserved for manual
+    assignment; the <filename>unused_oids</filename> script simply looks
+    through the catalog headers and <filename>.dat</filename> files
+    to see which ones do not appear.  You can also use
+    the <filename>duplicate_oids</filename> script to check for mistakes.
+    (That script is run automatically at compile time, and will stop the
+    build if a duplicate is found.)
+   </para>
+
+   <para>
+    The OID counter starts at 10000 at the beginning of a bootstrap run.
+    If a catalog row is in a table that requires OIDs, but no OID was
+    preassigned by an <literal>oid</literal> field, then it will
+    receive an OID of 10000 or above.
+   </para>
+  </sect2>
+
+  <sect2 id="system-catalog-oid-references">
+   <title>OID Reference Lookup</title>
+
+   <para>
+    Cross-references from one initial catalog row to another can be written
+    by just writing the preassigned OID of the referenced row.  But
+    that's error-prone and hard to understand, so for frequently-referenced
+    catalogs, <filename>genbki.pl</filename> provides mechanisms to write
+    symbolic references instead.  Currently this is possible for references
+    to access methods, functions, operators, opclasses, opfamilies, and
+    types.  The rules are as follows:
+   </para>
+
+   <itemizedlist>
+
+    <listitem>
+     <para>
+      Use of symbolic references is enabled in a particular catalog column
+      by attaching <literal>BKI_LOOKUP(<replaceable>lookuprule</replaceable>)</literal>
+      to the column's definition, where <replaceable>lookuprule</replaceable>
+      is <structname>pg_am</structname>, <structname>pg_proc</structname>,
+      <structname>pg_operator</structname>,
+      <structname>pg_opclass</structname>,
+      <structname>pg_opfamily</structname>,
+      or <structname>pg_type</structname>.
+      <literal>BKI_LOOKUP</literal> can be attached to columns of
+      type <type>Oid</type>, <type>regproc</type>, <type>oidvector</type>,
+      or <type>Oid[]</type>; in the latter two cases it implies performing a
+      lookup on each element of the array.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      In such a column, all entries must use the symbolic format except
+      when writing <literal>0</literal> for InvalidOid.  (If the column is
+      declared <type>regproc</type>, you can optionally
+      write <literal>-</literal> instead of <literal>0</literal>.)
+      <filename>genbki.pl</filename> will warn about unrecognized names.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Access methods are just represented by their names, as are types.
+      Type names must match the referenced <structname>pg_type</structname>
+      entry's <structfield>typname</structfield>; you do not get to use any
+      aliases such as <literal>integer</literal>
+      for <literal>int4</literal>.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      A function can be represented by
+      its <structfield>proname</structfield>, if that is unique among
+      the <filename>pg_proc.dat</filename> entries (this works like regproc
+      input).  Otherwise, write it
+      as <replaceable>proname(argtypename,argtypename,...)</replaceable>,
+      like regprocedure.  The argument type names must be spelled exactly as
+      they are in the <filename>pg_proc.dat</filename> entry's
+      <structfield>proargtypes</structfield> field.  Do not insert any
+      spaces.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      Operators are represented
+      by <replaceable>oprname(lefttype,righttype)</replaceable>,
+      writing the type names exactly as they appear in
+      the <filename>pg_operator.dat</filename>
+      entry's <structfield>oprleft</structfield>
+      and <structfield>oprright</structfield> fields.
+      (Write <literal>0</literal> for the omitted operand of a unary
+      operator.)
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      The names of opclasses and opfamilies are only unique within an
+      access method, so they are represented
+      by <replaceable>access_method_name</replaceable><literal>/</literal><replaceable>object_name</replaceable>.
+     </para>
+    </listitem>
+
+    <listitem>
+     <para>
+      In none of these cases is there any provision for
+      schema-qualification; all objects created during bootstrap are
+      expected to be in the pg_catalog schema.
+     </para>
+    </listitem>
+   </itemizedlist>
+
+   <para>
+    <filename>genbki.pl</filename> resolves all symbolic references while it
+    runs, and puts simple numeric OIDs into the emitted BKI file.  There is
+    therefore no need for the bootstrap backend to deal with symbolic
+    references.
+   </para>
+  </sect2>
+
+  <sect2 id="system-catalog-recipes">
+   <title>Recipes for Editing Data Files</title>
+
+   <para>
+    Here are some suggestions about the easiest ways to perform common tasks
+    when updating catalog data files.
+   </para>
+
+   <formalpara>
+    <title>Add a new column with a default to a catalog:</title>
+    <para>
+     Add the column to the header file with
+     a <literal>BKI_DEFAULT(<replaceable>value</replaceable>)</literal>
+     annotation.  The data file need only be adjusted by adding the field
+     in existing rows where a non-default value is needed.
+    </para>
+   </formalpara>
+
+   <formalpara>
+    <title>Add a default value to an existing column that doesn't have
+     one:</title>
+    <para>
+     Add a <literal>BKI_DEFAULT</literal> annotation to the header file,
+     then run <literal>make reformat-dat-files</literal> to remove
+     now-redundant field entries.
+    </para>
+   </formalpara>
+
+   <formalpara>
+    <title>Remove a column, whether it has a default or not:</title>
+    <para>
+     Remove the column from the header, then run <literal>make
+     reformat-dat-files</literal> to remove now-useless field entries.
+    </para>
+   </formalpara>
+
+   <formalpara>
+    <title>Change or remove an existing default value:</title>
+    <para>
+     You cannot simply change the header file, since that will cause the
+     current data to be interpreted incorrectly.  First run <literal>make
+     expand-dat-files</literal> to rewrite the data files with all
+     default values inserted explicitly, then change or remove
+     the <literal>BKI_DEFAULT</literal> annotation, then run <literal>make
+     reformat-dat-files</literal> to remove superfluous fields again.
+    </para>
+   </formalpara>
+
+   <formalpara>
+    <title>Ad-hoc bulk editing:</title>
+    <para>
+     <filename>reformat_dat_file.pl</filename> can be adapted to perform
+     many kinds of bulk changes.  Look for its block comments showing where
+     one-off code can be inserted.  In the following example, we are going
+     to consolidate two boolean fields in <structname>pg_proc</structname>
+     into a char field:
+
+     <orderedlist>
+      <listitem>
+       <para>
+        Add the new column, with a default,
+        to <filename>pg_proc.h</filename>:
+<programlisting>
++    /* see PROKIND_ categories below */
++    char        prokind BKI_DEFAULT(f);
+</programlisting>
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Create a new script based on <filename>reformat_dat_file.pl</filename>
+        to insert appropriate values on-the-fly:
+<programlisting>
+-           # At this point we have the full row in memory as a hash
+-           # and can do any operations we want. As written, it only
+-           # removes default values, but this script can be adapted to
+-           # do one-off bulk-editing.
++           # One-off change to migrate to prokind
++           # Default has already been filled in by now, so change to other
++           # values as appropriate
++           if ($values{proisagg} eq 't')
++           {
++               $values{prokind} = 'a';
++           }
++           elsif ($values{proiswindow} eq 't')
++           {
++               $values{prokind} = 'w';
++           }
+</programlisting>
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Run the new script:
+<programlisting>
+$ cd src/include/catalog
+$ perl -I ../../backend/catalog  rewrite_dat_with_prokind.pl  pg_proc.dat
+</programlisting>
+        At this point <filename>pg_proc.dat</filename> has all three
+        columns, <structfield>prokind</structfield>,
+        <structfield>proisagg</structfield>,
+        and <structfield>proiswindow</structfield>, though they will appear
+        only in rows where they have non-default values.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Remove the old columns from <filename>pg_proc.h</filename>:
+<programlisting>
+-    /* is it an aggregate? */
+-    bool        proisagg BKI_DEFAULT(f);
+-
+-    /* is it a window function? */
+-    bool        proiswindow BKI_DEFAULT(f);
+</programlisting>
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+        Finally, run <literal>make reformat-dat-files</literal> to remove
+        the useless old entries from <filename>pg_proc.dat</filename>.
+       </para>
+      </listitem>
+     </orderedlist>
+
+     For further examples of scripts used for bulk editing, see
+     <filename>convert_oid2name.pl</filename>
+     and <filename>remove_pg_type_oid_symbols.pl</filename> attached to this
+     message:
+     <ulink url="https://www.postgresql.org/message-id/CAJVSVGVX8gXnPm+Xa=DxR7kFYprcQ1tNcCT5D0O3ShfnM6jehA@mail.gmail.com"></ulink>
+    </para>
+   </formalpara>
+  </sect2>
+ </sect1>
+
  <sect1 id="bki-format">
   <title><acronym>BKI</acronym> File Format</title>
 
      <optional><literal>rowtype_oid</literal> <replaceable>oid</replaceable></optional>
      (<replaceable class="parameter">name1</replaceable> =
      <replaceable class="parameter">type1</replaceable>
-     <optional>FORCE NOT NULL | FORCE NULL </optional> <optional>,
+     <optional><literal>FORCE NOT NULL</literal> | <literal>FORCE NULL</literal> </optional> <optional>,
      <replaceable class="parameter">name2</replaceable> =
      <replaceable class="parameter">type2</replaceable>
-     <optional>FORCE NOT NULL | FORCE NULL </optional>,
+     <optional><literal>FORCE NOT NULL</literal> | <literal>FORCE NULL</literal> </optional>,
      ...</optional>)
     </term>
 
       tables containing columns of other types, this cannot be done until
       after <structname>pg_type</structname> has been created and filled with
       appropriate entries.  (That effectively means that only these
-      column types can be used in bootstrapped tables, but non-bootstrap
+      column types can be used in bootstrap catalogs, but non-bootstrap
       catalogs can contain any built-in type.)
      </para>
 
  </sect1>
 
  <sect1 id="bki-example">
-  <title>Example</title>
+  <title>BKI Example</title>
 
   <para>
    The following sequence of commands will create the
index 8729ccd5c5a28dda9248e3c220b71a8b47cad0b0..1626999a7015d0cc645428a0c08187b5e19bcc9f 100644 (file)
@@ -3566,7 +3566,7 @@ Oid PQftype(const PGresult *res,
        You can query the system table <literal>pg_type</literal> to
        obtain the names and properties of the various data types. The
        <acronym>OID</acronym>s of the built-in data types are defined
-       in the file <filename>src/include/catalog/pg_type.h</filename>
+       in the file <filename>src/include/catalog/pg_type_d.h</filename>
        in the source tree.
       </para>
      </listitem>
index bcdbd9588aa437ce3a41123e71be07154653645b..0e56399cb9a4e9d2de8a3d5ea095aea611c750f0 100644 (file)
@@ -41,6 +41,11 @@ endif
 
 $(recurse)
 
+# Update the commonly used headers before building the subdirectories;
+# otherwise, in a parallel build, several different sub-jobs will try to
+# remake them concurrently
+$(SUBDIRS:%=all-%-recurse): | submake-generated-headers
+
 install: install-local
 
 install-local: installdirs-local
index 42a0748ade55b7ab4307cab3b611d41801863fe0..82a59eac2d772aab42ff048b6713cc3669dc77d8 100644 (file)
@@ -53,7 +53,7 @@ endif
 
 ##########################################################################
 
-all: submake-libpgport submake-schemapg postgres $(POSTGRES_IMP)
+all: submake-libpgport submake-catalog-headers postgres $(POSTGRES_IMP)
 
 ifneq ($(PORTNAME), cygwin)
 ifneq ($(PORTNAME), win32)
@@ -151,19 +151,17 @@ utils/errcodes.h: utils/generate-errcodes.pl utils/errcodes.txt
 utils/fmgrprotos.h: utils/fmgroids.h
        touch $@
 
-utils/fmgroids.h: utils/Gen_fmgrtab.pl catalog/Catalog.pm $(top_srcdir)/src/include/catalog/pg_proc.h
+utils/fmgroids.h: utils/Gen_fmgrtab.pl catalog/Catalog.pm $(top_srcdir)/src/include/catalog/pg_proc.dat $(top_srcdir)/src/include/access/transam.h
        $(MAKE) -C utils fmgroids.h fmgrprotos.h
 
 utils/probes.h: utils/probes.d
        $(MAKE) -C utils probes.h
 
 # run this unconditionally to avoid needing to know its dependencies here:
-catalog/schemapg.h: | submake-schemapg
+submake-catalog-headers:
+       $(MAKE) -C catalog distprep generated-header-symlinks
 
-submake-schemapg:
-       $(MAKE) -C catalog schemapg.h
-
-.PHONY: submake-schemapg
+.PHONY: submake-catalog-headers
 
 # Make symlinks for these headers in the include directory. That way
 # we can cut down on the -I options. Also, a symlink is automatically
@@ -178,18 +176,13 @@ submake-schemapg:
 
 .PHONY: generated-headers
 
-generated-headers: $(top_builddir)/src/include/parser/gram.h $(top_builddir)/src/include/catalog/schemapg.h $(top_builddir)/src/include/storage/lwlocknames.h $(top_builddir)/src/include/utils/errcodes.h $(top_builddir)/src/include/utils/fmgroids.h $(top_builddir)/src/include/utils/fmgrprotos.h $(top_builddir)/src/include/utils/probes.h
+generated-headers: $(top_builddir)/src/include/parser/gram.h $(top_builddir)/src/include/storage/lwlocknames.h $(top_builddir)/src/include/utils/errcodes.h $(top_builddir)/src/include/utils/fmgroids.h $(top_builddir)/src/include/utils/fmgrprotos.h $(top_builddir)/src/include/utils/probes.h submake-catalog-headers
 
 $(top_builddir)/src/include/parser/gram.h: parser/gram.h
        prereqdir=`cd '$(dir $<)' >/dev/null && pwd` && \
          cd '$(dir $@)' && rm -f $(notdir $@) && \
          $(LN_S) "$$prereqdir/$(notdir $<)" .
 
-$(top_builddir)/src/include/catalog/schemapg.h: catalog/schemapg.h
-       prereqdir=`cd '$(dir $<)' >/dev/null && pwd` && \
-         cd '$(dir $@)' && rm -f $(notdir $@) && \
-         $(LN_S) "$$prereqdir/$(notdir $<)" .
-
 $(top_builddir)/src/include/storage/lwlocknames.h: storage/lmgr/lwlocknames.h
        prereqdir=`cd '$(dir $<)' >/dev/null && pwd` && \
          cd '$(dir $@)' && rm -f $(notdir $@) && \
@@ -225,7 +218,7 @@ utils/probes.o: utils/probes.d $(SUBDIROBJS)
 distprep:
        $(MAKE) -C parser       gram.c gram.h scan.c
        $(MAKE) -C bootstrap    bootparse.c bootscanner.c
-       $(MAKE) -C catalog      schemapg.h postgres.bki postgres.description postgres.shdescription
+       $(MAKE) -C catalog      distprep
        $(MAKE) -C replication  repl_gram.c repl_scanner.c syncrep_gram.c syncrep_scanner.c
        $(MAKE) -C storage/lmgr lwlocknames.h lwlocknames.c
        $(MAKE) -C utils        fmgrtab.c fmgroids.h fmgrprotos.h errcodes.h
@@ -327,13 +320,7 @@ endif
 ##########################################################################
 
 clean:
-       rm -f $(LOCALOBJS) postgres$(X) $(POSTGRES_IMP) \
-               $(top_builddir)/src/include/parser/gram.h \
-               $(top_builddir)/src/include/catalog/schemapg.h \
-               $(top_builddir)/src/include/storage/lwlocknames.h \
-               $(top_builddir)/src/include/utils/fmgroids.h \
-               $(top_builddir)/src/include/utils/fmgrprotos.h \
-               $(top_builddir)/src/include/utils/probes.h
+       rm -f $(LOCALOBJS) postgres$(X) $(POSTGRES_IMP)
 ifeq ($(PORTNAME), cygwin)
        rm -f postgres.dll libpostgres.a
 endif
@@ -345,15 +332,12 @@ distclean: clean
        rm -f port/tas.s port/dynloader.c port/pg_sema.c port/pg_shmem.c
 
 maintainer-clean: distclean
+       $(MAKE) -C catalog $@
        rm -f bootstrap/bootparse.c \
              bootstrap/bootscanner.c \
              parser/gram.c \
              parser/gram.h \
              parser/scan.c \
-             catalog/schemapg.h \
-             catalog/postgres.bki \
-             catalog/postgres.description \
-             catalog/postgres.shdescription \
              replication/repl_gram.c \
              replication/repl_scanner.c \
              replication/syncrep_gram.c \
index 557af3c0e5e4fedda7bf7f258c165cd9f3e26a0a..9abe91d6e6424e1797add7f6ee364b84acea0ba3 100644 (file)
@@ -2,3 +2,5 @@
 /postgres.description
 /postgres.shdescription
 /schemapg.h
+/pg_*_d.h
+/bki-stamp
index 9ced1547f6bbe4801c0abf24ebc4e2a5bf5b7268..3b3bb6bc6ca7315272105334ff0b0e6b7927690b 100644 (file)
@@ -1,7 +1,7 @@
 #----------------------------------------------------------------------
 #
 # Catalog.pm
-#    Perl module that extracts info from catalog headers into Perl
+#    Perl module that extracts info from catalog files into Perl
 #    data structures
 #
 # Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -16,12 +16,11 @@ package Catalog;
 use strict;
 use warnings;
 
-# Call this function with an array of names of header files to parse.
-# Returns a nested data structure describing the data in the headers.
-sub Catalogs
+# Parses a catalog header file into a data structure describing the schema
+# of the catalog.
+sub ParseHeader
 {
-       my (%catalogs, $catname, $declaring_attributes, $most_recent);
-       $catalogs{names} = [];
+       my $input_file = shift;
 
        # There are a few types which are given one name in the C source, but a
        # different name at the SQL level.  These are enumerated here.
@@ -34,108 +33,68 @@ sub Catalogs
                'TransactionId' => 'xid',
                'XLogRecPtr'    => 'pg_lsn');
 
-       foreach my $input_file (@_)
-       {
                my %catalog;
+               my $declaring_attributes = 0;
                my $is_varlen     = 0;
+               my $is_client_code = 0;
 
                $catalog{columns} = [];
-               $catalog{data}    = [];
+               $catalog{toasting} = [];
+               $catalog{indexing} = [];
+               $catalog{client_code} = [];
 
                open(my $ifh, '<', $input_file) || die "$input_file: $!";
 
-               my ($filename) = ($input_file =~ m/(\w+)\.h$/);
-               my $natts_pat = "Natts_$filename";
-
                # Scan the input file.
                while (<$ifh>)
                {
 
-                       # Strip C-style comments.
-                       s;/\*(.|\n)*\*/;;g;
-                       if (m;/\*;)
-                       {
-
-                               # handle multi-line comments properly.
-                               my $next_line = <$ifh>;
-                               die "$input_file: ends within C-style comment\n"
-                                 if !defined $next_line;
-                               $_ .= $next_line;
-                               redo;
-                       }
-
-                       # Remember input line number for later.
-                       my $input_line_number = $.;
-
-                       # Strip useless whitespace and trailing semicolons.
-                       chomp;
-                       s/^\s+//;
-                       s/;\s*$//;
-                       s/\s+/ /g;
-
-                       # Push the data into the appropriate data structure.
-                       if (/$natts_pat\s+(\d+)/)
-                       {
-                               $catalog{natts} = $1;
-                       }
-                       elsif (
-                               /^DATA\(insert(\s+OID\s+=\s+(\d+))?\s+\(\s*(.*)\s*\)\s*\)$/)
-                       {
-                               check_natts($filename, $catalog{natts}, $3, $input_file,
-                                       $input_line_number);
-
-                               push @{ $catalog{data} }, { oid => $2, bki_values => $3 };
-                       }
-                       elsif (/^DESCR\(\"(.*)\"\)$/)
+                       # Set appropriate flag when we're in certain code sections.
+                       if (/^#/)
                        {
-                               $most_recent = $catalog{data}->[-1];
-
-                               # this tests if most recent line is not a DATA() statement
-                               if (ref $most_recent ne 'HASH')
-                               {
-                                       die "DESCR() does not apply to any catalog ($input_file)";
-                               }
-                               if (!defined $most_recent->{oid})
-                               {
-                                       die "DESCR() does not apply to any oid ($input_file)";
-                               }
-                               elsif ($1 ne '')
+                               $is_varlen = 1 if /^#ifdef\s+CATALOG_VARLEN/;
+                               if (/^#ifdef\s+EXPOSE_TO_CLIENT_CODE/)
                                {
-                                       $most_recent->{descr} = $1;
+                                       $is_client_code = 1;
+                                       next;
                                }
+                               next if !$is_client_code;
                        }
-                       elsif (/^SHDESCR\(\"(.*)\"\)$/)
-                       {
-                               $most_recent = $catalog{data}->[-1];
 
-                               # this tests if most recent line is not a DATA() statement
-                               if (ref $most_recent ne 'HASH')
-                               {
-                                       die
-                                         "SHDESCR() does not apply to any catalog ($input_file)";
-                               }
-                               if (!defined $most_recent->{oid})
-                               {
-                                       die "SHDESCR() does not apply to any oid ($input_file)";
-                               }
-                               elsif ($1 ne '')
+                       if (!$is_client_code)
+                       {
+                               # Strip C-style comments.
+                               s;/\*(.|\n)*\*/;;g;
+                               if (m;/\*;)
                                {
-                                       $most_recent->{shdescr} = $1;
+
+                                       # handle multi-line comments properly.
+                                       my $next_line = <$ifh>;
+                                       die "$input_file: ends within C-style comment\n"
+                                         if !defined $next_line;
+                                       $_ .= $next_line;
+                                       redo;
                                }
+
+                               # Strip useless whitespace and trailing semicolons.
+                               chomp;
+                               s/^\s+//;
+                               s/;\s*$//;
+                               s/\s+/ /g;
                        }
-                       elsif (/^DECLARE_TOAST\(\s*(\w+),\s*(\d+),\s*(\d+)\)/)
+
+                       # Push the data into the appropriate data structure.
+                       if (/^DECLARE_TOAST\(\s*(\w+),\s*(\d+),\s*(\d+)\)/)
                        {
-                               $catname = 'toasting';
                                my ($toast_name, $toast_oid, $index_oid) = ($1, $2, $3);
-                               push @{ $catalog{data} },
+                               push @{ $catalog{toasting} },
                                  "declare toast $toast_oid $index_oid on $toast_name\n";
                        }
                        elsif (/^DECLARE_(UNIQUE_)?INDEX\(\s*(\w+),\s*(\d+),\s*(.+)\)/)
                        {
-                               $catname = 'indexing';
                                my ($is_unique, $index_name, $index_oid, $using) =
                                  ($1, $2, $3, $4);
-                               push @{ $catalog{data} },
+                               push @{ $catalog{indexing} },
                                  sprintf(
                                        "declare %sindex %s %s %s\n",
                                        $is_unique ? 'unique ' : '',
@@ -143,37 +102,51 @@ sub Catalogs
                        }
                        elsif (/^BUILD_INDICES/)
                        {
-                               push @{ $catalog{data} }, "build indices\n";
+                               push @{ $catalog{indexing} }, "build indices\n";
                        }
-                       elsif (/^CATALOG\(([^,]*),(\d+)\)/)
+                       elsif (/^CATALOG\((\w+),(\d+),(\w+)\)/)
                        {
-                               $catname = $1;
+                               $catalog{catname} = $1;
                                $catalog{relation_oid} = $2;
-
-                               # Store pg_* catalog names in the same order we receive them
-                               push @{ $catalogs{names} }, $catname;
+                               $catalog{relation_oid_macro} = $3;
 
                                $catalog{bootstrap} = /BKI_BOOTSTRAP/ ? ' bootstrap' : '';
                                $catalog{shared_relation} =
                                  /BKI_SHARED_RELATION/ ? ' shared_relation' : '';
                                $catalog{without_oids} =
                                  /BKI_WITHOUT_OIDS/ ? ' without_oids' : '';
-                               $catalog{rowtype_oid} =
-                                 /BKI_ROWTYPE_OID\((\d+)\)/ ? " rowtype_oid $1" : '';
+                               if (/BKI_ROWTYPE_OID\((\d+),(\w+)\)/)
+                               {
+                                       $catalog{rowtype_oid} = $1;
+                                       $catalog{rowtype_oid_clause} = " rowtype_oid $1";
+                                       $catalog{rowtype_oid_macro} = $2;
+                               }
+                               else
+                               {
+                                       $catalog{rowtype_oid} = '';
+                                       $catalog{rowtype_oid_clause} = '';
+                                       $catalog{rowtype_oid_macro} = '';
+                               }
                                $catalog{schema_macro} = /BKI_SCHEMA_MACRO/ ? 1 : 0;
                                $declaring_attributes = 1;
                        }
-                       elsif ($declaring_attributes)
+                       elsif ($is_client_code)
                        {
-                               next if (/^{|^$/);
-                               if (/^#/)
+                               if (/^#endif/)
                                {
-                                       $is_varlen = 1 if /^#ifdef\s+CATALOG_VARLEN/;
-                                       next;
+                                       $is_client_code = 0;
+                               }
+                               else
+                               {
+                                       push @{ $catalog{client_code} }, $_;
                                }
+                       }
+                       elsif ($declaring_attributes)
+                       {
+                               next if (/^{|^$/);
                                if (/^}/)
                                {
-                                       undef $declaring_attributes;
+                                       $declaring_attributes = 0;
                                }
                                else
                                {
@@ -208,10 +181,17 @@ sub Catalogs
                                                {
                                                        $column{forcenotnull} = 1;
                                                }
-                                               elsif ($attopt =~ /BKI_DEFAULT\((\S+)\)/)
+                                               # We use quotes for values like \0 and \054, to
+                                               # make sure all compilers and syntax highlighters
+                                               # can recognize them properly.
+                                               elsif ($attopt =~ /BKI_DEFAULT\(['"]?([^'"]+)['"]?\)/)
                                                {
                                                        $column{default} = $1;
                                                }
+                                               elsif ($attopt =~ /BKI_LOOKUP\((\w+)\)/)
+                                               {
+                                                       $column{lookup} = $1;
+                                               }
                                                else
                                                {
                                                        die
@@ -227,41 +207,89 @@ sub Catalogs
                                }
                        }
                }
-               $catalogs{$catname} = \%catalog;
                close $ifh;
-       }
-       return \%catalogs;
+       return \%catalog;
 }
 
-# Split a DATA line into fields.
-# Call this on the bki_values element of a DATA item returned by Catalogs();
-# it returns a list of field values.  We don't strip quoting from the fields.
-# Note: it should be safe to assign the result to a list of length equal to
-# the nominal number of catalog fields, because check_natts already checked
-# the number of fields.
-sub SplitDataLine
+# Parses a file containing Perl data structure literals, returning live data.
+#
+# The parameter $preserve_formatting needs to be set for callers that want
+# to work with non-data lines in the data files, such as comments and blank
+# lines. If a caller just wants to consume the data, leave it unset.
+sub ParseData
 {
-       my $bki_values = shift;
-
-       # This handling of quoted strings might look too simplistic, but it
-       # matches what bootscanner.l does: that has no provision for quote marks
-       # inside quoted strings, either.  If we don't have a quoted string, just
-       # snarf everything till next whitespace.  That will accept some things
-       # that bootscanner.l will see as erroneous tokens; but it seems wiser
-       # to do that and let bootscanner.l complain than to silently drop
-       # non-whitespace characters.
-       my @result = $bki_values =~ /"[^"]*"|\S+/g;
-
-       return @result;
+       my ($input_file, $schema, $preserve_formatting) = @_;
+
+       open(my $ifd, '<', $input_file) || die "$input_file: $!";
+       $input_file =~ /(\w+)\.dat$/
+         or die "Input file needs to be a .dat file.\n";
+       my $catname = $1;
+       my $data = [];
+
+       # Scan the input file.
+       while (<$ifd>)
+       {
+               my $hash_ref;
+
+               if (/{/)
+               {
+                       # Capture the hash ref
+                       # NB: Assumes that the next hash ref can't start on the
+                       # same line where the present one ended.
+                       # Not foolproof, but we shouldn't need a full parser,
+                       # since we expect relatively well-behaved input.
+
+                       # Quick hack to detect when we have a full hash ref to
+                       # parse. We can't just use a regex because of values in
+                       # pg_aggregate and pg_proc like '{0,0}'.
+                       my $lcnt = tr/{//;
+                       my $rcnt = tr/}//;
+
+                       if ($lcnt == $rcnt)
+                       {
+                               eval '$hash_ref = ' . $_;
+                               if (!ref $hash_ref)
+                               {
+                                       die "Error parsing $_\n$!";
+                               }
+
+                               # Expand tuples to their full representation.
+                               AddDefaultValues($hash_ref, $schema, $catname);
+                       }
+                       else
+                       {
+                               my $next_line = <$ifd>;
+                               die "$input_file: ends within Perl hash\n"
+                                 if !defined $next_line;
+                               $_ .= $next_line;
+                               redo;
+                       }
+               }
+
+               # If we found a hash reference, keep it
+               # and annotate the line number.
+               # Only keep non-data strings if we
+               # are told to preserve formatting.
+               if (defined $hash_ref)
+               {
+                       $hash_ref->{line_number} = $.;
+                       push @$data, $hash_ref;
+               }
+               elsif ($preserve_formatting)
+               {
+                       push @$data, $_;
+               }
+       }
+       close $ifd;
+       return $data;
 }
 
-# Fill in default values of a record using the given schema. It's the
-# caller's responsibility to specify other values beforehand.
+# Fill in default values of a record using the given schema.
+# It's the caller's responsibility to specify other values beforehand.
 sub AddDefaultValues
 {
-       my ($row, $schema) = @_;
+       my ($row, $schema, $catname) = @_;
        my @missing_fields;
-       my $msg;
 
        foreach my $column (@$schema)
        {
@@ -276,6 +304,13 @@ sub AddDefaultValues
                {
                        $row->{$attname} = $column->{default};
                }
+               elsif ($catname eq 'pg_proc' && $attname eq 'pronargs' &&
+                          defined($row->{proargtypes}))
+               {
+                       # pg_proc.pronargs can be derived from proargtypes.
+                       my @proargtypes = split /\s+/, $row->{proargtypes};
+                       $row->{$attname} = scalar(@proargtypes);
+               }
                else
                {
                        # Failed to find a value.
@@ -285,14 +320,15 @@ sub AddDefaultValues
 
        if (@missing_fields)
        {
-               $msg = "Missing values for: " . join(', ', @missing_fields);
-               $msg .= "\nShowing other values for context:\n";
+               my $msg = "Failed to form full tuple for $catname\n";
+               $msg .= "Missing values for: " . join(', ', @missing_fields);
+               $msg .= "\nOther values for row:\n";
                while (my($key, $value) = each %$row)
                {
                        $msg .= "$key => $value, ";
                }
+               die $msg;
        }
-       return $msg;
 }
 
 # Rename temporary files to final names.
@@ -308,7 +344,6 @@ sub RenameTempFile
        rename($temp_name, $final_name) || die "rename: $temp_name: $!";
 }
 
-
 # Find a symbol defined in a particular header file and extract the value.
 #
 # The include path has to be passed as a reference to an array.
@@ -340,22 +375,18 @@ sub FindDefinedSymbol
        die "$catalog_header: not found in any include directory\n";
 }
 
-
-# verify the number of fields in the passed-in DATA line
-sub check_natts
+# Similar to FindDefinedSymbol, but looks in the bootstrap metadata.
+sub FindDefinedSymbolFromData
 {
-       my ($catname, $natts, $bki_val, $file, $line) = @_;
-
-       die
-"Could not find definition for Natts_${catname} before start of DATA() in $file\n"
-         unless defined $natts;
-
-       my $nfields = scalar(SplitDataLine($bki_val));
-
-       die sprintf
-"Wrong number of attributes in DATA() entry at %s:%d (expected %d but got %d)\n",
-         $file, $line, $natts, $nfields
-         unless $natts == $nfields;
+       my ($data, $symbol) = @_;
+       foreach my $row (@{ $data })
+       {
+               if ($row->{oid_symbol} eq $symbol)
+               {
+                       return $row->{oid};
+               }
+       }
+       die "no definition found for $symbol\n";
 }
 
 1;
index 30ca5095347a1e240f376412c19100fb7f21a725..d25d98a40b8e969d65110467e3515dd22e52f8fc 100644 (file)
@@ -2,6 +2,9 @@
 #
 # Makefile for backend/catalog
 #
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
 # src/backend/catalog/Makefile
 #
 #-------------------------------------------------------------------------
@@ -22,13 +25,11 @@ BKIFILES = postgres.bki postgres.description postgres.shdescription
 
 include $(top_srcdir)/src/backend/common.mk
 
-all: $(BKIFILES) schemapg.h
-
-# Note: there are some undocumented dependencies on the ordering in which
-# the catalog header files are assembled into postgres.bki.  In particular,
-# indexing.h had better be last, and toasting.h just before it.
-
-POSTGRES_BKI_SRCS = $(addprefix $(top_srcdir)/src/include/catalog/,\
+# Note: the order of this list determines the order in which the catalog
+# header files are assembled into postgres.bki.  BKI_BOOTSTRAP catalogs
+# must appear first, and there are reputedly other, undocumented ordering
+# dependencies.
+CATALOG_HEADERS := \
        pg_proc.h pg_type.h pg_attribute.h pg_class.h \
        pg_attrdef.h pg_constraint.h pg_inherits.h pg_index.h pg_operator.h \
        pg_opfamily.h pg_opclass.h pg_am.h pg_amop.h pg_amproc.h \
@@ -45,34 +46,63 @@ POSTGRES_BKI_SRCS = $(addprefix $(top_srcdir)/src/include/catalog/,\
        pg_default_acl.h pg_init_privs.h pg_seclabel.h pg_shseclabel.h \
        pg_collation.h pg_partitioned_table.h pg_range.h pg_transform.h \
        pg_sequence.h pg_publication.h pg_publication_rel.h pg_subscription.h \
-       pg_subscription_rel.h \
-       toasting.h indexing.h \
-    )
+       pg_subscription_rel.h
+
+GENERATED_HEADERS := $(CATALOG_HEADERS:%.h=%_d.h) schemapg.h
+
+# In the list of headers used to assemble postgres.bki, indexing.h needs
+# be last, and toasting.h just before it.  This ensures we don't try to
+# create indexes or toast tables before their catalogs exist.
+POSTGRES_BKI_SRCS := $(addprefix $(top_srcdir)/src/include/catalog/,\
+       $(CATALOG_HEADERS) toasting.h indexing.h \
+       )
+
+# The .dat files we need can just be listed alphabetically.
+POSTGRES_BKI_DATA = $(addprefix $(top_srcdir)/src/include/catalog/,\
+       pg_aggregate.dat pg_am.dat pg_amop.dat pg_amproc.dat pg_authid.dat \
+       pg_cast.dat pg_class.dat pg_collation.dat \
+       pg_database.dat pg_language.dat \
+       pg_namespace.dat pg_opclass.dat pg_operator.dat pg_opfamily.dat \
+       pg_pltemplate.dat pg_proc.dat pg_range.dat pg_tablespace.dat \
+       pg_ts_config.dat pg_ts_config_map.dat pg_ts_dict.dat pg_ts_parser.dat \
+       pg_ts_template.dat pg_type.dat \
+       )
 
 # location of Catalog.pm
 catalogdir = $(top_srcdir)/src/backend/catalog
 
-# locations of headers that genbki.pl needs to read
-pg_includes = -I$(top_srcdir)/src/include/catalog -I$(top_builddir)/src/include/catalog
+all: distprep generated-header-symlinks
 
-# see explanation in ../parser/Makefile
-postgres.description: postgres.bki ;
+distprep: bki-stamp
 
-postgres.shdescription: postgres.bki ;
+.PHONY: generated-header-symlinks
 
-schemapg.h: postgres.bki ;
+generated-header-symlinks: $(top_builddir)/src/include/catalog/header-stamp
 
-# Technically, this should depend on Makefile.global, but then
-# postgres.bki would need to be rebuilt after every configure run,
-# even in distribution tarballs.  So this is cheating a bit, but it
-# will achieve the goal of updating the version number when it
-# changes.
-postgres.bki: genbki.pl Catalog.pm $(POSTGRES_BKI_SRCS) $(top_srcdir)/configure $(top_srcdir)/src/include/catalog/duplicate_oids
+# Technically, this should depend on Makefile.global which supplies
+# $(MAJORVERSION); but then postgres.bki would need to be rebuilt after every
+# configure run, even in distribution tarballs.  So depending on configure.in
+# instead is cheating a bit, but it will achieve the goal of updating the
+# version number when it changes.
+bki-stamp: genbki.pl Catalog.pm $(POSTGRES_BKI_SRCS) $(POSTGRES_BKI_DATA) $(top_srcdir)/configure.in $(top_srcdir)/src/include/catalog/duplicate_oids
        cd $(top_srcdir)/src/include/catalog && $(PERL) ./duplicate_oids
-       $(PERL) -I $(catalogdir) $< $(pg_includes) --set-version=$(MAJORVERSION) $(POSTGRES_BKI_SRCS)
-
+       $(PERL) -I $(catalogdir) $< --set-version=$(MAJORVERSION) $(POSTGRES_BKI_SRCS)
+       touch $@
+
+# The generated headers must all be symlinked into builddir/src/include/,
+# using absolute links for the reasons explained in src/backend/Makefile.
+# We use header-stamp to record that we've done this because the symlinks
+# themselves may appear older than bki-stamp.
+$(top_builddir)/src/include/catalog/header-stamp: bki-stamp
+       prereqdir=`cd '$(dir $<)' >/dev/null && pwd` && \
+       cd '$(dir $@)' && for file in $(GENERATED_HEADERS); do \
+         rm -f $$file && $(LN_S) "$$prereqdir/$$file" . ; \
+       done
+       touch $@
+
+# Note: installation of generated headers is handled elsewhere
 .PHONY: install-data
-install-data: $(BKIFILES) installdirs
+install-data: bki-stamp installdirs
        $(INSTALL_DATA) $(call vpathsearch,postgres.bki) '$(DESTDIR)$(datadir)/postgres.bki'
        $(INSTALL_DATA) $(call vpathsearch,postgres.description) '$(DESTDIR)$(datadir)/postgres.description'
        $(INSTALL_DATA) $(call vpathsearch,postgres.shdescription) '$(DESTDIR)$(datadir)/postgres.shdescription'
@@ -87,9 +117,10 @@ installdirs:
 uninstall-data:
        rm -f $(addprefix '$(DESTDIR)$(datadir)'/, $(BKIFILES) system_views.sql information_schema.sql sql_features.txt)
 
-# postgres.bki, postgres.description, postgres.shdescription, and schemapg.h
-# are in the distribution tarball, so they are not cleaned here.
+# postgres.bki, postgres.description, postgres.shdescription,
+# and the generated headers are in the distribution tarball,
+# so they are not cleaned here.
 clean:
 
 maintainer-clean: clean
-       rm -f $(BKIFILES)
+       rm -f bki-stamp $(BKIFILES) $(GENERATED_HEADERS)
diff --git a/src/backend/catalog/README b/src/backend/catalog/README
deleted file mode 100644 (file)
index 7e0ddf3..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-src/backend/catalog/README
-
-System Catalog
-==============
-
-This directory contains .c files that manipulate the system catalogs;
-src/include/catalog contains the .h files that define the structure
-of the system catalogs.
-
-When the compile-time scripts (Gen_fmgrtab.pl and genbki.pl)
-execute, they grep the DATA statements out of the .h files and munge
-these in order to generate the postgres.bki file.  The .bki file is then
-used as input to initdb (which is just a wrapper around postgres
-running single-user in bootstrapping mode) in order to generate the
-initial (template) system catalog relation files.
-
------------------------------------------------------------------
-
-People who are going to hose around with the .h files should be aware
-of the following facts:
-
-- It is very important that the DATA statements be properly formatted
-(e.g., no broken lines, proper use of white-space and _null_).  The
-scripts are line-oriented and break easily.  In addition, the only
-documentation on the proper format for them is the code in the
-bootstrap/ directory.  Just be careful when adding new DATA
-statements.
-
-- Some catalogs require that OIDs be preallocated to tuples because
-of cross-references from other pre-loaded tuples.  For example, pg_type
-contains pointers into pg_proc (e.g., pg_type.typinput), and pg_proc
-contains back-pointers into pg_type (pg_proc.proargtypes).  For such
-cases, the OID assigned to a tuple may be explicitly set by use of the
-"OID = n" clause of the .bki insert statement.  If no such pointers are
-required to a given tuple, then the OID = n clause may be omitted
-(then the system generates an OID in the usual way, or leaves it 0 in a
-catalog that has no OIDs).  In practice we usually preassign OIDs
-for all or none of the pre-loaded tuples in a given catalog, even if only
-some of them are actually cross-referenced.
-
-- We also sometimes preallocate OIDs for catalog tuples whose OIDs must
-be known directly in the C code.  In such cases, put a #define in the
-catalog's .h file, and use the #define symbol in the C code.  Writing
-the actual numeric value of any OID in C code is considered very bad form.
-Direct references to pg_proc OIDs are common enough that there's a special
-mechanism to create the necessary #define's automatically: see
-backend/utils/Gen_fmgrtab.pl.  We also have standard conventions for setting
-up #define's for the pg_class OIDs of system catalogs and indexes.  For all
-the other system catalogs, you have to manually create any #define's you
-need.
-
-- If you need to find a valid OID for a new predefined tuple,
-use the unused_oids script.  It generates inclusive ranges of
-*unused* OIDs (e.g., the line "45-900" means OIDs 45 through 900 have
-not been allocated yet).  Currently, OIDs 1-9999 are reserved for manual
-assignment; the unused_oids script simply looks through the include/catalog
-headers to see which ones do not appear in "OID =" clauses in DATA lines.
-(As of Postgres 8.1, it also looks at CATALOG and DECLARE_INDEX lines.)
-You can also use the duplicate_oids script to check for mistakes.
-
-- The OID counter starts at 10000 at bootstrap.  If a catalog row is in a
-table that requires OIDs, but no OID was preassigned by an "OID =" clause,
-then it will receive an OID of 10000 or above.
-
-- To create a "BOOTSTRAP" table you have to do a lot of extra work: these
-tables are not created through a normal CREATE TABLE operation, but spring
-into existence when first written to during initdb.  Therefore, you must
-manually create appropriate entries for them in the pre-loaded contents of
-pg_class, pg_attribute, and pg_type.  Avoid making new catalogs be bootstrap
-catalogs if at all possible; generally, only tables that must be written to
-in order to create a table should be bootstrapped.
-
-- Certain BOOTSTRAP tables must be at the start of the Makefile
-POSTGRES_BKI_SRCS variable, as these cannot be created through the standard
-heap_create_with_catalog process, because it needs these tables to exist
-already.  The list of files this currently includes is:
-       pg_proc.h pg_type.h pg_attribute.h pg_class.h
-Within this list, pg_type.h must come before pg_attribute.h.
-Also, indexing.h must be last, since the indexes can't be created until all
-the tables are in place, and toasting.h should probably be next-to-last
-(or at least after all the tables that need toast tables).  There are
-reputedly some other order dependencies in the .bki list, too.
-
------------------------------------------------------------------
-
-When munging the .c files, you should be aware of certain conventions:
-
-- The system catalog cache code (and most catalog-munging code in
-general) assumes that the fixed-length portions of all system catalog
-tuples are in fact present, because it maps C struct declarations onto
-them.  Thus, the variable-length fields must all be at the end, and
-only the variable-length fields of a catalog tuple are permitted to be
-NULL.  For example, if you set pg_type.typrelid to be NULL, a
-piece of code will likely perform "typetup->typrelid" (or, worse,
-"typetup->typelem", which follows typrelid).  This will result in
-random errors or even segmentation violations.  Hence, do NOT insert
-catalog tuples that contain NULL attributes except in their
-variable-length portions!  (The bootstrapping code is fairly good about
-marking NOT NULL each of the columns that can legally be referenced via
-C struct declarations ... but those markings won't be enforced against
-DATA commands, so you must get it right in a DATA line.)
-
-- Modification of the catalogs must be performed with the proper
-updating of catalog indexes!  That is, most catalogs have indexes
-on them; when you munge them using the executor, the executor will
-take care of doing the index updates, but if you make direct access
-method calls to insert new or modified tuples into a heap, you must
-also make the calls to insert the tuple into ALL of its indexes!  If
-not, the new tuple will generally be "invisible" to the system because
-most of the accesses to the catalogs in question will be through the
-associated indexes.
index b4abbff101f0ade20488d811f57633a4133bc572..56312ded8a0220015263c62db24424b32748f4f7 100644 (file)
@@ -3,9 +3,9 @@
 #
 # genbki.pl
 #    Perl script that generates postgres.bki, postgres.description,
-#    postgres.shdescription, and schemapg.h from specially formatted
-#    header files.  The .bki files are used to initialize the postgres
-#    template database.
+#    postgres.shdescription, and symbol definition headers from specially
+#    formatted header files and data files.  The BKI files are used to
+#    initialize the postgres template database.
 #
 # Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
 # Portions Copyright (c) 1994, Regents of the University of California
@@ -20,7 +20,6 @@ use strict;
 use warnings;
 
 my @input_files;
-my @include_path;
 my $output_path = '';
 my $major_version;
 
@@ -36,10 +35,6 @@ while (@ARGV)
        {
                $output_path = length($arg) > 2 ? substr($arg, 2) : shift @ARGV;
        }
-       elsif ($arg =~ /^-I/)
-       {
-               push @include_path, length($arg) > 2 ? substr($arg, 2) : shift @ARGV;
-       }
        elsif ($arg =~ /^--set-version=(.*)$/)
        {
                $major_version = $1;
@@ -53,8 +48,7 @@ while (@ARGV)
 }
 
 # Sanity check arguments.
-die "No input files.\n"                                     if !@input_files;
-die "No include path; you must specify -I at least once.\n" if !@include_path;
+die "No input files.\n" if !@input_files;
 die "--set-version must be specified.\n" if !defined $major_version;
 
 # Make sure output_path ends in a slash.
@@ -78,25 +72,151 @@ my $shdescrfile = $output_path . 'postgres.shdescription';
 open my $shdescr, '>', $shdescrfile . $tmpext
   or die "can't open $shdescrfile$tmpext: $!";
 
+# Read all the files into internal data structures. Not all catalogs
+# will have a data file.
+my @catnames;
+my %catalogs;
+my %catalog_data;
+my @toast_decls;
+my @index_decls;
+foreach my $header (@input_files)
+{
+       $header =~ /(.+)\.h$/
+         or die "Input files need to be header files.\n";
+       my $datfile = "$1.dat";
+
+       my $catalog = Catalog::ParseHeader($header);
+       my $catname = $catalog->{catname};
+       my $schema  = $catalog->{columns};
+
+       if (defined $catname)
+       {
+               push @catnames, $catname;
+               $catalogs{$catname} = $catalog;
+       }
+
+       if (-e $datfile)
+       {
+               $catalog_data{$catname} = Catalog::ParseData($datfile, $schema, 0);
+       }
+
+       foreach my $toast_decl (@{ $catalog->{toasting} })
+       {
+               push @toast_decls, $toast_decl;
+       }
+       foreach my $index_decl (@{ $catalog->{indexing} })
+       {
+               push @index_decls, $index_decl;
+       }
+}
+
 # Fetch some special data that we will substitute into the output file.
 # CAUTION: be wary about what symbols you substitute into the .bki file here!
 # It's okay to substitute things that are expected to be really constant
 # 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().)
-# NB: make sure that the files used here are known to be part of the .bki
-# file's dependencies by src/backend/catalog/Makefile.
-my $BOOTSTRAP_SUPERUSERID =
-  Catalog::FindDefinedSymbol('pg_authid.h', \@include_path,
-                                                        'BOOTSTRAP_SUPERUSERID');
-my $PG_CATALOG_NAMESPACE =
-  Catalog::FindDefinedSymbol('pg_namespace.h', \@include_path,
-                                                        'PG_CATALOG_NAMESPACE');
+my $BOOTSTRAP_SUPERUSERID = Catalog::FindDefinedSymbolFromData(
+       $catalog_data{pg_authid}, 'BOOTSTRAP_SUPERUSERID');
+my $PG_CATALOG_NAMESPACE  = Catalog::FindDefinedSymbolFromData(
+       $catalog_data{pg_namespace}, 'PG_CATALOG_NAMESPACE');
+
+
+# Build lookup tables for OID macro substitutions and for pg_attribute
+# copies of pg_type values.
 
-# Read all the input header files into internal data structures
-my $catalogs = Catalog::Catalogs(@input_files);
+# index access method OID lookup
+my %amoids;
+foreach my $row (@{ $catalog_data{pg_am} })
+{
+       $amoids{ $row->{amname} } = $row->{oid};
+}
 
-# Generate postgres.bki, postgres.description, and postgres.shdescription
+# opclass OID lookup
+my %opcoids;
+foreach my $row (@{ $catalog_data{pg_opclass} })
+{
+       # There is no unique name, so we need to combine access method
+       # and opclass name.
+       my $key = sprintf "%s/%s",
+         $row->{opcmethod}, $row->{opcname};
+       $opcoids{$key} = $row->{oid};
+}
+
+# operator OID lookup
+my %operoids;
+foreach my $row (@{ $catalog_data{pg_operator} })
+{
+       # There is no unique name, so we need to invent one that contains
+       # the relevant type names.
+       my $key = sprintf "%s(%s,%s)",
+         $row->{oprname}, $row->{oprleft}, $row->{oprright};
+       $operoids{$key} = $row->{oid};
+}
+
+# opfamily OID lookup
+my %opfoids;
+foreach my $row (@{ $catalog_data{pg_opfamily} })
+{
+       # There is no unique name, so we need to combine access method
+       # and opfamily name.
+       my $key = sprintf "%s/%s",
+         $row->{opfmethod}, $row->{opfname};
+       $opfoids{$key} = $row->{oid};
+}
+
+# procedure OID lookup
+my %procoids;
+foreach my $row (@{ $catalog_data{pg_proc} })
+{
+       # Generate an entry under just the proname (corresponds to regproc lookup)
+       my $prokey = $row->{proname};
+       if (defined $procoids{$prokey})
+       {
+               $procoids{$prokey} = 'MULTIPLE';
+       }
+       else
+       {
+               $procoids{$prokey} = $row->{oid};
+       }
+       # Also generate an entry using proname(proargtypes).  This is not quite
+       # identical to regprocedure lookup because we don't worry much about
+       # special SQL names for types etc; we just use the names in the source
+       # proargtypes field.  These *should* be unique, but do a multiplicity
+       # check anyway.
+       $prokey .= '(' . join(',', split(/\s+/, $row->{proargtypes})) . ')';
+       if (defined $procoids{$prokey})
+       {
+               $procoids{$prokey} = 'MULTIPLE';
+       }
+       else
+       {
+               $procoids{$prokey} = $row->{oid};
+       }
+}
+
+# type lookups
+my %typeoids;
+my %types;
+foreach my $row (@{ $catalog_data{pg_type} })
+{
+       $typeoids{ $row->{typname} } = $row->{oid};
+       $types{ $row->{typname} } = $row;
+}
+
+# Map catalog name to OID lookup.
+my %lookup_kind = (
+       pg_am       => \%amoids,
+       pg_opclass  => \%opcoids,
+       pg_operator => \%operoids,
+       pg_opfamily => \%opfoids,
+       pg_proc     => \%procoids,
+       pg_type     => \%typeoids
+);
+
+
+# Generate postgres.bki, postgres.description, postgres.shdescription,
+# and pg_*_d.h headers.
 
 # version marker for .bki file
 print $bki "# PostgreSQL $major_version\n";
@@ -104,32 +224,69 @@ print $bki "# PostgreSQL $major_version\n";
 # vars to hold data needed for schemapg.h
 my %schemapg_entries;
 my @tables_needing_macros;
-my %regprocoids;
-my %types;
 
 # produce output, one catalog at a time
-foreach my $catname (@{ $catalogs->{names} })
+foreach my $catname (@catnames)
 {
+       my $catalog = $catalogs{$catname};
+
+       # Create one definition header with macro definitions for each catalog.
+       my $def_file = $output_path . $catname . '_d.h';
+       open my $def, '>', $def_file . $tmpext
+         or die "can't open $def_file$tmpext: $!";
+
+       # Opening boilerplate for pg_*_d.h
+       printf $def <<EOM, $catname, $catname, uc $catname, uc $catname;
+/*-------------------------------------------------------------------------
+ *
+ * %s_d.h
+ *    Macro definitions for %s
+ *
+ * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * NOTES
+ *  ******************************
+ *  *** DO NOT EDIT THIS FILE! ***
+ *  ******************************
+ *
+ *  It has been GENERATED by src/backend/catalog/genbki.pl
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef %s_D_H
+#define %s_D_H
+
+EOM
+
+       # Emit OID macros for catalog's OID and rowtype OID, if wanted
+       printf $def "#define %s %s\n",
+         $catalog->{relation_oid_macro}, $catalog->{relation_oid}
+         if $catalog->{relation_oid_macro};
+       printf $def "#define %s %s\n",
+         $catalog->{rowtype_oid_macro}, $catalog->{rowtype_oid}
+         if $catalog->{rowtype_oid_macro};
+       print $def "\n";
 
        # .bki CREATE command for this catalog
-       my $catalog = $catalogs->{$catname};
        print $bki "create $catname $catalog->{relation_oid}"
          . $catalog->{shared_relation}
          . $catalog->{bootstrap}
          . $catalog->{without_oids}
-         . $catalog->{rowtype_oid} . "\n";
+         . $catalog->{rowtype_oid_clause};
 
-       my @attnames;
        my $first = 1;
 
-       print $bki " (\n";
+       print $bki "\n (\n";
        my $schema = $catalog->{columns};
+       my $attnum = 0;
        foreach my $column (@$schema)
        {
+               $attnum++;
                my $attname = $column->{name};
                my $atttype = $column->{type};
-               push @attnames, $attname;
 
+               # Emit column definitions
                if (!$first)
                {
                        print $bki " ,\n";
@@ -146,10 +303,23 @@ foreach my $catname (@{ $catalogs->{names} })
                {
                        print $bki " FORCE NULL";
                }
+
+               # Emit Anum_* constants
+               print $def
+                 sprintf("#define Anum_%s_%s %s\n", $catname, $attname, $attnum);
        }
        print $bki "\n )\n";
 
-       # Open it, unless bootstrap case (create bootstrap does this
+       # Emit Natts_* constant
+       print $def "\n#define Natts_$catname $attnum\n\n";
+
+       # Emit client code copied from source header
+       foreach my $line (@{ $catalog->{client_code} })
+       {
+               print $def $line;
+       }
+
+       # Open it, unless it's a bootstrap catalog (create bootstrap does this
        # automatically)
        if (!$catalog->{bootstrap})
        {
@@ -157,21 +327,15 @@ foreach my $catname (@{ $catalogs->{names} })
        }
 
        # For pg_attribute.h, we generate data entries ourselves.
-       # NB: pg_type.h must come before pg_attribute.h in the input list
-       # of catalog names, since we use info from pg_type.h here.
        if ($catname eq 'pg_attribute')
        {
-               gen_pg_attribute($schema, @attnames);
+               gen_pg_attribute($schema);
        }
 
-       # Ordinary catalog with DATA line(s)
-       foreach my $row (@{ $catalog->{data} })
+       # Ordinary catalog with a data file
+       foreach my $row (@{ $catalog_data{$catname} })
        {
-
-               # Split line into tokens without interpreting their meaning.
-               my %bki_values;
-               @bki_values{@attnames} =
-                 Catalog::SplitDataLine($row->{bki_values});
+               my %bki_values = %$row;
 
                # Perform required substitutions on fields
                foreach my $column (@$schema)
@@ -184,71 +348,102 @@ foreach my $catname (@{ $catalogs->{names} })
                        $bki_values{$attname} =~ s/\bPGUID\b/$BOOTSTRAP_SUPERUSERID/g;
                        $bki_values{$attname} =~ s/\bPGNSP\b/$PG_CATALOG_NAMESPACE/g;
 
-                       # Replace regproc columns' values with OIDs.
-                       # If we don't have a unique value to substitute,
-                       # just do nothing (regprocin will complain).
-                       if ($atttype eq 'regproc')
+                       # Replace OID synonyms with OIDs per the appropriate lookup rule.
+                       #
+                       # If the column type is oidvector or oid[], we have to replace
+                       # each element of the array as per the lookup rule.
+                       if ($column->{lookup})
                        {
-                               my $procoid = $regprocoids{ $bki_values{$attname} };
-                               $bki_values{$attname} = $procoid
-                                 if defined($procoid) && $procoid ne 'MULTIPLE';
+                               my $lookup = $lookup_kind{ $column->{lookup} };
+                               my @lookupnames;
+                               my @lookupoids;
+
+                               die "unrecognized BKI_LOOKUP type " . $column->{lookup}
+                                 if !defined($lookup);
+
+                               if ($atttype eq 'oidvector')
+                               {
+                                       @lookupnames = split /\s+/, $bki_values{$attname};
+                                       @lookupoids = lookup_oids($lookup, $catname,
+                                                                                         \%bki_values, @lookupnames);
+                                       $bki_values{$attname} = join(' ', @lookupoids);
+                               }
+                               elsif ($atttype eq 'oid[]')
+                               {
+                                       if ($bki_values{$attname} ne '_null_')
+                                       {
+                                               $bki_values{$attname} =~ s/[{}]//g;
+                                               @lookupnames = split /,/, $bki_values{$attname};
+                                               @lookupoids = lookup_oids($lookup, $catname,
+                                                                                                 \%bki_values, @lookupnames);
+                                               $bki_values{$attname} =
+                                                       sprintf "{%s}", join(',', @lookupoids);
+                                       }
+                               }
+                               else
+                               {
+                                       $lookupnames[0] = $bki_values{$attname};
+                                       @lookupoids = lookup_oids($lookup, $catname,
+                                                                                         \%bki_values, @lookupnames);
+                                       $bki_values{$attname} = $lookupoids[0];
+                               }
                        }
                }
 
-               # Save pg_proc oids for use in later regproc substitutions.
-               # This relies on the order we process the files in!
-               if ($catname eq 'pg_proc')
+               # Special hack to generate OID symbols for pg_type entries
+               # that lack one.
+               if ($catname eq 'pg_type' and !exists $bki_values{oid_symbol})
                {
-                       if (defined($regprocoids{ $bki_values{proname} }))
-                       {
-                               $regprocoids{ $bki_values{proname} } = 'MULTIPLE';
-                       }
-                       else
-                       {
-                               $regprocoids{ $bki_values{proname} } = $row->{oid};
-                       }
-               }
-
-               # Save pg_type info for pg_attribute processing below
-               if ($catname eq 'pg_type')
-               {
-                       my %type = %bki_values;
-                       $type{oid} = $row->{oid};
-                       $types{ $type{typname} } = \%type;
+                       my $symbol = form_pg_type_symbol($bki_values{typname});
+                       $bki_values{oid_symbol} = $symbol
+                         if defined $symbol;
                }
 
                # Write to postgres.bki
-               my $oid = $row->{oid} ? "OID = $row->{oid} " : '';
-               printf $bki "insert %s( %s )\n", $oid,
-                 join(' ', @bki_values{@attnames});
+               print_bki_insert(\%bki_values, $schema);
 
                # Write comments to postgres.description and
                # postgres.shdescription
-               if (defined $row->{descr})
+               if (defined $bki_values{descr})
                {
-                       printf $descr "%s\t%s\t0\t%s\n",
-                         $row->{oid}, $catname, $row->{descr};
+                       if ($catalog->{shared_relation})
+                       {
+                               printf $shdescr "%s\t%s\t%s\n",
+                                 $bki_values{oid}, $catname, $bki_values{descr};
+                       }
+                       else
+                       {
+                               printf $descr "%s\t%s\t0\t%s\n",
+                                 $bki_values{oid}, $catname, $bki_values{descr};
+                       }
                }
-               if (defined $row->{shdescr})
+
+               # Emit OID symbol
+               if (defined $bki_values{oid_symbol})
                {
-                       printf $shdescr "%s\t%s\t%s\n",
-                         $row->{oid}, $catname, $row->{shdescr};
+                       printf $def "#define %s %s\n",
+                         $bki_values{oid_symbol}, $bki_values{oid};
                }
        }
 
        print $bki "close $catname\n";
+       print $def sprintf("\n#endif\t\t\t\t\t\t\t/* %s_D_H */\n", uc $catname);
+
+       # Close and rename definition header
+       close $def;
+       Catalog::RenameTempFile($def_file, $tmpext);
 }
 
 # Any information needed for the BKI that is not contained in a pg_*.h header
 # (i.e., not contained in a header with a CATALOG() statement) comes here
 
 # Write out declare toast/index statements
-foreach my $declaration (@{ $catalogs->{toasting}->{data} })
+foreach my $declaration (@toast_decls)
 {
        print $bki $declaration;
 }
 
-foreach my $declaration (@{ $catalogs->{indexing}->{data} })
+foreach my $declaration (@index_decls)
 {
        print $bki $declaration;
 }
@@ -288,7 +483,7 @@ foreach my $table_name (@tables_needing_macros)
 }
 
 # Closing boilerplate for schemapg.h
-print $schemapg "\n#endif /* SCHEMAPG_H */\n";
+print $schemapg "\n#endif\t\t\t\t\t\t\t/* SCHEMAPG_H */\n";
 
 # We're done emitting data
 close $bki;
@@ -314,11 +509,16 @@ exit 0;
 sub gen_pg_attribute
 {
        my $schema = shift;
-       my @attnames = @_;
 
-       foreach my $table_name (@{ $catalogs->{names} })
+       my @attnames;
+       foreach my $column (@$schema)
+       {
+               push @attnames, $column->{name};
+       }
+
+       foreach my $table_name (@catnames)
        {
-               my $table = $catalogs->{$table_name};
+               my $table = $catalogs{$table_name};
 
                # Currently, all bootstrapped relations also need schemapg.h
                # entries, so skip if the relation isn't to be in schemapg.h.
@@ -341,7 +541,7 @@ sub gen_pg_attribute
                        $priornotnull &= ($row{attnotnull} eq 't');
 
                        # If it's bootstrapped, put an entry in postgres.bki.
-                       print_bki_insert(\%row, @attnames) if $table->{bootstrap};
+                       print_bki_insert(\%row, $schema) if $table->{bootstrap};
 
                        # Store schemapg entries for later.
                        morph_row_for_schemapg(\%row, $schema);
@@ -377,7 +577,7 @@ sub gen_pg_attribute
                                          && $attr->{name} eq 'oid';
 
                                morph_row_for_pgattr(\%row, $schema, $attr, 1);
-                               print_bki_insert(\%row, @attnames);
+                               print_bki_insert(\%row, $schema);
                        }
                }
        }
@@ -441,21 +641,54 @@ sub morph_row_for_pgattr
                $row->{attnotnull} = 'f';
        }
 
-       my $error = Catalog::AddDefaultValues($row, $pgattr_schema);
-       if ($error)
-       {
-               die "Failed to form full tuple for pg_attribute: ", $error;
-       }
+       Catalog::AddDefaultValues($row, $pgattr_schema, 'pg_attribute');
 }
 
-# Write a pg_attribute entry to postgres.bki
+# Write an entry to postgres.bki. Adding quotes here allows us to keep
+# most double quotes out of the catalog data files for readability. See
+# bootscanner.l for what tokens need quoting.
 sub print_bki_insert
 {
-       my $row        = shift;
-       my @attnames   = @_;
-       my $oid        = $row->{oid} ? "OID = $row->{oid} " : '';
-       my $bki_values = join ' ', @{$row}{@attnames};
-       printf $bki "insert %s( %s )\n", $oid, $bki_values;
+       my $row    = shift;
+       my $schema = shift;
+
+       my @bki_values;
+       my $oid = $row->{oid} ? "OID = $row->{oid} " : '';
+
+       foreach my $column (@$schema)
+       {
+               my $attname   = $column->{name};
+               my $atttype   = $column->{type};
+               my $bki_value = $row->{$attname};
+
+               # Fold backslash-zero to empty string if it's the entire string,
+               # since that represents a NUL char in C code.
+               $bki_value = '' if $bki_value eq '\0';
+
+               $bki_value = sprintf(qq'"%s"', $bki_value)
+                 if  $bki_value ne '_null_'
+                 and $bki_value !~ /^"[^"]+"$/
+                 and ( length($bki_value) == 0       # Empty string
+                               or $bki_value =~ /\s/         # Contains whitespace
+
+                               # To preserve historical formatting, operator names are
+                               # always quoted. Likewise for values of multi-element types,
+                               # even if they only contain a single element.
+                               or $attname eq 'oprname'
+                               or $atttype eq 'oidvector'
+                               or $atttype eq 'int2vector'
+                               or $atttype =~ /\[\]$/
+
+                               # Quote strings that have non-word characters. We make
+                               # exceptions for values that are octals or negative numbers,
+                               # for the same historical reason as above.
+                               or (    $bki_value =~ /\W/
+                                       and $bki_value !~ /^\\\d{3}$/
+                                       and $bki_value !~ /^-\d*$/));
+
+               push @bki_values, $bki_value;
+       }
+       printf $bki "insert %s( %s )\n", $oid, join(' ', @bki_values);
 }
 
 # Given a row reference, modify it so that it becomes a valid entry for
@@ -481,8 +714,7 @@ sub morph_row_for_schemapg
                }
                elsif ($atttype eq 'char')
                {
-                       # Replace empty string by zero char constant; add single quotes
-                       $row->{$attname} = '\0' if $row->{$attname} eq q|""|;
+                       # Add single quotes
                        $row->{$attname} = sprintf("'%s'", $row->{$attname});
                }
 
@@ -501,18 +733,66 @@ sub morph_row_for_schemapg
        }
 }
 
+# Perform OID lookups on an array of OID names.
+# If we don't have a unique value to substitute, warn and
+# leave the entry unchanged.
+sub lookup_oids
+{
+       my ($lookup, $catname, $bki_values, @lookupnames) = @_;
+
+       my @lookupoids;
+       foreach my $lookupname (@lookupnames)
+       {
+               my $lookupoid = $lookup->{$lookupname};
+               if (defined($lookupoid) and $lookupoid ne 'MULTIPLE')
+               {
+                       push @lookupoids, $lookupoid;
+               }
+               else
+               {
+                       push @lookupoids, $lookupname;
+                       warn sprintf "unresolved OID reference \"%s\" in %s.dat line %s",
+                               $lookupname, $catname, $bki_values->{line_number}
+                               if $lookupname ne '-' and $lookupname ne '0';
+               }
+       }
+       return @lookupoids;
+}
+
+# Determine canonical pg_type OID #define symbol from the type name.
+sub form_pg_type_symbol
+{
+       my $typename = shift;
+
+       # Skip for rowtypes of bootstrap tables, since they have their
+       # own naming convention defined elsewhere.
+       return
+         if $typename eq 'pg_type'
+           or $typename eq 'pg_proc'
+           or $typename eq 'pg_attribute'
+           or $typename eq 'pg_class';
+
+       # Transform like so:
+       #  foo_bar  ->  FOO_BAROID
+       # _foo_bar  ->  FOO_BARARRAYOID
+       $typename =~ /(_)?(.+)/;
+       my $arraystr = $1 ? 'ARRAY' : '';
+       my $name = uc $2;
+       return $name . $arraystr . 'OID';
+}
+
 sub usage
 {
        die <<EOM;
 Usage: genbki.pl [options] header...
 
 Options:
-    -I               path to include files
     -o               output path
     --set-version    PostgreSQL version number for initdb cross-check
 
-genbki.pl generates BKI files from specially formatted
-header files.  These BKI files are used to initialize the
+genbki.pl generates BKI files and symbol definition
+headers from specially formatted header files and .dat
+files.  The BKI files are used to initialize the
 postgres template database.
 
 Report bugs to <pgsql-bugs\@postgresql.org>.
index 4ae86df1f710eb858b669f7a459d73a9c3f7cc7b..3b112c69d8e1f4d7a454624444933979a2d81bec 100644 (file)
@@ -3,7 +3,7 @@
 #
 # Gen_fmgrtab.pl
 #    Perl script that generates fmgroids.h, fmgrprotos.h, and fmgrtab.c
-#    from pg_proc.h
+#    from pg_proc.dat
 #
 # Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
 # Portions Copyright (c) 1994, Regents of the University of California
@@ -20,7 +20,7 @@ use strict;
 use warnings;
 
 # Collect arguments
-my $infile;    # pg_proc.h
+my @input_files;
 my $output_path = '';
 my @include_path;
 
@@ -29,7 +29,7 @@ while (@ARGV)
        my $arg = shift @ARGV;
        if ($arg !~ /^-/)
        {
-               $infile = $arg;
+               push @input_files, $arg;
        }
        elsif ($arg =~ /^-o/)
        {
@@ -52,38 +52,50 @@ if ($output_path ne '' && substr($output_path, -1) ne '/')
 }
 
 # Sanity check arguments.
-die "No input files.\n"                                     if !$infile;
+die "No input files.\n"                                     if !@input_files;
 die "No include path; you must specify -I at least once.\n" if !@include_path;
 
-my $FirstBootstrapObjectId =
-       Catalog::FindDefinedSymbol('access/transam.h', \@include_path, 'FirstBootstrapObjectId');
-my $INTERNALlanguageId =
-       Catalog::FindDefinedSymbol('catalog/pg_language.h', \@include_path, 'INTERNALlanguageId');
+# Read all the input files into internal data structures.
+# Note: We pass data file names as arguments and then look for matching
+# headers to parse the schema from. This is backwards from genbki.pl,
+# but the Makefile dependencies look more sensible this way.
+my %catalogs;
+my %catalog_data;
+foreach my $datfile (@input_files)
+{
+       $datfile =~ /(.+)\.dat$/
+         or die "Input files need to be data (.dat) files.\n";
 
-# Read all the data from the include/catalog files.
-my $catalogs = Catalog::Catalogs($infile);
+       my $header = "$1.h";
+       die "There in no header file corresponding to $datfile"
+         if ! -e $header;
 
-# Collect the raw data from pg_proc.h.
-my @fmgr = ();
-my @attnames;
-foreach my $column (@{ $catalogs->{pg_proc}->{columns} })
-{
-       push @attnames, $column->{name};
+       my $catalog = Catalog::ParseHeader($header);
+       my $catname = $catalog->{catname};
+       my $schema  = $catalog->{columns};
+
+       $catalogs{$catname} = $catalog;
+       $catalog_data{$catname} = Catalog::ParseData($datfile, $schema, 0);
 }
 
-my $data = $catalogs->{pg_proc}->{data};
-foreach my $row (@$data)
-{
+# Fetch some values for later.
+my $FirstBootstrapObjectId = Catalog::FindDefinedSymbol(
+       'access/transam.h', \@include_path, 'FirstBootstrapObjectId');
+my $INTERNALlanguageId = Catalog::FindDefinedSymbolFromData(
+       $catalog_data{pg_language}, 'INTERNALlanguageId');
+
+# Collect certain fields from pg_proc.dat.
+my @fmgr = ();
 
-       # Split line into tokens without interpreting their meaning.
-       my %bki_values;
-       @bki_values{@attnames} = Catalog::SplitDataLine($row->{bki_values});
+foreach my $row (@{ $catalog_data{pg_proc} })
+{
+       my %bki_values = %$row;
 
        # Select out just the rows for internal-language procedures.
        next if $bki_values{prolang} ne $INTERNALlanguageId;
 
        push @fmgr,
-         { oid    => $row->{oid},
+         { oid    => $bki_values{oid},
                strict => $bki_values{proisstrict},
                retset => $bki_values{proretset},
                nargs  => $bki_values{pronargs},
@@ -281,10 +293,10 @@ Catalog::RenameTempFile($tabfile,    $tmpext);
 sub usage
 {
        die <<EOM;
-Usage: perl -I [directory of Catalog.pm] Gen_fmgrtab.pl [path to pg_proc.h]
+Usage: perl -I [directory of Catalog.pm] Gen_fmgrtab.pl -I [include path] [path to pg_proc.dat]
 
 Gen_fmgrtab.pl generates fmgroids.h, fmgrprotos.h, and fmgrtab.c from
-pg_proc.h
+pg_proc.dat
 
 Report bugs to <pgsql-bugs\@postgresql.org>.
 EOM
index 163c81a1c226be73b908bd45f12b25d552c63c1b..343637af858c492f93c900e4e58211f3bbc6f53a 100644 (file)
@@ -1,8 +1,13 @@
+#-------------------------------------------------------------------------
 #
-# Makefile for utils
+# Makefile for backend/utils
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
 #
 # src/backend/utils/Makefile
 #
+#-------------------------------------------------------------------------
 
 subdir = src/backend/utils
 top_builddir = ../../..
@@ -20,6 +25,10 @@ all: errcodes.h fmgroids.h fmgrprotos.h probes.h
 
 $(SUBDIRS:%=%-recursive): fmgroids.h fmgrprotos.h
 
+FMGR_DATA := $(addprefix $(top_srcdir)/src/include/catalog/,\
+       pg_language.dat pg_proc.dat \
+       )
+
 # see notes in src/backend/parser/Makefile
 fmgrprotos.h: fmgroids.h
        touch $@
@@ -27,8 +36,8 @@ fmgrprotos.h: fmgroids.h
 fmgroids.h: fmgrtab.c
        touch $@
 
-fmgrtab.c: Gen_fmgrtab.pl $(catalogdir)/Catalog.pm $(top_srcdir)/src/include/catalog/pg_proc.h
-       $(PERL) -I $(catalogdir) $< -I $(top_srcdir)/src/include/ $(top_srcdir)/src/include/catalog/pg_proc.h
+fmgrtab.c: Gen_fmgrtab.pl $(catalogdir)/Catalog.pm $(FMGR_DATA) $(top_srcdir)/src/include/access/transam.h
+       $(PERL) -I $(catalogdir) $< -I $(top_srcdir)/src/include/ $(FMGR_DATA)
 
 errcodes.h: $(top_srcdir)/src/backend/utils/errcodes.txt generate-errcodes.pl
        $(PERL) $(srcdir)/generate-errcodes.pl $< > $@
index a689d352b6b99e62c47d58595eac2ba67853ac85..59e18c73d71ddccd06576b190fd36fcc747724e5 100644 (file)
@@ -54,7 +54,7 @@ install: all installdirs
          chmod $(INSTALL_DATA_MODE) '$(DESTDIR)$(includedir_server)'/$$dir/*.h  || exit; \
        done
 ifeq ($(vpath_build),yes)
-       for file in dynloader.h catalog/schemapg.h parser/gram.h storage/lwlocknames.h utils/probes.h; do \
+       for file in dynloader.h catalog/schemapg.h catalog/pg_*_d.h parser/gram.h storage/lwlocknames.h utils/probes.h; do \
          cp $$file '$(DESTDIR)$(includedir_server)'/$$file || exit; \
          chmod $(INSTALL_DATA_MODE) '$(DESTDIR)$(includedir_server)'/$$file || exit; \
        done
@@ -73,7 +73,9 @@ uninstall:
 
 
 clean:
-       rm -f utils/fmgroids.h utils/fmgrprotos.h utils/errcodes.h parser/gram.h utils/probes.h catalog/schemapg.h
+       rm -f utils/fmgroids.h utils/fmgrprotos.h utils/errcodes.h
+       rm -f parser/gram.h storage/lwlocknames.h utils/probes.h
+       rm -f catalog/schemapg.h catalog/pg_*_d.h catalog/header-stamp
 
 distclean maintainer-clean: clean
        rm -f pg_config.h pg_config_ext.h pg_config_os.h dynloader.h stamp-h stamp-ext-h
index 650202eb757e340e55a32d9485a7083da26c7e37..6c8da5401ddf4af5473bbdaa6b88093f931c1c75 100644 (file)
@@ -1 +1,3 @@
 /schemapg.h
+/pg_*_d.h
+/header-stamp
diff --git a/src/include/catalog/Makefile b/src/include/catalog/Makefile
new file mode 100644 (file)
index 0000000..1da3ea7
--- /dev/null
@@ -0,0 +1,31 @@
+#-------------------------------------------------------------------------
+#
+# Makefile for src/include/catalog
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/Makefile
+#
+#-------------------------------------------------------------------------
+
+subdir = src/include/catalog
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+# location of Catalog.pm
+catalogdir = $(top_srcdir)/src/backend/catalog
+
+# 'make reformat-dat-files' is a convenience target for rewriting the
+# catalog data files in our standard format.  This includes collapsing
+# out any entries that are redundant with a BKI_DEFAULT annotation.
+reformat-dat-files:
+       $(PERL) -I $(catalogdir) reformat_dat_file.pl pg_*.dat
+
+# 'make expand-dat-files' is a convenience target for expanding out all
+# default values in the catalog data files.  This should be run before
+# altering or removing any BKI_DEFAULT annotation.
+expand-dat-files:
+       $(PERL) -I $(catalogdir) reformat_dat_file.pl pg_*.dat --full-tuples
+
+.PHONY: reformat-dat-files expand-dat-files
index 7342d618edfd61de64bf91da6b640b62a3cfd7d5..8c143cf06f055e61a3e54b8dbc8d031016d8d598 100755 (executable)
@@ -5,7 +5,7 @@ use warnings;
 
 BEGIN
 {
-       @ARGV = (glob("pg_*.h"), qw(indexing.h toasting.h));
+       @ARGV = (glob("pg_*.h"), glob("pg_*.dat"), qw(indexing.h toasting.h));
 }
 
 my %oidcounts;
@@ -14,8 +14,8 @@ while (<>)
 {
        next if /^CATALOG\(.*BKI_BOOTSTRAP/;
        next
-         unless /^DATA\(insert *OID *= *(\d+)/
-                 || /^CATALOG\([^,]*, *(\d+).*BKI_ROWTYPE_OID\((\d+)\)/
+         unless /\boid *=> *'(\d+)'/
+                 || /^CATALOG\([^,]*, *(\d+).*BKI_ROWTYPE_OID\((\d+),/
                  || /^CATALOG\([^,]*, *(\d+)/
                  || /^DECLARE_INDEX\([^,]*, *(\d+)/
                  || /^DECLARE_UNIQUE_INDEX\([^,]*, *(\d+)/
index 96ac4025de2a10d86c28b5c14d69c57baf15c8ba..b1e2cbdb6290355da43ed270cf42b1738320cddf 100644 (file)
@@ -3,7 +3,7 @@
  * genbki.h
  *       Required include file for all POSTGRES catalog header files
  *
- * genbki.h defines CATALOG(), DATA(), BKI_BOOTSTRAP and related macros
+ * genbki.h defines CATALOG(), BKI_BOOTSTRAP and related macros
  * so that the catalog header files can be read by the C compiler.
  * (These same words are recognized by genbki.pl to build the BKI
  * bootstrap file from these header files.)
 #define GENBKI_H
 
 /* Introduces a catalog's structure definition */
-#define CATALOG(name,oid     typedef struct CppConcat(FormData_,name)
+#define CATALOG(name,oid,oidmacro)     typedef struct CppConcat(FormData_,name)
 
 /* Options that may appear after CATALOG (on the same line) */
 #define BKI_BOOTSTRAP
 #define BKI_SHARED_RELATION
 #define BKI_WITHOUT_OIDS
-#define BKI_ROWTYPE_OID(oid)
+#define BKI_ROWTYPE_OID(oid,oidmacro)
 #define BKI_SCHEMA_MACRO
+
+/* Options that may appear after an attribute (on the same line) */
 #define BKI_FORCE_NULL
 #define BKI_FORCE_NOT_NULL
-
 /* Specifies a default value for a catalog field */
 #define BKI_DEFAULT(value)
+/* Indicates how to perform name lookups for an OID or OID-array field */
+#define BKI_LOOKUP(catalog)
+
+/* The following are never defined; they are here only for documentation. */
 
 /*
- * This is never defined; it's here only for documentation.
- *
  * Variable-length catalog fields (except possibly the first not nullable one)
  * should not be visible in C structures, so they are made invisible by #ifdefs
  * of an undefined symbol.  See also MARKNOTNULL in bootstrap.c for how this is
  */
 #undef CATALOG_VARLEN
 
-/* Declarations that provide the initial content of a catalog */
-/* In C, these need to expand into some harmless, repeatable declaration */
-#define DATA(x)   extern int no_such_variable
-#define DESCR(x)  extern int no_such_variable
-#define SHDESCR(x) extern int no_such_variable
+/*
+ * There is code in some catalog headers that needs to be visible to clients,
+ * but we don't want clients to include the full header because of safety
+ * issues with other code in the header.  To handle that, surround code that
+ * should be visible to clients with "#ifdef EXPOSE_TO_CLIENT_CODE".  That
+ * instructs genbki.pl to copy the section when generating the corresponding
+ * "_d" header, which can be included by both client and backend code.
+ */
+#undef EXPOSE_TO_CLIENT_CODE
 
 #endif                                                 /* GENBKI_H */
index 7dd9d108d6c7cddbe52b05b2eb452811f98b8ba2..42499e235f2d1bd1edc30e930eef51ffa25f7ebe 100644 (file)
@@ -43,7 +43,7 @@ extern void CatalogTupleDelete(Relation heapRel, ItemPointer tid);
 
 /*
  * These macros are just to keep the C compiler from spitting up on the
- * upcoming commands for genbki.pl.
+ * upcoming commands for Catalog.pm.
  */
 #define DECLARE_INDEX(name,oid,decl) extern int no_such_variable
 #define DECLARE_UNIQUE_INDEX(name,oid,decl) extern int no_such_variable
diff --git a/src/include/catalog/pg_aggregate.dat b/src/include/catalog/pg_aggregate.dat
new file mode 100644 (file)
index 0000000..f8d2041
--- /dev/null
@@ -0,0 +1,598 @@
+#----------------------------------------------------------------------
+#
+# pg_aggregate.dat
+#    Initial contents of the pg_aggregate system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_aggregate.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# avg
+{ aggfnoid => 'avg(int8)', aggtransfn => 'int8_avg_accum',
+  aggfinalfn => 'numeric_poly_avg', aggcombinefn => 'int8_avg_combine',
+  aggserialfn => 'int8_avg_serialize', aggdeserialfn => 'int8_avg_deserialize',
+  aggmtransfn => 'int8_avg_accum', aggminvtransfn => 'int8_avg_accum_inv',
+  aggmfinalfn => 'numeric_poly_avg', aggtranstype => 'internal',
+  aggtransspace => '48', aggmtranstype => 'internal', aggmtransspace => '48' },
+{ aggfnoid => 'avg(int4)', aggtransfn => 'int4_avg_accum',
+  aggfinalfn => 'int8_avg', aggcombinefn => 'int4_avg_combine',
+  aggmtransfn => 'int4_avg_accum', aggminvtransfn => 'int4_avg_accum_inv',
+  aggmfinalfn => 'int8_avg', aggtranstype => '_int8', aggmtranstype => '_int8',
+  agginitval => '{0,0}', aggminitval => '{0,0}' },
+{ aggfnoid => 'avg(int2)', aggtransfn => 'int2_avg_accum',
+  aggfinalfn => 'int8_avg', aggcombinefn => 'int4_avg_combine',
+  aggmtransfn => 'int2_avg_accum', aggminvtransfn => 'int2_avg_accum_inv',
+  aggmfinalfn => 'int8_avg', aggtranstype => '_int8', aggmtranstype => '_int8',
+  agginitval => '{0,0}', aggminitval => '{0,0}' },
+{ aggfnoid => 'avg(numeric)', aggtransfn => 'numeric_avg_accum',
+  aggfinalfn => 'numeric_avg', aggcombinefn => 'numeric_avg_combine',
+  aggserialfn => 'numeric_avg_serialize',
+  aggdeserialfn => 'numeric_avg_deserialize',
+  aggmtransfn => 'numeric_avg_accum', aggminvtransfn => 'numeric_accum_inv',
+  aggmfinalfn => 'numeric_avg', aggtranstype => 'internal',
+  aggtransspace => '128', aggmtranstype => 'internal',
+  aggmtransspace => '128' },
+{ aggfnoid => 'avg(float4)', aggtransfn => 'float4_accum',
+  aggfinalfn => 'float8_avg', aggcombinefn => 'float8_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0}' },
+{ aggfnoid => 'avg(float8)', aggtransfn => 'float8_accum',
+  aggfinalfn => 'float8_avg', aggcombinefn => 'float8_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0}' },
+{ aggfnoid => 'avg(interval)', aggtransfn => 'interval_accum',
+  aggfinalfn => 'interval_avg', aggcombinefn => 'interval_combine',
+  aggmtransfn => 'interval_accum', aggminvtransfn => 'interval_accum_inv',
+  aggmfinalfn => 'interval_avg', aggtranstype => '_interval',
+  aggmtranstype => '_interval', agginitval => '{0 second,0 second}',
+  aggminitval => '{0 second,0 second}' },
+
+# sum
+{ aggfnoid => 'sum(int8)', aggtransfn => 'int8_avg_accum',
+  aggfinalfn => 'numeric_poly_sum', aggcombinefn => 'int8_avg_combine',
+  aggserialfn => 'int8_avg_serialize', aggdeserialfn => 'int8_avg_deserialize',
+  aggmtransfn => 'int8_avg_accum', aggminvtransfn => 'int8_avg_accum_inv',
+  aggmfinalfn => 'numeric_poly_sum', aggtranstype => 'internal',
+  aggtransspace => '48', aggmtranstype => 'internal', aggmtransspace => '48' },
+{ aggfnoid => 'sum(int4)', aggtransfn => 'int4_sum', aggcombinefn => 'int8pl',
+  aggmtransfn => 'int4_avg_accum', aggminvtransfn => 'int4_avg_accum_inv',
+  aggmfinalfn => 'int2int4_sum', aggtranstype => 'int8',
+  aggmtranstype => '_int8', aggminitval => '{0,0}' },
+{ aggfnoid => 'sum(int2)', aggtransfn => 'int2_sum', aggcombinefn => 'int8pl',
+  aggmtransfn => 'int2_avg_accum', aggminvtransfn => 'int2_avg_accum_inv',
+  aggmfinalfn => 'int2int4_sum', aggtranstype => 'int8',
+  aggmtranstype => '_int8', aggminitval => '{0,0}' },
+{ aggfnoid => 'sum(float4)', aggtransfn => 'float4pl',
+  aggcombinefn => 'float4pl', aggtranstype => 'float4' },
+{ aggfnoid => 'sum(float8)', aggtransfn => 'float8pl',
+  aggcombinefn => 'float8pl', aggtranstype => 'float8' },
+{ aggfnoid => 'sum(money)', aggtransfn => 'cash_pl', aggcombinefn => 'cash_pl',
+  aggmtransfn => 'cash_pl', aggminvtransfn => 'cash_mi',
+  aggtranstype => 'money', aggmtranstype => 'money' },
+{ aggfnoid => 'sum(interval)', aggtransfn => 'interval_pl',
+  aggcombinefn => 'interval_pl', aggmtransfn => 'interval_pl',
+  aggminvtransfn => 'interval_mi', aggtranstype => 'interval',
+  aggmtranstype => 'interval' },
+{ aggfnoid => 'sum(numeric)', aggtransfn => 'numeric_avg_accum',
+  aggfinalfn => 'numeric_sum', aggcombinefn => 'numeric_avg_combine',
+  aggserialfn => 'numeric_avg_serialize',
+  aggdeserialfn => 'numeric_avg_deserialize',
+  aggmtransfn => 'numeric_avg_accum', aggminvtransfn => 'numeric_accum_inv',
+  aggmfinalfn => 'numeric_sum', aggtranstype => 'internal',
+  aggtransspace => '128', aggmtranstype => 'internal',
+  aggmtransspace => '128' },
+
+# max
+{ aggfnoid => 'max(int8)', aggtransfn => 'int8larger',
+  aggcombinefn => 'int8larger', aggsortop => '>(int8,int8)',
+  aggtranstype => 'int8' },
+{ aggfnoid => 'max(int4)', aggtransfn => 'int4larger',
+  aggcombinefn => 'int4larger', aggsortop => '>(int4,int4)',
+  aggtranstype => 'int4' },
+{ aggfnoid => 'max(int2)', aggtransfn => 'int2larger',
+  aggcombinefn => 'int2larger', aggsortop => '>(int2,int2)',
+  aggtranstype => 'int2' },
+{ aggfnoid => 'max(oid)', aggtransfn => 'oidlarger',
+  aggcombinefn => 'oidlarger', aggsortop => '>(oid,oid)',
+  aggtranstype => 'oid' },
+{ aggfnoid => 'max(float4)', aggtransfn => 'float4larger',
+  aggcombinefn => 'float4larger', aggsortop => '>(float4,float4)',
+  aggtranstype => 'float4' },
+{ aggfnoid => 'max(float8)', aggtransfn => 'float8larger',
+  aggcombinefn => 'float8larger', aggsortop => '>(float8,float8)',
+  aggtranstype => 'float8' },
+{ aggfnoid => 'max(abstime)', aggtransfn => 'int4larger',
+  aggcombinefn => 'int4larger', aggsortop => '>(abstime,abstime)',
+  aggtranstype => 'abstime' },
+{ aggfnoid => 'max(date)', aggtransfn => 'date_larger',
+  aggcombinefn => 'date_larger', aggsortop => '>(date,date)',
+  aggtranstype => 'date' },
+{ aggfnoid => 'max(time)', aggtransfn => 'time_larger',
+  aggcombinefn => 'time_larger', aggsortop => '>(time,time)',
+  aggtranstype => 'time' },
+{ aggfnoid => 'max(timetz)', aggtransfn => 'timetz_larger',
+  aggcombinefn => 'timetz_larger', aggsortop => '>(timetz,timetz)',
+  aggtranstype => 'timetz' },
+{ aggfnoid => 'max(money)', aggtransfn => 'cashlarger',
+  aggcombinefn => 'cashlarger', aggsortop => '>(money,money)',
+  aggtranstype => 'money' },
+{ aggfnoid => 'max(timestamp)', aggtransfn => 'timestamp_larger',
+  aggcombinefn => 'timestamp_larger', aggsortop => '>(timestamp,timestamp)',
+  aggtranstype => 'timestamp' },
+{ aggfnoid => 'max(timestamptz)', aggtransfn => 'timestamptz_larger',
+  aggcombinefn => 'timestamptz_larger',
+  aggsortop => '>(timestamptz,timestamptz)', aggtranstype => 'timestamptz' },
+{ aggfnoid => 'max(interval)', aggtransfn => 'interval_larger',
+  aggcombinefn => 'interval_larger', aggsortop => '>(interval,interval)',
+  aggtranstype => 'interval' },
+{ aggfnoid => 'max(text)', aggtransfn => 'text_larger',
+  aggcombinefn => 'text_larger', aggsortop => '>(text,text)',
+  aggtranstype => 'text' },
+{ aggfnoid => 'max(numeric)', aggtransfn => 'numeric_larger',
+  aggcombinefn => 'numeric_larger', aggsortop => '>(numeric,numeric)',
+  aggtranstype => 'numeric' },
+{ aggfnoid => 'max(anyarray)', aggtransfn => 'array_larger',
+  aggcombinefn => 'array_larger', aggsortop => '>(anyarray,anyarray)',
+  aggtranstype => 'anyarray' },
+{ aggfnoid => 'max(bpchar)', aggtransfn => 'bpchar_larger',
+  aggcombinefn => 'bpchar_larger', aggsortop => '>(bpchar,bpchar)',
+  aggtranstype => 'bpchar' },
+{ aggfnoid => 'max(tid)', aggtransfn => 'tidlarger',
+  aggcombinefn => 'tidlarger', aggsortop => '>(tid,tid)',
+  aggtranstype => 'tid' },
+{ aggfnoid => 'max(anyenum)', aggtransfn => 'enum_larger',
+  aggcombinefn => 'enum_larger', aggsortop => '>(anyenum,anyenum)',
+  aggtranstype => 'anyenum' },
+{ aggfnoid => 'max(inet)', aggtransfn => 'network_larger',
+  aggcombinefn => 'network_larger', aggsortop => '>(inet,inet)',
+  aggtranstype => 'inet' },
+
+# min
+{ aggfnoid => 'min(int8)', aggtransfn => 'int8smaller',
+  aggcombinefn => 'int8smaller', aggsortop => '<(int8,int8)',
+  aggtranstype => 'int8' },
+{ aggfnoid => 'min(int4)', aggtransfn => 'int4smaller',
+  aggcombinefn => 'int4smaller', aggsortop => '<(int4,int4)',
+  aggtranstype => 'int4' },
+{ aggfnoid => 'min(int2)', aggtransfn => 'int2smaller',
+  aggcombinefn => 'int2smaller', aggsortop => '<(int2,int2)',
+  aggtranstype => 'int2' },
+{ aggfnoid => 'min(oid)', aggtransfn => 'oidsmaller',
+  aggcombinefn => 'oidsmaller', aggsortop => '<(oid,oid)',
+  aggtranstype => 'oid' },
+{ aggfnoid => 'min(float4)', aggtransfn => 'float4smaller',
+  aggcombinefn => 'float4smaller', aggsortop => '<(float4,float4)',
+  aggtranstype => 'float4' },
+{ aggfnoid => 'min(float8)', aggtransfn => 'float8smaller',
+  aggcombinefn => 'float8smaller', aggsortop => '<(float8,float8)',
+  aggtranstype => 'float8' },
+{ aggfnoid => 'min(abstime)', aggtransfn => 'int4smaller',
+  aggcombinefn => 'int4smaller', aggsortop => '<(abstime,abstime)',
+  aggtranstype => 'abstime' },
+{ aggfnoid => 'min(date)', aggtransfn => 'date_smaller',
+  aggcombinefn => 'date_smaller', aggsortop => '<(date,date)',
+  aggtranstype => 'date' },
+{ aggfnoid => 'min(time)', aggtransfn => 'time_smaller',
+  aggcombinefn => 'time_smaller', aggsortop => '<(time,time)',
+  aggtranstype => 'time' },
+{ aggfnoid => 'min(timetz)', aggtransfn => 'timetz_smaller',
+  aggcombinefn => 'timetz_smaller', aggsortop => '<(timetz,timetz)',
+  aggtranstype => 'timetz' },
+{ aggfnoid => 'min(money)', aggtransfn => 'cashsmaller',
+  aggcombinefn => 'cashsmaller', aggsortop => '<(money,money)',
+  aggtranstype => 'money' },
+{ aggfnoid => 'min(timestamp)', aggtransfn => 'timestamp_smaller',
+  aggcombinefn => 'timestamp_smaller', aggsortop => '<(timestamp,timestamp)',
+  aggtranstype => 'timestamp' },
+{ aggfnoid => 'min(timestamptz)', aggtransfn => 'timestamptz_smaller',
+  aggcombinefn => 'timestamptz_smaller',
+  aggsortop => '<(timestamptz,timestamptz)', aggtranstype => 'timestamptz' },
+{ aggfnoid => 'min(interval)', aggtransfn => 'interval_smaller',
+  aggcombinefn => 'interval_smaller', aggsortop => '<(interval,interval)',
+  aggtranstype => 'interval' },
+{ aggfnoid => 'min(text)', aggtransfn => 'text_smaller',
+  aggcombinefn => 'text_smaller', aggsortop => '<(text,text)',
+  aggtranstype => 'text' },
+{ aggfnoid => 'min(numeric)', aggtransfn => 'numeric_smaller',
+  aggcombinefn => 'numeric_smaller', aggsortop => '<(numeric,numeric)',
+  aggtranstype => 'numeric' },
+{ aggfnoid => 'min(anyarray)', aggtransfn => 'array_smaller',
+  aggcombinefn => 'array_smaller', aggsortop => '<(anyarray,anyarray)',
+  aggtranstype => 'anyarray' },
+{ aggfnoid => 'min(bpchar)', aggtransfn => 'bpchar_smaller',
+  aggcombinefn => 'bpchar_smaller', aggsortop => '<(bpchar,bpchar)',
+  aggtranstype => 'bpchar' },
+{ aggfnoid => 'min(tid)', aggtransfn => 'tidsmaller',
+  aggcombinefn => 'tidsmaller', aggsortop => '<(tid,tid)',
+  aggtranstype => 'tid' },
+{ aggfnoid => 'min(anyenum)', aggtransfn => 'enum_smaller',
+  aggcombinefn => 'enum_smaller', aggsortop => '<(anyenum,anyenum)',
+  aggtranstype => 'anyenum' },
+{ aggfnoid => 'min(inet)', aggtransfn => 'network_smaller',
+  aggcombinefn => 'network_smaller', aggsortop => '<(inet,inet)',
+  aggtranstype => 'inet' },
+
+# count
+{ aggfnoid => 'count(any)', aggtransfn => 'int8inc_any',
+  aggcombinefn => 'int8pl', aggmtransfn => 'int8inc_any',
+  aggminvtransfn => 'int8dec_any', aggtranstype => 'int8',
+  aggmtranstype => 'int8', agginitval => '0', aggminitval => '0' },
+{ aggfnoid => 'count()', aggtransfn => 'int8inc', aggcombinefn => 'int8pl',
+  aggmtransfn => 'int8inc', aggminvtransfn => 'int8dec', aggtranstype => 'int8',
+  aggmtranstype => 'int8', agginitval => '0', aggminitval => '0' },
+
+# var_pop
+{ aggfnoid => 'var_pop(int8)', aggtransfn => 'int8_accum',
+  aggfinalfn => 'numeric_var_pop', aggcombinefn => 'numeric_combine',
+  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
+  aggmtransfn => 'int8_accum', aggminvtransfn => 'int8_accum_inv',
+  aggmfinalfn => 'numeric_var_pop', aggtranstype => 'internal',
+  aggtransspace => '128', aggmtranstype => 'internal',
+  aggmtransspace => '128' },
+{ aggfnoid => 'var_pop(int4)', aggtransfn => 'int4_accum',
+  aggfinalfn => 'numeric_poly_var_pop', aggcombinefn => 'numeric_poly_combine',
+  aggserialfn => 'numeric_poly_serialize',
+  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int4_accum',
+  aggminvtransfn => 'int4_accum_inv', aggmfinalfn => 'numeric_poly_var_pop',
+  aggtranstype => 'internal', aggtransspace => '48',
+  aggmtranstype => 'internal', aggmtransspace => '48' },
+{ aggfnoid => 'var_pop(int2)', aggtransfn => 'int2_accum',
+  aggfinalfn => 'numeric_poly_var_pop', aggcombinefn => 'numeric_poly_combine',
+  aggserialfn => 'numeric_poly_serialize',
+  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int2_accum',
+  aggminvtransfn => 'int2_accum_inv', aggmfinalfn => 'numeric_poly_var_pop',
+  aggtranstype => 'internal', aggtransspace => '48',
+  aggmtranstype => 'internal', aggmtransspace => '48' },
+{ aggfnoid => 'var_pop(float4)', aggtransfn => 'float4_accum',
+  aggfinalfn => 'float8_var_pop', aggcombinefn => 'float8_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0}' },
+{ aggfnoid => 'var_pop(float8)', aggtransfn => 'float8_accum',
+  aggfinalfn => 'float8_var_pop', aggcombinefn => 'float8_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0}' },
+{ aggfnoid => 'var_pop(numeric)', aggtransfn => 'numeric_accum',
+  aggfinalfn => 'numeric_var_pop', aggcombinefn => 'numeric_combine',
+  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
+  aggmtransfn => 'numeric_accum', aggminvtransfn => 'numeric_accum_inv',
+  aggmfinalfn => 'numeric_var_pop', aggtranstype => 'internal',
+  aggtransspace => '128', aggmtranstype => 'internal',
+  aggmtransspace => '128' },
+
+# var_samp
+{ aggfnoid => 'var_samp(int8)', aggtransfn => 'int8_accum',
+  aggfinalfn => 'numeric_var_samp', aggcombinefn => 'numeric_combine',
+  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
+  aggmtransfn => 'int8_accum', aggminvtransfn => 'int8_accum_inv',
+  aggmfinalfn => 'numeric_var_samp', aggtranstype => 'internal',
+  aggtransspace => '128', aggmtranstype => 'internal',
+  aggmtransspace => '128' },
+{ aggfnoid => 'var_samp(int4)', aggtransfn => 'int4_accum',
+  aggfinalfn => 'numeric_poly_var_samp', aggcombinefn => 'numeric_poly_combine',
+  aggserialfn => 'numeric_poly_serialize',
+  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int4_accum',
+  aggminvtransfn => 'int4_accum_inv', aggmfinalfn => 'numeric_poly_var_samp',
+  aggtranstype => 'internal', aggtransspace => '48',
+  aggmtranstype => 'internal', aggmtransspace => '48' },
+{ aggfnoid => 'var_samp(int2)', aggtransfn => 'int2_accum',
+  aggfinalfn => 'numeric_poly_var_samp', aggcombinefn => 'numeric_poly_combine',
+  aggserialfn => 'numeric_poly_serialize',
+  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int2_accum',
+  aggminvtransfn => 'int2_accum_inv', aggmfinalfn => 'numeric_poly_var_samp',
+  aggtranstype => 'internal', aggtransspace => '48',
+  aggmtranstype => 'internal', aggmtransspace => '48' },
+{ aggfnoid => 'var_samp(float4)', aggtransfn => 'float4_accum',
+  aggfinalfn => 'float8_var_samp', aggcombinefn => 'float8_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0}' },
+{ aggfnoid => 'var_samp(float8)', aggtransfn => 'float8_accum',
+  aggfinalfn => 'float8_var_samp', aggcombinefn => 'float8_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0}' },
+{ aggfnoid => 'var_samp(numeric)', aggtransfn => 'numeric_accum',
+  aggfinalfn => 'numeric_var_samp', aggcombinefn => 'numeric_combine',
+  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
+  aggmtransfn => 'numeric_accum', aggminvtransfn => 'numeric_accum_inv',
+  aggmfinalfn => 'numeric_var_samp', aggtranstype => 'internal',
+  aggtransspace => '128', aggmtranstype => 'internal',
+  aggmtransspace => '128' },
+
+# variance: historical Postgres syntax for var_samp
+{ aggfnoid => 'variance(int8)', aggtransfn => 'int8_accum',
+  aggfinalfn => 'numeric_var_samp', aggcombinefn => 'numeric_combine',
+  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
+  aggmtransfn => 'int8_accum', aggminvtransfn => 'int8_accum_inv',
+  aggmfinalfn => 'numeric_var_samp', aggtranstype => 'internal',
+  aggtransspace => '128', aggmtranstype => 'internal',
+  aggmtransspace => '128' },
+{ aggfnoid => 'variance(int4)', aggtransfn => 'int4_accum',
+  aggfinalfn => 'numeric_poly_var_samp', aggcombinefn => 'numeric_poly_combine',
+  aggserialfn => 'numeric_poly_serialize',
+  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int4_accum',
+  aggminvtransfn => 'int4_accum_inv', aggmfinalfn => 'numeric_poly_var_samp',
+  aggtranstype => 'internal', aggtransspace => '48',
+  aggmtranstype => 'internal', aggmtransspace => '48' },
+{ aggfnoid => 'variance(int2)', aggtransfn => 'int2_accum',
+  aggfinalfn => 'numeric_poly_var_samp', aggcombinefn => 'numeric_poly_combine',
+  aggserialfn => 'numeric_poly_serialize',
+  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int2_accum',
+  aggminvtransfn => 'int2_accum_inv', aggmfinalfn => 'numeric_poly_var_samp',
+  aggtranstype => 'internal', aggtransspace => '48',
+  aggmtranstype => 'internal', aggmtransspace => '48' },
+{ aggfnoid => 'variance(float4)', aggtransfn => 'float4_accum',
+  aggfinalfn => 'float8_var_samp', aggcombinefn => 'float8_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0}' },
+{ aggfnoid => 'variance(float8)', aggtransfn => 'float8_accum',
+  aggfinalfn => 'float8_var_samp', aggcombinefn => 'float8_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0}' },
+{ aggfnoid => 'variance(numeric)', aggtransfn => 'numeric_accum',
+  aggfinalfn => 'numeric_var_samp', aggcombinefn => 'numeric_combine',
+  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
+  aggmtransfn => 'numeric_accum', aggminvtransfn => 'numeric_accum_inv',
+  aggmfinalfn => 'numeric_var_samp', aggtranstype => 'internal',
+  aggtransspace => '128', aggmtranstype => 'internal',
+  aggmtransspace => '128' },
+
+# stddev_pop
+{ aggfnoid => 'stddev_pop(int8)', aggtransfn => 'int8_accum',
+  aggfinalfn => 'numeric_stddev_pop', aggcombinefn => 'numeric_combine',
+  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
+  aggmtransfn => 'int8_accum', aggminvtransfn => 'int8_accum_inv',
+  aggmfinalfn => 'numeric_stddev_pop', aggtranstype => 'internal',
+  aggtransspace => '128', aggmtranstype => 'internal',
+  aggmtransspace => '128' },
+{ aggfnoid => 'stddev_pop(int4)', aggtransfn => 'int4_accum',
+  aggfinalfn => 'numeric_poly_stddev_pop',
+  aggcombinefn => 'numeric_poly_combine',
+  aggserialfn => 'numeric_poly_serialize',
+  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int4_accum',
+  aggminvtransfn => 'int4_accum_inv', aggmfinalfn => 'numeric_poly_stddev_pop',
+  aggtranstype => 'internal', aggtransspace => '48',
+  aggmtranstype => 'internal', aggmtransspace => '48' },
+{ aggfnoid => 'stddev_pop(int2)', aggtransfn => 'int2_accum',
+  aggfinalfn => 'numeric_poly_stddev_pop',
+  aggcombinefn => 'numeric_poly_combine',
+  aggserialfn => 'numeric_poly_serialize',
+  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int2_accum',
+  aggminvtransfn => 'int2_accum_inv', aggmfinalfn => 'numeric_poly_stddev_pop',
+  aggtranstype => 'internal', aggtransspace => '48',
+  aggmtranstype => 'internal', aggmtransspace => '48' },
+{ aggfnoid => 'stddev_pop(float4)', aggtransfn => 'float4_accum',
+  aggfinalfn => 'float8_stddev_pop', aggcombinefn => 'float8_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0}' },
+{ aggfnoid => 'stddev_pop(float8)', aggtransfn => 'float8_accum',
+  aggfinalfn => 'float8_stddev_pop', aggcombinefn => 'float8_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0}' },
+{ aggfnoid => 'stddev_pop(numeric)', aggtransfn => 'numeric_accum',
+  aggfinalfn => 'numeric_stddev_pop', aggcombinefn => 'numeric_combine',
+  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
+  aggmtransfn => 'numeric_accum', aggminvtransfn => 'numeric_accum_inv',
+  aggmfinalfn => 'numeric_stddev_pop', aggtranstype => 'internal',
+  aggtransspace => '128', aggmtranstype => 'internal',
+  aggmtransspace => '128' },
+
+# stddev_samp
+{ aggfnoid => 'stddev_samp(int8)', aggtransfn => 'int8_accum',
+  aggfinalfn => 'numeric_stddev_samp', aggcombinefn => 'numeric_combine',
+  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
+  aggmtransfn => 'int8_accum', aggminvtransfn => 'int8_accum_inv',
+  aggmfinalfn => 'numeric_stddev_samp', aggtranstype => 'internal',
+  aggtransspace => '128', aggmtranstype => 'internal',
+  aggmtransspace => '128' },
+{ aggfnoid => 'stddev_samp(int4)', aggtransfn => 'int4_accum',
+  aggfinalfn => 'numeric_poly_stddev_samp',
+  aggcombinefn => 'numeric_poly_combine',
+  aggserialfn => 'numeric_poly_serialize',
+  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int4_accum',
+  aggminvtransfn => 'int4_accum_inv', aggmfinalfn => 'numeric_poly_stddev_samp',
+  aggtranstype => 'internal', aggtransspace => '48',
+  aggmtranstype => 'internal', aggmtransspace => '48' },
+{ aggfnoid => 'stddev_samp(int2)', aggtransfn => 'int2_accum',
+  aggfinalfn => 'numeric_poly_stddev_samp',
+  aggcombinefn => 'numeric_poly_combine',
+  aggserialfn => 'numeric_poly_serialize',
+  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int2_accum',
+  aggminvtransfn => 'int2_accum_inv', aggmfinalfn => 'numeric_poly_stddev_samp',
+  aggtranstype => 'internal', aggtransspace => '48',
+  aggmtranstype => 'internal', aggmtransspace => '48' },
+{ aggfnoid => 'stddev_samp(float4)', aggtransfn => 'float4_accum',
+  aggfinalfn => 'float8_stddev_samp', aggcombinefn => 'float8_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0}' },
+{ aggfnoid => 'stddev_samp(float8)', aggtransfn => 'float8_accum',
+  aggfinalfn => 'float8_stddev_samp', aggcombinefn => 'float8_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0}' },
+{ aggfnoid => 'stddev_samp(numeric)', aggtransfn => 'numeric_accum',
+  aggfinalfn => 'numeric_stddev_samp', aggcombinefn => 'numeric_combine',
+  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
+  aggmtransfn => 'numeric_accum', aggminvtransfn => 'numeric_accum_inv',
+  aggmfinalfn => 'numeric_stddev_samp', aggtranstype => 'internal',
+  aggtransspace => '128', aggmtranstype => 'internal',
+  aggmtransspace => '128' },
+
+# stddev: historical Postgres syntax for stddev_samp
+{ aggfnoid => 'stddev(int8)', aggtransfn => 'int8_accum',
+  aggfinalfn => 'numeric_stddev_samp', aggcombinefn => 'numeric_combine',
+  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
+  aggmtransfn => 'int8_accum', aggminvtransfn => 'int8_accum_inv',
+  aggmfinalfn => 'numeric_stddev_samp', aggtranstype => 'internal',
+  aggtransspace => '128', aggmtranstype => 'internal',
+  aggmtransspace => '128' },
+{ aggfnoid => 'stddev(int4)', aggtransfn => 'int4_accum',
+  aggfinalfn => 'numeric_poly_stddev_samp',
+  aggcombinefn => 'numeric_poly_combine',
+  aggserialfn => 'numeric_poly_serialize',
+  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int4_accum',
+  aggminvtransfn => 'int4_accum_inv', aggmfinalfn => 'numeric_poly_stddev_samp',
+  aggtranstype => 'internal', aggtransspace => '48',
+  aggmtranstype => 'internal', aggmtransspace => '48' },
+{ aggfnoid => 'stddev(int2)', aggtransfn => 'int2_accum',
+  aggfinalfn => 'numeric_poly_stddev_samp',
+  aggcombinefn => 'numeric_poly_combine',
+  aggserialfn => 'numeric_poly_serialize',
+  aggdeserialfn => 'numeric_poly_deserialize', aggmtransfn => 'int2_accum',
+  aggminvtransfn => 'int2_accum_inv', aggmfinalfn => 'numeric_poly_stddev_samp',
+  aggtranstype => 'internal', aggtransspace => '48',
+  aggmtranstype => 'internal', aggmtransspace => '48' },
+{ aggfnoid => 'stddev(float4)', aggtransfn => 'float4_accum',
+  aggfinalfn => 'float8_stddev_samp', aggcombinefn => 'float8_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0}' },
+{ aggfnoid => 'stddev(float8)', aggtransfn => 'float8_accum',
+  aggfinalfn => 'float8_stddev_samp', aggcombinefn => 'float8_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0}' },
+{ aggfnoid => 'stddev(numeric)', aggtransfn => 'numeric_accum',
+  aggfinalfn => 'numeric_stddev_samp', aggcombinefn => 'numeric_combine',
+  aggserialfn => 'numeric_serialize', aggdeserialfn => 'numeric_deserialize',
+  aggmtransfn => 'numeric_accum', aggminvtransfn => 'numeric_accum_inv',
+  aggmfinalfn => 'numeric_stddev_samp', aggtranstype => 'internal',
+  aggtransspace => '128', aggmtranstype => 'internal',
+  aggmtransspace => '128' },
+
+# SQL2003 binary regression aggregates
+{ aggfnoid => 'regr_count', aggtransfn => 'int8inc_float8_float8',
+  aggcombinefn => 'int8pl', aggtranstype => 'int8', agginitval => '0' },
+{ aggfnoid => 'regr_sxx', aggtransfn => 'float8_regr_accum',
+  aggfinalfn => 'float8_regr_sxx', aggcombinefn => 'float8_regr_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
+{ aggfnoid => 'regr_syy', aggtransfn => 'float8_regr_accum',
+  aggfinalfn => 'float8_regr_syy', aggcombinefn => 'float8_regr_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
+{ aggfnoid => 'regr_sxy', aggtransfn => 'float8_regr_accum',
+  aggfinalfn => 'float8_regr_sxy', aggcombinefn => 'float8_regr_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
+{ aggfnoid => 'regr_avgx', aggtransfn => 'float8_regr_accum',
+  aggfinalfn => 'float8_regr_avgx', aggcombinefn => 'float8_regr_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
+{ aggfnoid => 'regr_avgy', aggtransfn => 'float8_regr_accum',
+  aggfinalfn => 'float8_regr_avgy', aggcombinefn => 'float8_regr_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
+{ aggfnoid => 'regr_r2', aggtransfn => 'float8_regr_accum',
+  aggfinalfn => 'float8_regr_r2', aggcombinefn => 'float8_regr_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
+{ aggfnoid => 'regr_slope', aggtransfn => 'float8_regr_accum',
+  aggfinalfn => 'float8_regr_slope', aggcombinefn => 'float8_regr_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
+{ aggfnoid => 'regr_intercept', aggtransfn => 'float8_regr_accum',
+  aggfinalfn => 'float8_regr_intercept', aggcombinefn => 'float8_regr_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
+{ aggfnoid => 'covar_pop', aggtransfn => 'float8_regr_accum',
+  aggfinalfn => 'float8_covar_pop', aggcombinefn => 'float8_regr_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
+{ aggfnoid => 'covar_samp', aggtransfn => 'float8_regr_accum',
+  aggfinalfn => 'float8_covar_samp', aggcombinefn => 'float8_regr_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
+{ aggfnoid => 'corr', aggtransfn => 'float8_regr_accum',
+  aggfinalfn => 'float8_corr', aggcombinefn => 'float8_regr_combine',
+  aggtranstype => '_float8', agginitval => '{0,0,0,0,0,0}' },
+
+# boolean-and and boolean-or
+{ aggfnoid => 'bool_and', aggtransfn => 'booland_statefunc',
+  aggcombinefn => 'booland_statefunc', aggmtransfn => 'bool_accum',
+  aggminvtransfn => 'bool_accum_inv', aggmfinalfn => 'bool_alltrue',
+  aggsortop => '<(bool,bool)', aggtranstype => 'bool',
+  aggmtranstype => 'internal', aggmtransspace => '16' },
+{ aggfnoid => 'bool_or', aggtransfn => 'boolor_statefunc',
+  aggcombinefn => 'boolor_statefunc', aggmtransfn => 'bool_accum',
+  aggminvtransfn => 'bool_accum_inv', aggmfinalfn => 'bool_anytrue',
+  aggsortop => '>(bool,bool)', aggtranstype => 'bool',
+  aggmtranstype => 'internal', aggmtransspace => '16' },
+{ aggfnoid => 'every', aggtransfn => 'booland_statefunc',
+  aggcombinefn => 'booland_statefunc', aggmtransfn => 'bool_accum',
+  aggminvtransfn => 'bool_accum_inv', aggmfinalfn => 'bool_alltrue',
+  aggsortop => '<(bool,bool)', aggtranstype => 'bool',
+  aggmtranstype => 'internal', aggmtransspace => '16' },
+
+# bitwise integer
+{ aggfnoid => 'bit_and(int2)', aggtransfn => 'int2and',
+  aggcombinefn => 'int2and', aggtranstype => 'int2' },
+{ aggfnoid => 'bit_or(int2)', aggtransfn => 'int2or', aggcombinefn => 'int2or',
+  aggtranstype => 'int2' },
+{ aggfnoid => 'bit_and(int4)', aggtransfn => 'int4and',
+  aggcombinefn => 'int4and', aggtranstype => 'int4' },
+{ aggfnoid => 'bit_or(int4)', aggtransfn => 'int4or', aggcombinefn => 'int4or',
+  aggtranstype => 'int4' },
+{ aggfnoid => 'bit_and(int8)', aggtransfn => 'int8and',
+  aggcombinefn => 'int8and', aggtranstype => 'int8' },
+{ aggfnoid => 'bit_or(int8)', aggtransfn => 'int8or', aggcombinefn => 'int8or',
+  aggtranstype => 'int8' },
+{ aggfnoid => 'bit_and(bit)', aggtransfn => 'bitand', aggcombinefn => 'bitand',
+  aggtranstype => 'bit' },
+{ aggfnoid => 'bit_or(bit)', aggtransfn => 'bitor', aggcombinefn => 'bitor',
+  aggtranstype => 'bit' },
+
+# xml
+{ aggfnoid => 'xmlagg', aggtransfn => 'xmlconcat2', aggtranstype => 'xml' },
+
+# array
+{ aggfnoid => 'array_agg(anynonarray)', aggtransfn => 'array_agg_transfn',
+  aggfinalfn => 'array_agg_finalfn', aggfinalextra => 't',
+  aggtranstype => 'internal' },
+{ aggfnoid => 'array_agg(anyarray)', aggtransfn => 'array_agg_array_transfn',
+  aggfinalfn => 'array_agg_array_finalfn', aggfinalextra => 't',
+  aggtranstype => 'internal' },
+
+# text
+{ aggfnoid => 'string_agg(text,text)', aggtransfn => 'string_agg_transfn',
+  aggfinalfn => 'string_agg_finalfn', aggtranstype => 'internal' },
+
+# bytea
+{ aggfnoid => 'string_agg(bytea,bytea)',
+  aggtransfn => 'bytea_string_agg_transfn',
+  aggfinalfn => 'bytea_string_agg_finalfn', aggtranstype => 'internal' },
+
+# json
+{ aggfnoid => 'json_agg', aggtransfn => 'json_agg_transfn',
+  aggfinalfn => 'json_agg_finalfn', aggtranstype => 'internal' },
+{ aggfnoid => 'json_object_agg', aggtransfn => 'json_object_agg_transfn',
+  aggfinalfn => 'json_object_agg_finalfn', aggtranstype => 'internal' },
+
+# jsonb
+{ aggfnoid => 'jsonb_agg', aggtransfn => 'jsonb_agg_transfn',
+  aggfinalfn => 'jsonb_agg_finalfn', aggtranstype => 'internal' },
+{ aggfnoid => 'jsonb_object_agg', aggtransfn => 'jsonb_object_agg_transfn',
+  aggfinalfn => 'jsonb_object_agg_finalfn', aggtranstype => 'internal' },
+
+# ordered-set and hypothetical-set aggregates
+{ aggfnoid => 'percentile_disc(float8,anyelement)', aggkind => 'o',
+  aggnumdirectargs => '1', aggtransfn => 'ordered_set_transition',
+  aggfinalfn => 'percentile_disc_final', aggfinalextra => 't',
+  aggfinalmodify => 's', aggmfinalmodify => 's', aggtranstype => 'internal' },
+{ aggfnoid => 'percentile_cont(float8,float8)', aggkind => 'o',
+  aggnumdirectargs => '1', aggtransfn => 'ordered_set_transition',
+  aggfinalfn => 'percentile_cont_float8_final', aggfinalmodify => 's',
+  aggmfinalmodify => 's', aggtranstype => 'internal' },
+{ aggfnoid => 'percentile_cont(float8,interval)', aggkind => 'o',
+  aggnumdirectargs => '1', aggtransfn => 'ordered_set_transition',
+  aggfinalfn => 'percentile_cont_interval_final', aggfinalmodify => 's',
+  aggmfinalmodify => 's', aggtranstype => 'internal' },
+{ aggfnoid => 'percentile_disc(_float8,anyelement)', aggkind => 'o',
+  aggnumdirectargs => '1', aggtransfn => 'ordered_set_transition',
+  aggfinalfn => 'percentile_disc_multi_final', aggfinalextra => 't',
+  aggfinalmodify => 's', aggmfinalmodify => 's', aggtranstype => 'internal' },
+{ aggfnoid => 'percentile_cont(_float8,float8)', aggkind => 'o',
+  aggnumdirectargs => '1', aggtransfn => 'ordered_set_transition',
+  aggfinalfn => 'percentile_cont_float8_multi_final', aggfinalmodify => 's',
+  aggmfinalmodify => 's', aggtranstype => 'internal' },
+{ aggfnoid => 'percentile_cont(_float8,interval)', aggkind => 'o',
+  aggnumdirectargs => '1', aggtransfn => 'ordered_set_transition',
+  aggfinalfn => 'percentile_cont_interval_multi_final', aggfinalmodify => 's',
+  aggmfinalmodify => 's', aggtranstype => 'internal' },
+{ aggfnoid => 'mode', aggkind => 'o', aggtransfn => 'ordered_set_transition',
+  aggfinalfn => 'mode_final', aggfinalextra => 't', aggfinalmodify => 's',
+  aggmfinalmodify => 's', aggtranstype => 'internal' },
+{ aggfnoid => 'rank(any)', aggkind => 'h', aggnumdirectargs => '1',
+  aggtransfn => 'ordered_set_transition_multi', aggfinalfn => 'rank_final',
+  aggfinalextra => 't', aggfinalmodify => 'w', aggmfinalmodify => 'w',
+  aggtranstype => 'internal' },
+{ aggfnoid => 'percent_rank(any)', aggkind => 'h', aggnumdirectargs => '1',
+  aggtransfn => 'ordered_set_transition_multi',
+  aggfinalfn => 'percent_rank_final', aggfinalextra => 't',
+  aggfinalmodify => 'w', aggmfinalmodify => 'w', aggtranstype => 'internal' },
+{ aggfnoid => 'cume_dist(any)', aggkind => 'h', aggnumdirectargs => '1',
+  aggtransfn => 'ordered_set_transition_multi', aggfinalfn => 'cume_dist_final',
+  aggfinalextra => 't', aggfinalmodify => 'w', aggmfinalmodify => 'w',
+  aggtranstype => 'internal' },
+{ aggfnoid => 'dense_rank(any)', aggkind => 'h', aggnumdirectargs => '1',
+  aggtransfn => 'ordered_set_transition_multi',
+  aggfinalfn => 'dense_rank_final', aggfinalextra => 't', aggfinalmodify => 'w',
+  aggmfinalmodify => 'w', aggtranstype => 'internal' },
+
+]
index 67a0850c181f91a958d5f53e990bb5aff19adf0e..79f9ce0c146e4dfccd7379b5f4cb216705f41c63 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_aggregate.h
  *       definition of the system "aggregate" relation (pg_aggregate)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_aggregate.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_AGGREGATE_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_aggregate_d.h"
 
 /* ----------------------------------------------------------------
  *             pg_aggregate definition.
- *
  *             cpp turns this into typedef struct FormData_pg_aggregate
- *
- *     aggfnoid                        pg_proc OID of the aggregate itself
- *     aggkind                         aggregate kind, see AGGKIND_ categories below
- *     aggnumdirectargs        number of arguments that are "direct" arguments
- *     aggtransfn                      transition function
- *     aggfinalfn                      final function (0 if none)
- *     aggcombinefn            combine function (0 if none)
- *     aggserialfn                     function to convert transtype to bytea (0 if none)
- *     aggdeserialfn           function to convert bytea to transtype (0 if none)
- *     aggmtransfn                     forward function for moving-aggregate mode (0 if none)
- *     aggminvtransfn          inverse function for moving-aggregate mode (0 if none)
- *     aggmfinalfn                     final function for moving-aggregate mode (0 if none)
- *     aggfinalextra           true to pass extra dummy arguments to aggfinalfn
- *     aggmfinalextra          true to pass extra dummy arguments to aggmfinalfn
- *     aggfinalmodify          tells whether aggfinalfn modifies transition state
- *     aggmfinalmodify         tells whether aggmfinalfn modifies transition state
- *     aggsortop                       associated sort operator (0 if none)
- *     aggtranstype            type of aggregate's transition (state) data
- *     aggtransspace           estimated size of state data (0 for default estimate)
- *     aggmtranstype           type of moving-aggregate state data (0 if none)
- *     aggmtransspace          estimated size of moving-agg state (0 for default est)
- *     agginitval                      initial value for transition state (can be NULL)
- *     aggminitval                     initial value for moving-agg state (can be NULL)
  * ----------------------------------------------------------------
  */
-#define AggregateRelationId  2600
-
-CATALOG(pg_aggregate,2600) BKI_WITHOUT_OIDS
+CATALOG(pg_aggregate,2600,AggregateRelationId) BKI_WITHOUT_OIDS
 {
-       regproc         aggfnoid;
-       char            aggkind;
-       int16           aggnumdirectargs;
-       regproc         aggtransfn;
-       regproc         aggfinalfn;
-       regproc         aggcombinefn;
-       regproc         aggserialfn;
-       regproc         aggdeserialfn;
-       regproc         aggmtransfn;
-       regproc         aggminvtransfn;
-       regproc         aggmfinalfn;
-       bool            aggfinalextra;
-       bool            aggmfinalextra;
-       char            aggfinalmodify;
-       char            aggmfinalmodify;
-       Oid                     aggsortop;
-       Oid                     aggtranstype;
-       int32           aggtransspace;
-       Oid                     aggmtranstype;
-       int32           aggmtransspace;
+       /* pg_proc OID of the aggregate itself */
+       regproc         aggfnoid BKI_LOOKUP(pg_proc);
+
+       /* aggregate kind, see AGGKIND_ categories below */
+       char            aggkind BKI_DEFAULT(n);
+
+       /* number of arguments that are "direct" arguments */
+       int16           aggnumdirectargs BKI_DEFAULT(0);
+
+       /* transition function */
+       regproc         aggtransfn BKI_LOOKUP(pg_proc);
+
+       /* final function (0 if none) */
+       regproc         aggfinalfn BKI_DEFAULT(-) BKI_LOOKUP(pg_proc);
+
+       /* combine function (0 if none) */
+       regproc         aggcombinefn BKI_DEFAULT(-) BKI_LOOKUP(pg_proc);
+
+       /* function to convert transtype to bytea (0 if none) */
+       regproc         aggserialfn BKI_DEFAULT(-) BKI_LOOKUP(pg_proc);
+
+       /* function to convert bytea to transtype (0 if none) */
+       regproc         aggdeserialfn BKI_DEFAULT(-) BKI_LOOKUP(pg_proc);
+
+       /* forward function for moving-aggregate mode (0 if none) */
+       regproc         aggmtransfn BKI_DEFAULT(-) BKI_LOOKUP(pg_proc);
+
+       /* inverse function for moving-aggregate mode (0 if none) */
+       regproc         aggminvtransfn BKI_DEFAULT(-) BKI_LOOKUP(pg_proc);
+
+       /* final function for moving-aggregate mode (0 if none) */
+       regproc         aggmfinalfn BKI_DEFAULT(-) BKI_LOOKUP(pg_proc);
+
+       /* true to pass extra dummy arguments to aggfinalfn */
+       bool            aggfinalextra BKI_DEFAULT(f);
+
+       /* true to pass extra dummy arguments to aggmfinalfn */
+       bool            aggmfinalextra BKI_DEFAULT(f);
+
+       /* tells whether aggfinalfn modifies transition state */
+       char            aggfinalmodify BKI_DEFAULT(r);
+
+       /* tells whether aggmfinalfn modifies transition state */
+       char            aggmfinalmodify BKI_DEFAULT(r);
+
+       /* associated sort operator (0 if none) */
+       Oid                     aggsortop BKI_DEFAULT(0) BKI_LOOKUP(pg_operator);
+
+       /* type of aggregate's transition (state) data */
+       Oid                     aggtranstype BKI_LOOKUP(pg_type);
+
+       /* estimated size of state data (0 for default estimate) */
+       int32           aggtransspace BKI_DEFAULT(0);
+
+       /* type of moving-aggregate state data (0 if none) */
+       Oid                     aggmtranstype BKI_DEFAULT(0) BKI_LOOKUP(pg_type);
+
+       /* estimated size of moving-agg state (0 for default est) */
+       int32           aggmtransspace BKI_DEFAULT(0);
 
 #ifdef CATALOG_VARLEN                  /* variable-length fields start here */
-       text            agginitval;
-       text            aggminitval;
+
+       /* initial value for transition state (can be NULL) */
+       text            agginitval BKI_DEFAULT(_null_);
+
+       /* initial value for moving-agg state (can be NULL) */
+       text            aggminitval BKI_DEFAULT(_null_);
 #endif
 } FormData_pg_aggregate;
 
@@ -88,34 +105,7 @@ CATALOG(pg_aggregate,2600) BKI_WITHOUT_OIDS
  */
 typedef FormData_pg_aggregate *Form_pg_aggregate;
 
-/* ----------------
- *             compiler constants for pg_aggregate
- * ----------------
- */
-
-#define Natts_pg_aggregate                                     22
-#define Anum_pg_aggregate_aggfnoid                     1
-#define Anum_pg_aggregate_aggkind                      2
-#define Anum_pg_aggregate_aggnumdirectargs     3
-#define Anum_pg_aggregate_aggtransfn           4
-#define Anum_pg_aggregate_aggfinalfn           5
-#define Anum_pg_aggregate_aggcombinefn         6
-#define Anum_pg_aggregate_aggserialfn          7
-#define Anum_pg_aggregate_aggdeserialfn                8
-#define Anum_pg_aggregate_aggmtransfn          9
-#define Anum_pg_aggregate_aggminvtransfn       10
-#define Anum_pg_aggregate_aggmfinalfn          11
-#define Anum_pg_aggregate_aggfinalextra                12
-#define Anum_pg_aggregate_aggmfinalextra       13
-#define Anum_pg_aggregate_aggfinalmodify       14
-#define Anum_pg_aggregate_aggmfinalmodify      15
-#define Anum_pg_aggregate_aggsortop                    16
-#define Anum_pg_aggregate_aggtranstype         17
-#define Anum_pg_aggregate_aggtransspace                18
-#define Anum_pg_aggregate_aggmtranstype                19
-#define Anum_pg_aggregate_aggmtransspace       20
-#define Anum_pg_aggregate_agginitval           21
-#define Anum_pg_aggregate_aggminitval          22
+#ifdef EXPOSE_TO_CLIENT_CODE
 
 /*
  * Symbolic values for aggkind column.  We distinguish normal aggregates
@@ -144,190 +134,6 @@ typedef FormData_pg_aggregate *Form_pg_aggregate;
 #define AGGMODIFY_SHARABLE                     's'
 #define AGGMODIFY_READ_WRITE           'w'
 
-
-/* ----------------
- * initial contents of pg_aggregate
- * ---------------
- */
-
-/* avg */
-DATA(insert ( 2100     n 0 int8_avg_accum              numeric_poly_avg        int8_avg_combine        int8_avg_serialize              int8_avg_deserialize    int8_avg_accum  int8_avg_accum_inv      numeric_poly_avg        f f r r 0       2281    48      2281    48      _null_ _null_ ));
-DATA(insert ( 2101     n 0 int4_avg_accum              int8_avg                        int4_avg_combine        -                                               -                                               int4_avg_accum  int4_avg_accum_inv      int8_avg                        f f r r 0       1016    0       1016    0       "{0,0}" "{0,0}" ));
-DATA(insert ( 2102     n 0 int2_avg_accum              int8_avg                        int4_avg_combine        -                                               -                                               int2_avg_accum  int2_avg_accum_inv      int8_avg                        f f r r 0       1016    0       1016    0       "{0,0}" "{0,0}" ));
-DATA(insert ( 2103     n 0 numeric_avg_accum   numeric_avg                     numeric_avg_combine numeric_avg_serialize       numeric_avg_deserialize numeric_avg_accum numeric_accum_inv numeric_avg                 f f r r 0       2281    128 2281        128 _null_ _null_ ));
-DATA(insert ( 2104     n 0 float4_accum                float8_avg                      float8_combine          -                                               -                                               -                               -                               -                                               f f r r 0       1022    0       0               0       "{0,0,0}" _null_ ));
-DATA(insert ( 2105     n 0 float8_accum                float8_avg                      float8_combine          -                                               -                                               -                               -                               -                                               f f r r 0       1022    0       0               0       "{0,0,0}" _null_ ));
-DATA(insert ( 2106     n 0 interval_accum              interval_avg            interval_combine        -                                               -                                               interval_accum  interval_accum_inv      interval_avg            f f r r 0       1187    0       1187    0       "{0 second,0 second}" "{0 second,0 second}" ));
-
-/* sum */
-DATA(insert ( 2107     n 0 int8_avg_accum              numeric_poly_sum        int8_avg_combine        int8_avg_serialize              int8_avg_deserialize    int8_avg_accum  int8_avg_accum_inv      numeric_poly_sum        f f r r 0       2281    48      2281    48      _null_ _null_ ));
-DATA(insert ( 2108     n 0 int4_sum                    -                                       int8pl                          -                                               -                                               int4_avg_accum  int4_avg_accum_inv      int2int4_sum            f f r r 0       20              0       1016    0       _null_ "{0,0}" ));
-DATA(insert ( 2109     n 0 int2_sum                    -                                       int8pl                          -                                               -                                               int2_avg_accum  int2_avg_accum_inv      int2int4_sum            f f r r 0       20              0       1016    0       _null_ "{0,0}" ));
-DATA(insert ( 2110     n 0 float4pl                    -                                       float4pl                        -                                               -                                               -                               -                                       -                                       f f r r 0       700             0       0               0       _null_ _null_ ));
-DATA(insert ( 2111     n 0 float8pl                    -                                       float8pl                        -                                               -                                               -                               -                                       -                                       f f r r 0       701             0       0               0       _null_ _null_ ));
-DATA(insert ( 2112     n 0 cash_pl                             -                                       cash_pl                         -                                               -                                               cash_pl                 cash_mi                         -                                       f f r r 0       790             0       790             0       _null_ _null_ ));
-DATA(insert ( 2113     n 0 interval_pl                 -                                       interval_pl                     -                                               -                                               interval_pl             interval_mi                     -                                       f f r r 0       1186    0       1186    0       _null_ _null_ ));
-DATA(insert ( 2114     n 0 numeric_avg_accum   numeric_sum                     numeric_avg_combine numeric_avg_serialize       numeric_avg_deserialize numeric_avg_accum numeric_accum_inv numeric_sum                 f f r r 0       2281    128 2281        128 _null_ _null_ ));
-
-/* max */
-DATA(insert ( 2115     n 0 int8larger          -                               int8larger                      -       -       -                               -                               -                               f f r r 413             20              0       0               0       _null_ _null_ ));
-DATA(insert ( 2116     n 0 int4larger          -                               int4larger                      -       -       -                               -                               -                               f f r r 521             23              0       0               0       _null_ _null_ ));
-DATA(insert ( 2117     n 0 int2larger          -                               int2larger                      -       -       -                               -                               -                               f f r r 520             21              0       0               0       _null_ _null_ ));
-DATA(insert ( 2118     n 0 oidlarger           -                               oidlarger                       -       -       -                               -                               -                               f f r r 610             26              0       0               0       _null_ _null_ ));
-DATA(insert ( 2119     n 0 float4larger        -                               float4larger            -       -       -                               -                               -                               f f r r 623             700             0       0               0       _null_ _null_ ));
-DATA(insert ( 2120     n 0 float8larger        -                               float8larger            -       -       -                               -                               -                               f f r r 674             701             0       0               0       _null_ _null_ ));
-DATA(insert ( 2121     n 0 int4larger          -                               int4larger                      -       -       -                               -                               -                               f f r r 563             702             0       0               0       _null_ _null_ ));
-DATA(insert ( 2122     n 0 date_larger         -                               date_larger                     -       -       -                               -                               -                               f f r r 1097    1082    0       0               0       _null_ _null_ ));
-DATA(insert ( 2123     n 0 time_larger         -                               time_larger                     -       -       -                               -                               -                               f f r r 1112    1083    0       0               0       _null_ _null_ ));
-DATA(insert ( 2124     n 0 timetz_larger       -                               timetz_larger           -       -       -                               -                               -                               f f r r 1554    1266    0       0               0       _null_ _null_ ));
-DATA(insert ( 2125     n 0 cashlarger          -                               cashlarger                      -       -       -                               -                               -                               f f r r 903             790             0       0               0       _null_ _null_ ));
-DATA(insert ( 2126     n 0 timestamp_larger    -                       timestamp_larger        -       -       -                               -                               -                               f f r r 2064    1114    0       0               0       _null_ _null_ ));
-DATA(insert ( 2127     n 0 timestamptz_larger  -                       timestamptz_larger      -       -       -                               -                               -                               f f r r 1324    1184    0       0               0       _null_ _null_ ));
-DATA(insert ( 2128     n 0 interval_larger -                           interval_larger         -       -       -                               -                               -                               f f r r 1334    1186    0       0               0       _null_ _null_ ));
-DATA(insert ( 2129     n 0 text_larger         -                               text_larger                     -       -       -                               -                               -                               f f r r 666             25              0       0               0       _null_ _null_ ));
-DATA(insert ( 2130     n 0 numeric_larger      -                               numeric_larger          -       -       -                               -                               -                               f f r r 1756    1700    0       0               0       _null_ _null_ ));
-DATA(insert ( 2050     n 0 array_larger        -                               array_larger            -       -       -                               -                               -                               f f r r 1073    2277    0       0               0       _null_ _null_ ));
-DATA(insert ( 2244     n 0 bpchar_larger       -                               bpchar_larger           -       -       -                               -                               -                               f f r r 1060    1042    0       0               0       _null_ _null_ ));
-DATA(insert ( 2797     n 0 tidlarger           -                               tidlarger                       -       -       -                               -                               -                               f f r r 2800    27              0       0               0       _null_ _null_ ));
-DATA(insert ( 3526     n 0 enum_larger         -                               enum_larger                     -       -       -                               -                               -                               f f r r 3519    3500    0       0               0       _null_ _null_ ));
-DATA(insert ( 3564     n 0 network_larger      -                               network_larger          -       -       -                               -                               -                               f f r r 1205    869             0       0               0       _null_ _null_ ));
-
-/* min */
-DATA(insert ( 2131     n 0 int8smaller         -                               int8smaller                     -       -       -                               -                               -                               f f r r 412             20              0       0               0       _null_ _null_ ));
-DATA(insert ( 2132     n 0 int4smaller         -                               int4smaller                     -       -       -                               -                               -                               f f r r 97              23              0       0               0       _null_ _null_ ));
-DATA(insert ( 2133     n 0 int2smaller         -                               int2smaller                     -       -       -                               -                               -                               f f r r 95              21              0       0               0       _null_ _null_ ));
-DATA(insert ( 2134     n 0 oidsmaller          -                               oidsmaller                      -       -       -                               -                               -                               f f r r 609             26              0       0               0       _null_ _null_ ));
-DATA(insert ( 2135     n 0 float4smaller       -                               float4smaller           -       -       -                               -                               -                               f f r r 622             700             0       0               0       _null_ _null_ ));
-DATA(insert ( 2136     n 0 float8smaller       -                               float8smaller           -       -       -                               -                               -                               f f r r 672             701             0       0               0       _null_ _null_ ));
-DATA(insert ( 2137     n 0 int4smaller         -                               int4smaller                     -       -       -                               -                               -                               f f r r 562             702             0       0               0       _null_ _null_ ));
-DATA(insert ( 2138     n 0 date_smaller        -                               date_smaller            -       -       -                               -                               -                               f f r r 1095    1082    0       0               0       _null_ _null_ ));
-DATA(insert ( 2139     n 0 time_smaller        -                               time_smaller            -       -       -                               -                               -                               f f r r 1110    1083    0       0               0       _null_ _null_ ));
-DATA(insert ( 2140     n 0 timetz_smaller      -                               timetz_smaller          -       -       -                               -                               -                               f f r r 1552    1266    0       0               0       _null_ _null_ ));
-DATA(insert ( 2141     n 0 cashsmaller         -                               cashsmaller                     -       -       -                               -                               -                               f f r r 902             790             0       0               0       _null_ _null_ ));
-DATA(insert ( 2142     n 0 timestamp_smaller   -                       timestamp_smaller       -       -       -                               -                               -                               f f r r 2062    1114    0       0               0       _null_ _null_ ));
-DATA(insert ( 2143     n 0 timestamptz_smaller -                       timestamptz_smaller -   -       -                               -                               -                               f f r r 1322    1184    0       0               0       _null_ _null_ ));
-DATA(insert ( 2144     n 0 interval_smaller    -                       interval_smaller        -       -       -                               -                               -                               f f r r 1332    1186    0       0               0       _null_ _null_ ));
-DATA(insert ( 2145     n 0 text_smaller        -                               text_smaller            -       -       -                               -                               -                               f f r r 664             25              0       0               0       _null_ _null_ ));
-DATA(insert ( 2146     n 0 numeric_smaller -                           numeric_smaller         -       -       -                               -                               -                               f f r r 1754    1700    0       0               0       _null_ _null_ ));
-DATA(insert ( 2051     n 0 array_smaller       -                               array_smaller           -       -       -                               -                               -                               f f r r 1072    2277    0       0               0       _null_ _null_ ));
-DATA(insert ( 2245     n 0 bpchar_smaller      -                               bpchar_smaller          -       -       -                               -                               -                               f f r r 1058    1042    0       0               0       _null_ _null_ ));
-DATA(insert ( 2798     n 0 tidsmaller          -                               tidsmaller                      -       -       -                               -                               -                               f f r r 2799    27              0       0               0       _null_ _null_ ));
-DATA(insert ( 3527     n 0 enum_smaller        -                               enum_smaller            -       -       -                               -                               -                               f f r r 3518    3500    0       0               0       _null_ _null_ ));
-DATA(insert ( 3565     n 0 network_smaller -                           network_smaller         -       -       -                               -                               -                               f f r r 1203    869             0       0               0       _null_ _null_ ));
-
-/* count */
-DATA(insert ( 2147     n 0 int8inc_any         -                               int8pl  -       -       int8inc_any             int8dec_any             -                               f f r r 0               20              0       20              0       0 0 ));
-DATA(insert ( 2803     n 0 int8inc                     -                               int8pl  -       -       int8inc                 int8dec                 -                               f f r r 0               20              0       20              0       0 0 ));
-
-/* var_pop */
-DATA(insert ( 2718     n 0 int8_accum          numeric_var_pop                 numeric_combine                 numeric_serialize               numeric_deserialize                     int8_accum              int8_accum_inv  numeric_var_pop                 f f r r 0       2281    128 2281        128 _null_ _null_ ));
-DATA(insert ( 2719     n 0 int4_accum          numeric_poly_var_pop    numeric_poly_combine    numeric_poly_serialize  numeric_poly_deserialize        int4_accum              int4_accum_inv  numeric_poly_var_pop    f f r r 0       2281    48      2281    48      _null_ _null_ ));
-DATA(insert ( 2720     n 0 int2_accum          numeric_poly_var_pop    numeric_poly_combine    numeric_poly_serialize  numeric_poly_deserialize        int2_accum              int2_accum_inv  numeric_poly_var_pop    f f r r 0       2281    48      2281    48      _null_ _null_ ));
-DATA(insert ( 2721     n 0 float4_accum        float8_var_pop                  float8_combine                  -                                               -                                                       -                               -                               -                                               f f r r 0       1022    0       0               0       "{0,0,0}" _null_ ));
-DATA(insert ( 2722     n 0 float8_accum        float8_var_pop                  float8_combine                  -                                               -                                                       -                               -                               -                                               f f r r 0       1022    0       0               0       "{0,0,0}" _null_ ));
-DATA(insert ( 2723     n 0 numeric_accum       numeric_var_pop                 numeric_combine                 numeric_serialize               numeric_deserialize                     numeric_accum   numeric_accum_inv numeric_var_pop               f f r r 0       2281    128 2281        128 _null_ _null_ ));
-
-/* var_samp */
-DATA(insert ( 2641     n 0 int8_accum          numeric_var_samp                numeric_combine                 numeric_serialize               numeric_deserialize                     int8_accum              int8_accum_inv  numeric_var_samp                f f r r 0       2281    128 2281        128 _null_ _null_ ));
-DATA(insert ( 2642     n 0 int4_accum          numeric_poly_var_samp   numeric_poly_combine    numeric_poly_serialize  numeric_poly_deserialize        int4_accum              int4_accum_inv  numeric_poly_var_samp   f f r r 0       2281    48      2281    48      _null_ _null_ ));
-DATA(insert ( 2643     n 0 int2_accum          numeric_poly_var_samp   numeric_poly_combine    numeric_poly_serialize  numeric_poly_deserialize        int2_accum              int2_accum_inv  numeric_poly_var_samp   f f r r 0       2281    48      2281    48      _null_ _null_ ));
-DATA(insert ( 2644     n 0 float4_accum        float8_var_samp                 float8_combine                  -                                               -                                                       -                               -                               -                                               f f r r 0       1022    0       0               0       "{0,0,0}" _null_ ));
-DATA(insert ( 2645     n 0 float8_accum        float8_var_samp                 float8_combine                  -                                               -                                                       -                               -                               -                                               f f r r 0       1022    0       0               0       "{0,0,0}" _null_ ));
-DATA(insert ( 2646     n 0 numeric_accum       numeric_var_samp                numeric_combine                 numeric_serialize               numeric_deserialize                     numeric_accum   numeric_accum_inv numeric_var_samp              f f r r 0       2281    128 2281        128 _null_ _null_ ));
-
-/* variance: historical Postgres syntax for var_samp */
-DATA(insert ( 2148     n 0 int8_accum          numeric_var_samp                numeric_combine                 numeric_serialize               numeric_deserialize                     int8_accum              int8_accum_inv  numeric_var_samp                f f r r 0       2281    128 2281        128 _null_ _null_ ));
-DATA(insert ( 2149     n 0 int4_accum          numeric_poly_var_samp   numeric_poly_combine    numeric_poly_serialize  numeric_poly_deserialize        int4_accum              int4_accum_inv  numeric_poly_var_samp   f f r r 0       2281    48      2281    48      _null_ _null_ ));
-DATA(insert ( 2150     n 0 int2_accum          numeric_poly_var_samp   numeric_poly_combine    numeric_poly_serialize  numeric_poly_deserialize        int2_accum              int2_accum_inv  numeric_poly_var_samp   f f r r 0       2281    48      2281    48      _null_ _null_ ));
-DATA(insert ( 2151     n 0 float4_accum        float8_var_samp                 float8_combine                  -                                               -                                                       -                               -                               -                                               f f r r 0       1022    0       0               0       "{0,0,0}" _null_ ));
-DATA(insert ( 2152     n 0 float8_accum        float8_var_samp                 float8_combine                  -                                               -                                                       -                               -                               -                                               f f r r 0       1022    0       0               0       "{0,0,0}" _null_ ));
-DATA(insert ( 2153     n 0 numeric_accum       numeric_var_samp                numeric_combine                 numeric_serialize               numeric_deserialize                     numeric_accum   numeric_accum_inv numeric_var_samp              f f r r 0       2281    128 2281        128 _null_ _null_ ));
-
-/* stddev_pop */
-DATA(insert ( 2724     n 0 int8_accum          numeric_stddev_pop              numeric_combine                 numeric_serialize               numeric_deserialize                     int8_accum              int8_accum_inv  numeric_stddev_pop              f f r r 0       2281    128 2281        128 _null_ _null_ ));
-DATA(insert ( 2725     n 0 int4_accum          numeric_poly_stddev_pop numeric_poly_combine    numeric_poly_serialize  numeric_poly_deserialize        int4_accum              int4_accum_inv  numeric_poly_stddev_pop f f r r 0       2281    48      2281    48      _null_ _null_ ));
-DATA(insert ( 2726     n 0 int2_accum          numeric_poly_stddev_pop numeric_poly_combine    numeric_poly_serialize  numeric_poly_deserialize        int2_accum              int2_accum_inv  numeric_poly_stddev_pop f f r r 0       2281    48      2281    48      _null_ _null_ ));
-DATA(insert ( 2727     n 0 float4_accum        float8_stddev_pop               float8_combine                  -                                               -                                                       -                               -                               -                                               f f r r 0       1022    0       0               0       "{0,0,0}" _null_ ));
-DATA(insert ( 2728     n 0 float8_accum        float8_stddev_pop               float8_combine                  -                                               -                                                       -                               -                               -                                               f f r r 0       1022    0       0               0       "{0,0,0}" _null_ ));
-DATA(insert ( 2729     n 0 numeric_accum       numeric_stddev_pop              numeric_combine                 numeric_serialize               numeric_deserialize                     numeric_accum   numeric_accum_inv numeric_stddev_pop    f f r r 0       2281    128 2281        128 _null_ _null_ ));
-
-/* stddev_samp */
-DATA(insert ( 2712     n 0 int8_accum          numeric_stddev_samp                     numeric_combine                 numeric_serialize               numeric_deserialize                     int8_accum      int8_accum_inv  numeric_stddev_samp                     f f r r 0       2281    128 2281        128 _null_ _null_ ));
-DATA(insert ( 2713     n 0 int4_accum          numeric_poly_stddev_samp        numeric_poly_combine    numeric_poly_serialize  numeric_poly_deserialize        int4_accum      int4_accum_inv  numeric_poly_stddev_samp        f f r r 0       2281    48      2281    48      _null_ _null_ ));
-DATA(insert ( 2714     n 0 int2_accum          numeric_poly_stddev_samp        numeric_poly_combine    numeric_poly_serialize  numeric_poly_deserialize        int2_accum      int2_accum_inv  numeric_poly_stddev_samp        f f r r 0       2281    48      2281    48      _null_ _null_ ));
-DATA(insert ( 2715     n 0 float4_accum        float8_stddev_samp                      float8_combine                  -                                               -                                                       -                       -                               -                                                       f f r r 0       1022    0       0               0       "{0,0,0}" _null_ ));
-DATA(insert ( 2716     n 0 float8_accum        float8_stddev_samp                      float8_combine                  -                                               -                                                       -                       -                               -                                                       f f r r 0       1022    0       0               0       "{0,0,0}" _null_ ));
-DATA(insert ( 2717     n 0 numeric_accum       numeric_stddev_samp                     numeric_combine                 numeric_serialize               numeric_deserialize                     numeric_accum numeric_accum_inv numeric_stddev_samp             f f r r 0       2281    128 2281        128 _null_ _null_ ));
-
-/* stddev: historical Postgres syntax for stddev_samp */
-DATA(insert ( 2154     n 0 int8_accum          numeric_stddev_samp                     numeric_combine                 numeric_serialize               numeric_deserialize                     int8_accum              int8_accum_inv  numeric_stddev_samp                     f f r r 0       2281    128 2281        128 _null_ _null_ ));
-DATA(insert ( 2155     n 0 int4_accum          numeric_poly_stddev_samp        numeric_poly_combine    numeric_poly_serialize  numeric_poly_deserialize        int4_accum              int4_accum_inv  numeric_poly_stddev_samp        f f r r 0       2281    48      2281    48      _null_ _null_ ));
-DATA(insert ( 2156     n 0 int2_accum          numeric_poly_stddev_samp        numeric_poly_combine    numeric_poly_serialize  numeric_poly_deserialize        int2_accum              int2_accum_inv  numeric_poly_stddev_samp        f f r r 0       2281    48      2281    48      _null_ _null_ ));
-DATA(insert ( 2157     n 0 float4_accum        float8_stddev_samp                      float8_combine                  -                                               -                                                       -                               -                               -                                                       f f r r 0       1022    0       0               0       "{0,0,0}" _null_ ));
-DATA(insert ( 2158     n 0 float8_accum        float8_stddev_samp                      float8_combine                  -                                               -                                                       -                               -                               -                                                       f f r r 0       1022    0       0               0       "{0,0,0}" _null_ ));
-DATA(insert ( 2159     n 0 numeric_accum       numeric_stddev_samp                     numeric_combine                 numeric_serialize               numeric_deserialize                     numeric_accum   numeric_accum_inv numeric_stddev_samp           f f r r 0       2281    128 2281        128 _null_ _null_ ));
-
-/* SQL2003 binary regression aggregates */
-DATA(insert ( 2818     n 0 int8inc_float8_float8       -                                       int8pl                          -       -       -                               -                               -                       f f r r 0       20              0       0               0       0 _null_ ));
-DATA(insert ( 2819     n 0 float8_regr_accum   float8_regr_sxx                 float8_regr_combine -   -       -                               -                               -                       f f r r 0       1022    0       0               0       "{0,0,0,0,0,0}" _null_ ));
-DATA(insert ( 2820     n 0 float8_regr_accum   float8_regr_syy                 float8_regr_combine -   -       -                               -                               -                       f f r r 0       1022    0       0               0       "{0,0,0,0,0,0}" _null_ ));
-DATA(insert ( 2821     n 0 float8_regr_accum   float8_regr_sxy                 float8_regr_combine -   -       -                               -                               -                       f f r r 0       1022    0       0               0       "{0,0,0,0,0,0}" _null_ ));
-DATA(insert ( 2822     n 0 float8_regr_accum   float8_regr_avgx                float8_regr_combine -   -       -                               -                               -                       f f r r 0       1022    0       0               0       "{0,0,0,0,0,0}" _null_ ));
-DATA(insert ( 2823     n 0 float8_regr_accum   float8_regr_avgy                float8_regr_combine -   -       -                               -                               -                       f f r r 0       1022    0       0               0       "{0,0,0,0,0,0}" _null_ ));
-DATA(insert ( 2824     n 0 float8_regr_accum   float8_regr_r2                  float8_regr_combine -   -       -                               -                               -                       f f r r 0       1022    0       0               0       "{0,0,0,0,0,0}" _null_ ));
-DATA(insert ( 2825     n 0 float8_regr_accum   float8_regr_slope               float8_regr_combine -   -       -                               -                               -                       f f r r 0       1022    0       0               0       "{0,0,0,0,0,0}" _null_ ));
-DATA(insert ( 2826     n 0 float8_regr_accum   float8_regr_intercept   float8_regr_combine -   -       -                               -                               -                       f f r r 0       1022    0       0               0       "{0,0,0,0,0,0}" _null_ ));
-DATA(insert ( 2827     n 0 float8_regr_accum   float8_covar_pop                float8_regr_combine -   -       -                               -                               -                       f f r r 0       1022    0       0               0       "{0,0,0,0,0,0}" _null_ ));
-DATA(insert ( 2828     n 0 float8_regr_accum   float8_covar_samp               float8_regr_combine -   -       -                               -                               -                       f f r r 0       1022    0       0               0       "{0,0,0,0,0,0}" _null_ ));
-DATA(insert ( 2829     n 0 float8_regr_accum   float8_corr                             float8_regr_combine -   -       -                               -                               -                       f f r r 0       1022    0       0               0       "{0,0,0,0,0,0}" _null_ ));
-
-/* boolean-and and boolean-or */
-DATA(insert ( 2517     n 0 booland_statefunc   -       booland_statefunc       -       -       bool_accum      bool_accum_inv  bool_alltrue    f f r r 58      16      0       2281    16      _null_ _null_ ));
-DATA(insert ( 2518     n 0 boolor_statefunc    -       boolor_statefunc        -       -       bool_accum      bool_accum_inv  bool_anytrue    f f r r 59      16      0       2281    16      _null_ _null_ ));
-DATA(insert ( 2519     n 0 booland_statefunc   -       booland_statefunc       -       -       bool_accum      bool_accum_inv  bool_alltrue    f f r r 58      16      0       2281    16      _null_ _null_ ));
-
-/* bitwise integer */
-DATA(insert ( 2236     n 0 int2and             -                               int2and -       -       -                               -                               -                               f f r r 0       21              0       0               0       _null_ _null_ ));
-DATA(insert ( 2237     n 0 int2or              -                               int2or  -       -       -                               -                               -                               f f r r 0       21              0       0               0       _null_ _null_ ));
-DATA(insert ( 2238     n 0 int4and             -                               int4and -       -       -                               -                               -                               f f r r 0       23              0       0               0       _null_ _null_ ));
-DATA(insert ( 2239     n 0 int4or              -                               int4or  -       -       -                               -                               -                               f f r r 0       23              0       0               0       _null_ _null_ ));
-DATA(insert ( 2240     n 0 int8and             -                               int8and -       -       -                               -                               -                               f f r r 0       20              0       0               0       _null_ _null_ ));
-DATA(insert ( 2241     n 0 int8or              -                               int8or  -       -       -                               -                               -                               f f r r 0       20              0       0               0       _null_ _null_ ));
-DATA(insert ( 2242     n 0 bitand              -                               bitand  -       -       -                               -                               -                               f f r r 0       1560    0       0               0       _null_ _null_ ));
-DATA(insert ( 2243     n 0 bitor               -                               bitor   -       -       -                               -                               -                               f f r r 0       1560    0       0               0       _null_ _null_ ));
-
-/* xml */
-DATA(insert ( 2901     n 0 xmlconcat2  -                               -               -       -       -                               -                               -                               f f r r 0       142             0       0               0       _null_ _null_ ));
-
-/* array */
-DATA(insert ( 2335     n 0 array_agg_transfn           array_agg_finalfn               -       -       -       -               -                               -                               t f r r 0       2281    0       0               0       _null_ _null_ ));
-DATA(insert ( 4053     n 0 array_agg_array_transfn array_agg_array_finalfn -   -       -       -               -                               -                               t f r r 0       2281    0       0               0       _null_ _null_ ));
-
-/* text */
-DATA(insert ( 3538     n 0 string_agg_transfn  string_agg_finalfn      -       -       -       -                               -                               -                               f f r r 0       2281    0       0               0       _null_ _null_ ));
-
-/* bytea */
-DATA(insert ( 3545     n 0 bytea_string_agg_transfn    bytea_string_agg_finalfn        -       -       -       -                               -                               -               f f r r 0       2281    0       0               0       _null_ _null_ ));
-
-/* json */
-DATA(insert ( 3175     n 0 json_agg_transfn    json_agg_finalfn                        -       -       -       -                               -                               -                               f f r r 0       2281    0       0               0       _null_ _null_ ));
-DATA(insert ( 3197     n 0 json_object_agg_transfn json_object_agg_finalfn -   -       -       -                               -                               -                               f f r r 0       2281    0       0               0       _null_ _null_ ));
-
-/* jsonb */
-DATA(insert ( 3267     n 0 jsonb_agg_transfn   jsonb_agg_finalfn                               -       -       -       -                               -                               -                       f f r r 0       2281    0       0               0       _null_ _null_ ));
-DATA(insert ( 3270     n 0 jsonb_object_agg_transfn jsonb_object_agg_finalfn   -       -       -       -                               -                               -                       f f r r 0       2281    0       0               0       _null_ _null_ ));
-
-/* ordered-set and hypothetical-set aggregates */
-DATA(insert ( 3972     o 1 ordered_set_transition                      percentile_disc_final                                   -       -       -       -               -               -               t f s s 0       2281    0       0               0       _null_ _null_ ));
-DATA(insert ( 3974     o 1 ordered_set_transition                      percentile_cont_float8_final                    -       -       -       -               -               -               f f s s 0       2281    0       0               0       _null_ _null_ ));
-DATA(insert ( 3976     o 1 ordered_set_transition                      percentile_cont_interval_final                  -       -       -       -               -               -               f f s s 0       2281    0       0               0       _null_ _null_ ));
-DATA(insert ( 3978     o 1 ordered_set_transition                      percentile_disc_multi_final                             -       -       -       -               -               -               t f s s 0       2281    0       0               0       _null_ _null_ ));
-DATA(insert ( 3980     o 1 ordered_set_transition                      percentile_cont_float8_multi_final              -       -       -       -               -               -               f f s s 0       2281    0       0               0       _null_ _null_ ));
-DATA(insert ( 3982     o 1 ordered_set_transition                      percentile_cont_interval_multi_final    -       -       -       -               -               -               f f s s 0       2281    0       0               0       _null_ _null_ ));
-DATA(insert ( 3984     o 0 ordered_set_transition                      mode_final                                                              -       -       -       -               -               -               t f s s 0       2281    0       0               0       _null_ _null_ ));
-DATA(insert ( 3986     h 1 ordered_set_transition_multi        rank_final                                                              -       -       -       -               -               -               t f w w 0       2281    0       0               0       _null_ _null_ ));
-DATA(insert ( 3988     h 1 ordered_set_transition_multi        percent_rank_final                                              -       -       -       -               -               -               t f w w 0       2281    0       0               0       _null_ _null_ ));
-DATA(insert ( 3990     h 1 ordered_set_transition_multi        cume_dist_final                                                 -       -       -       -               -               -               t f w w 0       2281    0       0               0       _null_ _null_ ));
-DATA(insert ( 3992     h 1 ordered_set_transition_multi        dense_rank_final                                                -       -       -       -               -               -               t f w w 0       2281    0       0               0       _null_ _null_ ));
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
 
 #endif                                                 /* PG_AGGREGATE_H */
diff --git a/src/include/catalog/pg_am.dat b/src/include/catalog/pg_am.dat
new file mode 100644 (file)
index 0000000..8722cac
--- /dev/null
@@ -0,0 +1,34 @@
+#----------------------------------------------------------------------
+#
+# pg_am.dat
+#    Initial contents of the pg_am system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_am.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+{ oid => '403', oid_symbol => 'BTREE_AM_OID',
+  descr => 'b-tree index access method',
+  amname => 'btree', amhandler => 'bthandler', amtype => 'i' },
+{ oid => '405', oid_symbol => 'HASH_AM_OID',
+  descr => 'hash index access method',
+  amname => 'hash', amhandler => 'hashhandler', amtype => 'i' },
+{ oid => '783', oid_symbol => 'GIST_AM_OID',
+  descr => 'GiST index access method',
+  amname => 'gist', amhandler => 'gisthandler', amtype => 'i' },
+{ oid => '2742', oid_symbol => 'GIN_AM_OID',
+  descr => 'GIN index access method',
+  amname => 'gin', amhandler => 'ginhandler', amtype => 'i' },
+{ oid => '4000', oid_symbol => 'SPGIST_AM_OID',
+  descr => 'SP-GiST index access method',
+  amname => 'spgist', amhandler => 'spghandler', amtype => 'i' },
+{ oid => '3580', oid_symbol => 'BRIN_AM_OID',
+  descr => 'block range index (BRIN) access method',
+  amname => 'brin', amhandler => 'brinhandler', amtype => 'i' },
+
+]
index 2e785c4cec2ceb58fefa40fd9cb838320055fa9a..f821749af8219bba920e83bfa529cd7822d12d2e 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_am.h
  *       definition of the system "access method" relation (pg_am)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
  * src/include/catalog/pg_am.h
  *
  * NOTES
- *             the genbki.pl script reads this file and generates .bki
- *             information from the DATA() statements.
- *
- *             XXX do NOT break up DATA() statements into multiple lines!
- *                     the scripts are not as smart as you might think...
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_AM_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_am_d.h"
 
 /* ----------------
  *             pg_am definition.  cpp turns this into
  *             typedef struct FormData_pg_am
  * ----------------
  */
-#define AccessMethodRelationId 2601
-
-CATALOG(pg_am,2601)
+CATALOG(pg_am,2601,AccessMethodRelationId)
 {
-       NameData        amname;                 /* access method name */
-       regproc         amhandler;              /* handler function */
-       char            amtype;                 /* see AMTYPE_xxx constants below */
+       /* access method name */
+       NameData        amname;
+
+       /* handler function */
+       regproc         amhandler BKI_LOOKUP(pg_proc);
+
+       /* see AMTYPE_xxx constants below */
+       char            amtype;
 } FormData_pg_am;
 
 /* ----------------
@@ -45,43 +45,13 @@ CATALOG(pg_am,2601)
  */
 typedef FormData_pg_am *Form_pg_am;
 
-/* ----------------
- *             compiler constants for pg_am
- * ----------------
- */
-#define Natts_pg_am                                            3
-#define Anum_pg_am_amname                              1
-#define Anum_pg_am_amhandler                   2
-#define Anum_pg_am_amtype                              3
+#ifdef EXPOSE_TO_CLIENT_CODE
 
-/* ----------------
- *             compiler constant for amtype
- * ----------------
+/*
+ * Allowed values for amtype
  */
 #define AMTYPE_INDEX                                   'i' /* index access method */
 
-/* ----------------
- *             initial contents of pg_am
- * ----------------
- */
-
-DATA(insert OID = 403 (  btree         bthandler       i ));
-DESCR("b-tree index access method");
-#define BTREE_AM_OID 403
-DATA(insert OID = 405 (  hash          hashhandler i ));
-DESCR("hash index access method");
-#define HASH_AM_OID 405
-DATA(insert OID = 783 (  gist          gisthandler i ));
-DESCR("GiST index access method");
-#define GIST_AM_OID 783
-DATA(insert OID = 2742 (  gin          ginhandler      i ));
-DESCR("GIN index access method");
-#define GIN_AM_OID 2742
-DATA(insert OID = 4000 (  spgist       spghandler      i ));
-DESCR("SP-GiST index access method");
-#define SPGIST_AM_OID 4000
-DATA(insert OID = 3580 (  brin         brinhandler i ));
-DESCR("block range index (BRIN) access method");
-#define BRIN_AM_OID 3580
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
 
 #endif                                                 /* PG_AM_H */
diff --git a/src/include/catalog/pg_amop.dat b/src/include/catalog/pg_amop.dat
new file mode 100644 (file)
index 0000000..b1cf8ec
--- /dev/null
@@ -0,0 +1,2472 @@
+#----------------------------------------------------------------------
+#
+# pg_amop.dat
+#    Initial contents of the pg_amop system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_amop.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# btree integer_ops
+
+# default operators int2
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int2', amopstrategy => '1', amopopr => '<(int2,int2)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int2', amopstrategy => '2', amopopr => '<=(int2,int2)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int2', amopstrategy => '3', amopopr => '=(int2,int2)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int2', amopstrategy => '4', amopopr => '>=(int2,int2)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int2', amopstrategy => '5', amopopr => '>(int2,int2)',
+  amopmethod => 'btree' },
+
+# crosstype operators int24
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int4', amopstrategy => '1', amopopr => '<(int2,int4)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int4', amopstrategy => '2', amopopr => '<=(int2,int4)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int4', amopstrategy => '3', amopopr => '=(int2,int4)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int4', amopstrategy => '4', amopopr => '>=(int2,int4)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int4', amopstrategy => '5', amopopr => '>(int2,int4)',
+  amopmethod => 'btree' },
+
+# crosstype operators int28
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int8', amopstrategy => '1', amopopr => '<(int2,int8)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int8', amopstrategy => '2', amopopr => '<=(int2,int8)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int8', amopstrategy => '3', amopopr => '=(int2,int8)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int8', amopstrategy => '4', amopopr => '>=(int2,int8)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int8', amopstrategy => '5', amopopr => '>(int2,int8)',
+  amopmethod => 'btree' },
+
+# default operators int4
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int4', amopstrategy => '1', amopopr => '<(int4,int4)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int4', amopstrategy => '2', amopopr => '<=(int4,int4)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int4', amopstrategy => '3', amopopr => '=(int4,int4)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int4', amopstrategy => '4', amopopr => '>=(int4,int4)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int4', amopstrategy => '5', amopopr => '>(int4,int4)',
+  amopmethod => 'btree' },
+
+# crosstype operators int42
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int2', amopstrategy => '1', amopopr => '<(int4,int2)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int2', amopstrategy => '2', amopopr => '<=(int4,int2)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int2', amopstrategy => '3', amopopr => '=(int4,int2)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int2', amopstrategy => '4', amopopr => '>=(int4,int2)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int2', amopstrategy => '5', amopopr => '>(int4,int2)',
+  amopmethod => 'btree' },
+
+# crosstype operators int48
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int8', amopstrategy => '1', amopopr => '<(int4,int8)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int8', amopstrategy => '2', amopopr => '<=(int4,int8)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int8', amopstrategy => '3', amopopr => '=(int4,int8)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int8', amopstrategy => '4', amopopr => '>=(int4,int8)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int8', amopstrategy => '5', amopopr => '>(int4,int8)',
+  amopmethod => 'btree' },
+
+# default operators int8
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int8', amopstrategy => '1', amopopr => '<(int8,int8)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int8', amopstrategy => '2', amopopr => '<=(int8,int8)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int8', amopstrategy => '3', amopopr => '=(int8,int8)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int8', amopstrategy => '4', amopopr => '>=(int8,int8)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int8', amopstrategy => '5', amopopr => '>(int8,int8)',
+  amopmethod => 'btree' },
+
+# crosstype operators int82
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int2', amopstrategy => '1', amopopr => '<(int8,int2)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int2', amopstrategy => '2', amopopr => '<=(int8,int2)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int2', amopstrategy => '3', amopopr => '=(int8,int2)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int2', amopstrategy => '4', amopopr => '>=(int8,int2)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int2', amopstrategy => '5', amopopr => '>(int8,int2)',
+  amopmethod => 'btree' },
+
+# crosstype operators int84
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int4', amopstrategy => '1', amopopr => '<(int8,int4)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int4', amopstrategy => '2', amopopr => '<=(int8,int4)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int4', amopstrategy => '3', amopopr => '=(int8,int4)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int4', amopstrategy => '4', amopopr => '>=(int8,int4)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int4', amopstrategy => '5', amopopr => '>(int8,int4)',
+  amopmethod => 'btree' },
+
+# btree oid_ops
+
+{ amopfamily => 'btree/oid_ops', amoplefttype => 'oid', amoprighttype => 'oid',
+  amopstrategy => '1', amopopr => '<(oid,oid)', amopmethod => 'btree' },
+{ amopfamily => 'btree/oid_ops', amoplefttype => 'oid', amoprighttype => 'oid',
+  amopstrategy => '2', amopopr => '<=(oid,oid)', amopmethod => 'btree' },
+{ amopfamily => 'btree/oid_ops', amoplefttype => 'oid', amoprighttype => 'oid',
+  amopstrategy => '3', amopopr => '=(oid,oid)', amopmethod => 'btree' },
+{ amopfamily => 'btree/oid_ops', amoplefttype => 'oid', amoprighttype => 'oid',
+  amopstrategy => '4', amopopr => '>=(oid,oid)', amopmethod => 'btree' },
+{ amopfamily => 'btree/oid_ops', amoplefttype => 'oid', amoprighttype => 'oid',
+  amopstrategy => '5', amopopr => '>(oid,oid)', amopmethod => 'btree' },
+
+# btree tid_ops
+
+{ amopfamily => 'btree/tid_ops', amoplefttype => 'tid', amoprighttype => 'tid',
+  amopstrategy => '1', amopopr => '<(tid,tid)', amopmethod => 'btree' },
+{ amopfamily => 'btree/tid_ops', amoplefttype => 'tid', amoprighttype => 'tid',
+  amopstrategy => '2', amopopr => '<=(tid,tid)', amopmethod => 'btree' },
+{ amopfamily => 'btree/tid_ops', amoplefttype => 'tid', amoprighttype => 'tid',
+  amopstrategy => '3', amopopr => '=(tid,tid)', amopmethod => 'btree' },
+{ amopfamily => 'btree/tid_ops', amoplefttype => 'tid', amoprighttype => 'tid',
+  amopstrategy => '4', amopopr => '>=(tid,tid)', amopmethod => 'btree' },
+{ amopfamily => 'btree/tid_ops', amoplefttype => 'tid', amoprighttype => 'tid',
+  amopstrategy => '5', amopopr => '>(tid,tid)', amopmethod => 'btree' },
+
+# btree oidvector_ops
+
+{ amopfamily => 'btree/oidvector_ops', amoplefttype => 'oidvector',
+  amoprighttype => 'oidvector', amopstrategy => '1',
+  amopopr => '<(oidvector,oidvector)', amopmethod => 'btree' },
+{ amopfamily => 'btree/oidvector_ops', amoplefttype => 'oidvector',
+  amoprighttype => 'oidvector', amopstrategy => '2',
+  amopopr => '<=(oidvector,oidvector)', amopmethod => 'btree' },
+{ amopfamily => 'btree/oidvector_ops', amoplefttype => 'oidvector',
+  amoprighttype => 'oidvector', amopstrategy => '3',
+  amopopr => '=(oidvector,oidvector)', amopmethod => 'btree' },
+{ amopfamily => 'btree/oidvector_ops', amoplefttype => 'oidvector',
+  amoprighttype => 'oidvector', amopstrategy => '4',
+  amopopr => '>=(oidvector,oidvector)', amopmethod => 'btree' },
+{ amopfamily => 'btree/oidvector_ops', amoplefttype => 'oidvector',
+  amoprighttype => 'oidvector', amopstrategy => '5',
+  amopopr => '>(oidvector,oidvector)', amopmethod => 'btree' },
+
+# btree float_ops
+
+# default operators float4
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float4',
+  amoprighttype => 'float4', amopstrategy => '1', amopopr => '<(float4,float4)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float4',
+  amoprighttype => 'float4', amopstrategy => '2',
+  amopopr => '<=(float4,float4)', amopmethod => 'btree' },
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float4',
+  amoprighttype => 'float4', amopstrategy => '3', amopopr => '=(float4,float4)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float4',
+  amoprighttype => 'float4', amopstrategy => '4',
+  amopopr => '>=(float4,float4)', amopmethod => 'btree' },
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float4',
+  amoprighttype => 'float4', amopstrategy => '5', amopopr => '>(float4,float4)',
+  amopmethod => 'btree' },
+
+# crosstype operators float48
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float4',
+  amoprighttype => 'float8', amopstrategy => '1', amopopr => '<(float4,float8)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float4',
+  amoprighttype => 'float8', amopstrategy => '2',
+  amopopr => '<=(float4,float8)', amopmethod => 'btree' },
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float4',
+  amoprighttype => 'float8', amopstrategy => '3', amopopr => '=(float4,float8)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float4',
+  amoprighttype => 'float8', amopstrategy => '4',
+  amopopr => '>=(float4,float8)', amopmethod => 'btree' },
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float4',
+  amoprighttype => 'float8', amopstrategy => '5', amopopr => '>(float4,float8)',
+  amopmethod => 'btree' },
+
+# default operators float8
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float8',
+  amoprighttype => 'float8', amopstrategy => '1', amopopr => '<(float8,float8)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float8',
+  amoprighttype => 'float8', amopstrategy => '2',
+  amopopr => '<=(float8,float8)', amopmethod => 'btree' },
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float8',
+  amoprighttype => 'float8', amopstrategy => '3', amopopr => '=(float8,float8)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float8',
+  amoprighttype => 'float8', amopstrategy => '4',
+  amopopr => '>=(float8,float8)', amopmethod => 'btree' },
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float8',
+  amoprighttype => 'float8', amopstrategy => '5', amopopr => '>(float8,float8)',
+  amopmethod => 'btree' },
+
+# crosstype operators float84
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float8',
+  amoprighttype => 'float4', amopstrategy => '1', amopopr => '<(float8,float4)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float8',
+  amoprighttype => 'float4', amopstrategy => '2',
+  amopopr => '<=(float8,float4)', amopmethod => 'btree' },
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float8',
+  amoprighttype => 'float4', amopstrategy => '3', amopopr => '=(float8,float4)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float8',
+  amoprighttype => 'float4', amopstrategy => '4',
+  amopopr => '>=(float8,float4)', amopmethod => 'btree' },
+{ amopfamily => 'btree/float_ops', amoplefttype => 'float8',
+  amoprighttype => 'float4', amopstrategy => '5', amopopr => '>(float8,float4)',
+  amopmethod => 'btree' },
+
+# btree char_ops
+
+{ amopfamily => 'btree/char_ops', amoplefttype => 'char',
+  amoprighttype => 'char', amopstrategy => '1', amopopr => '<(char,char)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/char_ops', amoplefttype => 'char',
+  amoprighttype => 'char', amopstrategy => '2', amopopr => '<=(char,char)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/char_ops', amoplefttype => 'char',
+  amoprighttype => 'char', amopstrategy => '3', amopopr => '=(char,char)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/char_ops', amoplefttype => 'char',
+  amoprighttype => 'char', amopstrategy => '4', amopopr => '>=(char,char)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/char_ops', amoplefttype => 'char',
+  amoprighttype => 'char', amopstrategy => '5', amopopr => '>(char,char)',
+  amopmethod => 'btree' },
+
+# btree name_ops
+
+{ amopfamily => 'btree/name_ops', amoplefttype => 'name',
+  amoprighttype => 'name', amopstrategy => '1', amopopr => '<(name,name)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/name_ops', amoplefttype => 'name',
+  amoprighttype => 'name', amopstrategy => '2', amopopr => '<=(name,name)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/name_ops', amoplefttype => 'name',
+  amoprighttype => 'name', amopstrategy => '3', amopopr => '=(name,name)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/name_ops', amoplefttype => 'name',
+  amoprighttype => 'name', amopstrategy => '4', amopopr => '>=(name,name)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/name_ops', amoplefttype => 'name',
+  amoprighttype => 'name', amopstrategy => '5', amopopr => '>(name,name)',
+  amopmethod => 'btree' },
+
+# btree text_ops
+
+{ amopfamily => 'btree/text_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '1', amopopr => '<(text,text)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/text_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '2', amopopr => '<=(text,text)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/text_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '3', amopopr => '=(text,text)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/text_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '4', amopopr => '>=(text,text)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/text_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '5', amopopr => '>(text,text)',
+  amopmethod => 'btree' },
+
+# btree bpchar_ops
+
+{ amopfamily => 'btree/bpchar_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '1', amopopr => '<(bpchar,bpchar)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/bpchar_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '2',
+  amopopr => '<=(bpchar,bpchar)', amopmethod => 'btree' },
+{ amopfamily => 'btree/bpchar_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '3', amopopr => '=(bpchar,bpchar)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/bpchar_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '4',
+  amopopr => '>=(bpchar,bpchar)', amopmethod => 'btree' },
+{ amopfamily => 'btree/bpchar_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '5', amopopr => '>(bpchar,bpchar)',
+  amopmethod => 'btree' },
+
+# btree bytea_ops
+
+{ amopfamily => 'btree/bytea_ops', amoplefttype => 'bytea',
+  amoprighttype => 'bytea', amopstrategy => '1', amopopr => '<(bytea,bytea)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/bytea_ops', amoplefttype => 'bytea',
+  amoprighttype => 'bytea', amopstrategy => '2', amopopr => '<=(bytea,bytea)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/bytea_ops', amoplefttype => 'bytea',
+  amoprighttype => 'bytea', amopstrategy => '3', amopopr => '=(bytea,bytea)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/bytea_ops', amoplefttype => 'bytea',
+  amoprighttype => 'bytea', amopstrategy => '4', amopopr => '>=(bytea,bytea)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/bytea_ops', amoplefttype => 'bytea',
+  amoprighttype => 'bytea', amopstrategy => '5', amopopr => '>(bytea,bytea)',
+  amopmethod => 'btree' },
+
+# btree abstime_ops
+
+{ amopfamily => 'btree/abstime_ops', amoplefttype => 'abstime',
+  amoprighttype => 'abstime', amopstrategy => '1',
+  amopopr => '<(abstime,abstime)', amopmethod => 'btree' },
+{ amopfamily => 'btree/abstime_ops', amoplefttype => 'abstime',
+  amoprighttype => 'abstime', amopstrategy => '2',
+  amopopr => '<=(abstime,abstime)', amopmethod => 'btree' },
+{ amopfamily => 'btree/abstime_ops', amoplefttype => 'abstime',
+  amoprighttype => 'abstime', amopstrategy => '3',
+  amopopr => '=(abstime,abstime)', amopmethod => 'btree' },
+{ amopfamily => 'btree/abstime_ops', amoplefttype => 'abstime',
+  amoprighttype => 'abstime', amopstrategy => '4',
+  amopopr => '>=(abstime,abstime)', amopmethod => 'btree' },
+{ amopfamily => 'btree/abstime_ops', amoplefttype => 'abstime',
+  amoprighttype => 'abstime', amopstrategy => '5',
+  amopopr => '>(abstime,abstime)', amopmethod => 'btree' },
+
+# btree datetime_ops
+
+# default operators date
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'date',
+  amoprighttype => 'date', amopstrategy => '1', amopopr => '<(date,date)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'date',
+  amoprighttype => 'date', amopstrategy => '2', amopopr => '<=(date,date)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'date',
+  amoprighttype => 'date', amopstrategy => '3', amopopr => '=(date,date)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'date',
+  amoprighttype => 'date', amopstrategy => '4', amopopr => '>=(date,date)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'date',
+  amoprighttype => 'date', amopstrategy => '5', amopopr => '>(date,date)',
+  amopmethod => 'btree' },
+
+# crosstype operators vs timestamp
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamp', amopstrategy => '1',
+  amopopr => '<(date,timestamp)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamp', amopstrategy => '2',
+  amopopr => '<=(date,timestamp)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamp', amopstrategy => '3',
+  amopopr => '=(date,timestamp)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamp', amopstrategy => '4',
+  amopopr => '>=(date,timestamp)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamp', amopstrategy => '5',
+  amopopr => '>(date,timestamp)', amopmethod => 'btree' },
+
+# crosstype operators vs timestamptz
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamptz', amopstrategy => '1',
+  amopopr => '<(date,timestamptz)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamptz', amopstrategy => '2',
+  amopopr => '<=(date,timestamptz)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamptz', amopstrategy => '3',
+  amopopr => '=(date,timestamptz)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamptz', amopstrategy => '4',
+  amopopr => '>=(date,timestamptz)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamptz', amopstrategy => '5',
+  amopopr => '>(date,timestamptz)', amopmethod => 'btree' },
+
+# default operators timestamp
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamp', amopstrategy => '1',
+  amopopr => '<(timestamp,timestamp)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamp', amopstrategy => '2',
+  amopopr => '<=(timestamp,timestamp)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamp', amopstrategy => '3',
+  amopopr => '=(timestamp,timestamp)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamp', amopstrategy => '4',
+  amopopr => '>=(timestamp,timestamp)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamp', amopstrategy => '5',
+  amopopr => '>(timestamp,timestamp)', amopmethod => 'btree' },
+
+# crosstype operators vs date
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'date', amopstrategy => '1', amopopr => '<(timestamp,date)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'date', amopstrategy => '2', amopopr => '<=(timestamp,date)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'date', amopstrategy => '3', amopopr => '=(timestamp,date)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'date', amopstrategy => '4', amopopr => '>=(timestamp,date)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'date', amopstrategy => '5', amopopr => '>(timestamp,date)',
+  amopmethod => 'btree' },
+
+# crosstype operators vs timestamptz
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamptz', amopstrategy => '1',
+  amopopr => '<(timestamp,timestamptz)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamptz', amopstrategy => '2',
+  amopopr => '<=(timestamp,timestamptz)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamptz', amopstrategy => '3',
+  amopopr => '=(timestamp,timestamptz)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamptz', amopstrategy => '4',
+  amopopr => '>=(timestamp,timestamptz)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamptz', amopstrategy => '5',
+  amopopr => '>(timestamp,timestamptz)', amopmethod => 'btree' },
+
+# default operators timestamptz
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamptz', amopstrategy => '1',
+  amopopr => '<(timestamptz,timestamptz)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamptz', amopstrategy => '2',
+  amopopr => '<=(timestamptz,timestamptz)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamptz', amopstrategy => '3',
+  amopopr => '=(timestamptz,timestamptz)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamptz', amopstrategy => '4',
+  amopopr => '>=(timestamptz,timestamptz)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamptz', amopstrategy => '5',
+  amopopr => '>(timestamptz,timestamptz)', amopmethod => 'btree' },
+
+# crosstype operators vs date
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'date', amopstrategy => '1',
+  amopopr => '<(timestamptz,date)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'date', amopstrategy => '2',
+  amopopr => '<=(timestamptz,date)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'date', amopstrategy => '3',
+  amopopr => '=(timestamptz,date)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'date', amopstrategy => '4',
+  amopopr => '>=(timestamptz,date)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'date', amopstrategy => '5',
+  amopopr => '>(timestamptz,date)', amopmethod => 'btree' },
+
+# crosstype operators vs timestamp
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamp', amopstrategy => '1',
+  amopopr => '<(timestamptz,timestamp)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamp', amopstrategy => '2',
+  amopopr => '<=(timestamptz,timestamp)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamp', amopstrategy => '3',
+  amopopr => '=(timestamptz,timestamp)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamp', amopstrategy => '4',
+  amopopr => '>=(timestamptz,timestamp)', amopmethod => 'btree' },
+{ amopfamily => 'btree/datetime_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamp', amopstrategy => '5',
+  amopopr => '>(timestamptz,timestamp)', amopmethod => 'btree' },
+
+# btree time_ops
+
+{ amopfamily => 'btree/time_ops', amoplefttype => 'time',
+  amoprighttype => 'time', amopstrategy => '1', amopopr => '<(time,time)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/time_ops', amoplefttype => 'time',
+  amoprighttype => 'time', amopstrategy => '2', amopopr => '<=(time,time)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/time_ops', amoplefttype => 'time',
+  amoprighttype => 'time', amopstrategy => '3', amopopr => '=(time,time)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/time_ops', amoplefttype => 'time',
+  amoprighttype => 'time', amopstrategy => '4', amopopr => '>=(time,time)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/time_ops', amoplefttype => 'time',
+  amoprighttype => 'time', amopstrategy => '5', amopopr => '>(time,time)',
+  amopmethod => 'btree' },
+
+# btree timetz_ops
+
+{ amopfamily => 'btree/timetz_ops', amoplefttype => 'timetz',
+  amoprighttype => 'timetz', amopstrategy => '1', amopopr => '<(timetz,timetz)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/timetz_ops', amoplefttype => 'timetz',
+  amoprighttype => 'timetz', amopstrategy => '2',
+  amopopr => '<=(timetz,timetz)', amopmethod => 'btree' },
+{ amopfamily => 'btree/timetz_ops', amoplefttype => 'timetz',
+  amoprighttype => 'timetz', amopstrategy => '3', amopopr => '=(timetz,timetz)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/timetz_ops', amoplefttype => 'timetz',
+  amoprighttype => 'timetz', amopstrategy => '4',
+  amopopr => '>=(timetz,timetz)', amopmethod => 'btree' },
+{ amopfamily => 'btree/timetz_ops', amoplefttype => 'timetz',
+  amoprighttype => 'timetz', amopstrategy => '5', amopopr => '>(timetz,timetz)',
+  amopmethod => 'btree' },
+
+# btree interval_ops
+
+{ amopfamily => 'btree/interval_ops', amoplefttype => 'interval',
+  amoprighttype => 'interval', amopstrategy => '1',
+  amopopr => '<(interval,interval)', amopmethod => 'btree' },
+{ amopfamily => 'btree/interval_ops', amoplefttype => 'interval',
+  amoprighttype => 'interval', amopstrategy => '2',
+  amopopr => '<=(interval,interval)', amopmethod => 'btree' },
+{ amopfamily => 'btree/interval_ops', amoplefttype => 'interval',
+  amoprighttype => 'interval', amopstrategy => '3',
+  amopopr => '=(interval,interval)', amopmethod => 'btree' },
+{ amopfamily => 'btree/interval_ops', amoplefttype => 'interval',
+  amoprighttype => 'interval', amopstrategy => '4',
+  amopopr => '>=(interval,interval)', amopmethod => 'btree' },
+{ amopfamily => 'btree/interval_ops', amoplefttype => 'interval',
+  amoprighttype => 'interval', amopstrategy => '5',
+  amopopr => '>(interval,interval)', amopmethod => 'btree' },
+
+# btree macaddr
+
+{ amopfamily => 'btree/macaddr_ops', amoplefttype => 'macaddr',
+  amoprighttype => 'macaddr', amopstrategy => '1',
+  amopopr => '<(macaddr,macaddr)', amopmethod => 'btree' },
+{ amopfamily => 'btree/macaddr_ops', amoplefttype => 'macaddr',
+  amoprighttype => 'macaddr', amopstrategy => '2',
+  amopopr => '<=(macaddr,macaddr)', amopmethod => 'btree' },
+{ amopfamily => 'btree/macaddr_ops', amoplefttype => 'macaddr',
+  amoprighttype => 'macaddr', amopstrategy => '3',
+  amopopr => '=(macaddr,macaddr)', amopmethod => 'btree' },
+{ amopfamily => 'btree/macaddr_ops', amoplefttype => 'macaddr',
+  amoprighttype => 'macaddr', amopstrategy => '4',
+  amopopr => '>=(macaddr,macaddr)', amopmethod => 'btree' },
+{ amopfamily => 'btree/macaddr_ops', amoplefttype => 'macaddr',
+  amoprighttype => 'macaddr', amopstrategy => '5',
+  amopopr => '>(macaddr,macaddr)', amopmethod => 'btree' },
+
+# btree macaddr8
+
+{ amopfamily => 'btree/macaddr8_ops', amoplefttype => 'macaddr8',
+  amoprighttype => 'macaddr8', amopstrategy => '1',
+  amopopr => '<(macaddr8,macaddr8)', amopmethod => 'btree' },
+{ amopfamily => 'btree/macaddr8_ops', amoplefttype => 'macaddr8',
+  amoprighttype => 'macaddr8', amopstrategy => '2',
+  amopopr => '<=(macaddr8,macaddr8)', amopmethod => 'btree' },
+{ amopfamily => 'btree/macaddr8_ops', amoplefttype => 'macaddr8',
+  amoprighttype => 'macaddr8', amopstrategy => '3',
+  amopopr => '=(macaddr8,macaddr8)', amopmethod => 'btree' },
+{ amopfamily => 'btree/macaddr8_ops', amoplefttype => 'macaddr8',
+  amoprighttype => 'macaddr8', amopstrategy => '4',
+  amopopr => '>=(macaddr8,macaddr8)', amopmethod => 'btree' },
+{ amopfamily => 'btree/macaddr8_ops', amoplefttype => 'macaddr8',
+  amoprighttype => 'macaddr8', amopstrategy => '5',
+  amopopr => '>(macaddr8,macaddr8)', amopmethod => 'btree' },
+
+# btree network
+
+{ amopfamily => 'btree/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '1', amopopr => '<(inet,inet)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '2', amopopr => '<=(inet,inet)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '3', amopopr => '=(inet,inet)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '4', amopopr => '>=(inet,inet)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '5', amopopr => '>(inet,inet)',
+  amopmethod => 'btree' },
+
+# btree numeric
+
+{ amopfamily => 'btree/numeric_ops', amoplefttype => 'numeric',
+  amoprighttype => 'numeric', amopstrategy => '1',
+  amopopr => '<(numeric,numeric)', amopmethod => 'btree' },
+{ amopfamily => 'btree/numeric_ops', amoplefttype => 'numeric',
+  amoprighttype => 'numeric', amopstrategy => '2',
+  amopopr => '<=(numeric,numeric)', amopmethod => 'btree' },
+{ amopfamily => 'btree/numeric_ops', amoplefttype => 'numeric',
+  amoprighttype => 'numeric', amopstrategy => '3',
+  amopopr => '=(numeric,numeric)', amopmethod => 'btree' },
+{ amopfamily => 'btree/numeric_ops', amoplefttype => 'numeric',
+  amoprighttype => 'numeric', amopstrategy => '4',
+  amopopr => '>=(numeric,numeric)', amopmethod => 'btree' },
+{ amopfamily => 'btree/numeric_ops', amoplefttype => 'numeric',
+  amoprighttype => 'numeric', amopstrategy => '5',
+  amopopr => '>(numeric,numeric)', amopmethod => 'btree' },
+
+# btree bool
+
+{ amopfamily => 'btree/bool_ops', amoplefttype => 'bool',
+  amoprighttype => 'bool', amopstrategy => '1', amopopr => '<(bool,bool)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/bool_ops', amoplefttype => 'bool',
+  amoprighttype => 'bool', amopstrategy => '2', amopopr => '<=(bool,bool)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/bool_ops', amoplefttype => 'bool',
+  amoprighttype => 'bool', amopstrategy => '3', amopopr => '=(bool,bool)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/bool_ops', amoplefttype => 'bool',
+  amoprighttype => 'bool', amopstrategy => '4', amopopr => '>=(bool,bool)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/bool_ops', amoplefttype => 'bool',
+  amoprighttype => 'bool', amopstrategy => '5', amopopr => '>(bool,bool)',
+  amopmethod => 'btree' },
+
+# btree bit
+
+{ amopfamily => 'btree/bit_ops', amoplefttype => 'bit', amoprighttype => 'bit',
+  amopstrategy => '1', amopopr => '<(bit,bit)', amopmethod => 'btree' },
+{ amopfamily => 'btree/bit_ops', amoplefttype => 'bit', amoprighttype => 'bit',
+  amopstrategy => '2', amopopr => '<=(bit,bit)', amopmethod => 'btree' },
+{ amopfamily => 'btree/bit_ops', amoplefttype => 'bit', amoprighttype => 'bit',
+  amopstrategy => '3', amopopr => '=(bit,bit)', amopmethod => 'btree' },
+{ amopfamily => 'btree/bit_ops', amoplefttype => 'bit', amoprighttype => 'bit',
+  amopstrategy => '4', amopopr => '>=(bit,bit)', amopmethod => 'btree' },
+{ amopfamily => 'btree/bit_ops', amoplefttype => 'bit', amoprighttype => 'bit',
+  amopstrategy => '5', amopopr => '>(bit,bit)', amopmethod => 'btree' },
+
+# btree varbit
+
+{ amopfamily => 'btree/varbit_ops', amoplefttype => 'varbit',
+  amoprighttype => 'varbit', amopstrategy => '1', amopopr => '<(varbit,varbit)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/varbit_ops', amoplefttype => 'varbit',
+  amoprighttype => 'varbit', amopstrategy => '2',
+  amopopr => '<=(varbit,varbit)', amopmethod => 'btree' },
+{ amopfamily => 'btree/varbit_ops', amoplefttype => 'varbit',
+  amoprighttype => 'varbit', amopstrategy => '3', amopopr => '=(varbit,varbit)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/varbit_ops', amoplefttype => 'varbit',
+  amoprighttype => 'varbit', amopstrategy => '4',
+  amopopr => '>=(varbit,varbit)', amopmethod => 'btree' },
+{ amopfamily => 'btree/varbit_ops', amoplefttype => 'varbit',
+  amoprighttype => 'varbit', amopstrategy => '5', amopopr => '>(varbit,varbit)',
+  amopmethod => 'btree' },
+
+# btree text pattern
+
+{ amopfamily => 'btree/text_pattern_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '1', amopopr => '~<~(text,text)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/text_pattern_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '2', amopopr => '~<=~(text,text)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/text_pattern_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '3', amopopr => '=(text,text)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/text_pattern_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '4', amopopr => '~>=~(text,text)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/text_pattern_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '5', amopopr => '~>~(text,text)',
+  amopmethod => 'btree' },
+
+# btree bpchar pattern
+
+{ amopfamily => 'btree/bpchar_pattern_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '1',
+  amopopr => '~<~(bpchar,bpchar)', amopmethod => 'btree' },
+{ amopfamily => 'btree/bpchar_pattern_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '2',
+  amopopr => '~<=~(bpchar,bpchar)', amopmethod => 'btree' },
+{ amopfamily => 'btree/bpchar_pattern_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '3', amopopr => '=(bpchar,bpchar)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/bpchar_pattern_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '4',
+  amopopr => '~>=~(bpchar,bpchar)', amopmethod => 'btree' },
+{ amopfamily => 'btree/bpchar_pattern_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '5',
+  amopopr => '~>~(bpchar,bpchar)', amopmethod => 'btree' },
+
+# btree money_ops
+
+{ amopfamily => 'btree/money_ops', amoplefttype => 'money',
+  amoprighttype => 'money', amopstrategy => '1', amopopr => '<(money,money)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/money_ops', amoplefttype => 'money',
+  amoprighttype => 'money', amopstrategy => '2', amopopr => '<=(money,money)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/money_ops', amoplefttype => 'money',
+  amoprighttype => 'money', amopstrategy => '3', amopopr => '=(money,money)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/money_ops', amoplefttype => 'money',
+  amoprighttype => 'money', amopstrategy => '4', amopopr => '>=(money,money)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/money_ops', amoplefttype => 'money',
+  amoprighttype => 'money', amopstrategy => '5', amopopr => '>(money,money)',
+  amopmethod => 'btree' },
+
+# btree reltime_ops
+
+{ amopfamily => 'btree/reltime_ops', amoplefttype => 'reltime',
+  amoprighttype => 'reltime', amopstrategy => '1',
+  amopopr => '<(reltime,reltime)', amopmethod => 'btree' },
+{ amopfamily => 'btree/reltime_ops', amoplefttype => 'reltime',
+  amoprighttype => 'reltime', amopstrategy => '2',
+  amopopr => '<=(reltime,reltime)', amopmethod => 'btree' },
+{ amopfamily => 'btree/reltime_ops', amoplefttype => 'reltime',
+  amoprighttype => 'reltime', amopstrategy => '3',
+  amopopr => '=(reltime,reltime)', amopmethod => 'btree' },
+{ amopfamily => 'btree/reltime_ops', amoplefttype => 'reltime',
+  amoprighttype => 'reltime', amopstrategy => '4',
+  amopopr => '>=(reltime,reltime)', amopmethod => 'btree' },
+{ amopfamily => 'btree/reltime_ops', amoplefttype => 'reltime',
+  amoprighttype => 'reltime', amopstrategy => '5',
+  amopopr => '>(reltime,reltime)', amopmethod => 'btree' },
+
+# btree tinterval_ops
+
+{ amopfamily => 'btree/tinterval_ops', amoplefttype => 'tinterval',
+  amoprighttype => 'tinterval', amopstrategy => '1',
+  amopopr => '<(tinterval,tinterval)', amopmethod => 'btree' },
+{ amopfamily => 'btree/tinterval_ops', amoplefttype => 'tinterval',
+  amoprighttype => 'tinterval', amopstrategy => '2',
+  amopopr => '<=(tinterval,tinterval)', amopmethod => 'btree' },
+{ amopfamily => 'btree/tinterval_ops', amoplefttype => 'tinterval',
+  amoprighttype => 'tinterval', amopstrategy => '3',
+  amopopr => '=(tinterval,tinterval)', amopmethod => 'btree' },
+{ amopfamily => 'btree/tinterval_ops', amoplefttype => 'tinterval',
+  amoprighttype => 'tinterval', amopstrategy => '4',
+  amopopr => '>=(tinterval,tinterval)', amopmethod => 'btree' },
+{ amopfamily => 'btree/tinterval_ops', amoplefttype => 'tinterval',
+  amoprighttype => 'tinterval', amopstrategy => '5',
+  amopopr => '>(tinterval,tinterval)', amopmethod => 'btree' },
+
+# btree array_ops
+
+{ amopfamily => 'btree/array_ops', amoplefttype => 'anyarray',
+  amoprighttype => 'anyarray', amopstrategy => '1',
+  amopopr => '<(anyarray,anyarray)', amopmethod => 'btree' },
+{ amopfamily => 'btree/array_ops', amoplefttype => 'anyarray',
+  amoprighttype => 'anyarray', amopstrategy => '2',
+  amopopr => '<=(anyarray,anyarray)', amopmethod => 'btree' },
+{ amopfamily => 'btree/array_ops', amoplefttype => 'anyarray',
+  amoprighttype => 'anyarray', amopstrategy => '3',
+  amopopr => '=(anyarray,anyarray)', amopmethod => 'btree' },
+{ amopfamily => 'btree/array_ops', amoplefttype => 'anyarray',
+  amoprighttype => 'anyarray', amopstrategy => '4',
+  amopopr => '>=(anyarray,anyarray)', amopmethod => 'btree' },
+{ amopfamily => 'btree/array_ops', amoplefttype => 'anyarray',
+  amoprighttype => 'anyarray', amopstrategy => '5',
+  amopopr => '>(anyarray,anyarray)', amopmethod => 'btree' },
+
+# btree record_ops
+
+{ amopfamily => 'btree/record_ops', amoplefttype => 'record',
+  amoprighttype => 'record', amopstrategy => '1', amopopr => '<(record,record)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/record_ops', amoplefttype => 'record',
+  amoprighttype => 'record', amopstrategy => '2',
+  amopopr => '<=(record,record)', amopmethod => 'btree' },
+{ amopfamily => 'btree/record_ops', amoplefttype => 'record',
+  amoprighttype => 'record', amopstrategy => '3', amopopr => '=(record,record)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/record_ops', amoplefttype => 'record',
+  amoprighttype => 'record', amopstrategy => '4',
+  amopopr => '>=(record,record)', amopmethod => 'btree' },
+{ amopfamily => 'btree/record_ops', amoplefttype => 'record',
+  amoprighttype => 'record', amopstrategy => '5', amopopr => '>(record,record)',
+  amopmethod => 'btree' },
+
+# btree record_image_ops
+
+{ amopfamily => 'btree/record_image_ops', amoplefttype => 'record',
+  amoprighttype => 'record', amopstrategy => '1',
+  amopopr => '*<(record,record)', amopmethod => 'btree' },
+{ amopfamily => 'btree/record_image_ops', amoplefttype => 'record',
+  amoprighttype => 'record', amopstrategy => '2',
+  amopopr => '*<=(record,record)', amopmethod => 'btree' },
+{ amopfamily => 'btree/record_image_ops', amoplefttype => 'record',
+  amoprighttype => 'record', amopstrategy => '3',
+  amopopr => '*=(record,record)', amopmethod => 'btree' },
+{ amopfamily => 'btree/record_image_ops', amoplefttype => 'record',
+  amoprighttype => 'record', amopstrategy => '4',
+  amopopr => '*>=(record,record)', amopmethod => 'btree' },
+{ amopfamily => 'btree/record_image_ops', amoplefttype => 'record',
+  amoprighttype => 'record', amopstrategy => '5',
+  amopopr => '*>(record,record)', amopmethod => 'btree' },
+
+# btree uuid_ops
+
+{ amopfamily => 'btree/uuid_ops', amoplefttype => 'uuid',
+  amoprighttype => 'uuid', amopstrategy => '1', amopopr => '<(uuid,uuid)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/uuid_ops', amoplefttype => 'uuid',
+  amoprighttype => 'uuid', amopstrategy => '2', amopopr => '<=(uuid,uuid)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/uuid_ops', amoplefttype => 'uuid',
+  amoprighttype => 'uuid', amopstrategy => '3', amopopr => '=(uuid,uuid)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/uuid_ops', amoplefttype => 'uuid',
+  amoprighttype => 'uuid', amopstrategy => '4', amopopr => '>=(uuid,uuid)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/uuid_ops', amoplefttype => 'uuid',
+  amoprighttype => 'uuid', amopstrategy => '5', amopopr => '>(uuid,uuid)',
+  amopmethod => 'btree' },
+
+# btree pg_lsn_ops
+
+{ amopfamily => 'btree/pg_lsn_ops', amoplefttype => 'pg_lsn',
+  amoprighttype => 'pg_lsn', amopstrategy => '1', amopopr => '<(pg_lsn,pg_lsn)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/pg_lsn_ops', amoplefttype => 'pg_lsn',
+  amoprighttype => 'pg_lsn', amopstrategy => '2',
+  amopopr => '<=(pg_lsn,pg_lsn)', amopmethod => 'btree' },
+{ amopfamily => 'btree/pg_lsn_ops', amoplefttype => 'pg_lsn',
+  amoprighttype => 'pg_lsn', amopstrategy => '3', amopopr => '=(pg_lsn,pg_lsn)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/pg_lsn_ops', amoplefttype => 'pg_lsn',
+  amoprighttype => 'pg_lsn', amopstrategy => '4',
+  amopopr => '>=(pg_lsn,pg_lsn)', amopmethod => 'btree' },
+{ amopfamily => 'btree/pg_lsn_ops', amoplefttype => 'pg_lsn',
+  amoprighttype => 'pg_lsn', amopstrategy => '5', amopopr => '>(pg_lsn,pg_lsn)',
+  amopmethod => 'btree' },
+
+# hash index_ops
+
+# bpchar_ops
+{ amopfamily => 'hash/bpchar_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '1', amopopr => '=(bpchar,bpchar)',
+  amopmethod => 'hash' },
+
+# char_ops
+{ amopfamily => 'hash/char_ops', amoplefttype => 'char',
+  amoprighttype => 'char', amopstrategy => '1', amopopr => '=(char,char)',
+  amopmethod => 'hash' },
+
+# date_ops
+{ amopfamily => 'hash/date_ops', amoplefttype => 'date',
+  amoprighttype => 'date', amopstrategy => '1', amopopr => '=(date,date)',
+  amopmethod => 'hash' },
+
+# float_ops
+{ amopfamily => 'hash/float_ops', amoplefttype => 'float4',
+  amoprighttype => 'float4', amopstrategy => '1', amopopr => '=(float4,float4)',
+  amopmethod => 'hash' },
+{ amopfamily => 'hash/float_ops', amoplefttype => 'float8',
+  amoprighttype => 'float8', amopstrategy => '1', amopopr => '=(float8,float8)',
+  amopmethod => 'hash' },
+{ amopfamily => 'hash/float_ops', amoplefttype => 'float4',
+  amoprighttype => 'float8', amopstrategy => '1', amopopr => '=(float4,float8)',
+  amopmethod => 'hash' },
+{ amopfamily => 'hash/float_ops', amoplefttype => 'float8',
+  amoprighttype => 'float4', amopstrategy => '1', amopopr => '=(float8,float4)',
+  amopmethod => 'hash' },
+
+# network_ops
+{ amopfamily => 'hash/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '1', amopopr => '=(inet,inet)',
+  amopmethod => 'hash' },
+
+# integer_ops
+{ amopfamily => 'hash/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int2', amopstrategy => '1', amopopr => '=(int2,int2)',
+  amopmethod => 'hash' },
+{ amopfamily => 'hash/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int4', amopstrategy => '1', amopopr => '=(int4,int4)',
+  amopmethod => 'hash' },
+{ amopfamily => 'hash/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int8', amopstrategy => '1', amopopr => '=(int8,int8)',
+  amopmethod => 'hash' },
+{ amopfamily => 'hash/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int4', amopstrategy => '1', amopopr => '=(int2,int4)',
+  amopmethod => 'hash' },
+{ amopfamily => 'hash/integer_ops', amoplefttype => 'int2',
+  amoprighttype => 'int8', amopstrategy => '1', amopopr => '=(int2,int8)',
+  amopmethod => 'hash' },
+{ amopfamily => 'hash/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int2', amopstrategy => '1', amopopr => '=(int4,int2)',
+  amopmethod => 'hash' },
+{ amopfamily => 'hash/integer_ops', amoplefttype => 'int4',
+  amoprighttype => 'int8', amopstrategy => '1', amopopr => '=(int4,int8)',
+  amopmethod => 'hash' },
+{ amopfamily => 'hash/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int2', amopstrategy => '1', amopopr => '=(int8,int2)',
+  amopmethod => 'hash' },
+{ amopfamily => 'hash/integer_ops', amoplefttype => 'int8',
+  amoprighttype => 'int4', amopstrategy => '1', amopopr => '=(int8,int4)',
+  amopmethod => 'hash' },
+
+# interval_ops
+{ amopfamily => 'hash/interval_ops', amoplefttype => 'interval',
+  amoprighttype => 'interval', amopstrategy => '1',
+  amopopr => '=(interval,interval)', amopmethod => 'hash' },
+
+# macaddr_ops
+{ amopfamily => 'hash/macaddr_ops', amoplefttype => 'macaddr',
+  amoprighttype => 'macaddr', amopstrategy => '1',
+  amopopr => '=(macaddr,macaddr)', amopmethod => 'hash' },
+
+# macaddr8_ops
+{ amopfamily => 'hash/macaddr8_ops', amoplefttype => 'macaddr8',
+  amoprighttype => 'macaddr8', amopstrategy => '1',
+  amopopr => '=(macaddr8,macaddr8)', amopmethod => 'hash' },
+
+# name_ops
+{ amopfamily => 'hash/name_ops', amoplefttype => 'name',
+  amoprighttype => 'name', amopstrategy => '1', amopopr => '=(name,name)',
+  amopmethod => 'hash' },
+
+# oid_ops
+{ amopfamily => 'hash/oid_ops', amoplefttype => 'oid', amoprighttype => 'oid',
+  amopstrategy => '1', amopopr => '=(oid,oid)', amopmethod => 'hash' },
+
+# oidvector_ops
+{ amopfamily => 'hash/oidvector_ops', amoplefttype => 'oidvector',
+  amoprighttype => 'oidvector', amopstrategy => '1',
+  amopopr => '=(oidvector,oidvector)', amopmethod => 'hash' },
+
+# text_ops
+{ amopfamily => 'hash/text_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '1', amopopr => '=(text,text)',
+  amopmethod => 'hash' },
+
+# time_ops
+{ amopfamily => 'hash/time_ops', amoplefttype => 'time',
+  amoprighttype => 'time', amopstrategy => '1', amopopr => '=(time,time)',
+  amopmethod => 'hash' },
+
+# timestamptz_ops
+{ amopfamily => 'hash/timestamptz_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamptz', amopstrategy => '1',
+  amopopr => '=(timestamptz,timestamptz)', amopmethod => 'hash' },
+
+# timetz_ops
+{ amopfamily => 'hash/timetz_ops', amoplefttype => 'timetz',
+  amoprighttype => 'timetz', amopstrategy => '1', amopopr => '=(timetz,timetz)',
+  amopmethod => 'hash' },
+
+# timestamp_ops
+{ amopfamily => 'hash/timestamp_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamp', amopstrategy => '1',
+  amopopr => '=(timestamp,timestamp)', amopmethod => 'hash' },
+
+# bool_ops
+{ amopfamily => 'hash/bool_ops', amoplefttype => 'bool',
+  amoprighttype => 'bool', amopstrategy => '1', amopopr => '=(bool,bool)',
+  amopmethod => 'hash' },
+
+# bytea_ops
+{ amopfamily => 'hash/bytea_ops', amoplefttype => 'bytea',
+  amoprighttype => 'bytea', amopstrategy => '1', amopopr => '=(bytea,bytea)',
+  amopmethod => 'hash' },
+
+# xid_ops
+{ amopfamily => 'hash/xid_ops', amoplefttype => 'xid', amoprighttype => 'xid',
+  amopstrategy => '1', amopopr => '=(xid,xid)', amopmethod => 'hash' },
+
+# cid_ops
+{ amopfamily => 'hash/cid_ops', amoplefttype => 'cid', amoprighttype => 'cid',
+  amopstrategy => '1', amopopr => '=(cid,cid)', amopmethod => 'hash' },
+
+# abstime_ops
+{ amopfamily => 'hash/abstime_ops', amoplefttype => 'abstime',
+  amoprighttype => 'abstime', amopstrategy => '1',
+  amopopr => '=(abstime,abstime)', amopmethod => 'hash' },
+
+# reltime_ops
+{ amopfamily => 'hash/reltime_ops', amoplefttype => 'reltime',
+  amoprighttype => 'reltime', amopstrategy => '1',
+  amopopr => '=(reltime,reltime)', amopmethod => 'hash' },
+
+# text_pattern_ops
+{ amopfamily => 'hash/text_pattern_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '1', amopopr => '=(text,text)',
+  amopmethod => 'hash' },
+
+# bpchar_pattern_ops
+{ amopfamily => 'hash/bpchar_pattern_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '1', amopopr => '=(bpchar,bpchar)',
+  amopmethod => 'hash' },
+
+# aclitem_ops
+{ amopfamily => 'hash/aclitem_ops', amoplefttype => 'aclitem',
+  amoprighttype => 'aclitem', amopstrategy => '1',
+  amopopr => '=(aclitem,aclitem)', amopmethod => 'hash' },
+
+# uuid_ops
+{ amopfamily => 'hash/uuid_ops', amoplefttype => 'uuid',
+  amoprighttype => 'uuid', amopstrategy => '1', amopopr => '=(uuid,uuid)',
+  amopmethod => 'hash' },
+
+# pg_lsn_ops
+{ amopfamily => 'hash/pg_lsn_ops', amoplefttype => 'pg_lsn',
+  amoprighttype => 'pg_lsn', amopstrategy => '1', amopopr => '=(pg_lsn,pg_lsn)',
+  amopmethod => 'hash' },
+
+# numeric_ops
+{ amopfamily => 'hash/numeric_ops', amoplefttype => 'numeric',
+  amoprighttype => 'numeric', amopstrategy => '1',
+  amopopr => '=(numeric,numeric)', amopmethod => 'hash' },
+
+# array_ops
+{ amopfamily => 'hash/array_ops', amoplefttype => 'anyarray',
+  amoprighttype => 'anyarray', amopstrategy => '1',
+  amopopr => '=(anyarray,anyarray)', amopmethod => 'hash' },
+
+# gist box_ops
+{ amopfamily => 'gist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '1', amopopr => '<<(box,box)', amopmethod => 'gist' },
+{ amopfamily => 'gist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '2', amopopr => '&<(box,box)', amopmethod => 'gist' },
+{ amopfamily => 'gist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '3', amopopr => '&&(box,box)', amopmethod => 'gist' },
+{ amopfamily => 'gist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '4', amopopr => '&>(box,box)', amopmethod => 'gist' },
+{ amopfamily => 'gist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '5', amopopr => '>>(box,box)', amopmethod => 'gist' },
+{ amopfamily => 'gist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '6', amopopr => '~=(box,box)', amopmethod => 'gist' },
+{ amopfamily => 'gist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '7', amopopr => '@>(box,box)', amopmethod => 'gist' },
+{ amopfamily => 'gist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '8', amopopr => '<@(box,box)', amopmethod => 'gist' },
+{ amopfamily => 'gist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '9', amopopr => '&<|(box,box)', amopmethod => 'gist' },
+{ amopfamily => 'gist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '10', amopopr => '<<|(box,box)', amopmethod => 'gist' },
+{ amopfamily => 'gist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '11', amopopr => '|>>(box,box)', amopmethod => 'gist' },
+{ amopfamily => 'gist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '12', amopopr => '|&>(box,box)', amopmethod => 'gist' },
+{ amopfamily => 'gist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '13', amopopr => '~(box,box)', amopmethod => 'gist' },
+{ amopfamily => 'gist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '14', amopopr => '@(box,box)', amopmethod => 'gist' },
+
+# gist point_ops
+{ amopfamily => 'gist/point_ops', amoplefttype => 'point',
+  amoprighttype => 'point', amopstrategy => '11', amopopr => '>^(point,point)',
+  amopmethod => 'gist' },
+{ amopfamily => 'gist/point_ops', amoplefttype => 'point',
+  amoprighttype => 'point', amopstrategy => '1', amopopr => '<<(point,point)',
+  amopmethod => 'gist' },
+{ amopfamily => 'gist/point_ops', amoplefttype => 'point',
+  amoprighttype => 'point', amopstrategy => '5', amopopr => '>>(point,point)',
+  amopmethod => 'gist' },
+{ amopfamily => 'gist/point_ops', amoplefttype => 'point',
+  amoprighttype => 'point', amopstrategy => '10', amopopr => '<^(point,point)',
+  amopmethod => 'gist' },
+{ amopfamily => 'gist/point_ops', amoplefttype => 'point',
+  amoprighttype => 'point', amopstrategy => '6', amopopr => '~=(point,point)',
+  amopmethod => 'gist' },
+{ amopfamily => 'gist/point_ops', amoplefttype => 'point',
+  amoprighttype => 'point', amopstrategy => '15', amoppurpose => 'o',
+  amopopr => '<->(point,point)', amopmethod => 'gist',
+  amopsortfamily => 'btree/float_ops' },
+{ amopfamily => 'gist/point_ops', amoplefttype => 'point',
+  amoprighttype => 'box', amopstrategy => '28', amopopr => '<@(point,box)',
+  amopmethod => 'gist' },
+{ amopfamily => 'gist/point_ops', amoplefttype => 'point',
+  amoprighttype => 'polygon', amopstrategy => '48',
+  amopopr => '<@(point,polygon)', amopmethod => 'gist' },
+{ amopfamily => 'gist/point_ops', amoplefttype => 'point',
+  amoprighttype => 'circle', amopstrategy => '68',
+  amopopr => '<@(point,circle)', amopmethod => 'gist' },
+
+# gist poly_ops (supports polygons)
+{ amopfamily => 'gist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '1',
+  amopopr => '<<(polygon,polygon)', amopmethod => 'gist' },
+{ amopfamily => 'gist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '2',
+  amopopr => '&<(polygon,polygon)', amopmethod => 'gist' },
+{ amopfamily => 'gist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '3',
+  amopopr => '&&(polygon,polygon)', amopmethod => 'gist' },
+{ amopfamily => 'gist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '4',
+  amopopr => '&>(polygon,polygon)', amopmethod => 'gist' },
+{ amopfamily => 'gist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '5',
+  amopopr => '>>(polygon,polygon)', amopmethod => 'gist' },
+{ amopfamily => 'gist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '6',
+  amopopr => '~=(polygon,polygon)', amopmethod => 'gist' },
+{ amopfamily => 'gist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '7',
+  amopopr => '@>(polygon,polygon)', amopmethod => 'gist' },
+{ amopfamily => 'gist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '8',
+  amopopr => '<@(polygon,polygon)', amopmethod => 'gist' },
+{ amopfamily => 'gist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '9',
+  amopopr => '&<|(polygon,polygon)', amopmethod => 'gist' },
+{ amopfamily => 'gist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '10',
+  amopopr => '<<|(polygon,polygon)', amopmethod => 'gist' },
+{ amopfamily => 'gist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '11',
+  amopopr => '|>>(polygon,polygon)', amopmethod => 'gist' },
+{ amopfamily => 'gist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '12',
+  amopopr => '|&>(polygon,polygon)', amopmethod => 'gist' },
+{ amopfamily => 'gist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '13',
+  amopopr => '~(polygon,polygon)', amopmethod => 'gist' },
+{ amopfamily => 'gist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '14',
+  amopopr => '@(polygon,polygon)', amopmethod => 'gist' },
+{ amopfamily => 'gist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'point', amopstrategy => '15', amoppurpose => 'o',
+  amopopr => '<->(polygon,point)', amopmethod => 'gist',
+  amopsortfamily => 'btree/float_ops' },
+
+# gist circle_ops
+{ amopfamily => 'gist/circle_ops', amoplefttype => 'circle',
+  amoprighttype => 'circle', amopstrategy => '1',
+  amopopr => '<<(circle,circle)', amopmethod => 'gist' },
+{ amopfamily => 'gist/circle_ops', amoplefttype => 'circle',
+  amoprighttype => 'circle', amopstrategy => '2',
+  amopopr => '&<(circle,circle)', amopmethod => 'gist' },
+{ amopfamily => 'gist/circle_ops', amoplefttype => 'circle',
+  amoprighttype => 'circle', amopstrategy => '3',
+  amopopr => '&&(circle,circle)', amopmethod => 'gist' },
+{ amopfamily => 'gist/circle_ops', amoplefttype => 'circle',
+  amoprighttype => 'circle', amopstrategy => '4',
+  amopopr => '&>(circle,circle)', amopmethod => 'gist' },
+{ amopfamily => 'gist/circle_ops', amoplefttype => 'circle',
+  amoprighttype => 'circle', amopstrategy => '5',
+  amopopr => '>>(circle,circle)', amopmethod => 'gist' },
+{ amopfamily => 'gist/circle_ops', amoplefttype => 'circle',
+  amoprighttype => 'circle', amopstrategy => '6',
+  amopopr => '~=(circle,circle)', amopmethod => 'gist' },
+{ amopfamily => 'gist/circle_ops', amoplefttype => 'circle',
+  amoprighttype => 'circle', amopstrategy => '7',
+  amopopr => '@>(circle,circle)', amopmethod => 'gist' },
+{ amopfamily => 'gist/circle_ops', amoplefttype => 'circle',
+  amoprighttype => 'circle', amopstrategy => '8',
+  amopopr => '<@(circle,circle)', amopmethod => 'gist' },
+{ amopfamily => 'gist/circle_ops', amoplefttype => 'circle',
+  amoprighttype => 'circle', amopstrategy => '9',
+  amopopr => '&<|(circle,circle)', amopmethod => 'gist' },
+{ amopfamily => 'gist/circle_ops', amoplefttype => 'circle',
+  amoprighttype => 'circle', amopstrategy => '10',
+  amopopr => '<<|(circle,circle)', amopmethod => 'gist' },
+{ amopfamily => 'gist/circle_ops', amoplefttype => 'circle',
+  amoprighttype => 'circle', amopstrategy => '11',
+  amopopr => '|>>(circle,circle)', amopmethod => 'gist' },
+{ amopfamily => 'gist/circle_ops', amoplefttype => 'circle',
+  amoprighttype => 'circle', amopstrategy => '12',
+  amopopr => '|&>(circle,circle)', amopmethod => 'gist' },
+{ amopfamily => 'gist/circle_ops', amoplefttype => 'circle',
+  amoprighttype => 'circle', amopstrategy => '13',
+  amopopr => '~(circle,circle)', amopmethod => 'gist' },
+{ amopfamily => 'gist/circle_ops', amoplefttype => 'circle',
+  amoprighttype => 'circle', amopstrategy => '14',
+  amopopr => '@(circle,circle)', amopmethod => 'gist' },
+{ amopfamily => 'gist/circle_ops', amoplefttype => 'circle',
+  amoprighttype => 'point', amopstrategy => '15', amoppurpose => 'o',
+  amopopr => '<->(circle,point)', amopmethod => 'gist',
+  amopsortfamily => 'btree/float_ops' },
+
+# gin array_ops
+{ amopfamily => 'gin/array_ops', amoplefttype => 'anyarray',
+  amoprighttype => 'anyarray', amopstrategy => '1',
+  amopopr => '&&(anyarray,anyarray)', amopmethod => 'gin' },
+{ amopfamily => 'gin/array_ops', amoplefttype => 'anyarray',
+  amoprighttype => 'anyarray', amopstrategy => '2',
+  amopopr => '@>(anyarray,anyarray)', amopmethod => 'gin' },
+{ amopfamily => 'gin/array_ops', amoplefttype => 'anyarray',
+  amoprighttype => 'anyarray', amopstrategy => '3',
+  amopopr => '<@(anyarray,anyarray)', amopmethod => 'gin' },
+{ amopfamily => 'gin/array_ops', amoplefttype => 'anyarray',
+  amoprighttype => 'anyarray', amopstrategy => '4',
+  amopopr => '=(anyarray,anyarray)', amopmethod => 'gin' },
+
+# btree enum_ops
+{ amopfamily => 'btree/enum_ops', amoplefttype => 'anyenum',
+  amoprighttype => 'anyenum', amopstrategy => '1',
+  amopopr => '<(anyenum,anyenum)', amopmethod => 'btree' },
+{ amopfamily => 'btree/enum_ops', amoplefttype => 'anyenum',
+  amoprighttype => 'anyenum', amopstrategy => '2',
+  amopopr => '<=(anyenum,anyenum)', amopmethod => 'btree' },
+{ amopfamily => 'btree/enum_ops', amoplefttype => 'anyenum',
+  amoprighttype => 'anyenum', amopstrategy => '3',
+  amopopr => '=(anyenum,anyenum)', amopmethod => 'btree' },
+{ amopfamily => 'btree/enum_ops', amoplefttype => 'anyenum',
+  amoprighttype => 'anyenum', amopstrategy => '4',
+  amopopr => '>=(anyenum,anyenum)', amopmethod => 'btree' },
+{ amopfamily => 'btree/enum_ops', amoplefttype => 'anyenum',
+  amoprighttype => 'anyenum', amopstrategy => '5',
+  amopopr => '>(anyenum,anyenum)', amopmethod => 'btree' },
+
+# hash enum_ops
+{ amopfamily => 'hash/enum_ops', amoplefttype => 'anyenum',
+  amoprighttype => 'anyenum', amopstrategy => '1',
+  amopopr => '=(anyenum,anyenum)', amopmethod => 'hash' },
+
+# btree tsvector_ops
+{ amopfamily => 'btree/tsvector_ops', amoplefttype => 'tsvector',
+  amoprighttype => 'tsvector', amopstrategy => '1',
+  amopopr => '<(tsvector,tsvector)', amopmethod => 'btree' },
+{ amopfamily => 'btree/tsvector_ops', amoplefttype => 'tsvector',
+  amoprighttype => 'tsvector', amopstrategy => '2',
+  amopopr => '<=(tsvector,tsvector)', amopmethod => 'btree' },
+{ amopfamily => 'btree/tsvector_ops', amoplefttype => 'tsvector',
+  amoprighttype => 'tsvector', amopstrategy => '3',
+  amopopr => '=(tsvector,tsvector)', amopmethod => 'btree' },
+{ amopfamily => 'btree/tsvector_ops', amoplefttype => 'tsvector',
+  amoprighttype => 'tsvector', amopstrategy => '4',
+  amopopr => '>=(tsvector,tsvector)', amopmethod => 'btree' },
+{ amopfamily => 'btree/tsvector_ops', amoplefttype => 'tsvector',
+  amoprighttype => 'tsvector', amopstrategy => '5',
+  amopopr => '>(tsvector,tsvector)', amopmethod => 'btree' },
+
+# GiST tsvector_ops
+{ amopfamily => 'gist/tsvector_ops', amoplefttype => 'tsvector',
+  amoprighttype => 'tsquery', amopstrategy => '1',
+  amopopr => '@@(tsvector,tsquery)', amopmethod => 'gist' },
+
+# GIN tsvector_ops
+{ amopfamily => 'gin/tsvector_ops', amoplefttype => 'tsvector',
+  amoprighttype => 'tsquery', amopstrategy => '1',
+  amopopr => '@@(tsvector,tsquery)', amopmethod => 'gin' },
+{ amopfamily => 'gin/tsvector_ops', amoplefttype => 'tsvector',
+  amoprighttype => 'tsquery', amopstrategy => '2',
+  amopopr => '@@@(tsvector,tsquery)', amopmethod => 'gin' },
+
+# btree tsquery_ops
+{ amopfamily => 'btree/tsquery_ops', amoplefttype => 'tsquery',
+  amoprighttype => 'tsquery', amopstrategy => '1',
+  amopopr => '<(tsquery,tsquery)', amopmethod => 'btree' },
+{ amopfamily => 'btree/tsquery_ops', amoplefttype => 'tsquery',
+  amoprighttype => 'tsquery', amopstrategy => '2',
+  amopopr => '<=(tsquery,tsquery)', amopmethod => 'btree' },
+{ amopfamily => 'btree/tsquery_ops', amoplefttype => 'tsquery',
+  amoprighttype => 'tsquery', amopstrategy => '3',
+  amopopr => '=(tsquery,tsquery)', amopmethod => 'btree' },
+{ amopfamily => 'btree/tsquery_ops', amoplefttype => 'tsquery',
+  amoprighttype => 'tsquery', amopstrategy => '4',
+  amopopr => '>=(tsquery,tsquery)', amopmethod => 'btree' },
+{ amopfamily => 'btree/tsquery_ops', amoplefttype => 'tsquery',
+  amoprighttype => 'tsquery', amopstrategy => '5',
+  amopopr => '>(tsquery,tsquery)', amopmethod => 'btree' },
+
+# GiST tsquery_ops
+{ amopfamily => 'gist/tsquery_ops', amoplefttype => 'tsquery',
+  amoprighttype => 'tsquery', amopstrategy => '7',
+  amopopr => '@>(tsquery,tsquery)', amopmethod => 'gist' },
+{ amopfamily => 'gist/tsquery_ops', amoplefttype => 'tsquery',
+  amoprighttype => 'tsquery', amopstrategy => '8',
+  amopopr => '<@(tsquery,tsquery)', amopmethod => 'gist' },
+
+# btree range_ops
+{ amopfamily => 'btree/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '1',
+  amopopr => '<(anyrange,anyrange)', amopmethod => 'btree' },
+{ amopfamily => 'btree/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '2',
+  amopopr => '<=(anyrange,anyrange)', amopmethod => 'btree' },
+{ amopfamily => 'btree/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '3',
+  amopopr => '=(anyrange,anyrange)', amopmethod => 'btree' },
+{ amopfamily => 'btree/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '4',
+  amopopr => '>=(anyrange,anyrange)', amopmethod => 'btree' },
+{ amopfamily => 'btree/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '5',
+  amopopr => '>(anyrange,anyrange)', amopmethod => 'btree' },
+
+# hash range_ops
+{ amopfamily => 'hash/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '1',
+  amopopr => '=(anyrange,anyrange)', amopmethod => 'hash' },
+
+# GiST range_ops
+{ amopfamily => 'gist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '1',
+  amopopr => '<<(anyrange,anyrange)', amopmethod => 'gist' },
+{ amopfamily => 'gist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '2',
+  amopopr => '&<(anyrange,anyrange)', amopmethod => 'gist' },
+{ amopfamily => 'gist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '3',
+  amopopr => '&&(anyrange,anyrange)', amopmethod => 'gist' },
+{ amopfamily => 'gist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '4',
+  amopopr => '&>(anyrange,anyrange)', amopmethod => 'gist' },
+{ amopfamily => 'gist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '5',
+  amopopr => '>>(anyrange,anyrange)', amopmethod => 'gist' },
+{ amopfamily => 'gist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '6',
+  amopopr => '-|-(anyrange,anyrange)', amopmethod => 'gist' },
+{ amopfamily => 'gist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '7',
+  amopopr => '@>(anyrange,anyrange)', amopmethod => 'gist' },
+{ amopfamily => 'gist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '8',
+  amopopr => '<@(anyrange,anyrange)', amopmethod => 'gist' },
+{ amopfamily => 'gist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyelement', amopstrategy => '16',
+  amopopr => '@>(anyrange,anyelement)', amopmethod => 'gist' },
+{ amopfamily => 'gist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '18',
+  amopopr => '=(anyrange,anyrange)', amopmethod => 'gist' },
+
+# SP-GiST quad_point_ops
+{ amopfamily => 'spgist/quad_point_ops', amoplefttype => 'point',
+  amoprighttype => 'point', amopstrategy => '11', amopopr => '>^(point,point)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/quad_point_ops', amoplefttype => 'point',
+  amoprighttype => 'point', amopstrategy => '1', amopopr => '<<(point,point)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/quad_point_ops', amoplefttype => 'point',
+  amoprighttype => 'point', amopstrategy => '5', amopopr => '>>(point,point)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/quad_point_ops', amoplefttype => 'point',
+  amoprighttype => 'point', amopstrategy => '10', amopopr => '<^(point,point)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/quad_point_ops', amoplefttype => 'point',
+  amoprighttype => 'point', amopstrategy => '6', amopopr => '~=(point,point)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/quad_point_ops', amoplefttype => 'point',
+  amoprighttype => 'box', amopstrategy => '8', amopopr => '<@(point,box)',
+  amopmethod => 'spgist' },
+
+# SP-GiST kd_point_ops
+{ amopfamily => 'spgist/kd_point_ops', amoplefttype => 'point',
+  amoprighttype => 'point', amopstrategy => '11', amopopr => '>^(point,point)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/kd_point_ops', amoplefttype => 'point',
+  amoprighttype => 'point', amopstrategy => '1', amopopr => '<<(point,point)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/kd_point_ops', amoplefttype => 'point',
+  amoprighttype => 'point', amopstrategy => '5', amopopr => '>>(point,point)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/kd_point_ops', amoplefttype => 'point',
+  amoprighttype => 'point', amopstrategy => '10', amopopr => '<^(point,point)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/kd_point_ops', amoplefttype => 'point',
+  amoprighttype => 'point', amopstrategy => '6', amopopr => '~=(point,point)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/kd_point_ops', amoplefttype => 'point',
+  amoprighttype => 'box', amopstrategy => '8', amopopr => '<@(point,box)',
+  amopmethod => 'spgist' },
+
+# SP-GiST text_ops
+{ amopfamily => 'spgist/text_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '1', amopopr => '~<~(text,text)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/text_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '2', amopopr => '~<=~(text,text)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/text_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '3', amopopr => '=(text,text)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/text_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '4', amopopr => '~>=~(text,text)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/text_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '5', amopopr => '~>~(text,text)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/text_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '11', amopopr => '<(text,text)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/text_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '12', amopopr => '<=(text,text)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/text_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '14', amopopr => '>=(text,text)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/text_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '15', amopopr => '>(text,text)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/text_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '28', amopopr => '^@(text,text)',
+  amopmethod => 'spgist' },
+
+# btree jsonb_ops
+{ amopfamily => 'btree/jsonb_ops', amoplefttype => 'jsonb',
+  amoprighttype => 'jsonb', amopstrategy => '1', amopopr => '<(jsonb,jsonb)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/jsonb_ops', amoplefttype => 'jsonb',
+  amoprighttype => 'jsonb', amopstrategy => '2', amopopr => '<=(jsonb,jsonb)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/jsonb_ops', amoplefttype => 'jsonb',
+  amoprighttype => 'jsonb', amopstrategy => '3', amopopr => '=(jsonb,jsonb)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/jsonb_ops', amoplefttype => 'jsonb',
+  amoprighttype => 'jsonb', amopstrategy => '4', amopopr => '>=(jsonb,jsonb)',
+  amopmethod => 'btree' },
+{ amopfamily => 'btree/jsonb_ops', amoplefttype => 'jsonb',
+  amoprighttype => 'jsonb', amopstrategy => '5', amopopr => '>(jsonb,jsonb)',
+  amopmethod => 'btree' },
+
+# hash jsonb_ops
+{ amopfamily => 'hash/jsonb_ops', amoplefttype => 'jsonb',
+  amoprighttype => 'jsonb', amopstrategy => '1', amopopr => '=(jsonb,jsonb)',
+  amopmethod => 'hash' },
+
+# GIN jsonb_ops
+{ amopfamily => 'gin/jsonb_ops', amoplefttype => 'jsonb',
+  amoprighttype => 'jsonb', amopstrategy => '7', amopopr => '@>(jsonb,jsonb)',
+  amopmethod => 'gin' },
+{ amopfamily => 'gin/jsonb_ops', amoplefttype => 'jsonb',
+  amoprighttype => 'text', amopstrategy => '9', amopopr => '?(jsonb,text)',
+  amopmethod => 'gin' },
+{ amopfamily => 'gin/jsonb_ops', amoplefttype => 'jsonb',
+  amoprighttype => '_text', amopstrategy => '10', amopopr => '?|(jsonb,_text)',
+  amopmethod => 'gin' },
+{ amopfamily => 'gin/jsonb_ops', amoplefttype => 'jsonb',
+  amoprighttype => '_text', amopstrategy => '11', amopopr => '?&(jsonb,_text)',
+  amopmethod => 'gin' },
+
+# GIN jsonb_path_ops
+{ amopfamily => 'gin/jsonb_path_ops', amoplefttype => 'jsonb',
+  amoprighttype => 'jsonb', amopstrategy => '7', amopopr => '@>(jsonb,jsonb)',
+  amopmethod => 'gin' },
+
+# SP-GiST range_ops
+{ amopfamily => 'spgist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '1',
+  amopopr => '<<(anyrange,anyrange)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '2',
+  amopopr => '&<(anyrange,anyrange)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '3',
+  amopopr => '&&(anyrange,anyrange)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '4',
+  amopopr => '&>(anyrange,anyrange)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '5',
+  amopopr => '>>(anyrange,anyrange)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '6',
+  amopopr => '-|-(anyrange,anyrange)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '7',
+  amopopr => '@>(anyrange,anyrange)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '8',
+  amopopr => '<@(anyrange,anyrange)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyelement', amopstrategy => '16',
+  amopopr => '@>(anyrange,anyelement)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/range_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '18',
+  amopopr => '=(anyrange,anyrange)', amopmethod => 'spgist' },
+
+# SP-GiST box_ops
+{ amopfamily => 'spgist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '1', amopopr => '<<(box,box)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '2', amopopr => '&<(box,box)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '3', amopopr => '&&(box,box)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '4', amopopr => '&>(box,box)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '5', amopopr => '>>(box,box)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '6', amopopr => '~=(box,box)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '7', amopopr => '@>(box,box)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '8', amopopr => '<@(box,box)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '9', amopopr => '&<|(box,box)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '10', amopopr => '<<|(box,box)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '11', amopopr => '|>>(box,box)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/box_ops', amoplefttype => 'box', amoprighttype => 'box',
+  amopstrategy => '12', amopopr => '|&>(box,box)', amopmethod => 'spgist' },
+
+# SP-GiST poly_ops (supports polygons)
+{ amopfamily => 'spgist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '1',
+  amopopr => '<<(polygon,polygon)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '2',
+  amopopr => '&<(polygon,polygon)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '3',
+  amopopr => '&&(polygon,polygon)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '4',
+  amopopr => '&>(polygon,polygon)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '5',
+  amopopr => '>>(polygon,polygon)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '6',
+  amopopr => '~=(polygon,polygon)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '7',
+  amopopr => '@>(polygon,polygon)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '8',
+  amopopr => '<@(polygon,polygon)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '9',
+  amopopr => '&<|(polygon,polygon)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '10',
+  amopopr => '<<|(polygon,polygon)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '11',
+  amopopr => '|>>(polygon,polygon)', amopmethod => 'spgist' },
+{ amopfamily => 'spgist/poly_ops', amoplefttype => 'polygon',
+  amoprighttype => 'polygon', amopstrategy => '12',
+  amopopr => '|&>(polygon,polygon)', amopmethod => 'spgist' },
+
+# GiST inet_ops
+{ amopfamily => 'gist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '3', amopopr => '&&(inet,inet)',
+  amopmethod => 'gist' },
+{ amopfamily => 'gist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '18', amopopr => '=(inet,inet)',
+  amopmethod => 'gist' },
+{ amopfamily => 'gist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '19', amopopr => '<>(inet,inet)',
+  amopmethod => 'gist' },
+{ amopfamily => 'gist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '20', amopopr => '<(inet,inet)',
+  amopmethod => 'gist' },
+{ amopfamily => 'gist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '21', amopopr => '<=(inet,inet)',
+  amopmethod => 'gist' },
+{ amopfamily => 'gist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '22', amopopr => '>(inet,inet)',
+  amopmethod => 'gist' },
+{ amopfamily => 'gist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '23', amopopr => '>=(inet,inet)',
+  amopmethod => 'gist' },
+{ amopfamily => 'gist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '24', amopopr => '<<(inet,inet)',
+  amopmethod => 'gist' },
+{ amopfamily => 'gist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '25', amopopr => '<<=(inet,inet)',
+  amopmethod => 'gist' },
+{ amopfamily => 'gist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '26', amopopr => '>>(inet,inet)',
+  amopmethod => 'gist' },
+{ amopfamily => 'gist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '27', amopopr => '>>=(inet,inet)',
+  amopmethod => 'gist' },
+
+# SP-GiST inet_ops
+{ amopfamily => 'spgist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '3', amopopr => '&&(inet,inet)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '18', amopopr => '=(inet,inet)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '19', amopopr => '<>(inet,inet)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '20', amopopr => '<(inet,inet)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '21', amopopr => '<=(inet,inet)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '22', amopopr => '>(inet,inet)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '23', amopopr => '>=(inet,inet)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '24', amopopr => '<<(inet,inet)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '25', amopopr => '<<=(inet,inet)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '26', amopopr => '>>(inet,inet)',
+  amopmethod => 'spgist' },
+{ amopfamily => 'spgist/network_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '27', amopopr => '>>=(inet,inet)',
+  amopmethod => 'spgist' },
+
+# BRIN opclasses
+
+# minmax bytea
+{ amopfamily => 'brin/bytea_minmax_ops', amoplefttype => 'bytea',
+  amoprighttype => 'bytea', amopstrategy => '1', amopopr => '<(bytea,bytea)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/bytea_minmax_ops', amoplefttype => 'bytea',
+  amoprighttype => 'bytea', amopstrategy => '2', amopopr => '<=(bytea,bytea)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/bytea_minmax_ops', amoplefttype => 'bytea',
+  amoprighttype => 'bytea', amopstrategy => '3', amopopr => '=(bytea,bytea)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/bytea_minmax_ops', amoplefttype => 'bytea',
+  amoprighttype => 'bytea', amopstrategy => '4', amopopr => '>=(bytea,bytea)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/bytea_minmax_ops', amoplefttype => 'bytea',
+  amoprighttype => 'bytea', amopstrategy => '5', amopopr => '>(bytea,bytea)',
+  amopmethod => 'brin' },
+
+# minmax "char"
+{ amopfamily => 'brin/char_minmax_ops', amoplefttype => 'char',
+  amoprighttype => 'char', amopstrategy => '1', amopopr => '<(char,char)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/char_minmax_ops', amoplefttype => 'char',
+  amoprighttype => 'char', amopstrategy => '2', amopopr => '<=(char,char)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/char_minmax_ops', amoplefttype => 'char',
+  amoprighttype => 'char', amopstrategy => '3', amopopr => '=(char,char)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/char_minmax_ops', amoplefttype => 'char',
+  amoprighttype => 'char', amopstrategy => '4', amopopr => '>=(char,char)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/char_minmax_ops', amoplefttype => 'char',
+  amoprighttype => 'char', amopstrategy => '5', amopopr => '>(char,char)',
+  amopmethod => 'brin' },
+
+# minmax name
+{ amopfamily => 'brin/name_minmax_ops', amoplefttype => 'name',
+  amoprighttype => 'name', amopstrategy => '1', amopopr => '<(name,name)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/name_minmax_ops', amoplefttype => 'name',
+  amoprighttype => 'name', amopstrategy => '2', amopopr => '<=(name,name)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/name_minmax_ops', amoplefttype => 'name',
+  amoprighttype => 'name', amopstrategy => '3', amopopr => '=(name,name)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/name_minmax_ops', amoplefttype => 'name',
+  amoprighttype => 'name', amopstrategy => '4', amopopr => '>=(name,name)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/name_minmax_ops', amoplefttype => 'name',
+  amoprighttype => 'name', amopstrategy => '5', amopopr => '>(name,name)',
+  amopmethod => 'brin' },
+
+# minmax integer
+
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int8',
+  amoprighttype => 'int8', amopstrategy => '1', amopopr => '<(int8,int8)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int8',
+  amoprighttype => 'int8', amopstrategy => '2', amopopr => '<=(int8,int8)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int8',
+  amoprighttype => 'int8', amopstrategy => '3', amopopr => '=(int8,int8)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int8',
+  amoprighttype => 'int8', amopstrategy => '4', amopopr => '>=(int8,int8)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int8',
+  amoprighttype => 'int8', amopstrategy => '5', amopopr => '>(int8,int8)',
+  amopmethod => 'brin' },
+
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int8',
+  amoprighttype => 'int2', amopstrategy => '1', amopopr => '<(int8,int2)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int8',
+  amoprighttype => 'int2', amopstrategy => '2', amopopr => '<=(int8,int2)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int8',
+  amoprighttype => 'int2', amopstrategy => '3', amopopr => '=(int8,int2)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int8',
+  amoprighttype => 'int2', amopstrategy => '4', amopopr => '>=(int8,int2)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int8',
+  amoprighttype => 'int2', amopstrategy => '5', amopopr => '>(int8,int2)',
+  amopmethod => 'brin' },
+
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int8',
+  amoprighttype => 'int4', amopstrategy => '1', amopopr => '<(int8,int4)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int8',
+  amoprighttype => 'int4', amopstrategy => '2', amopopr => '<=(int8,int4)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int8',
+  amoprighttype => 'int4', amopstrategy => '3', amopopr => '=(int8,int4)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int8',
+  amoprighttype => 'int4', amopstrategy => '4', amopopr => '>=(int8,int4)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int8',
+  amoprighttype => 'int4', amopstrategy => '5', amopopr => '>(int8,int4)',
+  amopmethod => 'brin' },
+
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int2',
+  amoprighttype => 'int2', amopstrategy => '1', amopopr => '<(int2,int2)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int2',
+  amoprighttype => 'int2', amopstrategy => '2', amopopr => '<=(int2,int2)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int2',
+  amoprighttype => 'int2', amopstrategy => '3', amopopr => '=(int2,int2)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int2',
+  amoprighttype => 'int2', amopstrategy => '4', amopopr => '>=(int2,int2)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int2',
+  amoprighttype => 'int2', amopstrategy => '5', amopopr => '>(int2,int2)',
+  amopmethod => 'brin' },
+
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int2',
+  amoprighttype => 'int8', amopstrategy => '1', amopopr => '<(int2,int8)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int2',
+  amoprighttype => 'int8', amopstrategy => '2', amopopr => '<=(int2,int8)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int2',
+  amoprighttype => 'int8', amopstrategy => '3', amopopr => '=(int2,int8)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int2',
+  amoprighttype => 'int8', amopstrategy => '4', amopopr => '>=(int2,int8)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int2',
+  amoprighttype => 'int8', amopstrategy => '5', amopopr => '>(int2,int8)',
+  amopmethod => 'brin' },
+
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int2',
+  amoprighttype => 'int4', amopstrategy => '1', amopopr => '<(int2,int4)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int2',
+  amoprighttype => 'int4', amopstrategy => '2', amopopr => '<=(int2,int4)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int2',
+  amoprighttype => 'int4', amopstrategy => '3', amopopr => '=(int2,int4)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int2',
+  amoprighttype => 'int4', amopstrategy => '4', amopopr => '>=(int2,int4)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int2',
+  amoprighttype => 'int4', amopstrategy => '5', amopopr => '>(int2,int4)',
+  amopmethod => 'brin' },
+
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int4',
+  amoprighttype => 'int4', amopstrategy => '1', amopopr => '<(int4,int4)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int4',
+  amoprighttype => 'int4', amopstrategy => '2', amopopr => '<=(int4,int4)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int4',
+  amoprighttype => 'int4', amopstrategy => '3', amopopr => '=(int4,int4)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int4',
+  amoprighttype => 'int4', amopstrategy => '4', amopopr => '>=(int4,int4)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int4',
+  amoprighttype => 'int4', amopstrategy => '5', amopopr => '>(int4,int4)',
+  amopmethod => 'brin' },
+
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int4',
+  amoprighttype => 'int2', amopstrategy => '1', amopopr => '<(int4,int2)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int4',
+  amoprighttype => 'int2', amopstrategy => '2', amopopr => '<=(int4,int2)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int4',
+  amoprighttype => 'int2', amopstrategy => '3', amopopr => '=(int4,int2)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int4',
+  amoprighttype => 'int2', amopstrategy => '4', amopopr => '>=(int4,int2)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int4',
+  amoprighttype => 'int2', amopstrategy => '5', amopopr => '>(int4,int2)',
+  amopmethod => 'brin' },
+
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int4',
+  amoprighttype => 'int8', amopstrategy => '1', amopopr => '<(int4,int8)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int4',
+  amoprighttype => 'int8', amopstrategy => '2', amopopr => '<=(int4,int8)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int4',
+  amoprighttype => 'int8', amopstrategy => '3', amopopr => '=(int4,int8)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int4',
+  amoprighttype => 'int8', amopstrategy => '4', amopopr => '>=(int4,int8)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/integer_minmax_ops', amoplefttype => 'int4',
+  amoprighttype => 'int8', amopstrategy => '5', amopopr => '>(int4,int8)',
+  amopmethod => 'brin' },
+
+# minmax text
+{ amopfamily => 'brin/text_minmax_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '1', amopopr => '<(text,text)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/text_minmax_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '2', amopopr => '<=(text,text)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/text_minmax_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '3', amopopr => '=(text,text)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/text_minmax_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '4', amopopr => '>=(text,text)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/text_minmax_ops', amoplefttype => 'text',
+  amoprighttype => 'text', amopstrategy => '5', amopopr => '>(text,text)',
+  amopmethod => 'brin' },
+
+# minmax oid
+{ amopfamily => 'brin/oid_minmax_ops', amoplefttype => 'oid',
+  amoprighttype => 'oid', amopstrategy => '1', amopopr => '<(oid,oid)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/oid_minmax_ops', amoplefttype => 'oid',
+  amoprighttype => 'oid', amopstrategy => '2', amopopr => '<=(oid,oid)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/oid_minmax_ops', amoplefttype => 'oid',
+  amoprighttype => 'oid', amopstrategy => '3', amopopr => '=(oid,oid)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/oid_minmax_ops', amoplefttype => 'oid',
+  amoprighttype => 'oid', amopstrategy => '4', amopopr => '>=(oid,oid)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/oid_minmax_ops', amoplefttype => 'oid',
+  amoprighttype => 'oid', amopstrategy => '5', amopopr => '>(oid,oid)',
+  amopmethod => 'brin' },
+
+# minmax tid
+{ amopfamily => 'brin/tid_minmax_ops', amoplefttype => 'tid',
+  amoprighttype => 'tid', amopstrategy => '1', amopopr => '<(tid,tid)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/tid_minmax_ops', amoplefttype => 'tid',
+  amoprighttype => 'tid', amopstrategy => '2', amopopr => '<=(tid,tid)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/tid_minmax_ops', amoplefttype => 'tid',
+  amoprighttype => 'tid', amopstrategy => '3', amopopr => '=(tid,tid)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/tid_minmax_ops', amoplefttype => 'tid',
+  amoprighttype => 'tid', amopstrategy => '4', amopopr => '>=(tid,tid)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/tid_minmax_ops', amoplefttype => 'tid',
+  amoprighttype => 'tid', amopstrategy => '5', amopopr => '>(tid,tid)',
+  amopmethod => 'brin' },
+
+# minmax float (float4, float8)
+
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float4',
+  amoprighttype => 'float4', amopstrategy => '1', amopopr => '<(float4,float4)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float4',
+  amoprighttype => 'float4', amopstrategy => '2',
+  amopopr => '<=(float4,float4)', amopmethod => 'brin' },
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float4',
+  amoprighttype => 'float4', amopstrategy => '3', amopopr => '=(float4,float4)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float4',
+  amoprighttype => 'float4', amopstrategy => '4',
+  amopopr => '>=(float4,float4)', amopmethod => 'brin' },
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float4',
+  amoprighttype => 'float4', amopstrategy => '5', amopopr => '>(float4,float4)',
+  amopmethod => 'brin' },
+
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float4',
+  amoprighttype => 'float8', amopstrategy => '1', amopopr => '<(float4,float8)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float4',
+  amoprighttype => 'float8', amopstrategy => '2',
+  amopopr => '<=(float4,float8)', amopmethod => 'brin' },
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float4',
+  amoprighttype => 'float8', amopstrategy => '3', amopopr => '=(float4,float8)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float4',
+  amoprighttype => 'float8', amopstrategy => '4',
+  amopopr => '>=(float4,float8)', amopmethod => 'brin' },
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float4',
+  amoprighttype => 'float8', amopstrategy => '5', amopopr => '>(float4,float8)',
+  amopmethod => 'brin' },
+
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float8',
+  amoprighttype => 'float4', amopstrategy => '1', amopopr => '<(float8,float4)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float8',
+  amoprighttype => 'float4', amopstrategy => '2',
+  amopopr => '<=(float8,float4)', amopmethod => 'brin' },
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float8',
+  amoprighttype => 'float4', amopstrategy => '3', amopopr => '=(float8,float4)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float8',
+  amoprighttype => 'float4', amopstrategy => '4',
+  amopopr => '>=(float8,float4)', amopmethod => 'brin' },
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float8',
+  amoprighttype => 'float4', amopstrategy => '5', amopopr => '>(float8,float4)',
+  amopmethod => 'brin' },
+
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float8',
+  amoprighttype => 'float8', amopstrategy => '1', amopopr => '<(float8,float8)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float8',
+  amoprighttype => 'float8', amopstrategy => '2',
+  amopopr => '<=(float8,float8)', amopmethod => 'brin' },
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float8',
+  amoprighttype => 'float8', amopstrategy => '3', amopopr => '=(float8,float8)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float8',
+  amoprighttype => 'float8', amopstrategy => '4',
+  amopopr => '>=(float8,float8)', amopmethod => 'brin' },
+{ amopfamily => 'brin/float_minmax_ops', amoplefttype => 'float8',
+  amoprighttype => 'float8', amopstrategy => '5', amopopr => '>(float8,float8)',
+  amopmethod => 'brin' },
+
+# minmax abstime
+{ amopfamily => 'brin/abstime_minmax_ops', amoplefttype => 'abstime',
+  amoprighttype => 'abstime', amopstrategy => '1',
+  amopopr => '<(abstime,abstime)', amopmethod => 'brin' },
+{ amopfamily => 'brin/abstime_minmax_ops', amoplefttype => 'abstime',
+  amoprighttype => 'abstime', amopstrategy => '2',
+  amopopr => '<=(abstime,abstime)', amopmethod => 'brin' },
+{ amopfamily => 'brin/abstime_minmax_ops', amoplefttype => 'abstime',
+  amoprighttype => 'abstime', amopstrategy => '3',
+  amopopr => '=(abstime,abstime)', amopmethod => 'brin' },
+{ amopfamily => 'brin/abstime_minmax_ops', amoplefttype => 'abstime',
+  amoprighttype => 'abstime', amopstrategy => '4',
+  amopopr => '>=(abstime,abstime)', amopmethod => 'brin' },
+{ amopfamily => 'brin/abstime_minmax_ops', amoplefttype => 'abstime',
+  amoprighttype => 'abstime', amopstrategy => '5',
+  amopopr => '>(abstime,abstime)', amopmethod => 'brin' },
+
+# minmax reltime
+{ amopfamily => 'brin/reltime_minmax_ops', amoplefttype => 'reltime',
+  amoprighttype => 'reltime', amopstrategy => '1',
+  amopopr => '<(reltime,reltime)', amopmethod => 'brin' },
+{ amopfamily => 'brin/reltime_minmax_ops', amoplefttype => 'reltime',
+  amoprighttype => 'reltime', amopstrategy => '2',
+  amopopr => '<=(reltime,reltime)', amopmethod => 'brin' },
+{ amopfamily => 'brin/reltime_minmax_ops', amoplefttype => 'reltime',
+  amoprighttype => 'reltime', amopstrategy => '3',
+  amopopr => '=(reltime,reltime)', amopmethod => 'brin' },
+{ amopfamily => 'brin/reltime_minmax_ops', amoplefttype => 'reltime',
+  amoprighttype => 'reltime', amopstrategy => '4',
+  amopopr => '>=(reltime,reltime)', amopmethod => 'brin' },
+{ amopfamily => 'brin/reltime_minmax_ops', amoplefttype => 'reltime',
+  amoprighttype => 'reltime', amopstrategy => '5',
+  amopopr => '>(reltime,reltime)', amopmethod => 'brin' },
+
+# minmax macaddr
+{ amopfamily => 'brin/macaddr_minmax_ops', amoplefttype => 'macaddr',
+  amoprighttype => 'macaddr', amopstrategy => '1',
+  amopopr => '<(macaddr,macaddr)', amopmethod => 'brin' },
+{ amopfamily => 'brin/macaddr_minmax_ops', amoplefttype => 'macaddr',
+  amoprighttype => 'macaddr', amopstrategy => '2',
+  amopopr => '<=(macaddr,macaddr)', amopmethod => 'brin' },
+{ amopfamily => 'brin/macaddr_minmax_ops', amoplefttype => 'macaddr',
+  amoprighttype => 'macaddr', amopstrategy => '3',
+  amopopr => '=(macaddr,macaddr)', amopmethod => 'brin' },
+{ amopfamily => 'brin/macaddr_minmax_ops', amoplefttype => 'macaddr',
+  amoprighttype => 'macaddr', amopstrategy => '4',
+  amopopr => '>=(macaddr,macaddr)', amopmethod => 'brin' },
+{ amopfamily => 'brin/macaddr_minmax_ops', amoplefttype => 'macaddr',
+  amoprighttype => 'macaddr', amopstrategy => '5',
+  amopopr => '>(macaddr,macaddr)', amopmethod => 'brin' },
+
+# minmax macaddr8
+{ amopfamily => 'brin/macaddr8_minmax_ops', amoplefttype => 'macaddr8',
+  amoprighttype => 'macaddr8', amopstrategy => '1',
+  amopopr => '<(macaddr8,macaddr8)', amopmethod => 'brin' },
+{ amopfamily => 'brin/macaddr8_minmax_ops', amoplefttype => 'macaddr8',
+  amoprighttype => 'macaddr8', amopstrategy => '2',
+  amopopr => '<=(macaddr8,macaddr8)', amopmethod => 'brin' },
+{ amopfamily => 'brin/macaddr8_minmax_ops', amoplefttype => 'macaddr8',
+  amoprighttype => 'macaddr8', amopstrategy => '3',
+  amopopr => '=(macaddr8,macaddr8)', amopmethod => 'brin' },
+{ amopfamily => 'brin/macaddr8_minmax_ops', amoplefttype => 'macaddr8',
+  amoprighttype => 'macaddr8', amopstrategy => '4',
+  amopopr => '>=(macaddr8,macaddr8)', amopmethod => 'brin' },
+{ amopfamily => 'brin/macaddr8_minmax_ops', amoplefttype => 'macaddr8',
+  amoprighttype => 'macaddr8', amopstrategy => '5',
+  amopopr => '>(macaddr8,macaddr8)', amopmethod => 'brin' },
+
+# minmax inet
+{ amopfamily => 'brin/network_minmax_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '1', amopopr => '<(inet,inet)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/network_minmax_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '2', amopopr => '<=(inet,inet)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/network_minmax_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '3', amopopr => '=(inet,inet)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/network_minmax_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '4', amopopr => '>=(inet,inet)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/network_minmax_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '5', amopopr => '>(inet,inet)',
+  amopmethod => 'brin' },
+
+# inclusion inet
+{ amopfamily => 'brin/network_inclusion_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '3', amopopr => '&&(inet,inet)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/network_inclusion_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '7', amopopr => '>>=(inet,inet)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/network_inclusion_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '8', amopopr => '<<=(inet,inet)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/network_inclusion_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '18', amopopr => '=(inet,inet)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/network_inclusion_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '24', amopopr => '>>(inet,inet)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/network_inclusion_ops', amoplefttype => 'inet',
+  amoprighttype => 'inet', amopstrategy => '26', amopopr => '<<(inet,inet)',
+  amopmethod => 'brin' },
+
+# minmax character
+{ amopfamily => 'brin/bpchar_minmax_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '1', amopopr => '<(bpchar,bpchar)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/bpchar_minmax_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '2',
+  amopopr => '<=(bpchar,bpchar)', amopmethod => 'brin' },
+{ amopfamily => 'brin/bpchar_minmax_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '3', amopopr => '=(bpchar,bpchar)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/bpchar_minmax_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '4',
+  amopopr => '>=(bpchar,bpchar)', amopmethod => 'brin' },
+{ amopfamily => 'brin/bpchar_minmax_ops', amoplefttype => 'bpchar',
+  amoprighttype => 'bpchar', amopstrategy => '5', amopopr => '>(bpchar,bpchar)',
+  amopmethod => 'brin' },
+
+# minmax time without time zone
+{ amopfamily => 'brin/time_minmax_ops', amoplefttype => 'time',
+  amoprighttype => 'time', amopstrategy => '1', amopopr => '<(time,time)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/time_minmax_ops', amoplefttype => 'time',
+  amoprighttype => 'time', amopstrategy => '2', amopopr => '<=(time,time)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/time_minmax_ops', amoplefttype => 'time',
+  amoprighttype => 'time', amopstrategy => '3', amopopr => '=(time,time)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/time_minmax_ops', amoplefttype => 'time',
+  amoprighttype => 'time', amopstrategy => '4', amopopr => '>=(time,time)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/time_minmax_ops', amoplefttype => 'time',
+  amoprighttype => 'time', amopstrategy => '5', amopopr => '>(time,time)',
+  amopmethod => 'brin' },
+
+# minmax datetime (date, timestamp, timestamptz)
+
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamp', amopstrategy => '1',
+  amopopr => '<(timestamp,timestamp)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamp', amopstrategy => '2',
+  amopopr => '<=(timestamp,timestamp)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamp', amopstrategy => '3',
+  amopopr => '=(timestamp,timestamp)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamp', amopstrategy => '4',
+  amopopr => '>=(timestamp,timestamp)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamp', amopstrategy => '5',
+  amopopr => '>(timestamp,timestamp)', amopmethod => 'brin' },
+
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'date', amopstrategy => '1', amopopr => '<(timestamp,date)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'date', amopstrategy => '2', amopopr => '<=(timestamp,date)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'date', amopstrategy => '3', amopopr => '=(timestamp,date)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'date', amopstrategy => '4', amopopr => '>=(timestamp,date)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'date', amopstrategy => '5', amopopr => '>(timestamp,date)',
+  amopmethod => 'brin' },
+
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamptz', amopstrategy => '1',
+  amopopr => '<(timestamp,timestamptz)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamptz', amopstrategy => '2',
+  amopopr => '<=(timestamp,timestamptz)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamptz', amopstrategy => '3',
+  amopopr => '=(timestamp,timestamptz)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamptz', amopstrategy => '4',
+  amopopr => '>=(timestamp,timestamptz)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamp',
+  amoprighttype => 'timestamptz', amopstrategy => '5',
+  amopopr => '>(timestamp,timestamptz)', amopmethod => 'brin' },
+
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'date',
+  amoprighttype => 'date', amopstrategy => '1', amopopr => '<(date,date)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'date',
+  amoprighttype => 'date', amopstrategy => '2', amopopr => '<=(date,date)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'date',
+  amoprighttype => 'date', amopstrategy => '3', amopopr => '=(date,date)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'date',
+  amoprighttype => 'date', amopstrategy => '4', amopopr => '>=(date,date)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'date',
+  amoprighttype => 'date', amopstrategy => '5', amopopr => '>(date,date)',
+  amopmethod => 'brin' },
+
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamp', amopstrategy => '1',
+  amopopr => '<(date,timestamp)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamp', amopstrategy => '2',
+  amopopr => '<=(date,timestamp)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamp', amopstrategy => '3',
+  amopopr => '=(date,timestamp)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamp', amopstrategy => '4',
+  amopopr => '>=(date,timestamp)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamp', amopstrategy => '5',
+  amopopr => '>(date,timestamp)', amopmethod => 'brin' },
+
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamptz', amopstrategy => '1',
+  amopopr => '<(date,timestamptz)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamptz', amopstrategy => '2',
+  amopopr => '<=(date,timestamptz)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamptz', amopstrategy => '3',
+  amopopr => '=(date,timestamptz)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamptz', amopstrategy => '4',
+  amopopr => '>=(date,timestamptz)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'date',
+  amoprighttype => 'timestamptz', amopstrategy => '5',
+  amopopr => '>(date,timestamptz)', amopmethod => 'brin' },
+
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'date', amopstrategy => '1',
+  amopopr => '<(timestamptz,date)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'date', amopstrategy => '2',
+  amopopr => '<=(timestamptz,date)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'date', amopstrategy => '3',
+  amopopr => '=(timestamptz,date)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'date', amopstrategy => '4',
+  amopopr => '>=(timestamptz,date)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'date', amopstrategy => '5',
+  amopopr => '>(timestamptz,date)', amopmethod => 'brin' },
+
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamp', amopstrategy => '1',
+  amopopr => '<(timestamptz,timestamp)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamp', amopstrategy => '2',
+  amopopr => '<=(timestamptz,timestamp)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamp', amopstrategy => '3',
+  amopopr => '=(timestamptz,timestamp)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamp', amopstrategy => '4',
+  amopopr => '>=(timestamptz,timestamp)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamp', amopstrategy => '5',
+  amopopr => '>(timestamptz,timestamp)', amopmethod => 'brin' },
+
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamptz', amopstrategy => '1',
+  amopopr => '<(timestamptz,timestamptz)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamptz', amopstrategy => '2',
+  amopopr => '<=(timestamptz,timestamptz)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamptz', amopstrategy => '3',
+  amopopr => '=(timestamptz,timestamptz)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamptz', amopstrategy => '4',
+  amopopr => '>=(timestamptz,timestamptz)', amopmethod => 'brin' },
+{ amopfamily => 'brin/datetime_minmax_ops', amoplefttype => 'timestamptz',
+  amoprighttype => 'timestamptz', amopstrategy => '5',
+  amopopr => '>(timestamptz,timestamptz)', amopmethod => 'brin' },
+
+# minmax interval
+{ amopfamily => 'brin/interval_minmax_ops', amoplefttype => 'interval',
+  amoprighttype => 'interval', amopstrategy => '1',
+  amopopr => '<(interval,interval)', amopmethod => 'brin' },
+{ amopfamily => 'brin/interval_minmax_ops', amoplefttype => 'interval',
+  amoprighttype => 'interval', amopstrategy => '2',
+  amopopr => '<=(interval,interval)', amopmethod => 'brin' },
+{ amopfamily => 'brin/interval_minmax_ops', amoplefttype => 'interval',
+  amoprighttype => 'interval', amopstrategy => '3',
+  amopopr => '=(interval,interval)', amopmethod => 'brin' },
+{ amopfamily => 'brin/interval_minmax_ops', amoplefttype => 'interval',
+  amoprighttype => 'interval', amopstrategy => '4',
+  amopopr => '>=(interval,interval)', amopmethod => 'brin' },
+{ amopfamily => 'brin/interval_minmax_ops', amoplefttype => 'interval',
+  amoprighttype => 'interval', amopstrategy => '5',
+  amopopr => '>(interval,interval)', amopmethod => 'brin' },
+
+# minmax time with time zone
+{ amopfamily => 'brin/timetz_minmax_ops', amoplefttype => 'timetz',
+  amoprighttype => 'timetz', amopstrategy => '1', amopopr => '<(timetz,timetz)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/timetz_minmax_ops', amoplefttype => 'timetz',
+  amoprighttype => 'timetz', amopstrategy => '2',
+  amopopr => '<=(timetz,timetz)', amopmethod => 'brin' },
+{ amopfamily => 'brin/timetz_minmax_ops', amoplefttype => 'timetz',
+  amoprighttype => 'timetz', amopstrategy => '3', amopopr => '=(timetz,timetz)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/timetz_minmax_ops', amoplefttype => 'timetz',
+  amoprighttype => 'timetz', amopstrategy => '4',
+  amopopr => '>=(timetz,timetz)', amopmethod => 'brin' },
+{ amopfamily => 'brin/timetz_minmax_ops', amoplefttype => 'timetz',
+  amoprighttype => 'timetz', amopstrategy => '5', amopopr => '>(timetz,timetz)',
+  amopmethod => 'brin' },
+
+# minmax bit
+{ amopfamily => 'brin/bit_minmax_ops', amoplefttype => 'bit',
+  amoprighttype => 'bit', amopstrategy => '1', amopopr => '<(bit,bit)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/bit_minmax_ops', amoplefttype => 'bit',
+  amoprighttype => 'bit', amopstrategy => '2', amopopr => '<=(bit,bit)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/bit_minmax_ops', amoplefttype => 'bit',
+  amoprighttype => 'bit', amopstrategy => '3', amopopr => '=(bit,bit)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/bit_minmax_ops', amoplefttype => 'bit',
+  amoprighttype => 'bit', amopstrategy => '4', amopopr => '>=(bit,bit)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/bit_minmax_ops', amoplefttype => 'bit',
+  amoprighttype => 'bit', amopstrategy => '5', amopopr => '>(bit,bit)',
+  amopmethod => 'brin' },
+
+# minmax bit varying
+{ amopfamily => 'brin/varbit_minmax_ops', amoplefttype => 'varbit',
+  amoprighttype => 'varbit', amopstrategy => '1', amopopr => '<(varbit,varbit)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/varbit_minmax_ops', amoplefttype => 'varbit',
+  amoprighttype => 'varbit', amopstrategy => '2',
+  amopopr => '<=(varbit,varbit)', amopmethod => 'brin' },
+{ amopfamily => 'brin/varbit_minmax_ops', amoplefttype => 'varbit',
+  amoprighttype => 'varbit', amopstrategy => '3', amopopr => '=(varbit,varbit)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/varbit_minmax_ops', amoplefttype => 'varbit',
+  amoprighttype => 'varbit', amopstrategy => '4',
+  amopopr => '>=(varbit,varbit)', amopmethod => 'brin' },
+{ amopfamily => 'brin/varbit_minmax_ops', amoplefttype => 'varbit',
+  amoprighttype => 'varbit', amopstrategy => '5', amopopr => '>(varbit,varbit)',
+  amopmethod => 'brin' },
+
+# minmax numeric
+{ amopfamily => 'brin/numeric_minmax_ops', amoplefttype => 'numeric',
+  amoprighttype => 'numeric', amopstrategy => '1',
+  amopopr => '<(numeric,numeric)', amopmethod => 'brin' },
+{ amopfamily => 'brin/numeric_minmax_ops', amoplefttype => 'numeric',
+  amoprighttype => 'numeric', amopstrategy => '2',
+  amopopr => '<=(numeric,numeric)', amopmethod => 'brin' },
+{ amopfamily => 'brin/numeric_minmax_ops', amoplefttype => 'numeric',
+  amoprighttype => 'numeric', amopstrategy => '3',
+  amopopr => '=(numeric,numeric)', amopmethod => 'brin' },
+{ amopfamily => 'brin/numeric_minmax_ops', amoplefttype => 'numeric',
+  amoprighttype => 'numeric', amopstrategy => '4',
+  amopopr => '>=(numeric,numeric)', amopmethod => 'brin' },
+{ amopfamily => 'brin/numeric_minmax_ops', amoplefttype => 'numeric',
+  amoprighttype => 'numeric', amopstrategy => '5',
+  amopopr => '>(numeric,numeric)', amopmethod => 'brin' },
+
+# minmax uuid
+{ amopfamily => 'brin/uuid_minmax_ops', amoplefttype => 'uuid',
+  amoprighttype => 'uuid', amopstrategy => '1', amopopr => '<(uuid,uuid)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/uuid_minmax_ops', amoplefttype => 'uuid',
+  amoprighttype => 'uuid', amopstrategy => '2', amopopr => '<=(uuid,uuid)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/uuid_minmax_ops', amoplefttype => 'uuid',
+  amoprighttype => 'uuid', amopstrategy => '3', amopopr => '=(uuid,uuid)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/uuid_minmax_ops', amoplefttype => 'uuid',
+  amoprighttype => 'uuid', amopstrategy => '4', amopopr => '>=(uuid,uuid)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/uuid_minmax_ops', amoplefttype => 'uuid',
+  amoprighttype => 'uuid', amopstrategy => '5', amopopr => '>(uuid,uuid)',
+  amopmethod => 'brin' },
+
+# inclusion range types
+{ amopfamily => 'brin/range_inclusion_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '1',
+  amopopr => '<<(anyrange,anyrange)', amopmethod => 'brin' },
+{ amopfamily => 'brin/range_inclusion_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '2',
+  amopopr => '&<(anyrange,anyrange)', amopmethod => 'brin' },
+{ amopfamily => 'brin/range_inclusion_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '3',
+  amopopr => '&&(anyrange,anyrange)', amopmethod => 'brin' },
+{ amopfamily => 'brin/range_inclusion_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '4',
+  amopopr => '&>(anyrange,anyrange)', amopmethod => 'brin' },
+{ amopfamily => 'brin/range_inclusion_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '5',
+  amopopr => '>>(anyrange,anyrange)', amopmethod => 'brin' },
+{ amopfamily => 'brin/range_inclusion_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '7',
+  amopopr => '@>(anyrange,anyrange)', amopmethod => 'brin' },
+{ amopfamily => 'brin/range_inclusion_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '8',
+  amopopr => '<@(anyrange,anyrange)', amopmethod => 'brin' },
+{ amopfamily => 'brin/range_inclusion_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyelement', amopstrategy => '16',
+  amopopr => '@>(anyrange,anyelement)', amopmethod => 'brin' },
+{ amopfamily => 'brin/range_inclusion_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '17',
+  amopopr => '-|-(anyrange,anyrange)', amopmethod => 'brin' },
+{ amopfamily => 'brin/range_inclusion_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '18',
+  amopopr => '=(anyrange,anyrange)', amopmethod => 'brin' },
+{ amopfamily => 'brin/range_inclusion_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '20',
+  amopopr => '<(anyrange,anyrange)', amopmethod => 'brin' },
+{ amopfamily => 'brin/range_inclusion_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '21',
+  amopopr => '<=(anyrange,anyrange)', amopmethod => 'brin' },
+{ amopfamily => 'brin/range_inclusion_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '22',
+  amopopr => '>(anyrange,anyrange)', amopmethod => 'brin' },
+{ amopfamily => 'brin/range_inclusion_ops', amoplefttype => 'anyrange',
+  amoprighttype => 'anyrange', amopstrategy => '23',
+  amopopr => '>=(anyrange,anyrange)', amopmethod => 'brin' },
+
+# minmax pg_lsn
+{ amopfamily => 'brin/pg_lsn_minmax_ops', amoplefttype => 'pg_lsn',
+  amoprighttype => 'pg_lsn', amopstrategy => '1', amopopr => '<(pg_lsn,pg_lsn)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/pg_lsn_minmax_ops', amoplefttype => 'pg_lsn',
+  amoprighttype => 'pg_lsn', amopstrategy => '2',
+  amopopr => '<=(pg_lsn,pg_lsn)', amopmethod => 'brin' },
+{ amopfamily => 'brin/pg_lsn_minmax_ops', amoplefttype => 'pg_lsn',
+  amoprighttype => 'pg_lsn', amopstrategy => '3', amopopr => '=(pg_lsn,pg_lsn)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/pg_lsn_minmax_ops', amoplefttype => 'pg_lsn',
+  amoprighttype => 'pg_lsn', amopstrategy => '4',
+  amopopr => '>=(pg_lsn,pg_lsn)', amopmethod => 'brin' },
+{ amopfamily => 'brin/pg_lsn_minmax_ops', amoplefttype => 'pg_lsn',
+  amoprighttype => 'pg_lsn', amopstrategy => '5', amopopr => '>(pg_lsn,pg_lsn)',
+  amopmethod => 'brin' },
+
+# inclusion box
+{ amopfamily => 'brin/box_inclusion_ops', amoplefttype => 'box',
+  amoprighttype => 'box', amopstrategy => '1', amopopr => '<<(box,box)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/box_inclusion_ops', amoplefttype => 'box',
+  amoprighttype => 'box', amopstrategy => '2', amopopr => '&<(box,box)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/box_inclusion_ops', amoplefttype => 'box',
+  amoprighttype => 'box', amopstrategy => '3', amopopr => '&&(box,box)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/box_inclusion_ops', amoplefttype => 'box',
+  amoprighttype => 'box', amopstrategy => '4', amopopr => '&>(box,box)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/box_inclusion_ops', amoplefttype => 'box',
+  amoprighttype => 'box', amopstrategy => '5', amopopr => '>>(box,box)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/box_inclusion_ops', amoplefttype => 'box',
+  amoprighttype => 'box', amopstrategy => '6', amopopr => '~=(box,box)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/box_inclusion_ops', amoplefttype => 'box',
+  amoprighttype => 'box', amopstrategy => '7', amopopr => '@>(box,box)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/box_inclusion_ops', amoplefttype => 'box',
+  amoprighttype => 'box', amopstrategy => '8', amopopr => '<@(box,box)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/box_inclusion_ops', amoplefttype => 'box',
+  amoprighttype => 'box', amopstrategy => '9', amopopr => '&<|(box,box)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/box_inclusion_ops', amoplefttype => 'box',
+  amoprighttype => 'box', amopstrategy => '10', amopopr => '<<|(box,box)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/box_inclusion_ops', amoplefttype => 'box',
+  amoprighttype => 'box', amopstrategy => '11', amopopr => '|>>(box,box)',
+  amopmethod => 'brin' },
+{ amopfamily => 'brin/box_inclusion_ops', amoplefttype => 'box',
+  amoprighttype => 'box', amopstrategy => '12', amopopr => '|&>(box,box)',
+  amopmethod => 'brin' },
+
+# we could, but choose not to, supply entries for strategies 13 and 14
+
+{ amopfamily => 'brin/box_inclusion_ops', amoplefttype => 'box',
+  amoprighttype => 'point', amopstrategy => '7', amopopr => '@>(box,point)',
+  amopmethod => 'brin' },
+
+]
index 00e77d4c61e5bd60e51d9a884e2c6050023e3a81..4be325221f02e3da9b4478e2641f482fde8be272 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_amop.h
  *       definition of the system "amop" relation (pg_amop)
- *       along with the relation's initial contents.
  *
  * The amop table identifies the operators associated with each index operator
  * family and operator class (classes are subsets of families).  An associated
@@ -36,8 +35,8 @@
  * src/include/catalog/pg_amop.h
  *
  * NOTES
- *      the genbki.pl script reads this file and generates .bki
- *      information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_AMOP_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_amop_d.h"
 
 /* ----------------
  *             pg_amop definition.  cpp turns this into
  *             typedef struct FormData_pg_amop
  * ----------------
  */
-#define AccessMethodOperatorRelationId 2602
-
-CATALOG(pg_amop,2602)
+CATALOG(pg_amop,2602,AccessMethodOperatorRelationId)
 {
-       Oid                     amopfamily;             /* the index opfamily this entry is for */
-       Oid                     amoplefttype;   /* operator's left input data type */
-       Oid                     amoprighttype;  /* operator's right input data type */
-       int16           amopstrategy;   /* operator strategy number */
-       char            amoppurpose;    /* is operator for 's'earch or 'o'rdering? */
-       Oid                     amopopr;                /* the operator's pg_operator OID */
-       Oid                     amopmethod;             /* the index access method this entry is for */
-       Oid                     amopsortfamily; /* ordering opfamily OID, or 0 if search op */
-} FormData_pg_amop;
-
-/* allowed values of amoppurpose: */
-#define AMOP_SEARCH            's'             /* operator is for search */
-#define AMOP_ORDER             'o'             /* operator is for ordering */
-
-/* ----------------
- *             Form_pg_amop corresponds to a pointer to a tuple with
- *             the format of pg_amop relation.
- * ----------------
- */
-typedef FormData_pg_amop *Form_pg_amop;
-
-/* ----------------
- *             compiler constants for pg_amop
- * ----------------
- */
-#define Natts_pg_amop                                  8
-#define Anum_pg_amop_amopfamily                        1
-#define Anum_pg_amop_amoplefttype              2
-#define Anum_pg_amop_amoprighttype             3
-#define Anum_pg_amop_amopstrategy              4
-#define Anum_pg_amop_amoppurpose               5
-#define Anum_pg_amop_amopopr                   6
-#define Anum_pg_amop_amopmethod                        7
-#define Anum_pg_amop_amopsortfamily            8
-
-/* ----------------
- *             initial contents of pg_amop
- * ----------------
- */
-
-/*
- *     btree integer_ops
- */
-
-/* default operators int2 */
-DATA(insert (  1976   21 21 1 s        95      403 0 ));
-DATA(insert (  1976   21 21 2 s        522 403 0 ));
-DATA(insert (  1976   21 21 3 s        94      403 0 ));
-DATA(insert (  1976   21 21 4 s        524 403 0 ));
-DATA(insert (  1976   21 21 5 s        520 403 0 ));
-/* crosstype operators int24 */
-DATA(insert (  1976   21 23 1 s        534 403 0 ));
-DATA(insert (  1976   21 23 2 s        540 403 0 ));
-DATA(insert (  1976   21 23 3 s        532 403 0 ));
-DATA(insert (  1976   21 23 4 s        542 403 0 ));
-DATA(insert (  1976   21 23 5 s        536 403 0 ));
-/* crosstype operators int28 */
-DATA(insert (  1976   21 20 1 s        1864    403 0 ));
-DATA(insert (  1976   21 20 2 s        1866    403 0 ));
-DATA(insert (  1976   21 20 3 s        1862    403 0 ));
-DATA(insert (  1976   21 20 4 s        1867    403 0 ));
-DATA(insert (  1976   21 20 5 s        1865    403 0 ));
-/* default operators int4 */
-DATA(insert (  1976   23 23 1 s        97      403 0 ));
-DATA(insert (  1976   23 23 2 s        523 403 0 ));
-DATA(insert (  1976   23 23 3 s        96      403 0 ));
-DATA(insert (  1976   23 23 4 s        525 403 0 ));
-DATA(insert (  1976   23 23 5 s        521 403 0 ));
-/* crosstype operators int42 */
-DATA(insert (  1976   23 21 1 s        535 403 0 ));
-DATA(insert (  1976   23 21 2 s        541 403 0 ));
-DATA(insert (  1976   23 21 3 s        533 403 0 ));
-DATA(insert (  1976   23 21 4 s        543 403 0 ));
-DATA(insert (  1976   23 21 5 s        537 403 0 ));
-/* crosstype operators int48 */
-DATA(insert (  1976   23 20 1 s        37      403 0 ));
-DATA(insert (  1976   23 20 2 s        80      403 0 ));
-DATA(insert (  1976   23 20 3 s        15      403 0 ));
-DATA(insert (  1976   23 20 4 s        82      403 0 ));
-DATA(insert (  1976   23 20 5 s        76      403 0 ));
-/* default operators int8 */
-DATA(insert (  1976   20 20 1 s        412 403 0 ));
-DATA(insert (  1976   20 20 2 s        414 403 0 ));
-DATA(insert (  1976   20 20 3 s        410 403 0 ));
-DATA(insert (  1976   20 20 4 s        415 403 0 ));
-DATA(insert (  1976   20 20 5 s        413 403 0 ));
-/* crosstype operators int82 */
-DATA(insert (  1976   20 21 1 s        1870    403 0 ));
-DATA(insert (  1976   20 21 2 s        1872    403 0 ));
-DATA(insert (  1976   20 21 3 s        1868    403 0 ));
-DATA(insert (  1976   20 21 4 s        1873    403 0 ));
-DATA(insert (  1976   20 21 5 s        1871    403 0 ));
-/* crosstype operators int84 */
-DATA(insert (  1976   20 23 1 s        418 403 0 ));
-DATA(insert (  1976   20 23 2 s        420 403 0 ));
-DATA(insert (  1976   20 23 3 s        416 403 0 ));
-DATA(insert (  1976   20 23 4 s        430 403 0 ));
-DATA(insert (  1976   20 23 5 s        419 403 0 ));
-
-/*
- *     btree oid_ops
- */
-
-DATA(insert (  1989   26 26 1 s        609 403 0 ));
-DATA(insert (  1989   26 26 2 s        611 403 0 ));
-DATA(insert (  1989   26 26 3 s        607 403 0 ));
-DATA(insert (  1989   26 26 4 s        612 403 0 ));
-DATA(insert (  1989   26 26 5 s        610 403 0 ));
-
-/*
- * btree tid_ops
- */
-
-DATA(insert (  2789   27 27 1 s 2799 403 0 ));
-DATA(insert (  2789   27 27 2 s 2801 403 0 ));
-DATA(insert (  2789   27 27 3 s 387  403 0 ));
-DATA(insert (  2789   27 27 4 s 2802 403 0 ));
-DATA(insert (  2789   27 27 5 s 2800 403 0 ));
-
-/*
- *     btree oidvector_ops
- */
-
-DATA(insert (  1991   30 30 1 s        645 403 0 ));
-DATA(insert (  1991   30 30 2 s        647 403 0 ));
-DATA(insert (  1991   30 30 3 s        649 403 0 ));
-DATA(insert (  1991   30 30 4 s        648 403 0 ));
-DATA(insert (  1991   30 30 5 s        646 403 0 ));
-
-/*
- *     btree float_ops
- */
-
-/* default operators float4 */
-DATA(insert (  1970   700 700 1 s      622 403 0 ));
-DATA(insert (  1970   700 700 2 s      624 403 0 ));
-DATA(insert (  1970   700 700 3 s      620 403 0 ));
-DATA(insert (  1970   700 700 4 s      625 403 0 ));
-DATA(insert (  1970   700 700 5 s      623 403 0 ));
-/* crosstype operators float48 */
-DATA(insert (  1970   700 701 1 s      1122 403 0 ));
-DATA(insert (  1970   700 701 2 s      1124 403 0 ));
-DATA(insert (  1970   700 701 3 s      1120 403 0 ));
-DATA(insert (  1970   700 701 4 s      1125 403 0 ));
-DATA(insert (  1970   700 701 5 s      1123 403 0 ));
-/* default operators float8 */
-DATA(insert (  1970   701 701 1 s      672 403 0 ));
-DATA(insert (  1970   701 701 2 s      673 403 0 ));
-DATA(insert (  1970   701 701 3 s      670 403 0 ));
-DATA(insert (  1970   701 701 4 s      675 403 0 ));
-DATA(insert (  1970   701 701 5 s      674 403 0 ));
-/* crosstype operators float84 */
-DATA(insert (  1970   701 700 1 s      1132 403 0 ));
-DATA(insert (  1970   701 700 2 s      1134 403 0 ));
-DATA(insert (  1970   701 700 3 s      1130 403 0 ));
-DATA(insert (  1970   701 700 4 s      1135 403 0 ));
-DATA(insert (  1970   701 700 5 s      1133 403 0 ));
-
-/*
- *     btree char_ops
- */
-
-DATA(insert (  429   18 18 1 s  631    403 0 ));
-DATA(insert (  429   18 18 2 s  632    403 0 ));
-DATA(insert (  429   18 18 3 s   92    403 0 ));
-DATA(insert (  429   18 18 4 s  634    403 0 ));
-DATA(insert (  429   18 18 5 s  633    403 0 ));
-
-/*
- *     btree name_ops
- */
-
-DATA(insert (  1986   19 19 1 s        660 403 0 ));
-DATA(insert (  1986   19 19 2 s        661 403 0 ));
-DATA(insert (  1986   19 19 3 s        93      403 0 ));
-DATA(insert (  1986   19 19 4 s        663 403 0 ));
-DATA(insert (  1986   19 19 5 s        662 403 0 ));
-
-/*
- *     btree text_ops
- */
-
-DATA(insert (  1994   25 25 1 s        664 403 0 ));
-DATA(insert (  1994   25 25 2 s        665 403 0 ));
-DATA(insert (  1994   25 25 3 s        98      403 0 ));
-DATA(insert (  1994   25 25 4 s        667 403 0 ));
-DATA(insert (  1994   25 25 5 s        666 403 0 ));
-
-/*
- *     btree bpchar_ops
- */
-
-DATA(insert (  426   1042 1042 1 s 1058        403 0 ));
-DATA(insert (  426   1042 1042 2 s 1059        403 0 ));
-DATA(insert (  426   1042 1042 3 s 1054        403 0 ));
-DATA(insert (  426   1042 1042 4 s 1061        403 0 ));
-DATA(insert (  426   1042 1042 5 s 1060        403 0 ));
-
-/*
- *     btree bytea_ops
- */
-
-DATA(insert (  428   17 17 1 s 1957    403 0 ));
-DATA(insert (  428   17 17 2 s 1958    403 0 ));
-DATA(insert (  428   17 17 3 s 1955    403 0 ));
-DATA(insert (  428   17 17 4 s 1960    403 0 ));
-DATA(insert (  428   17 17 5 s 1959    403 0 ));
-
-/*
- *     btree abstime_ops
- */
-
-DATA(insert (  421   702 702 1 s  562  403 0 ));
-DATA(insert (  421   702 702 2 s  564  403 0 ));
-DATA(insert (  421   702 702 3 s  560  403 0 ));
-DATA(insert (  421   702 702 4 s  565  403 0 ));
-DATA(insert (  421   702 702 5 s  563  403 0 ));
-
-/*
- *     btree datetime_ops
- */
-
-/* default operators date */
-DATA(insert (  434   1082 1082 1 s 1095        403 0 ));
-DATA(insert (  434   1082 1082 2 s 1096        403 0 ));
-DATA(insert (  434   1082 1082 3 s 1093        403 0 ));
-DATA(insert (  434   1082 1082 4 s 1098        403 0 ));
-DATA(insert (  434   1082 1082 5 s 1097        403 0 ));
-/* crosstype operators vs timestamp */
-DATA(insert (  434   1082 1114 1 s 2345        403 0 ));
-DATA(insert (  434   1082 1114 2 s 2346        403 0 ));
-DATA(insert (  434   1082 1114 3 s 2347        403 0 ));
-DATA(insert (  434   1082 1114 4 s 2348        403 0 ));
-DATA(insert (  434   1082 1114 5 s 2349        403 0 ));
-/* crosstype operators vs timestamptz */
-DATA(insert (  434   1082 1184 1 s 2358        403 0 ));
-DATA(insert (  434   1082 1184 2 s 2359        403 0 ));
-DATA(insert (  434   1082 1184 3 s 2360        403 0 ));
-DATA(insert (  434   1082 1184 4 s 2361        403 0 ));
-DATA(insert (  434   1082 1184 5 s 2362        403 0 ));
-/* default operators timestamp */
-DATA(insert (  434   1114 1114 1 s 2062        403 0 ));
-DATA(insert (  434   1114 1114 2 s 2063        403 0 ));
-DATA(insert (  434   1114 1114 3 s 2060        403 0 ));
-DATA(insert (  434   1114 1114 4 s 2065        403 0 ));
-DATA(insert (  434   1114 1114 5 s 2064        403 0 ));
-/* crosstype operators vs date */
-DATA(insert (  434   1114 1082 1 s 2371        403 0 ));
-DATA(insert (  434   1114 1082 2 s 2372        403 0 ));
-DATA(insert (  434   1114 1082 3 s 2373        403 0 ));
-DATA(insert (  434   1114 1082 4 s 2374        403 0 ));
-DATA(insert (  434   1114 1082 5 s 2375        403 0 ));
-/* crosstype operators vs timestamptz */
-DATA(insert (  434   1114 1184 1 s 2534        403 0 ));
-DATA(insert (  434   1114 1184 2 s 2535        403 0 ));
-DATA(insert (  434   1114 1184 3 s 2536        403 0 ));
-DATA(insert (  434   1114 1184 4 s 2537        403 0 ));
-DATA(insert (  434   1114 1184 5 s 2538        403 0 ));
-/* default operators timestamptz */
-DATA(insert (  434   1184 1184 1 s 1322        403 0 ));
-DATA(insert (  434   1184 1184 2 s 1323        403 0 ));
-DATA(insert (  434   1184 1184 3 s 1320        403 0 ));
-DATA(insert (  434   1184 1184 4 s 1325        403 0 ));
-DATA(insert (  434   1184 1184 5 s 1324        403 0 ));
-/* crosstype operators vs date */
-DATA(insert (  434   1184 1082 1 s 2384        403 0 ));
-DATA(insert (  434   1184 1082 2 s 2385        403 0 ));
-DATA(insert (  434   1184 1082 3 s 2386        403 0 ));
-DATA(insert (  434   1184 1082 4 s 2387        403 0 ));
-DATA(insert (  434   1184 1082 5 s 2388        403 0 ));
-/* crosstype operators vs timestamp */
-DATA(insert (  434   1184 1114 1 s 2540        403 0 ));
-DATA(insert (  434   1184 1114 2 s 2541        403 0 ));
-DATA(insert (  434   1184 1114 3 s 2542        403 0 ));
-DATA(insert (  434   1184 1114 4 s 2543        403 0 ));
-DATA(insert (  434   1184 1114 5 s 2544        403 0 ));
-
-/*
- *     btree time_ops
- */
-
-DATA(insert (  1996   1083 1083 1 s 1110 403 0 ));
-DATA(insert (  1996   1083 1083 2 s 1111 403 0 ));
-DATA(insert (  1996   1083 1083 3 s 1108 403 0 ));
-DATA(insert (  1996   1083 1083 4 s 1113 403 0 ));
-DATA(insert (  1996   1083 1083 5 s 1112 403 0 ));
-
-/*
- *     btree timetz_ops
- */
-
-DATA(insert (  2000   1266 1266 1 s 1552 403 0 ));
-DATA(insert (  2000   1266 1266 2 s 1553 403 0 ));
-DATA(insert (  2000   1266 1266 3 s 1550 403 0 ));
-DATA(insert (  2000   1266 1266 4 s 1555 403 0 ));
-DATA(insert (  2000   1266 1266 5 s 1554 403 0 ));
-
-/*
- *     btree interval_ops
- */
-
-DATA(insert (  1982   1186 1186 1 s 1332 403 0 ));
-DATA(insert (  1982   1186 1186 2 s 1333 403 0 ));
-DATA(insert (  1982   1186 1186 3 s 1330 403 0 ));
-DATA(insert (  1982   1186 1186 4 s 1335 403 0 ));
-DATA(insert (  1982   1186 1186 5 s 1334 403 0 ));
-
-/*
- *     btree macaddr
- */
-
-DATA(insert (  1984   829 829 1 s 1222 403 0 ));
-DATA(insert (  1984   829 829 2 s 1223 403 0 ));
-DATA(insert (  1984   829 829 3 s 1220 403 0 ));
-DATA(insert (  1984   829 829 4 s 1225 403 0 ));
-DATA(insert (  1984   829 829 5 s 1224 403 0 ));
-
-/*
- *     btree macaddr8
- */
-
-DATA(insert (  3371   774 774 1 s 3364 403 0 ));
-DATA(insert (  3371   774 774 2 s 3365 403 0 ));
-DATA(insert (  3371   774 774 3 s 3362 403 0 ));
-DATA(insert (  3371   774 774 4 s 3367 403 0 ));
-DATA(insert (  3371   774 774 5 s 3366 403 0 ));
-
-/*
- *     btree network
- */
-
-DATA(insert (  1974   869 869 1 s 1203 403 0 ));
-DATA(insert (  1974   869 869 2 s 1204 403 0 ));
-DATA(insert (  1974   869 869 3 s 1201 403 0 ));
-DATA(insert (  1974   869 869 4 s 1206 403 0 ));
-DATA(insert (  1974   869 869 5 s 1205 403 0 ));
-
-/*
- *     btree numeric
- */
-
-DATA(insert (  1988   1700 1700 1 s 1754 403 0 ));
-DATA(insert (  1988   1700 1700 2 s 1755 403 0 ));
-DATA(insert (  1988   1700 1700 3 s 1752 403 0 ));
-DATA(insert (  1988   1700 1700 4 s 1757 403 0 ));
-DATA(insert (  1988   1700 1700 5 s 1756 403 0 ));
-
-/*
- *     btree bool
- */
-
-DATA(insert (  424   16 16 1 s 58              403 0 ));
-DATA(insert (  424   16 16 2 s 1694    403 0 ));
-DATA(insert (  424   16 16 3 s 91              403 0 ));
-DATA(insert (  424   16 16 4 s 1695    403 0 ));
-DATA(insert (  424   16 16 5 s 59              403 0 ));
-
-/*
- *     btree bit
- */
-
-DATA(insert (  423   1560 1560 1 s 1786        403 0 ));
-DATA(insert (  423   1560 1560 2 s 1788        403 0 ));
-DATA(insert (  423   1560 1560 3 s 1784        403 0 ));
-DATA(insert (  423   1560 1560 4 s 1789        403 0 ));
-DATA(insert (  423   1560 1560 5 s 1787        403 0 ));
-
-/*
- *     btree varbit
- */
-
-DATA(insert (  2002   1562 1562 1 s 1806 403 0 ));
-DATA(insert (  2002   1562 1562 2 s 1808 403 0 ));
-DATA(insert (  2002   1562 1562 3 s 1804 403 0 ));
-DATA(insert (  2002   1562 1562 4 s 1809 403 0 ));
-DATA(insert (  2002   1562 1562 5 s 1807 403 0 ));
-
-/*
- *     btree text pattern
- */
-
-DATA(insert (  2095   25 25 1 s 2314 403 0 ));
-DATA(insert (  2095   25 25 2 s 2315 403 0 ));
-DATA(insert (  2095   25 25 3 s 98   403 0 ));
-DATA(insert (  2095   25 25 4 s 2317 403 0 ));
-DATA(insert (  2095   25 25 5 s 2318 403 0 ));
+       /* the index opfamily this entry is for */
+       Oid                     amopfamily BKI_LOOKUP(pg_opfamily);
 
-/*
- *     btree bpchar pattern
- */
-
-DATA(insert (  2097   1042 1042 1 s 2326 403 0 ));
-DATA(insert (  2097   1042 1042 2 s 2327 403 0 ));
-DATA(insert (  2097   1042 1042 3 s 1054 403 0 ));
-DATA(insert (  2097   1042 1042 4 s 2329 403 0 ));
-DATA(insert (  2097   1042 1042 5 s 2330 403 0 ));
-
-/*
- *     btree money_ops
- */
-
-DATA(insert (  2099   790 790 1 s      902 403 0 ));
-DATA(insert (  2099   790 790 2 s      904 403 0 ));
-DATA(insert (  2099   790 790 3 s      900 403 0 ));
-DATA(insert (  2099   790 790 4 s      905 403 0 ));
-DATA(insert (  2099   790 790 5 s      903 403 0 ));
-
-/*
- *     btree reltime_ops
- */
-
-DATA(insert (  2233   703 703 1 s      568 403 0 ));
-DATA(insert (  2233   703 703 2 s      570 403 0 ));
-DATA(insert (  2233   703 703 3 s      566 403 0 ));
-DATA(insert (  2233   703 703 4 s      571 403 0 ));
-DATA(insert (  2233   703 703 5 s      569 403 0 ));
-
-/*
- *     btree tinterval_ops
- */
-
-DATA(insert (  2234   704 704 1 s      813 403 0 ));
-DATA(insert (  2234   704 704 2 s      815 403 0 ));
-DATA(insert (  2234   704 704 3 s      811 403 0 ));
-DATA(insert (  2234   704 704 4 s      816 403 0 ));
-DATA(insert (  2234   704 704 5 s      814 403 0 ));
-
-/*
- *     btree array_ops
- */
-
-DATA(insert (  397   2277 2277 1 s 1072        403 0 ));
-DATA(insert (  397   2277 2277 2 s 1074        403 0 ));
-DATA(insert (  397   2277 2277 3 s 1070        403 0 ));
-DATA(insert (  397   2277 2277 4 s 1075        403 0 ));
-DATA(insert (  397   2277 2277 5 s 1073        403 0 ));
-
-/*
- *     btree record_ops
- */
-
-DATA(insert (  2994  2249 2249 1 s 2990        403 0 ));
-DATA(insert (  2994  2249 2249 2 s 2992        403 0 ));
-DATA(insert (  2994  2249 2249 3 s 2988        403 0 ));
-DATA(insert (  2994  2249 2249 4 s 2993        403 0 ));
-DATA(insert (  2994  2249 2249 5 s 2991        403 0 ));
-
-/*
- *     btree record_image_ops
- */
-
-DATA(insert (  3194  2249 2249 1 s 3190        403 0 ));
-DATA(insert (  3194  2249 2249 2 s 3192        403 0 ));
-DATA(insert (  3194  2249 2249 3 s 3188        403 0 ));
-DATA(insert (  3194  2249 2249 4 s 3193        403 0 ));
-DATA(insert (  3194  2249 2249 5 s 3191        403 0 ));
-
-/*
- * btree uuid_ops
- */
-
-DATA(insert (  2968  2950 2950 1 s 2974        403 0 ));
-DATA(insert (  2968  2950 2950 2 s 2976        403 0 ));
-DATA(insert (  2968  2950 2950 3 s 2972        403 0 ));
-DATA(insert (  2968  2950 2950 4 s 2977        403 0 ));
-DATA(insert (  2968  2950 2950 5 s 2975        403 0 ));
-
-/*
- * btree pg_lsn_ops
- */
-
-DATA(insert (  3253  3220 3220 1 s 3224        403 0 ));
-DATA(insert (  3253  3220 3220 2 s 3226        403 0 ));
-DATA(insert (  3253  3220 3220 3 s 3222        403 0 ));
-DATA(insert (  3253  3220 3220 4 s 3227        403 0 ));
-DATA(insert (  3253  3220 3220 5 s 3225        403 0 ));
-
-/*
- *     hash index _ops
- */
-
-/* bpchar_ops */
-DATA(insert (  427   1042 1042 1 s 1054        405 0 ));
-/* char_ops */
-DATA(insert (  431   18 18 1 s 92      405 0 ));
-/* date_ops */
-DATA(insert (  435   1082 1082 1 s 1093        405 0 ));
-/* float_ops */
-DATA(insert (  1971   700 700 1 s      620 405 0 ));
-DATA(insert (  1971   701 701 1 s      670 405 0 ));
-DATA(insert (  1971   700 701 1 s 1120 405 0 ));
-DATA(insert (  1971   701 700 1 s 1130 405 0 ));
-/* network_ops */
-DATA(insert (  1975   869 869 1 s 1201 405 0 ));
-/* integer_ops */
-DATA(insert (  1977   21 21 1 s        94       405 0 ));
-DATA(insert (  1977   23 23 1 s        96       405 0 ));
-DATA(insert (  1977   20 20 1 s        410  405 0 ));
-DATA(insert (  1977   21 23 1 s        532  405 0 ));
-DATA(insert (  1977   21 20 1 s        1862 405 0 ));
-DATA(insert (  1977   23 21 1 s        533  405 0 ));
-DATA(insert (  1977   23 20 1 s        15       405 0 ));
-DATA(insert (  1977   20 21 1 s        1868 405 0 ));
-DATA(insert (  1977   20 23 1 s        416  405 0 ));
-/* interval_ops */
-DATA(insert (  1983   1186 1186 1 s 1330 405 0 ));
-/* macaddr_ops */
-DATA(insert (  1985   829 829 1 s 1220 405 0 ));
-/* macaddr8_ops */
-DATA(insert (  3372   774 774 1 s 3362 405 0 ));
-/* name_ops */
-DATA(insert (  1987   19 19 1 s        93      405 0 ));
-/* oid_ops */
-DATA(insert (  1990   26 26 1 s        607 405 0 ));
-/* oidvector_ops */
-DATA(insert (  1992   30 30 1 s        649 405 0 ));
-/* text_ops */
-DATA(insert (  1995   25 25 1 s        98      405 0 ));
-/* time_ops */
-DATA(insert (  1997   1083 1083 1 s 1108 405 0 ));
-/* timestamptz_ops */
-DATA(insert (  1999   1184 1184 1 s 1320 405 0 ));
-/* timetz_ops */
-DATA(insert (  2001   1266 1266 1 s 1550 405 0 ));
-/* timestamp_ops */
-DATA(insert (  2040   1114 1114 1 s 2060 405 0 ));
-/* bool_ops */
-DATA(insert (  2222   16 16 1 s   91 405 0 ));
-/* bytea_ops */
-DATA(insert (  2223   17 17 1 s 1955 405 0 ));
-/* xid_ops */
-DATA(insert (  2225   28 28 1 s        352 405 0 ));
-/* cid_ops */
-DATA(insert (  2226   29 29 1 s        385 405 0 ));
-/* abstime_ops */
-DATA(insert (  2227   702 702 1 s      560 405 0 ));
-/* reltime_ops */
-DATA(insert (  2228   703 703 1 s      566 405 0 ));
-/* text_pattern_ops */
-DATA(insert (  2229   25 25 1 s        98      405 0 ));
-/* bpchar_pattern_ops */
-DATA(insert (  2231   1042 1042 1 s 1054 405 0 ));
-/* aclitem_ops */
-DATA(insert (  2235   1033 1033 1 s  974 405 0 ));
-/* uuid_ops */
-DATA(insert (  2969   2950 2950 1 s 2972 405 0 ));
-/* pg_lsn_ops */
-DATA(insert (  3254   3220 3220 1 s 3222 405 0 ));
-/* numeric_ops */
-DATA(insert (  1998   1700 1700 1 s 1752 405 0 ));
-/* array_ops */
-DATA(insert (  627    2277 2277 1 s 1070 405 0 ));
-
-
-/*
- *     gist box_ops
- */
-
-DATA(insert (  2593   603 603 1 s      493 783 0 ));
-DATA(insert (  2593   603 603 2 s      494 783 0 ));
-DATA(insert (  2593   603 603 3 s      500 783 0 ));
-DATA(insert (  2593   603 603 4 s      495 783 0 ));
-DATA(insert (  2593   603 603 5 s      496 783 0 ));
-DATA(insert (  2593   603 603 6 s      499 783 0 ));
-DATA(insert (  2593   603 603 7 s      498 783 0 ));
-DATA(insert (  2593   603 603 8 s      497 783 0 ));
-DATA(insert (  2593   603 603 9 s      2571 783 0 ));
-DATA(insert (  2593   603 603 10 s 2570 783 0 ));
-DATA(insert (  2593   603 603 11 s 2573 783 0 ));
-DATA(insert (  2593   603 603 12 s 2572 783 0 ));
-DATA(insert (  2593   603 603 13 s 2863 783 0 ));
-DATA(insert (  2593   603 603 14 s 2862 783 0 ));
-
-/*
- * gist point_ops
- */
-DATA(insert (  1029   600 600 11 s 506 783 0 ));
-DATA(insert (  1029   600 600 1 s      507 783 0 ));
-DATA(insert (  1029   600 600 5 s      508 783 0 ));
-DATA(insert (  1029   600 600 10 s 509 783 0 ));
-DATA(insert (  1029   600 600 6 s      510 783 0 ));
-DATA(insert (  1029   600 600 15 o 517 783 1970 ));
-DATA(insert (  1029   600 603 28 s 511 783 0 ));
-DATA(insert (  1029   600 604 48 s 756 783 0 ));
-DATA(insert (  1029   600 718 68 s 758 783 0 ));
-
-
-/*
- *     gist poly_ops (supports polygons)
- */
-
-DATA(insert (  2594   604 604 1 s      485 783 0 ));
-DATA(insert (  2594   604 604 2 s      486 783 0 ));
-DATA(insert (  2594   604 604 3 s      492 783 0 ));
-DATA(insert (  2594   604 604 4 s      487 783 0 ));
-DATA(insert (  2594   604 604 5 s      488 783 0 ));
-DATA(insert (  2594   604 604 6 s      491 783 0 ));
-DATA(insert (  2594   604 604 7 s      490 783 0 ));
-DATA(insert (  2594   604 604 8 s      489 783 0 ));
-DATA(insert (  2594   604 604 9 s      2575 783 0 ));
-DATA(insert (  2594   604 604 10 s 2574 783 0 ));
-DATA(insert (  2594   604 604 11 s 2577 783 0 ));
-DATA(insert (  2594   604 604 12 s 2576 783 0 ));
-DATA(insert (  2594   604 604 13 s 2861 783 0 ));
-DATA(insert (  2594   604 604 14 s 2860 783 0 ));
-DATA(insert (  2594   604 600 15 o 3289 783 1970 ));
-
-/*
- *     gist circle_ops
- */
-
-DATA(insert (  2595   718 718 1 s      1506 783 0 ));
-DATA(insert (  2595   718 718 2 s      1507 783 0 ));
-DATA(insert (  2595   718 718 3 s      1513 783 0 ));
-DATA(insert (  2595   718 718 4 s      1508 783 0 ));
-DATA(insert (  2595   718 718 5 s      1509 783 0 ));
-DATA(insert (  2595   718 718 6 s      1512 783 0 ));
-DATA(insert (  2595   718 718 7 s      1511 783 0 ));
-DATA(insert (  2595   718 718 8 s      1510 783 0 ));
-DATA(insert (  2595   718 718 9 s      2589 783 0 ));
-DATA(insert (  2595   718 718 10 s 1515 783 0 ));
-DATA(insert (  2595   718 718 11 s 1514 783 0 ));
-DATA(insert (  2595   718 718 12 s 2590 783 0 ));
-DATA(insert (  2595   718 718 13 s 2865 783 0 ));
-DATA(insert (  2595   718 718 14 s 2864 783 0 ));
-DATA(insert (  2595   718 600 15 o 3291 783 1970 ));
-
-/*
- * gin array_ops
- */
-DATA(insert (  2745   2277 2277 1 s 2750 2742 0 ));
-DATA(insert (  2745   2277 2277 2 s 2751 2742 0 ));
-DATA(insert (  2745   2277 2277 3 s 2752 2742 0 ));
-DATA(insert (  2745   2277 2277 4 s 1070 2742 0 ));
-
-/*
- * btree enum_ops
- */
-DATA(insert (  3522   3500 3500 1 s 3518 403 0 ));
-DATA(insert (  3522   3500 3500 2 s 3520 403 0 ));
-DATA(insert (  3522   3500 3500 3 s 3516 403 0 ));
-DATA(insert (  3522   3500 3500 4 s 3521 403 0 ));
-DATA(insert (  3522   3500 3500 5 s 3519 403 0 ));
-
-/*
- * hash enum_ops
- */
-DATA(insert (  3523   3500 3500 1 s 3516 405 0 ));
-
-/*
- * btree tsvector_ops
- */
-DATA(insert (  3626   3614 3614 1 s    3627 403 0 ));
-DATA(insert (  3626   3614 3614 2 s    3628 403 0 ));
-DATA(insert (  3626   3614 3614 3 s    3629 403 0 ));
-DATA(insert (  3626   3614 3614 4 s    3631 403 0 ));
-DATA(insert (  3626   3614 3614 5 s    3632 403 0 ));
-
-/*
- * GiST tsvector_ops
- */
-DATA(insert (  3655   3614 3615 1 s    3636 783 0 ));
+       /* operator's left input data type */
+       Oid                     amoplefttype BKI_LOOKUP(pg_type);
 
-/*
- * GIN tsvector_ops
- */
-DATA(insert (  3659   3614 3615 1 s    3636 2742 0 ));
-DATA(insert (  3659   3614 3615 2 s    3660 2742 0 ));
+       /* operator's right input data type */
+       Oid                     amoprighttype BKI_LOOKUP(pg_type);
 
-/*
- * btree tsquery_ops
- */
-DATA(insert (  3683   3615 3615 1 s    3674 403 0 ));
-DATA(insert (  3683   3615 3615 2 s    3675 403 0 ));
-DATA(insert (  3683   3615 3615 3 s    3676 403 0 ));
-DATA(insert (  3683   3615 3615 4 s    3678 403 0 ));
-DATA(insert (  3683   3615 3615 5 s    3679 403 0 ));
+       /* operator strategy number */
+       int16           amopstrategy;
 
-/*
- * GiST tsquery_ops
- */
-DATA(insert (  3702   3615 3615 7 s    3693 783 0 ));
-DATA(insert (  3702   3615 3615 8 s    3694 783 0 ));
+       /* is operator for 's'earch or 'o'rdering? */
+       char            amoppurpose BKI_DEFAULT(s);
 
-/*
- * btree range_ops
- */
-DATA(insert (  3901   3831 3831 1 s    3884 403 0 ));
-DATA(insert (  3901   3831 3831 2 s    3885 403 0 ));
-DATA(insert (  3901   3831 3831 3 s    3882 403 0 ));
-DATA(insert (  3901   3831 3831 4 s    3886 403 0 ));
-DATA(insert (  3901   3831 3831 5 s    3887 403 0 ));
+       /* the operator's pg_operator OID */
+       Oid                     amopopr BKI_LOOKUP(pg_operator);
 
-/*
- * hash range_ops
- */
-DATA(insert (  3903   3831 3831 1 s    3882 405 0 ));
+       /* the index access method this entry is for */
+       Oid                     amopmethod BKI_LOOKUP(pg_am);
 
-/*
- * GiST range_ops
- */
-DATA(insert (  3919   3831 3831 1 s    3893 783 0 ));
-DATA(insert (  3919   3831 3831 2 s    3895 783 0 ));
-DATA(insert (  3919   3831 3831 3 s    3888 783 0 ));
-DATA(insert (  3919   3831 3831 4 s    3896 783 0 ));
-DATA(insert (  3919   3831 3831 5 s    3894 783 0 ));
-DATA(insert (  3919   3831 3831 6 s    3897 783 0 ));
-DATA(insert (  3919   3831 3831 7 s    3890 783 0 ));
-DATA(insert (  3919   3831 3831 8 s    3892 783 0 ));
-DATA(insert (  3919   3831 2283 16 s   3889 783 0 ));
-DATA(insert (  3919   3831 3831 18 s   3882 783 0 ));
-
-/*
- * SP-GiST quad_point_ops
- */
-DATA(insert (  4015   600 600 11 s 506 4000 0 ));
-DATA(insert (  4015   600 600 1 s      507 4000 0 ));
-DATA(insert (  4015   600 600 5 s      508 4000 0 ));
-DATA(insert (  4015   600 600 10 s 509 4000 0 ));
-DATA(insert (  4015   600 600 6 s      510 4000 0 ));
-DATA(insert (  4015   600 603 8 s      511 4000 0 ));
-
-/*
- * SP-GiST kd_point_ops
- */
-DATA(insert (  4016   600 600 11 s 506 4000 0 ));
-DATA(insert (  4016   600 600 1 s      507 4000 0 ));
-DATA(insert (  4016   600 600 5 s      508 4000 0 ));
-DATA(insert (  4016   600 600 10 s 509 4000 0 ));
-DATA(insert (  4016   600 600 6 s      510 4000 0 ));
-DATA(insert (  4016   600 603 8 s      511 4000 0 ));
-
-/*
- * SP-GiST text_ops
- */
-DATA(insert (  4017   25 25 1 s        2314 4000 0 ));
-DATA(insert (  4017   25 25 2 s        2315 4000 0 ));
-DATA(insert (  4017   25 25 3 s        98      4000 0 ));
-DATA(insert (  4017   25 25 4 s        2317 4000 0 ));
-DATA(insert (  4017   25 25 5 s        2318 4000 0 ));
-DATA(insert (  4017   25 25 11 s       664 4000 0 ));
-DATA(insert (  4017   25 25 12 s       665 4000 0 ));
-DATA(insert (  4017   25 25 14 s       667 4000 0 ));
-DATA(insert (  4017   25 25 15 s       666 4000 0 ));
-DATA(insert (  4017   25 25 28 s       3877 4000 0 ));
-
-/*
- * btree jsonb_ops
- */
-DATA(insert (  4033   3802 3802 1 s    3242 403 0 ));
-DATA(insert (  4033   3802 3802 2 s    3244 403 0 ));
-DATA(insert (  4033   3802 3802 3 s    3240 403 0 ));
-DATA(insert (  4033   3802 3802 4 s    3245 403 0 ));
-DATA(insert (  4033   3802 3802 5 s    3243 403 0 ));
-
-/*
- * hash jsonb_ops
- */
-DATA(insert (  4034   3802 3802 1 s 3240 405 0 ));
-
-/*
- * GIN jsonb_ops
- */
-DATA(insert (  4036   3802 3802 7 s 3246 2742 0 ));
-DATA(insert (  4036   3802 25 9 s 3247 2742 0 ));
-DATA(insert (  4036   3802 1009 10 s 3248 2742 0 ));
-DATA(insert (  4036   3802 1009 11 s 3249 2742 0 ));
-
-/*
- * GIN jsonb_path_ops
- */
-DATA(insert (  4037   3802 3802 7 s 3246 2742 0 ));
-
-/*
- * SP-GiST range_ops
- */
-DATA(insert (  3474   3831 3831 1 s    3893 4000 0 ));
-DATA(insert (  3474   3831 3831 2 s    3895 4000 0 ));
-DATA(insert (  3474   3831 3831 3 s    3888 4000 0 ));
-DATA(insert (  3474   3831 3831 4 s    3896 4000 0 ));
-DATA(insert (  3474   3831 3831 5 s    3894 4000 0 ));
-DATA(insert (  3474   3831 3831 6 s    3897 4000 0 ));
-DATA(insert (  3474   3831 3831 7 s    3890 4000 0 ));
-DATA(insert (  3474   3831 3831 8 s    3892 4000 0 ));
-DATA(insert (  3474   3831 2283 16 s   3889 4000 0 ));
-DATA(insert (  3474   3831 3831 18 s   3882 4000 0 ));
-
-/*
- * SP-GiST box_ops
- */
-DATA(insert (  5000    603  603  1 s    493    4000 0 ));
-DATA(insert (  5000    603  603  2 s    494    4000 0 ));
-DATA(insert (  5000    603  603  3 s    500    4000 0 ));
-DATA(insert (  5000    603  603  4 s    495    4000 0 ));
-DATA(insert (  5000    603  603  5 s    496    4000 0 ));
-DATA(insert (  5000    603  603  6 s    499    4000 0 ));
-DATA(insert (  5000    603  603  7 s    498    4000 0 ));
-DATA(insert (  5000    603  603  8 s    497    4000 0 ));
-DATA(insert (  5000    603  603  9 s   2571    4000 0 ));
-DATA(insert (  5000    603  603 10 s   2570    4000 0 ));
-DATA(insert (  5000    603  603 11 s   2573    4000 0 ));
-DATA(insert (  5000    603  603 12 s   2572    4000 0 ));
-
-/*
- * SP-GiST poly_ops (supports polygons)
- */
-DATA(insert (  5008   604      604  1 s         485    4000 0 ));
-DATA(insert (  5008   604      604  2 s         486    4000 0 ));
-DATA(insert (  5008   604      604  3 s         492    4000 0 ));
-DATA(insert (  5008   604      604  4 s         487    4000 0 ));
-DATA(insert (  5008   604      604  5 s         488    4000 0 ));
-DATA(insert (  5008   604      604  6 s         491    4000 0 ));
-DATA(insert (  5008   604      604  7 s         490    4000 0 ));
-DATA(insert (  5008   604      604  8 s         489    4000 0 ));
-DATA(insert (  5008   604      604  9 s        2575    4000 0 ));
-DATA(insert (  5008   604      604 10 s        2574    4000 0 ));
-DATA(insert (  5008   604      604 11 s        2577    4000 0 ));
-DATA(insert (  5008   604      604 12 s        2576    4000 0 ));
-
-/*
- * GiST inet_ops
- */
-DATA(insert (  3550    869 869 3 s             3552 783 0 ));
-DATA(insert (  3550    869 869 18 s    1201 783 0 ));
-DATA(insert (  3550    869 869 19 s    1202 783 0 ));
-DATA(insert (  3550    869 869 20 s    1203 783 0 ));
-DATA(insert (  3550    869 869 21 s    1204 783 0 ));
-DATA(insert (  3550    869 869 22 s    1205 783 0 ));
-DATA(insert (  3550    869 869 23 s    1206 783 0 ));
-DATA(insert (  3550    869 869 24 s    931 783 0 ));
-DATA(insert (  3550    869 869 25 s    932 783 0 ));
-DATA(insert (  3550    869 869 26 s    933 783 0 ));
-DATA(insert (  3550    869 869 27 s    934 783 0 ));
+       /* ordering opfamily OID, or 0 if search op */
+       Oid                     amopsortfamily BKI_DEFAULT(0) BKI_LOOKUP(pg_opfamily);
+} FormData_pg_amop;
 
-/*
- * SP-GiST inet_ops
+/* ----------------
+ *             Form_pg_amop corresponds to a pointer to a tuple with
+ *             the format of pg_amop relation.
+ * ----------------
  */
-DATA(insert (  3794    869 869 3 s             3552 4000 0 ));
-DATA(insert (  3794    869 869 18 s    1201 4000 0 ));
-DATA(insert (  3794    869 869 19 s    1202 4000 0 ));
-DATA(insert (  3794    869 869 20 s    1203 4000 0 ));
-DATA(insert (  3794    869 869 21 s    1204 4000 0 ));
-DATA(insert (  3794    869 869 22 s    1205 4000 0 ));
-DATA(insert (  3794    869 869 23 s    1206 4000 0 ));
-DATA(insert (  3794    869 869 24 s    931 4000 0 ));
-DATA(insert (  3794    869 869 25 s    932 4000 0 ));
-DATA(insert (  3794    869 869 26 s    933 4000 0 ));
-DATA(insert (  3794    869 869 27 s    934 4000 0 ));
-
-/* BRIN opclasses */
-/* minmax bytea */
-DATA(insert (  4064     17   17 1 s      1957    3580 0 ));
-DATA(insert (  4064     17   17 2 s      1958    3580 0 ));
-DATA(insert (  4064     17   17 3 s      1955    3580 0 ));
-DATA(insert (  4064     17   17 4 s      1960    3580 0 ));
-DATA(insert (  4064     17   17 5 s      1959    3580 0 ));
-/* minmax "char" */
-DATA(insert (  4062     18   18 1 s       631    3580 0 ));
-DATA(insert (  4062     18   18 2 s       632    3580 0 ));
-DATA(insert (  4062     18   18 3 s            92        3580 0 ));
-DATA(insert (  4062     18   18 4 s       634    3580 0 ));
-DATA(insert (  4062     18   18 5 s       633    3580 0 ));
-/* minmax name */
-DATA(insert (  4065     19   19 1 s       660    3580 0 ));
-DATA(insert (  4065     19   19 2 s       661    3580 0 ));
-DATA(insert (  4065     19   19 3 s            93        3580 0 ));
-DATA(insert (  4065     19   19 4 s       663    3580 0 ));
-DATA(insert (  4065     19   19 5 s       662    3580 0 ));
-/* minmax integer */
-DATA(insert (  4054     20   20 1 s       412    3580 0 ));
-DATA(insert (  4054     20   20 2 s       414    3580 0 ));
-DATA(insert (  4054     20   20 3 s       410    3580 0 ));
-DATA(insert (  4054     20   20 4 s       415    3580 0 ));
-DATA(insert (  4054     20   20 5 s       413    3580 0 ));
-DATA(insert (  4054     20   21 1 s      1870    3580 0 ));
-DATA(insert (  4054     20   21 2 s      1872    3580 0 ));
-DATA(insert (  4054     20   21 3 s      1868    3580 0 ));
-DATA(insert (  4054     20   21 4 s      1873    3580 0 ));
-DATA(insert (  4054     20   21 5 s      1871    3580 0 ));
-DATA(insert (  4054     20   23 1 s       418    3580 0 ));
-DATA(insert (  4054     20   23 2 s       420    3580 0 ));
-DATA(insert (  4054     20   23 3 s       416    3580 0 ));
-DATA(insert (  4054     20   23 4 s       430    3580 0 ));
-DATA(insert (  4054     20   23 5 s       419    3580 0 ));
-DATA(insert (  4054     21   21 1 s            95        3580 0 ));
-DATA(insert (  4054     21   21 2 s       522    3580 0 ));
-DATA(insert (  4054     21   21 3 s            94        3580 0 ));
-DATA(insert (  4054     21   21 4 s       524    3580 0 ));
-DATA(insert (  4054     21   21 5 s       520    3580 0 ));
-DATA(insert (  4054     21   20 1 s      1864    3580 0 ));
-DATA(insert (  4054     21   20 2 s      1866    3580 0 ));
-DATA(insert (  4054     21   20 3 s      1862    3580 0 ));
-DATA(insert (  4054     21   20 4 s      1867    3580 0 ));
-DATA(insert (  4054     21   20 5 s      1865    3580 0 ));
-DATA(insert (  4054     21   23 1 s       534    3580 0 ));
-DATA(insert (  4054     21   23 2 s       540    3580 0 ));
-DATA(insert (  4054     21   23 3 s       532    3580 0 ));
-DATA(insert (  4054     21   23 4 s       542    3580 0 ));
-DATA(insert (  4054     21   23 5 s       536    3580 0 ));
-DATA(insert (  4054     23   23 1 s            97        3580 0 ));
-DATA(insert (  4054     23   23 2 s       523    3580 0 ));
-DATA(insert (  4054     23   23 3 s            96        3580 0 ));
-DATA(insert (  4054     23   23 4 s       525    3580 0 ));
-DATA(insert (  4054     23   23 5 s       521    3580 0 ));
-DATA(insert (  4054     23   21 1 s       535    3580 0 ));
-DATA(insert (  4054     23   21 2 s       541    3580 0 ));
-DATA(insert (  4054     23   21 3 s       533    3580 0 ));
-DATA(insert (  4054     23   21 4 s       543    3580 0 ));
-DATA(insert (  4054     23   21 5 s       537    3580 0 ));
-DATA(insert (  4054     23   20 1 s            37        3580 0 ));
-DATA(insert (  4054     23   20 2 s            80        3580 0 ));
-DATA(insert (  4054     23   20 3 s            15        3580 0 ));
-DATA(insert (  4054     23   20 4 s            82        3580 0 ));
-DATA(insert (  4054     23   20 5 s            76        3580 0 ));
+typedef FormData_pg_amop *Form_pg_amop;
 
-/* minmax text */
-DATA(insert (  4056     25   25 1 s       664    3580 0 ));
-DATA(insert (  4056     25   25 2 s       665    3580 0 ));
-DATA(insert (  4056     25   25 3 s            98        3580 0 ));
-DATA(insert (  4056     25   25 4 s       667    3580 0 ));
-DATA(insert (  4056     25   25 5 s       666    3580 0 ));
-/* minmax oid */
-DATA(insert (  4068     26   26 1 s       609    3580 0 ));
-DATA(insert (  4068     26   26 2 s       611    3580 0 ));
-DATA(insert (  4068     26   26 3 s       607    3580 0 ));
-DATA(insert (  4068     26   26 4 s       612    3580 0 ));
-DATA(insert (  4068     26   26 5 s       610    3580 0 ));
-/* minmax tid */
-DATA(insert (  4069     27   27 1 s      2799    3580 0 ));
-DATA(insert (  4069     27   27 2 s      2801    3580 0 ));
-DATA(insert (  4069     27   27 3 s       387    3580 0 ));
-DATA(insert (  4069     27   27 4 s      2802    3580 0 ));
-DATA(insert (  4069     27   27 5 s      2800    3580 0 ));
-/* minmax float (float4, float8) */
-DATA(insert (  4070    700  700 1 s       622    3580 0 ));
-DATA(insert (  4070    700  700 2 s       624    3580 0 ));
-DATA(insert (  4070    700  700 3 s       620    3580 0 ));
-DATA(insert (  4070    700  700 4 s       625    3580 0 ));
-DATA(insert (  4070    700  700 5 s       623    3580 0 ));
-DATA(insert (  4070    700  701 1 s      1122    3580 0 ));
-DATA(insert (  4070    700  701 2 s      1124    3580 0 ));
-DATA(insert (  4070    700  701 3 s      1120    3580 0 ));
-DATA(insert (  4070    700  701 4 s      1125    3580 0 ));
-DATA(insert (  4070    700  701 5 s      1123    3580 0 ));
-DATA(insert (  4070    701  700 1 s      1132    3580 0 ));
-DATA(insert (  4070    701  700 2 s      1134    3580 0 ));
-DATA(insert (  4070    701  700 3 s      1130    3580 0 ));
-DATA(insert (  4070    701  700 4 s      1135    3580 0 ));
-DATA(insert (  4070    701  700 5 s      1133    3580 0 ));
-DATA(insert (  4070    701  701 1 s       672    3580 0 ));
-DATA(insert (  4070    701  701 2 s       673    3580 0 ));
-DATA(insert (  4070    701  701 3 s       670    3580 0 ));
-DATA(insert (  4070    701  701 4 s       675    3580 0 ));
-DATA(insert (  4070    701  701 5 s       674    3580 0 ));
+#ifdef EXPOSE_TO_CLIENT_CODE
 
-/* minmax abstime */
-DATA(insert (  4072    702  702 1 s       562    3580 0 ));
-DATA(insert (  4072    702  702 2 s       564    3580 0 ));
-DATA(insert (  4072    702  702 3 s       560    3580 0 ));
-DATA(insert (  4072    702  702 4 s       565    3580 0 ));
-DATA(insert (  4072    702  702 5 s       563    3580 0 ));
-/* minmax reltime */
-DATA(insert (  4073    703  703 1 s       568    3580 0 ));
-DATA(insert (  4073    703  703 2 s       570    3580 0 ));
-DATA(insert (  4073    703  703 3 s       566    3580 0 ));
-DATA(insert (  4073    703  703 4 s       571    3580 0 ));
-DATA(insert (  4073    703  703 5 s       569    3580 0 ));
-/* minmax macaddr */
-DATA(insert (  4074    829  829 1 s      1222    3580 0 ));
-DATA(insert (  4074    829  829 2 s      1223    3580 0 ));
-DATA(insert (  4074    829  829 3 s      1220    3580 0 ));
-DATA(insert (  4074    829  829 4 s      1225    3580 0 ));
-DATA(insert (  4074    829  829 5 s      1224    3580 0 ));
-/* minmax macaddr8 */
-DATA(insert (  4109    774  774 1 s      3364    3580 0 ));
-DATA(insert (  4109    774  774 2 s      3365    3580 0 ));
-DATA(insert (  4109    774  774 3 s      3362    3580 0 ));
-DATA(insert (  4109    774  774 4 s      3367    3580 0 ));
-DATA(insert (  4109    774  774 5 s      3366    3580 0 ));
-/* minmax inet */
-DATA(insert (  4075    869  869 1 s      1203    3580 0 ));
-DATA(insert (  4075    869  869 2 s      1204    3580 0 ));
-DATA(insert (  4075    869  869 3 s      1201    3580 0 ));
-DATA(insert (  4075    869  869 4 s      1206    3580 0 ));
-DATA(insert (  4075    869  869 5 s      1205    3580 0 ));
-/* inclusion inet */
-DATA(insert (  4102    869  869 3 s      3552    3580 0 ));
-DATA(insert (  4102    869  869 7 s       934    3580 0 ));
-DATA(insert (  4102    869  869 8 s       932    3580 0 ));
-DATA(insert (  4102    869  869 18 s     1201    3580 0 ));
-DATA(insert (  4102    869  869 24 s      933    3580 0 ));
-DATA(insert (  4102    869  869 26 s      931    3580 0 ));
-/* minmax character */
-DATA(insert (  4076   1042 1042 1 s      1058    3580 0 ));
-DATA(insert (  4076   1042 1042 2 s      1059    3580 0 ));
-DATA(insert (  4076   1042 1042 3 s      1054    3580 0 ));
-DATA(insert (  4076   1042 1042 4 s      1061    3580 0 ));
-DATA(insert (  4076   1042 1042 5 s      1060    3580 0 ));
-/* minmax time without time zone */
-DATA(insert (  4077   1083 1083 1 s      1110    3580 0 ));
-DATA(insert (  4077   1083 1083 2 s      1111    3580 0 ));
-DATA(insert (  4077   1083 1083 3 s      1108    3580 0 ));
-DATA(insert (  4077   1083 1083 4 s      1113    3580 0 ));
-DATA(insert (  4077   1083 1083 5 s      1112    3580 0 ));
-/* minmax datetime (date, timestamp, timestamptz) */
-DATA(insert (  4059   1114 1114 1 s      2062    3580 0 ));
-DATA(insert (  4059   1114 1114 2 s      2063    3580 0 ));
-DATA(insert (  4059   1114 1114 3 s      2060    3580 0 ));
-DATA(insert (  4059   1114 1114 4 s      2065    3580 0 ));
-DATA(insert (  4059   1114 1114 5 s      2064    3580 0 ));
-DATA(insert (  4059   1114 1082 1 s      2371    3580 0 ));
-DATA(insert (  4059   1114 1082 2 s      2372    3580 0 ));
-DATA(insert (  4059   1114 1082 3 s      2373    3580 0 ));
-DATA(insert (  4059   1114 1082 4 s      2374    3580 0 ));
-DATA(insert (  4059   1114 1082 5 s      2375    3580 0 ));
-DATA(insert (  4059   1114 1184 1 s      2534    3580 0 ));
-DATA(insert (  4059   1114 1184 2 s      2535    3580 0 ));
-DATA(insert (  4059   1114 1184 3 s      2536    3580 0 ));
-DATA(insert (  4059   1114 1184 4 s      2537    3580 0 ));
-DATA(insert (  4059   1114 1184 5 s      2538    3580 0 ));
-DATA(insert (  4059   1082 1082 1 s      1095    3580 0 ));
-DATA(insert (  4059   1082 1082 2 s      1096    3580 0 ));
-DATA(insert (  4059   1082 1082 3 s      1093    3580 0 ));
-DATA(insert (  4059   1082 1082 4 s      1098    3580 0 ));
-DATA(insert (  4059   1082 1082 5 s      1097    3580 0 ));
-DATA(insert (  4059   1082 1114 1 s      2345    3580 0 ));
-DATA(insert (  4059   1082 1114 2 s      2346    3580 0 ));
-DATA(insert (  4059   1082 1114 3 s      2347    3580 0 ));
-DATA(insert (  4059   1082 1114 4 s      2348    3580 0 ));
-DATA(insert (  4059   1082 1114 5 s      2349    3580 0 ));
-DATA(insert (  4059   1082 1184 1 s      2358    3580 0 ));
-DATA(insert (  4059   1082 1184 2 s      2359    3580 0 ));
-DATA(insert (  4059   1082 1184 3 s      2360    3580 0 ));
-DATA(insert (  4059   1082 1184 4 s      2361    3580 0 ));
-DATA(insert (  4059   1082 1184 5 s      2362    3580 0 ));
-DATA(insert (  4059   1184 1082 1 s      2384    3580 0 ));
-DATA(insert (  4059   1184 1082 2 s      2385    3580 0 ));
-DATA(insert (  4059   1184 1082 3 s      2386    3580 0 ));
-DATA(insert (  4059   1184 1082 4 s      2387    3580 0 ));
-DATA(insert (  4059   1184 1082 5 s      2388    3580 0 ));
-DATA(insert (  4059   1184 1114 1 s      2540    3580 0 ));
-DATA(insert (  4059   1184 1114 2 s      2541    3580 0 ));
-DATA(insert (  4059   1184 1114 3 s      2542    3580 0 ));
-DATA(insert (  4059   1184 1114 4 s      2543    3580 0 ));
-DATA(insert (  4059   1184 1114 5 s      2544    3580 0 ));
-DATA(insert (  4059   1184 1184 1 s      1322    3580 0 ));
-DATA(insert (  4059   1184 1184 2 s      1323    3580 0 ));
-DATA(insert (  4059   1184 1184 3 s      1320    3580 0 ));
-DATA(insert (  4059   1184 1184 4 s      1325    3580 0 ));
-DATA(insert (  4059   1184 1184 5 s      1324    3580 0 ));
+/* allowed values of amoppurpose: */
+#define AMOP_SEARCH            's'             /* operator is for search */
+#define AMOP_ORDER             'o'             /* operator is for ordering */
 
-/* minmax interval */
-DATA(insert (  4078   1186 1186 1 s      1332    3580 0 ));
-DATA(insert (  4078   1186 1186 2 s      1333    3580 0 ));
-DATA(insert (  4078   1186 1186 3 s      1330    3580 0 ));
-DATA(insert (  4078   1186 1186 4 s      1335    3580 0 ));
-DATA(insert (  4078   1186 1186 5 s      1334    3580 0 ));
-/* minmax time with time zone */
-DATA(insert (  4058   1266 1266 1 s      1552    3580 0 ));
-DATA(insert (  4058   1266 1266 2 s      1553    3580 0 ));
-DATA(insert (  4058   1266 1266 3 s      1550    3580 0 ));
-DATA(insert (  4058   1266 1266 4 s      1555    3580 0 ));
-DATA(insert (  4058   1266 1266 5 s      1554    3580 0 ));
-/* minmax bit */
-DATA(insert (  4079   1560 1560 1 s      1786    3580 0 ));
-DATA(insert (  4079   1560 1560 2 s      1788    3580 0 ));
-DATA(insert (  4079   1560 1560 3 s      1784    3580 0 ));
-DATA(insert (  4079   1560 1560 4 s      1789    3580 0 ));
-DATA(insert (  4079   1560 1560 5 s      1787    3580 0 ));
-/* minmax bit varying */
-DATA(insert (  4080   1562 1562 1 s      1806    3580 0 ));
-DATA(insert (  4080   1562 1562 2 s      1808    3580 0 ));
-DATA(insert (  4080   1562 1562 3 s      1804    3580 0 ));
-DATA(insert (  4080   1562 1562 4 s      1809    3580 0 ));
-DATA(insert (  4080   1562 1562 5 s      1807    3580 0 ));
-/* minmax numeric */
-DATA(insert (  4055   1700 1700 1 s      1754    3580 0 ));
-DATA(insert (  4055   1700 1700 2 s      1755    3580 0 ));
-DATA(insert (  4055   1700 1700 3 s      1752    3580 0 ));
-DATA(insert (  4055   1700 1700 4 s      1757    3580 0 ));
-DATA(insert (  4055   1700 1700 5 s      1756    3580 0 ));
-/* minmax uuid */
-DATA(insert (  4081   2950 2950 1 s      2974    3580 0 ));
-DATA(insert (  4081   2950 2950 2 s      2976    3580 0 ));
-DATA(insert (  4081   2950 2950 3 s      2972    3580 0 ));
-DATA(insert (  4081   2950 2950 4 s      2977    3580 0 ));
-DATA(insert (  4081   2950 2950 5 s      2975    3580 0 ));
-/* inclusion range types */
-DATA(insert (  4103   3831 3831  1 s     3893    3580 0 ));
-DATA(insert (  4103   3831 3831  2 s     3895    3580 0 ));
-DATA(insert (  4103   3831 3831  3 s     3888    3580 0 ));
-DATA(insert (  4103   3831 3831  4 s     3896    3580 0 ));
-DATA(insert (  4103   3831 3831  5 s     3894    3580 0 ));
-DATA(insert (  4103   3831 3831  7 s     3890    3580 0 ));
-DATA(insert (  4103   3831 3831  8 s     3892    3580 0 ));
-DATA(insert (  4103   3831 2283 16 s     3889    3580 0 ));
-DATA(insert (  4103   3831 3831 17 s     3897    3580 0 ));
-DATA(insert (  4103   3831 3831 18 s     3882    3580 0 ));
-DATA(insert (  4103   3831 3831 20 s     3884    3580 0 ));
-DATA(insert (  4103   3831 3831 21 s     3885    3580 0 ));
-DATA(insert (  4103   3831 3831 22 s     3887    3580 0 ));
-DATA(insert (  4103   3831 3831 23 s     3886    3580 0 ));
-/* minmax pg_lsn */
-DATA(insert (  4082   3220 3220 1 s      3224    3580 0 ));
-DATA(insert (  4082   3220 3220 2 s      3226    3580 0 ));
-DATA(insert (  4082   3220 3220 3 s      3222    3580 0 ));
-DATA(insert (  4082   3220 3220 4 s      3227    3580 0 ));
-DATA(insert (  4082   3220 3220 5 s      3225    3580 0 ));
-/* inclusion box */
-DATA(insert (  4104    603  603  1 s      493    3580 0 ));
-DATA(insert (  4104    603  603  2 s      494    3580 0 ));
-DATA(insert (  4104    603  603  3 s      500    3580 0 ));
-DATA(insert (  4104    603  603  4 s      495    3580 0 ));
-DATA(insert (  4104    603  603  5 s      496    3580 0 ));
-DATA(insert (  4104    603  603  6 s      499    3580 0 ));
-DATA(insert (  4104    603  603  7 s      498    3580 0 ));
-DATA(insert (  4104    603  603  8 s      497    3580 0 ));
-DATA(insert (  4104    603  603  9 s     2571    3580 0 ));
-DATA(insert (  4104    603  603 10 s     2570    3580 0 ));
-DATA(insert (  4104    603  603 11 s     2573    3580 0 ));
-DATA(insert (  4104    603  603 12 s     2572    3580 0 ));
-/* we could, but choose not to, supply entries for strategies 13 and 14 */
-DATA(insert (  4104    603  600  7 s      433    3580 0 ));
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
 
 #endif                                                 /* PG_AMOP_H */
diff --git a/src/include/catalog/pg_amproc.dat b/src/include/catalog/pg_amproc.dat
new file mode 100644 (file)
index 0000000..6b6c807
--- /dev/null
@@ -0,0 +1,1277 @@
+#----------------------------------------------------------------------
+#
+# pg_amproc.dat
+#    Initial contents of the pg_amproc system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_amproc.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# btree
+{ amprocfamily => 'btree/array_ops', amproclefttype => 'anyarray',
+  amprocrighttype => 'anyarray', amprocnum => '1', amproc => 'btarraycmp' },
+{ amprocfamily => 'btree/abstime_ops', amproclefttype => 'abstime',
+  amprocrighttype => 'abstime', amprocnum => '1', amproc => 'btabstimecmp' },
+{ amprocfamily => 'btree/bit_ops', amproclefttype => 'bit',
+  amprocrighttype => 'bit', amprocnum => '1', amproc => 'bitcmp' },
+{ amprocfamily => 'btree/bool_ops', amproclefttype => 'bool',
+  amprocrighttype => 'bool', amprocnum => '1', amproc => 'btboolcmp' },
+{ amprocfamily => 'btree/bpchar_ops', amproclefttype => 'bpchar',
+  amprocrighttype => 'bpchar', amprocnum => '1', amproc => 'bpcharcmp' },
+{ amprocfamily => 'btree/bpchar_ops', amproclefttype => 'bpchar',
+  amprocrighttype => 'bpchar', amprocnum => '2',
+  amproc => 'bpchar_sortsupport' },
+{ amprocfamily => 'btree/bytea_ops', amproclefttype => 'bytea',
+  amprocrighttype => 'bytea', amprocnum => '1', amproc => 'byteacmp' },
+{ amprocfamily => 'btree/bytea_ops', amproclefttype => 'bytea',
+  amprocrighttype => 'bytea', amprocnum => '2', amproc => 'bytea_sortsupport' },
+{ amprocfamily => 'btree/char_ops', amproclefttype => 'char',
+  amprocrighttype => 'char', amprocnum => '1', amproc => 'btcharcmp' },
+{ amprocfamily => 'btree/datetime_ops', amproclefttype => 'date',
+  amprocrighttype => 'date', amprocnum => '1', amproc => 'date_cmp' },
+{ amprocfamily => 'btree/datetime_ops', amproclefttype => 'date',
+  amprocrighttype => 'date', amprocnum => '2', amproc => 'date_sortsupport' },
+{ amprocfamily => 'btree/datetime_ops', amproclefttype => 'date',
+  amprocrighttype => 'timestamp', amprocnum => '1',
+  amproc => 'date_cmp_timestamp' },
+{ amprocfamily => 'btree/datetime_ops', amproclefttype => 'date',
+  amprocrighttype => 'timestamptz', amprocnum => '1',
+  amproc => 'date_cmp_timestamptz' },
+{ amprocfamily => 'btree/datetime_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'timestamp', amprocnum => '1', amproc => 'timestamp_cmp' },
+{ amprocfamily => 'btree/datetime_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'timestamp', amprocnum => '2',
+  amproc => 'timestamp_sortsupport' },
+{ amprocfamily => 'btree/datetime_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'date', amprocnum => '1', amproc => 'timestamp_cmp_date' },
+{ amprocfamily => 'btree/datetime_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'timestamptz', amprocnum => '1',
+  amproc => 'timestamp_cmp_timestamptz' },
+{ amprocfamily => 'btree/datetime_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'timestamptz', amprocnum => '1',
+  amproc => 'timestamptz_cmp' },
+{ amprocfamily => 'btree/datetime_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'timestamptz', amprocnum => '2',
+  amproc => 'timestamp_sortsupport' },
+{ amprocfamily => 'btree/datetime_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'date', amprocnum => '1',
+  amproc => 'timestamptz_cmp_date' },
+{ amprocfamily => 'btree/datetime_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'timestamp', amprocnum => '1',
+  amproc => 'timestamptz_cmp_timestamp' },
+{ amprocfamily => 'btree/datetime_ops', amproclefttype => 'date',
+  amprocrighttype => 'interval', amprocnum => '3',
+  amproc => 'in_range(date,date,interval,bool,bool)' },
+{ amprocfamily => 'btree/datetime_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'interval', amprocnum => '3',
+  amproc => 'in_range(timestamp,timestamp,interval,bool,bool)' },
+{ amprocfamily => 'btree/datetime_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'interval', amprocnum => '3',
+  amproc => 'in_range(timestamptz,timestamptz,interval,bool,bool)' },
+{ amprocfamily => 'btree/float_ops', amproclefttype => 'float4',
+  amprocrighttype => 'float4', amprocnum => '1', amproc => 'btfloat4cmp' },
+{ amprocfamily => 'btree/float_ops', amproclefttype => 'float4',
+  amprocrighttype => 'float4', amprocnum => '2',
+  amproc => 'btfloat4sortsupport' },
+{ amprocfamily => 'btree/float_ops', amproclefttype => 'float4',
+  amprocrighttype => 'float8', amprocnum => '1', amproc => 'btfloat48cmp' },
+{ amprocfamily => 'btree/float_ops', amproclefttype => 'float8',
+  amprocrighttype => 'float8', amprocnum => '1', amproc => 'btfloat8cmp' },
+{ amprocfamily => 'btree/float_ops', amproclefttype => 'float8',
+  amprocrighttype => 'float8', amprocnum => '2',
+  amproc => 'btfloat8sortsupport' },
+{ amprocfamily => 'btree/float_ops', amproclefttype => 'float8',
+  amprocrighttype => 'float4', amprocnum => '1', amproc => 'btfloat84cmp' },
+{ amprocfamily => 'btree/float_ops', amproclefttype => 'float8',
+  amprocrighttype => 'float8', amprocnum => '3',
+  amproc => 'in_range(float8,float8,float8,bool,bool)' },
+{ amprocfamily => 'btree/float_ops', amproclefttype => 'float4',
+  amprocrighttype => 'float8', amprocnum => '3',
+  amproc => 'in_range(float4,float4,float8,bool,bool)' },
+{ amprocfamily => 'btree/network_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '1', amproc => 'network_cmp' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int2', amprocnum => '1', amproc => 'btint2cmp' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int2', amprocnum => '2', amproc => 'btint2sortsupport' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int4', amprocnum => '1', amproc => 'btint24cmp' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int8', amprocnum => '1', amproc => 'btint28cmp' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int8', amprocnum => '3',
+  amproc => 'in_range(int2,int2,int8,bool,bool)' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int4', amprocnum => '3',
+  amproc => 'in_range(int2,int2,int4,bool,bool)' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int2', amprocnum => '3',
+  amproc => 'in_range(int2,int2,int2,bool,bool)' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int4', amprocnum => '1', amproc => 'btint4cmp' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int4', amprocnum => '2', amproc => 'btint4sortsupport' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int8', amprocnum => '1', amproc => 'btint48cmp' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int2', amprocnum => '1', amproc => 'btint42cmp' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int8', amprocnum => '3',
+  amproc => 'in_range(int4,int4,int8,bool,bool)' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int4', amprocnum => '3',
+  amproc => 'in_range(int4,int4,int4,bool,bool)' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int2', amprocnum => '3',
+  amproc => 'in_range(int4,int4,int2,bool,bool)' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int8', amprocnum => '1', amproc => 'btint8cmp' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int8', amprocnum => '2', amproc => 'btint8sortsupport' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int4', amprocnum => '1', amproc => 'btint84cmp' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int2', amprocnum => '1', amproc => 'btint82cmp' },
+{ amprocfamily => 'btree/integer_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int8', amprocnum => '3',
+  amproc => 'in_range(int8,int8,int8,bool,bool)' },
+{ amprocfamily => 'btree/interval_ops', amproclefttype => 'interval',
+  amprocrighttype => 'interval', amprocnum => '1', amproc => 'interval_cmp' },
+{ amprocfamily => 'btree/interval_ops', amproclefttype => 'interval',
+  amprocrighttype => 'interval', amprocnum => '3',
+  amproc => 'in_range(interval,interval,interval,bool,bool)' },
+{ amprocfamily => 'btree/macaddr_ops', amproclefttype => 'macaddr',
+  amprocrighttype => 'macaddr', amprocnum => '1', amproc => 'macaddr_cmp' },
+{ amprocfamily => 'btree/macaddr_ops', amproclefttype => 'macaddr',
+  amprocrighttype => 'macaddr', amprocnum => '2',
+  amproc => 'macaddr_sortsupport' },
+{ amprocfamily => 'btree/name_ops', amproclefttype => 'name',
+  amprocrighttype => 'name', amprocnum => '1', amproc => 'btnamecmp' },
+{ amprocfamily => 'btree/name_ops', amproclefttype => 'name',
+  amprocrighttype => 'name', amprocnum => '2', amproc => 'btnamesortsupport' },
+{ amprocfamily => 'btree/numeric_ops', amproclefttype => 'numeric',
+  amprocrighttype => 'numeric', amprocnum => '1', amproc => 'numeric_cmp' },
+{ amprocfamily => 'btree/numeric_ops', amproclefttype => 'numeric',
+  amprocrighttype => 'numeric', amprocnum => '2',
+  amproc => 'numeric_sortsupport' },
+{ amprocfamily => 'btree/numeric_ops', amproclefttype => 'numeric',
+  amprocrighttype => 'numeric', amprocnum => '3',
+  amproc => 'in_range(numeric,numeric,numeric,bool,bool)' },
+{ amprocfamily => 'btree/oid_ops', amproclefttype => 'oid',
+  amprocrighttype => 'oid', amprocnum => '1', amproc => 'btoidcmp' },
+{ amprocfamily => 'btree/oid_ops', amproclefttype => 'oid',
+  amprocrighttype => 'oid', amprocnum => '2', amproc => 'btoidsortsupport' },
+{ amprocfamily => 'btree/oidvector_ops', amproclefttype => 'oidvector',
+  amprocrighttype => 'oidvector', amprocnum => '1',
+  amproc => 'btoidvectorcmp' },
+{ amprocfamily => 'btree/text_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '1', amproc => 'bttextcmp' },
+{ amprocfamily => 'btree/text_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '2', amproc => 'bttextsortsupport' },
+{ amprocfamily => 'btree/time_ops', amproclefttype => 'time',
+  amprocrighttype => 'time', amprocnum => '1', amproc => 'time_cmp' },
+{ amprocfamily => 'btree/time_ops', amproclefttype => 'time',
+  amprocrighttype => 'interval', amprocnum => '3',
+  amproc => 'in_range(time,time,interval,bool,bool)' },
+{ amprocfamily => 'btree/timetz_ops', amproclefttype => 'timetz',
+  amprocrighttype => 'timetz', amprocnum => '1', amproc => 'timetz_cmp' },
+{ amprocfamily => 'btree/timetz_ops', amproclefttype => 'timetz',
+  amprocrighttype => 'interval', amprocnum => '3',
+  amproc => 'in_range(timetz,timetz,interval,bool,bool)' },
+{ amprocfamily => 'btree/varbit_ops', amproclefttype => 'varbit',
+  amprocrighttype => 'varbit', amprocnum => '1', amproc => 'varbitcmp' },
+{ amprocfamily => 'btree/text_pattern_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '1', amproc => 'bttext_pattern_cmp' },
+{ amprocfamily => 'btree/text_pattern_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '2',
+  amproc => 'bttext_pattern_sortsupport' },
+{ amprocfamily => 'btree/bpchar_pattern_ops', amproclefttype => 'bpchar',
+  amprocrighttype => 'bpchar', amprocnum => '1',
+  amproc => 'btbpchar_pattern_cmp' },
+{ amprocfamily => 'btree/bpchar_pattern_ops', amproclefttype => 'bpchar',
+  amprocrighttype => 'bpchar', amprocnum => '2',
+  amproc => 'btbpchar_pattern_sortsupport' },
+{ amprocfamily => 'btree/money_ops', amproclefttype => 'money',
+  amprocrighttype => 'money', amprocnum => '1', amproc => 'cash_cmp' },
+{ amprocfamily => 'btree/reltime_ops', amproclefttype => 'reltime',
+  amprocrighttype => 'reltime', amprocnum => '1', amproc => 'btreltimecmp' },
+{ amprocfamily => 'btree/tinterval_ops', amproclefttype => 'tinterval',
+  amprocrighttype => 'tinterval', amprocnum => '1',
+  amproc => 'bttintervalcmp' },
+{ amprocfamily => 'btree/tid_ops', amproclefttype => 'tid',
+  amprocrighttype => 'tid', amprocnum => '1', amproc => 'bttidcmp' },
+{ amprocfamily => 'btree/uuid_ops', amproclefttype => 'uuid',
+  amprocrighttype => 'uuid', amprocnum => '1', amproc => 'uuid_cmp' },
+{ amprocfamily => 'btree/uuid_ops', amproclefttype => 'uuid',
+  amprocrighttype => 'uuid', amprocnum => '2', amproc => 'uuid_sortsupport' },
+{ amprocfamily => 'btree/record_ops', amproclefttype => 'record',
+  amprocrighttype => 'record', amprocnum => '1', amproc => 'btrecordcmp' },
+{ amprocfamily => 'btree/record_image_ops', amproclefttype => 'record',
+  amprocrighttype => 'record', amprocnum => '1', amproc => 'btrecordimagecmp' },
+{ amprocfamily => 'btree/pg_lsn_ops', amproclefttype => 'pg_lsn',
+  amprocrighttype => 'pg_lsn', amprocnum => '1', amproc => 'pg_lsn_cmp' },
+{ amprocfamily => 'btree/macaddr8_ops', amproclefttype => 'macaddr8',
+  amprocrighttype => 'macaddr8', amprocnum => '1', amproc => 'macaddr8_cmp' },
+{ amprocfamily => 'btree/enum_ops', amproclefttype => 'anyenum',
+  amprocrighttype => 'anyenum', amprocnum => '1', amproc => 'enum_cmp' },
+{ amprocfamily => 'btree/tsvector_ops', amproclefttype => 'tsvector',
+  amprocrighttype => 'tsvector', amprocnum => '1', amproc => 'tsvector_cmp' },
+{ amprocfamily => 'btree/tsquery_ops', amproclefttype => 'tsquery',
+  amprocrighttype => 'tsquery', amprocnum => '1', amproc => 'tsquery_cmp' },
+{ amprocfamily => 'btree/range_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '1', amproc => 'range_cmp' },
+{ amprocfamily => 'btree/jsonb_ops', amproclefttype => 'jsonb',
+  amprocrighttype => 'jsonb', amprocnum => '1', amproc => 'jsonb_cmp' },
+
+# hash
+{ amprocfamily => 'hash/bpchar_ops', amproclefttype => 'bpchar',
+  amprocrighttype => 'bpchar', amprocnum => '1', amproc => 'hashbpchar' },
+{ amprocfamily => 'hash/bpchar_ops', amproclefttype => 'bpchar',
+  amprocrighttype => 'bpchar', amprocnum => '2',
+  amproc => 'hashbpcharextended' },
+{ amprocfamily => 'hash/char_ops', amproclefttype => 'char',
+  amprocrighttype => 'char', amprocnum => '1', amproc => 'hashchar' },
+{ amprocfamily => 'hash/char_ops', amproclefttype => 'char',
+  amprocrighttype => 'char', amprocnum => '2', amproc => 'hashcharextended' },
+{ amprocfamily => 'hash/date_ops', amproclefttype => 'date',
+  amprocrighttype => 'date', amprocnum => '1', amproc => 'hashint4' },
+{ amprocfamily => 'hash/date_ops', amproclefttype => 'date',
+  amprocrighttype => 'date', amprocnum => '2', amproc => 'hashint4extended' },
+{ amprocfamily => 'hash/array_ops', amproclefttype => 'anyarray',
+  amprocrighttype => 'anyarray', amprocnum => '1', amproc => 'hash_array' },
+{ amprocfamily => 'hash/array_ops', amproclefttype => 'anyarray',
+  amprocrighttype => 'anyarray', amprocnum => '2',
+  amproc => 'hash_array_extended' },
+{ amprocfamily => 'hash/float_ops', amproclefttype => 'float4',
+  amprocrighttype => 'float4', amprocnum => '1', amproc => 'hashfloat4' },
+{ amprocfamily => 'hash/float_ops', amproclefttype => 'float4',
+  amprocrighttype => 'float4', amprocnum => '2',
+  amproc => 'hashfloat4extended' },
+{ amprocfamily => 'hash/float_ops', amproclefttype => 'float8',
+  amprocrighttype => 'float8', amprocnum => '1', amproc => 'hashfloat8' },
+{ amprocfamily => 'hash/float_ops', amproclefttype => 'float8',
+  amprocrighttype => 'float8', amprocnum => '2',
+  amproc => 'hashfloat8extended' },
+{ amprocfamily => 'hash/network_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '1', amproc => 'hashinet' },
+{ amprocfamily => 'hash/network_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '2', amproc => 'hashinetextended' },
+{ amprocfamily => 'hash/integer_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int2', amprocnum => '1', amproc => 'hashint2' },
+{ amprocfamily => 'hash/integer_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int2', amprocnum => '2', amproc => 'hashint2extended' },
+{ amprocfamily => 'hash/integer_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int4', amprocnum => '1', amproc => 'hashint4' },
+{ amprocfamily => 'hash/integer_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int4', amprocnum => '2', amproc => 'hashint4extended' },
+{ amprocfamily => 'hash/integer_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int8', amprocnum => '1', amproc => 'hashint8' },
+{ amprocfamily => 'hash/integer_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int8', amprocnum => '2', amproc => 'hashint8extended' },
+{ amprocfamily => 'hash/interval_ops', amproclefttype => 'interval',
+  amprocrighttype => 'interval', amprocnum => '1', amproc => 'interval_hash' },
+{ amprocfamily => 'hash/interval_ops', amproclefttype => 'interval',
+  amprocrighttype => 'interval', amprocnum => '2',
+  amproc => 'interval_hash_extended' },
+{ amprocfamily => 'hash/macaddr_ops', amproclefttype => 'macaddr',
+  amprocrighttype => 'macaddr', amprocnum => '1', amproc => 'hashmacaddr' },
+{ amprocfamily => 'hash/macaddr_ops', amproclefttype => 'macaddr',
+  amprocrighttype => 'macaddr', amprocnum => '2',
+  amproc => 'hashmacaddrextended' },
+{ amprocfamily => 'hash/name_ops', amproclefttype => 'name',
+  amprocrighttype => 'name', amprocnum => '1', amproc => 'hashname' },
+{ amprocfamily => 'hash/name_ops', amproclefttype => 'name',
+  amprocrighttype => 'name', amprocnum => '2', amproc => 'hashnameextended' },
+{ amprocfamily => 'hash/oid_ops', amproclefttype => 'oid',
+  amprocrighttype => 'oid', amprocnum => '1', amproc => 'hashoid' },
+{ amprocfamily => 'hash/oid_ops', amproclefttype => 'oid',
+  amprocrighttype => 'oid', amprocnum => '2', amproc => 'hashoidextended' },
+{ amprocfamily => 'hash/oidvector_ops', amproclefttype => 'oidvector',
+  amprocrighttype => 'oidvector', amprocnum => '1', amproc => 'hashoidvector' },
+{ amprocfamily => 'hash/oidvector_ops', amproclefttype => 'oidvector',
+  amprocrighttype => 'oidvector', amprocnum => '2',
+  amproc => 'hashoidvectorextended' },
+{ amprocfamily => 'hash/text_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '1', amproc => 'hashtext' },
+{ amprocfamily => 'hash/text_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '2', amproc => 'hashtextextended' },
+{ amprocfamily => 'hash/time_ops', amproclefttype => 'time',
+  amprocrighttype => 'time', amprocnum => '1', amproc => 'time_hash' },
+{ amprocfamily => 'hash/time_ops', amproclefttype => 'time',
+  amprocrighttype => 'time', amprocnum => '2', amproc => 'time_hash_extended' },
+{ amprocfamily => 'hash/numeric_ops', amproclefttype => 'numeric',
+  amprocrighttype => 'numeric', amprocnum => '1', amproc => 'hash_numeric' },
+{ amprocfamily => 'hash/numeric_ops', amproclefttype => 'numeric',
+  amprocrighttype => 'numeric', amprocnum => '2',
+  amproc => 'hash_numeric_extended' },
+{ amprocfamily => 'hash/timestamptz_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'timestamptz', amprocnum => '1',
+  amproc => 'timestamp_hash' },
+{ amprocfamily => 'hash/timestamptz_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'timestamptz', amprocnum => '2',
+  amproc => 'timestamp_hash_extended' },
+{ amprocfamily => 'hash/timetz_ops', amproclefttype => 'timetz',
+  amprocrighttype => 'timetz', amprocnum => '1', amproc => 'timetz_hash' },
+{ amprocfamily => 'hash/timetz_ops', amproclefttype => 'timetz',
+  amprocrighttype => 'timetz', amprocnum => '2',
+  amproc => 'timetz_hash_extended' },
+{ amprocfamily => 'hash/timestamp_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'timestamp', amprocnum => '1',
+  amproc => 'timestamp_hash' },
+{ amprocfamily => 'hash/timestamp_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'timestamp', amprocnum => '2',
+  amproc => 'timestamp_hash_extended' },
+{ amprocfamily => 'hash/bool_ops', amproclefttype => 'bool',
+  amprocrighttype => 'bool', amprocnum => '1', amproc => 'hashchar' },
+{ amprocfamily => 'hash/bool_ops', amproclefttype => 'bool',
+  amprocrighttype => 'bool', amprocnum => '2', amproc => 'hashcharextended' },
+{ amprocfamily => 'hash/bytea_ops', amproclefttype => 'bytea',
+  amprocrighttype => 'bytea', amprocnum => '1', amproc => 'hashvarlena' },
+{ amprocfamily => 'hash/bytea_ops', amproclefttype => 'bytea',
+  amprocrighttype => 'bytea', amprocnum => '2',
+  amproc => 'hashvarlenaextended' },
+{ amprocfamily => 'hash/xid_ops', amproclefttype => 'xid',
+  amprocrighttype => 'xid', amprocnum => '1', amproc => 'hashint4' },
+{ amprocfamily => 'hash/xid_ops', amproclefttype => 'xid',
+  amprocrighttype => 'xid', amprocnum => '2', amproc => 'hashint4extended' },
+{ amprocfamily => 'hash/cid_ops', amproclefttype => 'cid',
+  amprocrighttype => 'cid', amprocnum => '1', amproc => 'hashint4' },
+{ amprocfamily => 'hash/cid_ops', amproclefttype => 'cid',
+  amprocrighttype => 'cid', amprocnum => '2', amproc => 'hashint4extended' },
+{ amprocfamily => 'hash/abstime_ops', amproclefttype => 'abstime',
+  amprocrighttype => 'abstime', amprocnum => '1', amproc => 'hashint4' },
+{ amprocfamily => 'hash/abstime_ops', amproclefttype => 'abstime',
+  amprocrighttype => 'abstime', amprocnum => '2',
+  amproc => 'hashint4extended' },
+{ amprocfamily => 'hash/reltime_ops', amproclefttype => 'reltime',
+  amprocrighttype => 'reltime', amprocnum => '1', amproc => 'hashint4' },
+{ amprocfamily => 'hash/reltime_ops', amproclefttype => 'reltime',
+  amprocrighttype => 'reltime', amprocnum => '2',
+  amproc => 'hashint4extended' },
+{ amprocfamily => 'hash/text_pattern_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '1', amproc => 'hashtext' },
+{ amprocfamily => 'hash/text_pattern_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '2', amproc => 'hashtextextended' },
+{ amprocfamily => 'hash/bpchar_pattern_ops', amproclefttype => 'bpchar',
+  amprocrighttype => 'bpchar', amprocnum => '1', amproc => 'hashbpchar' },
+{ amprocfamily => 'hash/bpchar_pattern_ops', amproclefttype => 'bpchar',
+  amprocrighttype => 'bpchar', amprocnum => '2',
+  amproc => 'hashbpcharextended' },
+{ amprocfamily => 'hash/aclitem_ops', amproclefttype => 'aclitem',
+  amprocrighttype => 'aclitem', amprocnum => '1', amproc => 'hash_aclitem' },
+{ amprocfamily => 'hash/aclitem_ops', amproclefttype => 'aclitem',
+  amprocrighttype => 'aclitem', amprocnum => '2',
+  amproc => 'hash_aclitem_extended' },
+{ amprocfamily => 'hash/uuid_ops', amproclefttype => 'uuid',
+  amprocrighttype => 'uuid', amprocnum => '1', amproc => 'uuid_hash' },
+{ amprocfamily => 'hash/uuid_ops', amproclefttype => 'uuid',
+  amprocrighttype => 'uuid', amprocnum => '2', amproc => 'uuid_hash_extended' },
+{ amprocfamily => 'hash/pg_lsn_ops', amproclefttype => 'pg_lsn',
+  amprocrighttype => 'pg_lsn', amprocnum => '1', amproc => 'pg_lsn_hash' },
+{ amprocfamily => 'hash/pg_lsn_ops', amproclefttype => 'pg_lsn',
+  amprocrighttype => 'pg_lsn', amprocnum => '2',
+  amproc => 'pg_lsn_hash_extended' },
+{ amprocfamily => 'hash/macaddr8_ops', amproclefttype => 'macaddr8',
+  amprocrighttype => 'macaddr8', amprocnum => '1', amproc => 'hashmacaddr8' },
+{ amprocfamily => 'hash/macaddr8_ops', amproclefttype => 'macaddr8',
+  amprocrighttype => 'macaddr8', amprocnum => '2',
+  amproc => 'hashmacaddr8extended' },
+{ amprocfamily => 'hash/enum_ops', amproclefttype => 'anyenum',
+  amprocrighttype => 'anyenum', amprocnum => '1', amproc => 'hashenum' },
+{ amprocfamily => 'hash/enum_ops', amproclefttype => 'anyenum',
+  amprocrighttype => 'anyenum', amprocnum => '2',
+  amproc => 'hashenumextended' },
+{ amprocfamily => 'hash/range_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '1', amproc => 'hash_range' },
+{ amprocfamily => 'hash/range_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '2',
+  amproc => 'hash_range_extended' },
+{ amprocfamily => 'hash/jsonb_ops', amproclefttype => 'jsonb',
+  amprocrighttype => 'jsonb', amprocnum => '1', amproc => 'jsonb_hash' },
+{ amprocfamily => 'hash/jsonb_ops', amproclefttype => 'jsonb',
+  amprocrighttype => 'jsonb', amprocnum => '2',
+  amproc => 'jsonb_hash_extended' },
+
+# gist
+{ amprocfamily => 'gist/point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '1',
+  amproc => 'gist_point_consistent' },
+{ amprocfamily => 'gist/point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '2', amproc => 'gist_box_union' },
+{ amprocfamily => 'gist/point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '3',
+  amproc => 'gist_point_compress' },
+{ amprocfamily => 'gist/point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '5', amproc => 'gist_box_penalty' },
+{ amprocfamily => 'gist/point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '6',
+  amproc => 'gist_box_picksplit' },
+{ amprocfamily => 'gist/point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '7', amproc => 'gist_box_same' },
+{ amprocfamily => 'gist/point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '8',
+  amproc => 'gist_point_distance' },
+{ amprocfamily => 'gist/point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '9', amproc => 'gist_point_fetch' },
+{ amprocfamily => 'gist/box_ops', amproclefttype => 'box',
+  amprocrighttype => 'box', amprocnum => '1', amproc => 'gist_box_consistent' },
+{ amprocfamily => 'gist/box_ops', amproclefttype => 'box',
+  amprocrighttype => 'box', amprocnum => '2', amproc => 'gist_box_union' },
+{ amprocfamily => 'gist/box_ops', amproclefttype => 'box',
+  amprocrighttype => 'box', amprocnum => '5', amproc => 'gist_box_penalty' },
+{ amprocfamily => 'gist/box_ops', amproclefttype => 'box',
+  amprocrighttype => 'box', amprocnum => '6', amproc => 'gist_box_picksplit' },
+{ amprocfamily => 'gist/box_ops', amproclefttype => 'box',
+  amprocrighttype => 'box', amprocnum => '7', amproc => 'gist_box_same' },
+{ amprocfamily => 'gist/poly_ops', amproclefttype => 'polygon',
+  amprocrighttype => 'polygon', amprocnum => '1',
+  amproc => 'gist_poly_consistent' },
+{ amprocfamily => 'gist/poly_ops', amproclefttype => 'polygon',
+  amprocrighttype => 'polygon', amprocnum => '2', amproc => 'gist_box_union' },
+{ amprocfamily => 'gist/poly_ops', amproclefttype => 'polygon',
+  amprocrighttype => 'polygon', amprocnum => '3',
+  amproc => 'gist_poly_compress' },
+{ amprocfamily => 'gist/poly_ops', amproclefttype => 'polygon',
+  amprocrighttype => 'polygon', amprocnum => '5',
+  amproc => 'gist_box_penalty' },
+{ amprocfamily => 'gist/poly_ops', amproclefttype => 'polygon',
+  amprocrighttype => 'polygon', amprocnum => '6',
+  amproc => 'gist_box_picksplit' },
+{ amprocfamily => 'gist/poly_ops', amproclefttype => 'polygon',
+  amprocrighttype => 'polygon', amprocnum => '7', amproc => 'gist_box_same' },
+{ amprocfamily => 'gist/poly_ops', amproclefttype => 'polygon',
+  amprocrighttype => 'polygon', amprocnum => '8',
+  amproc => 'gist_poly_distance' },
+{ amprocfamily => 'gist/circle_ops', amproclefttype => 'circle',
+  amprocrighttype => 'circle', amprocnum => '1',
+  amproc => 'gist_circle_consistent' },
+{ amprocfamily => 'gist/circle_ops', amproclefttype => 'circle',
+  amprocrighttype => 'circle', amprocnum => '2', amproc => 'gist_box_union' },
+{ amprocfamily => 'gist/circle_ops', amproclefttype => 'circle',
+  amprocrighttype => 'circle', amprocnum => '3',
+  amproc => 'gist_circle_compress' },
+{ amprocfamily => 'gist/circle_ops', amproclefttype => 'circle',
+  amprocrighttype => 'circle', amprocnum => '5', amproc => 'gist_box_penalty' },
+{ amprocfamily => 'gist/circle_ops', amproclefttype => 'circle',
+  amprocrighttype => 'circle', amprocnum => '6',
+  amproc => 'gist_box_picksplit' },
+{ amprocfamily => 'gist/circle_ops', amproclefttype => 'circle',
+  amprocrighttype => 'circle', amprocnum => '7', amproc => 'gist_box_same' },
+{ amprocfamily => 'gist/circle_ops', amproclefttype => 'circle',
+  amprocrighttype => 'circle', amprocnum => '8',
+  amproc => 'gist_circle_distance' },
+{ amprocfamily => 'gist/tsvector_ops', amproclefttype => 'tsvector',
+  amprocrighttype => 'tsvector', amprocnum => '1',
+  amproc => 'gtsvector_consistent(internal,tsvector,int2,oid,internal)' },
+{ amprocfamily => 'gist/tsvector_ops', amproclefttype => 'tsvector',
+  amprocrighttype => 'tsvector', amprocnum => '2',
+  amproc => 'gtsvector_union' },
+{ amprocfamily => 'gist/tsvector_ops', amproclefttype => 'tsvector',
+  amprocrighttype => 'tsvector', amprocnum => '3',
+  amproc => 'gtsvector_compress' },
+{ amprocfamily => 'gist/tsvector_ops', amproclefttype => 'tsvector',
+  amprocrighttype => 'tsvector', amprocnum => '4',
+  amproc => 'gtsvector_decompress' },
+{ amprocfamily => 'gist/tsvector_ops', amproclefttype => 'tsvector',
+  amprocrighttype => 'tsvector', amprocnum => '5',
+  amproc => 'gtsvector_penalty' },
+{ amprocfamily => 'gist/tsvector_ops', amproclefttype => 'tsvector',
+  amprocrighttype => 'tsvector', amprocnum => '6',
+  amproc => 'gtsvector_picksplit' },
+{ amprocfamily => 'gist/tsvector_ops', amproclefttype => 'tsvector',
+  amprocrighttype => 'tsvector', amprocnum => '7', amproc => 'gtsvector_same' },
+{ amprocfamily => 'gist/tsquery_ops', amproclefttype => 'tsquery',
+  amprocrighttype => 'tsquery', amprocnum => '1',
+  amproc => 'gtsquery_consistent(internal,tsquery,int2,oid,internal)' },
+{ amprocfamily => 'gist/tsquery_ops', amproclefttype => 'tsquery',
+  amprocrighttype => 'tsquery', amprocnum => '2', amproc => 'gtsquery_union' },
+{ amprocfamily => 'gist/tsquery_ops', amproclefttype => 'tsquery',
+  amprocrighttype => 'tsquery', amprocnum => '3',
+  amproc => 'gtsquery_compress' },
+{ amprocfamily => 'gist/tsquery_ops', amproclefttype => 'tsquery',
+  amprocrighttype => 'tsquery', amprocnum => '5',
+  amproc => 'gtsquery_penalty' },
+{ amprocfamily => 'gist/tsquery_ops', amproclefttype => 'tsquery',
+  amprocrighttype => 'tsquery', amprocnum => '6',
+  amproc => 'gtsquery_picksplit' },
+{ amprocfamily => 'gist/tsquery_ops', amproclefttype => 'tsquery',
+  amprocrighttype => 'tsquery', amprocnum => '7', amproc => 'gtsquery_same' },
+{ amprocfamily => 'gist/range_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '1',
+  amproc => 'range_gist_consistent' },
+{ amprocfamily => 'gist/range_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '2',
+  amproc => 'range_gist_union' },
+{ amprocfamily => 'gist/range_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '5',
+  amproc => 'range_gist_penalty' },
+{ amprocfamily => 'gist/range_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '6',
+  amproc => 'range_gist_picksplit' },
+{ amprocfamily => 'gist/range_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '7',
+  amproc => 'range_gist_same' },
+{ amprocfamily => 'gist/network_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '1',
+  amproc => 'inet_gist_consistent' },
+{ amprocfamily => 'gist/network_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '2', amproc => 'inet_gist_union' },
+{ amprocfamily => 'gist/network_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '3', amproc => 'inet_gist_compress' },
+{ amprocfamily => 'gist/network_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '5', amproc => 'inet_gist_penalty' },
+{ amprocfamily => 'gist/network_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '6',
+  amproc => 'inet_gist_picksplit' },
+{ amprocfamily => 'gist/network_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '7', amproc => 'inet_gist_same' },
+{ amprocfamily => 'gist/network_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '9', amproc => 'inet_gist_fetch' },
+
+# gin
+{ amprocfamily => 'gin/array_ops', amproclefttype => 'anyarray',
+  amprocrighttype => 'anyarray', amprocnum => '2',
+  amproc => 'ginarrayextract(anyarray,internal,internal)' },
+{ amprocfamily => 'gin/array_ops', amproclefttype => 'anyarray',
+  amprocrighttype => 'anyarray', amprocnum => '3',
+  amproc => 'ginqueryarrayextract' },
+{ amprocfamily => 'gin/array_ops', amproclefttype => 'anyarray',
+  amprocrighttype => 'anyarray', amprocnum => '4',
+  amproc => 'ginarrayconsistent' },
+{ amprocfamily => 'gin/array_ops', amproclefttype => 'anyarray',
+  amprocrighttype => 'anyarray', amprocnum => '6',
+  amproc => 'ginarraytriconsistent' },
+{ amprocfamily => 'gin/tsvector_ops', amproclefttype => 'tsvector',
+  amprocrighttype => 'tsvector', amprocnum => '1',
+  amproc => 'gin_cmp_tslexeme' },
+{ amprocfamily => 'gin/tsvector_ops', amproclefttype => 'tsvector',
+  amprocrighttype => 'tsvector', amprocnum => '2',
+  amproc => 'gin_extract_tsvector(tsvector,internal,internal)' },
+{ amprocfamily => 'gin/tsvector_ops', amproclefttype => 'tsvector',
+  amprocrighttype => 'tsvector', amprocnum => '3',
+  amproc => 'gin_extract_tsquery(tsvector,internal,int2,internal,internal,internal,internal)' },
+{ amprocfamily => 'gin/tsvector_ops', amproclefttype => 'tsvector',
+  amprocrighttype => 'tsvector', amprocnum => '4',
+  amproc => 'gin_tsquery_consistent(internal,int2,tsvector,int4,internal,internal,internal,internal)' },
+{ amprocfamily => 'gin/tsvector_ops', amproclefttype => 'tsvector',
+  amprocrighttype => 'tsvector', amprocnum => '5', amproc => 'gin_cmp_prefix' },
+{ amprocfamily => 'gin/tsvector_ops', amproclefttype => 'tsvector',
+  amprocrighttype => 'tsvector', amprocnum => '6',
+  amproc => 'gin_tsquery_triconsistent' },
+{ amprocfamily => 'gin/jsonb_ops', amproclefttype => 'jsonb',
+  amprocrighttype => 'jsonb', amprocnum => '1', amproc => 'gin_compare_jsonb' },
+{ amprocfamily => 'gin/jsonb_ops', amproclefttype => 'jsonb',
+  amprocrighttype => 'jsonb', amprocnum => '2', amproc => 'gin_extract_jsonb' },
+{ amprocfamily => 'gin/jsonb_ops', amproclefttype => 'jsonb',
+  amprocrighttype => 'jsonb', amprocnum => '3',
+  amproc => 'gin_extract_jsonb_query' },
+{ amprocfamily => 'gin/jsonb_ops', amproclefttype => 'jsonb',
+  amprocrighttype => 'jsonb', amprocnum => '4',
+  amproc => 'gin_consistent_jsonb' },
+{ amprocfamily => 'gin/jsonb_ops', amproclefttype => 'jsonb',
+  amprocrighttype => 'jsonb', amprocnum => '6',
+  amproc => 'gin_triconsistent_jsonb' },
+{ amprocfamily => 'gin/jsonb_path_ops', amproclefttype => 'jsonb',
+  amprocrighttype => 'jsonb', amprocnum => '1', amproc => 'btint4cmp' },
+{ amprocfamily => 'gin/jsonb_path_ops', amproclefttype => 'jsonb',
+  amprocrighttype => 'jsonb', amprocnum => '2',
+  amproc => 'gin_extract_jsonb_path' },
+{ amprocfamily => 'gin/jsonb_path_ops', amproclefttype => 'jsonb',
+  amprocrighttype => 'jsonb', amprocnum => '3',
+  amproc => 'gin_extract_jsonb_query_path' },
+{ amprocfamily => 'gin/jsonb_path_ops', amproclefttype => 'jsonb',
+  amprocrighttype => 'jsonb', amprocnum => '4',
+  amproc => 'gin_consistent_jsonb_path' },
+{ amprocfamily => 'gin/jsonb_path_ops', amproclefttype => 'jsonb',
+  amprocrighttype => 'jsonb', amprocnum => '6',
+  amproc => 'gin_triconsistent_jsonb_path' },
+
+# sp-gist
+{ amprocfamily => 'spgist/range_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '1',
+  amproc => 'spg_range_quad_config' },
+{ amprocfamily => 'spgist/range_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '2',
+  amproc => 'spg_range_quad_choose' },
+{ amprocfamily => 'spgist/range_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '3',
+  amproc => 'spg_range_quad_picksplit' },
+{ amprocfamily => 'spgist/range_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '4',
+  amproc => 'spg_range_quad_inner_consistent' },
+{ amprocfamily => 'spgist/range_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '5',
+  amproc => 'spg_range_quad_leaf_consistent' },
+{ amprocfamily => 'spgist/network_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '1', amproc => 'inet_spg_config' },
+{ amprocfamily => 'spgist/network_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '2', amproc => 'inet_spg_choose' },
+{ amprocfamily => 'spgist/network_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '3', amproc => 'inet_spg_picksplit' },
+{ amprocfamily => 'spgist/network_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '4',
+  amproc => 'inet_spg_inner_consistent' },
+{ amprocfamily => 'spgist/network_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '5',
+  amproc => 'inet_spg_leaf_consistent' },
+{ amprocfamily => 'spgist/quad_point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '1', amproc => 'spg_quad_config' },
+{ amprocfamily => 'spgist/quad_point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '2', amproc => 'spg_quad_choose' },
+{ amprocfamily => 'spgist/quad_point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '3',
+  amproc => 'spg_quad_picksplit' },
+{ amprocfamily => 'spgist/quad_point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '4',
+  amproc => 'spg_quad_inner_consistent' },
+{ amprocfamily => 'spgist/quad_point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '5',
+  amproc => 'spg_quad_leaf_consistent' },
+{ amprocfamily => 'spgist/kd_point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '1', amproc => 'spg_kd_config' },
+{ amprocfamily => 'spgist/kd_point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '2', amproc => 'spg_kd_choose' },
+{ amprocfamily => 'spgist/kd_point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '3', amproc => 'spg_kd_picksplit' },
+{ amprocfamily => 'spgist/kd_point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '4',
+  amproc => 'spg_kd_inner_consistent' },
+{ amprocfamily => 'spgist/kd_point_ops', amproclefttype => 'point',
+  amprocrighttype => 'point', amprocnum => '5',
+  amproc => 'spg_quad_leaf_consistent' },
+{ amprocfamily => 'spgist/text_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '1', amproc => 'spg_text_config' },
+{ amprocfamily => 'spgist/text_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '2', amproc => 'spg_text_choose' },
+{ amprocfamily => 'spgist/text_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '3', amproc => 'spg_text_picksplit' },
+{ amprocfamily => 'spgist/text_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '4',
+  amproc => 'spg_text_inner_consistent' },
+{ amprocfamily => 'spgist/text_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '5',
+  amproc => 'spg_text_leaf_consistent' },
+{ amprocfamily => 'spgist/box_ops', amproclefttype => 'box',
+  amprocrighttype => 'box', amprocnum => '1', amproc => 'spg_box_quad_config' },
+{ amprocfamily => 'spgist/box_ops', amproclefttype => 'box',
+  amprocrighttype => 'box', amprocnum => '2', amproc => 'spg_box_quad_choose' },
+{ amprocfamily => 'spgist/box_ops', amproclefttype => 'box',
+  amprocrighttype => 'box', amprocnum => '3',
+  amproc => 'spg_box_quad_picksplit' },
+{ amprocfamily => 'spgist/box_ops', amproclefttype => 'box',
+  amprocrighttype => 'box', amprocnum => '4',
+  amproc => 'spg_box_quad_inner_consistent' },
+{ amprocfamily => 'spgist/box_ops', amproclefttype => 'box',
+  amprocrighttype => 'box', amprocnum => '5',
+  amproc => 'spg_box_quad_leaf_consistent' },
+{ amprocfamily => 'spgist/poly_ops', amproclefttype => 'polygon',
+  amprocrighttype => 'polygon', amprocnum => '1',
+  amproc => 'spg_bbox_quad_config' },
+{ amprocfamily => 'spgist/poly_ops', amproclefttype => 'polygon',
+  amprocrighttype => 'polygon', amprocnum => '2',
+  amproc => 'spg_box_quad_choose' },
+{ amprocfamily => 'spgist/poly_ops', amproclefttype => 'polygon',
+  amprocrighttype => 'polygon', amprocnum => '3',
+  amproc => 'spg_box_quad_picksplit' },
+{ amprocfamily => 'spgist/poly_ops', amproclefttype => 'polygon',
+  amprocrighttype => 'polygon', amprocnum => '4',
+  amproc => 'spg_box_quad_inner_consistent' },
+{ amprocfamily => 'spgist/poly_ops', amproclefttype => 'polygon',
+  amprocrighttype => 'polygon', amprocnum => '5',
+  amproc => 'spg_box_quad_leaf_consistent' },
+{ amprocfamily => 'spgist/poly_ops', amproclefttype => 'polygon',
+  amprocrighttype => 'polygon', amprocnum => '6',
+  amproc => 'spg_poly_quad_compress' },
+
+# BRIN opclasses
+
+# minmax bytea
+{ amprocfamily => 'brin/bytea_minmax_ops', amproclefttype => 'bytea',
+  amprocrighttype => 'bytea', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/bytea_minmax_ops', amproclefttype => 'bytea',
+  amprocrighttype => 'bytea', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/bytea_minmax_ops', amproclefttype => 'bytea',
+  amprocrighttype => 'bytea', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/bytea_minmax_ops', amproclefttype => 'bytea',
+  amprocrighttype => 'bytea', amprocnum => '4', amproc => 'brin_minmax_union' },
+
+# minmax "char"
+{ amprocfamily => 'brin/char_minmax_ops', amproclefttype => 'char',
+  amprocrighttype => 'char', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/char_minmax_ops', amproclefttype => 'char',
+  amprocrighttype => 'char', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/char_minmax_ops', amproclefttype => 'char',
+  amprocrighttype => 'char', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/char_minmax_ops', amproclefttype => 'char',
+  amprocrighttype => 'char', amprocnum => '4', amproc => 'brin_minmax_union' },
+
+# minmax name
+{ amprocfamily => 'brin/name_minmax_ops', amproclefttype => 'name',
+  amprocrighttype => 'name', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/name_minmax_ops', amproclefttype => 'name',
+  amprocrighttype => 'name', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/name_minmax_ops', amproclefttype => 'name',
+  amprocrighttype => 'name', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/name_minmax_ops', amproclefttype => 'name',
+  amprocrighttype => 'name', amprocnum => '4', amproc => 'brin_minmax_union' },
+
+# minmax integer: int2, int4, int8
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int8', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int8', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int8', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int8', amprocnum => '4', amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int2', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int2', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int2', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int2', amprocnum => '4', amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int4', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int4', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int4', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int8',
+  amprocrighttype => 'int4', amprocnum => '4', amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int2', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int2', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int2', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int2', amprocnum => '4', amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int8', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int8', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int8', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int8', amprocnum => '4', amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int4', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int4', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int4', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int2',
+  amprocrighttype => 'int4', amprocnum => '4', amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int4', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int4', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int4', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int4', amprocnum => '4', amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int8', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int8', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int8', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int8', amprocnum => '4', amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int2', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int2', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int2', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/integer_minmax_ops', amproclefttype => 'int4',
+  amprocrighttype => 'int2', amprocnum => '4', amproc => 'brin_minmax_union' },
+
+# minmax text
+{ amprocfamily => 'brin/text_minmax_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/text_minmax_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/text_minmax_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/text_minmax_ops', amproclefttype => 'text',
+  amprocrighttype => 'text', amprocnum => '4', amproc => 'brin_minmax_union' },
+
+# minmax oid
+{ amprocfamily => 'brin/oid_minmax_ops', amproclefttype => 'oid',
+  amprocrighttype => 'oid', amprocnum => '1', amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/oid_minmax_ops', amproclefttype => 'oid',
+  amprocrighttype => 'oid', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/oid_minmax_ops', amproclefttype => 'oid',
+  amprocrighttype => 'oid', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/oid_minmax_ops', amproclefttype => 'oid',
+  amprocrighttype => 'oid', amprocnum => '4', amproc => 'brin_minmax_union' },
+
+# minmax tid
+{ amprocfamily => 'brin/tid_minmax_ops', amproclefttype => 'tid',
+  amprocrighttype => 'tid', amprocnum => '1', amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/tid_minmax_ops', amproclefttype => 'tid',
+  amprocrighttype => 'tid', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/tid_minmax_ops', amproclefttype => 'tid',
+  amprocrighttype => 'tid', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/tid_minmax_ops', amproclefttype => 'tid',
+  amprocrighttype => 'tid', amprocnum => '4', amproc => 'brin_minmax_union' },
+
+# minmax float
+{ amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float4',
+  amprocrighttype => 'float4', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float4',
+  amprocrighttype => 'float4', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float4',
+  amprocrighttype => 'float4', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float4',
+  amprocrighttype => 'float4', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float4',
+  amprocrighttype => 'float8', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float4',
+  amprocrighttype => 'float8', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float4',
+  amprocrighttype => 'float8', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float4',
+  amprocrighttype => 'float8', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float8',
+  amprocrighttype => 'float8', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float8',
+  amprocrighttype => 'float8', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float8',
+  amprocrighttype => 'float8', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float8',
+  amprocrighttype => 'float8', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float8',
+  amprocrighttype => 'float4', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float8',
+  amprocrighttype => 'float4', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float8',
+  amprocrighttype => 'float4', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/float_minmax_ops', amproclefttype => 'float8',
+  amprocrighttype => 'float4', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+
+# minmax abstime
+{ amprocfamily => 'brin/abstime_minmax_ops', amproclefttype => 'abstime',
+  amprocrighttype => 'abstime', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/abstime_minmax_ops', amproclefttype => 'abstime',
+  amprocrighttype => 'abstime', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/abstime_minmax_ops', amproclefttype => 'abstime',
+  amprocrighttype => 'abstime', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/abstime_minmax_ops', amproclefttype => 'abstime',
+  amprocrighttype => 'abstime', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+
+# minmax reltime
+{ amprocfamily => 'brin/reltime_minmax_ops', amproclefttype => 'reltime',
+  amprocrighttype => 'reltime', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/reltime_minmax_ops', amproclefttype => 'reltime',
+  amprocrighttype => 'reltime', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/reltime_minmax_ops', amproclefttype => 'reltime',
+  amprocrighttype => 'reltime', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/reltime_minmax_ops', amproclefttype => 'reltime',
+  amprocrighttype => 'reltime', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+
+# minmax macaddr
+{ amprocfamily => 'brin/macaddr_minmax_ops', amproclefttype => 'macaddr',
+  amprocrighttype => 'macaddr', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/macaddr_minmax_ops', amproclefttype => 'macaddr',
+  amprocrighttype => 'macaddr', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/macaddr_minmax_ops', amproclefttype => 'macaddr',
+  amprocrighttype => 'macaddr', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/macaddr_minmax_ops', amproclefttype => 'macaddr',
+  amprocrighttype => 'macaddr', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+
+# minmax macaddr8
+{ amprocfamily => 'brin/macaddr8_minmax_ops', amproclefttype => 'macaddr8',
+  amprocrighttype => 'macaddr8', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/macaddr8_minmax_ops', amproclefttype => 'macaddr8',
+  amprocrighttype => 'macaddr8', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/macaddr8_minmax_ops', amproclefttype => 'macaddr8',
+  amprocrighttype => 'macaddr8', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/macaddr8_minmax_ops', amproclefttype => 'macaddr8',
+  amprocrighttype => 'macaddr8', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+
+# minmax inet
+{ amprocfamily => 'brin/network_minmax_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/network_minmax_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/network_minmax_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/network_minmax_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '4', amproc => 'brin_minmax_union' },
+
+# inclusion inet
+{ amprocfamily => 'brin/network_inclusion_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '1',
+  amproc => 'brin_inclusion_opcinfo' },
+{ amprocfamily => 'brin/network_inclusion_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '2',
+  amproc => 'brin_inclusion_add_value' },
+{ amprocfamily => 'brin/network_inclusion_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '3',
+  amproc => 'brin_inclusion_consistent' },
+{ amprocfamily => 'brin/network_inclusion_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '4',
+  amproc => 'brin_inclusion_union' },
+{ amprocfamily => 'brin/network_inclusion_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '11', amproc => 'inet_merge' },
+{ amprocfamily => 'brin/network_inclusion_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '12', amproc => 'inet_same_family' },
+{ amprocfamily => 'brin/network_inclusion_ops', amproclefttype => 'inet',
+  amprocrighttype => 'inet', amprocnum => '13', amproc => 'network_supeq' },
+
+# minmax character
+{ amprocfamily => 'brin/bpchar_minmax_ops', amproclefttype => 'bpchar',
+  amprocrighttype => 'bpchar', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/bpchar_minmax_ops', amproclefttype => 'bpchar',
+  amprocrighttype => 'bpchar', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/bpchar_minmax_ops', amproclefttype => 'bpchar',
+  amprocrighttype => 'bpchar', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/bpchar_minmax_ops', amproclefttype => 'bpchar',
+  amprocrighttype => 'bpchar', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+
+# minmax time without time zone
+{ amprocfamily => 'brin/time_minmax_ops', amproclefttype => 'time',
+  amprocrighttype => 'time', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/time_minmax_ops', amproclefttype => 'time',
+  amprocrighttype => 'time', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/time_minmax_ops', amproclefttype => 'time',
+  amprocrighttype => 'time', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/time_minmax_ops', amproclefttype => 'time',
+  amprocrighttype => 'time', amprocnum => '4', amproc => 'brin_minmax_union' },
+
+# minmax datetime (date, timestamp, timestamptz)
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'timestamp', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'timestamp', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'timestamp', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'timestamp', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'timestamptz', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'timestamptz', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'timestamptz', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'timestamptz', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'date', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'date', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'date', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamp',
+  amprocrighttype => 'date', amprocnum => '4', amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'timestamptz', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'timestamptz', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'timestamptz', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'timestamptz', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'timestamp', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'timestamp', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'timestamp', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'timestamp', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'date', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'date', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'date', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'timestamptz',
+  amprocrighttype => 'date', amprocnum => '4', amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'date',
+  amprocrighttype => 'date', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'date',
+  amprocrighttype => 'date', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'date',
+  amprocrighttype => 'date', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'date',
+  amprocrighttype => 'date', amprocnum => '4', amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'date',
+  amprocrighttype => 'timestamp', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'date',
+  amprocrighttype => 'timestamp', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'date',
+  amprocrighttype => 'timestamp', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'date',
+  amprocrighttype => 'timestamp', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'date',
+  amprocrighttype => 'timestamptz', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'date',
+  amprocrighttype => 'timestamptz', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'date',
+  amprocrighttype => 'timestamptz', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/datetime_minmax_ops', amproclefttype => 'date',
+  amprocrighttype => 'timestamptz', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+
+# minmax interval
+{ amprocfamily => 'brin/interval_minmax_ops', amproclefttype => 'interval',
+  amprocrighttype => 'interval', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/interval_minmax_ops', amproclefttype => 'interval',
+  amprocrighttype => 'interval', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/interval_minmax_ops', amproclefttype => 'interval',
+  amprocrighttype => 'interval', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/interval_minmax_ops', amproclefttype => 'interval',
+  amprocrighttype => 'interval', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+
+# minmax time with time zone
+{ amprocfamily => 'brin/timetz_minmax_ops', amproclefttype => 'timetz',
+  amprocrighttype => 'timetz', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/timetz_minmax_ops', amproclefttype => 'timetz',
+  amprocrighttype => 'timetz', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/timetz_minmax_ops', amproclefttype => 'timetz',
+  amprocrighttype => 'timetz', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/timetz_minmax_ops', amproclefttype => 'timetz',
+  amprocrighttype => 'timetz', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+
+# minmax bit
+{ amprocfamily => 'brin/bit_minmax_ops', amproclefttype => 'bit',
+  amprocrighttype => 'bit', amprocnum => '1', amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/bit_minmax_ops', amproclefttype => 'bit',
+  amprocrighttype => 'bit', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/bit_minmax_ops', amproclefttype => 'bit',
+  amprocrighttype => 'bit', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/bit_minmax_ops', amproclefttype => 'bit',
+  amprocrighttype => 'bit', amprocnum => '4', amproc => 'brin_minmax_union' },
+
+# minmax bit varying
+{ amprocfamily => 'brin/varbit_minmax_ops', amproclefttype => 'varbit',
+  amprocrighttype => 'varbit', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/varbit_minmax_ops', amproclefttype => 'varbit',
+  amprocrighttype => 'varbit', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/varbit_minmax_ops', amproclefttype => 'varbit',
+  amprocrighttype => 'varbit', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/varbit_minmax_ops', amproclefttype => 'varbit',
+  amprocrighttype => 'varbit', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+
+# minmax numeric
+{ amprocfamily => 'brin/numeric_minmax_ops', amproclefttype => 'numeric',
+  amprocrighttype => 'numeric', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/numeric_minmax_ops', amproclefttype => 'numeric',
+  amprocrighttype => 'numeric', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/numeric_minmax_ops', amproclefttype => 'numeric',
+  amprocrighttype => 'numeric', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/numeric_minmax_ops', amproclefttype => 'numeric',
+  amprocrighttype => 'numeric', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+
+# minmax uuid
+{ amprocfamily => 'brin/uuid_minmax_ops', amproclefttype => 'uuid',
+  amprocrighttype => 'uuid', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/uuid_minmax_ops', amproclefttype => 'uuid',
+  amprocrighttype => 'uuid', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/uuid_minmax_ops', amproclefttype => 'uuid',
+  amprocrighttype => 'uuid', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/uuid_minmax_ops', amproclefttype => 'uuid',
+  amprocrighttype => 'uuid', amprocnum => '4', amproc => 'brin_minmax_union' },
+
+# inclusion range types
+{ amprocfamily => 'brin/range_inclusion_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '1',
+  amproc => 'brin_inclusion_opcinfo' },
+{ amprocfamily => 'brin/range_inclusion_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '2',
+  amproc => 'brin_inclusion_add_value' },
+{ amprocfamily => 'brin/range_inclusion_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '3',
+  amproc => 'brin_inclusion_consistent' },
+{ amprocfamily => 'brin/range_inclusion_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '4',
+  amproc => 'brin_inclusion_union' },
+{ amprocfamily => 'brin/range_inclusion_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '11', amproc => 'range_merge' },
+{ amprocfamily => 'brin/range_inclusion_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '13',
+  amproc => 'range_contains' },
+{ amprocfamily => 'brin/range_inclusion_ops', amproclefttype => 'anyrange',
+  amprocrighttype => 'anyrange', amprocnum => '14', amproc => 'isempty' },
+
+# minmax pg_lsn
+{ amprocfamily => 'brin/pg_lsn_minmax_ops', amproclefttype => 'pg_lsn',
+  amprocrighttype => 'pg_lsn', amprocnum => '1',
+  amproc => 'brin_minmax_opcinfo' },
+{ amprocfamily => 'brin/pg_lsn_minmax_ops', amproclefttype => 'pg_lsn',
+  amprocrighttype => 'pg_lsn', amprocnum => '2',
+  amproc => 'brin_minmax_add_value' },
+{ amprocfamily => 'brin/pg_lsn_minmax_ops', amproclefttype => 'pg_lsn',
+  amprocrighttype => 'pg_lsn', amprocnum => '3',
+  amproc => 'brin_minmax_consistent' },
+{ amprocfamily => 'brin/pg_lsn_minmax_ops', amproclefttype => 'pg_lsn',
+  amprocrighttype => 'pg_lsn', amprocnum => '4',
+  amproc => 'brin_minmax_union' },
+
+# inclusion box
+{ amprocfamily => 'brin/box_inclusion_ops', amproclefttype => 'box',
+  amprocrighttype => 'box', amprocnum => '1',
+  amproc => 'brin_inclusion_opcinfo' },
+{ amprocfamily => 'brin/box_inclusion_ops', amproclefttype => 'box',
+  amprocrighttype => 'box', amprocnum => '2',
+  amproc => 'brin_inclusion_add_value' },
+{ amprocfamily => 'brin/box_inclusion_ops', amproclefttype => 'box',
+  amprocrighttype => 'box', amprocnum => '3',
+  amproc => 'brin_inclusion_consistent' },
+{ amprocfamily => 'brin/box_inclusion_ops', amproclefttype => 'box',
+  amprocrighttype => 'box', amprocnum => '4',
+  amproc => 'brin_inclusion_union' },
+{ amprocfamily => 'brin/box_inclusion_ops', amproclefttype => 'box',
+  amprocrighttype => 'box', amprocnum => '11', amproc => 'bound_box' },
+{ amprocfamily => 'brin/box_inclusion_ops', amproclefttype => 'box',
+  amprocrighttype => 'box', amprocnum => '13', amproc => 'box_contain' },
+
+]
index eb595e81dbfc93bfd7402f0165df752388146cd3..d638e0cbfe0251bebd2bc0e482e539dada741be6 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_amproc.h
  *       definition of the system "amproc" relation (pg_amproc)
- *       along with the relation's initial contents.
  *
  * The amproc table identifies support procedures associated with index
  * operator families and classes.  These procedures can't be listed in pg_amop
@@ -25,8 +24,8 @@
  * src/include/catalog/pg_amproc.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_AMPROC_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_amproc_d.h"
 
 /* ----------------
  *             pg_amproc definition.  cpp turns this into
  *             typedef struct FormData_pg_amproc
  * ----------------
  */
-#define AccessMethodProcedureRelationId  2603
-
-CATALOG(pg_amproc,2603)
+CATALOG(pg_amproc,2603,AccessMethodProcedureRelationId)
 {
-       Oid                     amprocfamily;   /* the index opfamily this entry is for */
-       Oid                     amproclefttype; /* procedure's left input data type */
-       Oid                     amprocrighttype;        /* procedure's right input data type */
-       int16           amprocnum;              /* support procedure index */
-       regproc         amproc;                 /* OID of the proc */
+       /* the index opfamily this entry is for */
+       Oid                     amprocfamily BKI_LOOKUP(pg_opfamily);
+
+       /* procedure's left input data type */
+       Oid                     amproclefttype BKI_LOOKUP(pg_type);
+
+       /* procedure's right input data type */
+       Oid                     amprocrighttype BKI_LOOKUP(pg_type);
+
+       /* support procedure index */
+       int16           amprocnum;
+
+       /* OID of the proc */
+       regproc         amproc BKI_LOOKUP(pg_proc);
 } FormData_pg_amproc;
 
 /* ----------------
@@ -58,529 +65,4 @@ CATALOG(pg_amproc,2603)
  */
 typedef FormData_pg_amproc *Form_pg_amproc;
 
-/* ----------------
- *             compiler constants for pg_amproc
- * ----------------
- */
-#define Natts_pg_amproc                                        5
-#define Anum_pg_amproc_amprocfamily            1
-#define Anum_pg_amproc_amproclefttype  2
-#define Anum_pg_amproc_amprocrighttype 3
-#define Anum_pg_amproc_amprocnum               4
-#define Anum_pg_amproc_amproc                  5
-
-/* ----------------
- *             initial contents of pg_amproc
- * ----------------
- */
-
-/* btree */
-DATA(insert (  397   2277 2277 1 382 ));
-DATA(insert (  421   702 702 1 357 ));
-DATA(insert (  423   1560 1560 1 1596 ));
-DATA(insert (  424   16 16 1 1693 ));
-DATA(insert (  426   1042 1042 1 1078 ));
-DATA(insert (  426   1042 1042 2 3328 ));
-DATA(insert (  428   17 17 1 1954 ));
-DATA(insert (  428   17 17 2 3331 ));
-DATA(insert (  429   18 18 1 358 ));
-DATA(insert (  434   1082 1082 1 1092 ));
-DATA(insert (  434   1082 1082 2 3136 ));
-DATA(insert (  434   1082 1114 1 2344 ));
-DATA(insert (  434   1082 1184 1 2357 ));
-DATA(insert (  434   1114 1114 1 2045 ));
-DATA(insert (  434   1114 1114 2 3137 ));
-DATA(insert (  434   1114 1082 1 2370 ));
-DATA(insert (  434   1114 1184 1 2526 ));
-DATA(insert (  434   1184 1184 1 1314 ));
-DATA(insert (  434   1184 1184 2 3137 ));
-DATA(insert (  434   1184 1082 1 2383 ));
-DATA(insert (  434   1184 1114 1 2533 ));
-DATA(insert (  434   1082 1186 3 4133 ));
-DATA(insert (  434   1114 1186 3 4134 ));
-DATA(insert (  434   1184 1186 3 4135 ));
-DATA(insert (  1970   700 700 1 354 ));
-DATA(insert (  1970   700 700 2 3132 ));
-DATA(insert (  1970   700 701 1 2194 ));
-DATA(insert (  1970   701 701 1 355 ));
-DATA(insert (  1970   701 701 2 3133 ));
-DATA(insert (  1970   701 700 1 2195 ));
-DATA(insert (  1970   701 701 3 4139 ));
-DATA(insert (  1970   700 701 3 4140 ));
-DATA(insert (  1974   869 869 1 926 ));
-DATA(insert (  1976   21 21 1 350 ));
-DATA(insert (  1976   21 21 2 3129 ));
-DATA(insert (  1976   21 23 1 2190 ));
-DATA(insert (  1976   21 20 1 2192 ));
-DATA(insert (  1976   21 20 3 4130 ));
-DATA(insert (  1976   21 23 3 4131 ));
-DATA(insert (  1976   21 21 3 4132 ));
-DATA(insert (  1976   23 23 1 351 ));
-DATA(insert (  1976   23 23 2 3130 ));
-DATA(insert (  1976   23 20 1 2188 ));
-DATA(insert (  1976   23 21 1 2191 ));
-DATA(insert (  1976   23 20 3 4127 ));
-DATA(insert (  1976   23 23 3 4128 ));
-DATA(insert (  1976   23 21 3 4129 ));
-DATA(insert (  1976   20 20 1 842 ));
-DATA(insert (  1976   20 20 2 3131 ));
-DATA(insert (  1976   20 23 1 2189 ));
-DATA(insert (  1976   20 21 1 2193 ));
-DATA(insert (  1976   20 20 3 4126 ));
-DATA(insert (  1982   1186 1186 1 1315 ));
-DATA(insert (  1982   1186 1186 3 4136 ));
-DATA(insert (  1984   829 829 1 836 ));
-DATA(insert (  1984   829 829 2 3359 ));
-DATA(insert (  1986   19 19 1 359 ));
-DATA(insert (  1986   19 19 2 3135 ));
-DATA(insert (  1988   1700 1700 1 1769 ));
-DATA(insert (  1988   1700 1700 2 3283 ));
-DATA(insert (  1988   1700 1700 3 4141 ));
-DATA(insert (  1989   26 26 1 356 ));
-DATA(insert (  1989   26 26 2 3134 ));
-DATA(insert (  1991   30 30 1 404 ));
-DATA(insert (  1994   25 25 1 360 ));
-DATA(insert (  1994   25 25 2 3255 ));
-DATA(insert (  1996   1083 1083 1 1107 ));
-DATA(insert (  1996   1083 1186 3 4137 ));
-DATA(insert (  2000   1266 1266 1 1358 ));
-DATA(insert (  2000   1266 1186 3 4138 ));
-DATA(insert (  2002   1562 1562 1 1672 ));
-DATA(insert (  2095   25 25 1 2166 ));
-DATA(insert (  2095   25 25 2 3332 ));
-DATA(insert (  2097   1042 1042 1 2180 ));
-DATA(insert (  2097   1042 1042 2 3333 ));
-DATA(insert (  2099   790 790 1  377 ));
-DATA(insert (  2233   703 703 1  380 ));
-DATA(insert (  2234   704 704 1  381 ));
-DATA(insert (  2789   27 27 1 2794 ));
-DATA(insert (  2968   2950 2950 1 2960 ));
-DATA(insert (  2968   2950 2950 2 3300 ));
-DATA(insert (  2994   2249 2249 1 2987 ));
-DATA(insert (  3194   2249 2249 1 3187 ));
-DATA(insert (  3253   3220 3220 1 3251 ));
-DATA(insert (  3371   774 774 1 4119 ));
-DATA(insert (  3522   3500 3500 1 3514 ));
-DATA(insert (  3626   3614 3614 1 3622 ));
-DATA(insert (  3683   3615 3615 1 3668 ));
-DATA(insert (  3901   3831 3831 1 3870 ));
-DATA(insert (  4033   3802 3802 1 4044 ));
-
-
-/* hash */
-DATA(insert (  427   1042 1042 1 1080 ));
-DATA(insert (  427   1042 1042 2 972 ));
-DATA(insert (  431   18 18 1 454 ));
-DATA(insert (  431   18 18 2 446 ));
-DATA(insert (  435   1082 1082 1 450 ));
-DATA(insert (  435   1082 1082 2 425 ));
-DATA(insert (  627   2277 2277 1 626 ));
-DATA(insert (  627   2277 2277 2 782 ));
-DATA(insert (  1971   700 700 1 451 ));
-DATA(insert (  1971   700 700 2 443 ));
-DATA(insert (  1971   701 701 1 452 ));
-DATA(insert (  1971   701 701 2 444 ));
-DATA(insert (  1975   869 869 1 422 ));
-DATA(insert (  1975   869 869 2 779 ));
-DATA(insert (  1977   21 21 1 449 ));
-DATA(insert (  1977   21 21 2 441 ));
-DATA(insert (  1977   23 23 1 450 ));
-DATA(insert (  1977   23 23 2 425 ));
-DATA(insert (  1977   20 20 1 949 ));
-DATA(insert (  1977   20 20 2 442 ));
-DATA(insert (  1983   1186 1186 1 1697 ));
-DATA(insert (  1983   1186 1186 2 3418 ));
-DATA(insert (  1985   829 829 1 399 ));
-DATA(insert (  1985   829 829 2 778 ));
-DATA(insert (  1987   19 19 1 455 ));
-DATA(insert (  1987   19 19 2 447 ));
-DATA(insert (  1990   26 26 1 453 ));
-DATA(insert (  1990   26 26 2 445 ));
-DATA(insert (  1992   30 30 1 457 ));
-DATA(insert (  1992   30 30 2 776 ));
-DATA(insert (  1995   25 25 1 400 ));
-DATA(insert (  1995   25 25 2 448));
-DATA(insert (  1997   1083 1083 1 1688 ));
-DATA(insert (  1997   1083 1083 2 3409 ));
-DATA(insert (  1998   1700 1700 1 432 ));
-DATA(insert (  1998   1700 1700 2 780 ));
-DATA(insert (  1999   1184 1184 1 2039 ));
-DATA(insert (  1999   1184 1184 2 3411 ));
-DATA(insert (  2001   1266 1266 1 1696 ));
-DATA(insert (  2001   1266 1266 2 3410 ));
-DATA(insert (  2040   1114 1114 1 2039 ));
-DATA(insert (  2040   1114 1114 2 3411 ));
-DATA(insert (  2222   16 16 1 454 ));
-DATA(insert (  2222   16 16 2 446 ));
-DATA(insert (  2223   17 17 1 456 ));
-DATA(insert (  2223   17 17 2 772 ));
-DATA(insert (  2225   28 28 1 450 ));
-DATA(insert (  2225   28 28 2 425));
-DATA(insert (  2226   29 29 1 450 ));
-DATA(insert (  2226   29 29 2 425 ));
-DATA(insert (  2227   702 702 1 450 ));
-DATA(insert (  2227   702 702 2 425 ));
-DATA(insert (  2228   703 703 1 450 ));
-DATA(insert (  2228   703 703 2 425 ));
-DATA(insert (  2229   25 25 1 400 ));
-DATA(insert (  2229   25 25 2 448 ));
-DATA(insert (  2231   1042 1042 1 1080 ));
-DATA(insert (  2231   1042 1042 2 972 ));
-DATA(insert (  2235   1033 1033 1 329 ));
-DATA(insert (  2235   1033 1033 2 777 ));
-DATA(insert (  2969   2950 2950 1 2963 ));
-DATA(insert (  2969   2950 2950 2 3412 ));
-DATA(insert (  3254   3220 3220 1 3252 ));
-DATA(insert (  3254   3220 3220 2 3413 ));
-DATA(insert (  3372   774 774 1 328 ));
-DATA(insert (  3372   774 774 2 781 ));
-DATA(insert (  3523   3500 3500 1 3515 ));
-DATA(insert (  3523   3500 3500 2 3414 ));
-DATA(insert (  3903   3831 3831 1 3902 ));
-DATA(insert (  3903   3831 3831 2 3417 ));
-DATA(insert (  4034   3802 3802 1 4045 ));
-DATA(insert (  4034   3802 3802 2 3416));
-
-
-/* gist */
-DATA(insert (  1029   600 600 1 2179 ));
-DATA(insert (  1029   600 600 2 2583 ));
-DATA(insert (  1029   600 600 3 1030 ));
-DATA(insert (  1029   600 600 5 2581 ));
-DATA(insert (  1029   600 600 6 2582 ));
-DATA(insert (  1029   600 600 7 2584 ));
-DATA(insert (  1029   600 600 8 3064 ));
-DATA(insert (  1029   600 600 9 3282 ));
-DATA(insert (  2593   603 603 1 2578 ));
-DATA(insert (  2593   603 603 2 2583 ));
-DATA(insert (  2593   603 603 5 2581 ));
-DATA(insert (  2593   603 603 6 2582 ));
-DATA(insert (  2593   603 603 7 2584 ));
-DATA(insert (  2594   604 604 1 2585 ));
-DATA(insert (  2594   604 604 2 2583 ));
-DATA(insert (  2594   604 604 3 2586 ));
-DATA(insert (  2594   604 604 5 2581 ));
-DATA(insert (  2594   604 604 6 2582 ));
-DATA(insert (  2594   604 604 7 2584 ));
-DATA(insert (  2594   604 604 8 3288 ));
-DATA(insert (  2595   718 718 1 2591 ));
-DATA(insert (  2595   718 718 2 2583 ));
-DATA(insert (  2595   718 718 3 2592 ));
-DATA(insert (  2595   718 718 5 2581 ));
-DATA(insert (  2595   718 718 6 2582 ));
-DATA(insert (  2595   718 718 7 2584 ));
-DATA(insert (  2595   718 718 8 3280 ));
-DATA(insert (  3655   3614 3614 1 3654 ));
-DATA(insert (  3655   3614 3614 2 3651 ));
-DATA(insert (  3655   3614 3614 3 3648 ));
-DATA(insert (  3655   3614 3614 4 3649 ));
-DATA(insert (  3655   3614 3614 5 3653 ));
-DATA(insert (  3655   3614 3614 6 3650 ));
-DATA(insert (  3655   3614 3614 7 3652 ));
-DATA(insert (  3702   3615 3615 1 3701 ));
-DATA(insert (  3702   3615 3615 2 3698 ));
-DATA(insert (  3702   3615 3615 3 3695 ));
-DATA(insert (  3702   3615 3615 5 3700 ));
-DATA(insert (  3702   3615 3615 6 3697 ));
-DATA(insert (  3702   3615 3615 7 3699 ));
-DATA(insert (  3919   3831 3831 1 3875 ));
-DATA(insert (  3919   3831 3831 2 3876 ));
-DATA(insert (  3919   3831 3831 5 3879 ));
-DATA(insert (  3919   3831 3831 6 3880 ));
-DATA(insert (  3919   3831 3831 7 3881 ));
-DATA(insert (  3550   869 869 1 3553 ));
-DATA(insert (  3550   869 869 2 3554 ));
-DATA(insert (  3550   869 869 3 3555 ));
-DATA(insert (  3550   869 869 5 3557 ));
-DATA(insert (  3550   869 869 6 3558 ));
-DATA(insert (  3550   869 869 7 3559 ));
-DATA(insert (  3550   869 869 9 3573 ));
-
-
-/* gin */
-DATA(insert (  2745   2277 2277 2 2743 ));
-DATA(insert (  2745   2277 2277 3 2774 ));
-DATA(insert (  2745   2277 2277 4 2744 ));
-DATA(insert (  2745   2277 2277 6 3920 ));
-DATA(insert (  3659   3614 3614 1 3724 ));
-DATA(insert (  3659   3614 3614 2 3656 ));
-DATA(insert (  3659   3614 3614 3 3657 ));
-DATA(insert (  3659   3614 3614 4 3658 ));
-DATA(insert (  3659   3614 3614 5 2700 ));
-DATA(insert (  3659   3614 3614 6 3921 ));
-DATA(insert (  4036   3802 3802 1 3480 ));
-DATA(insert (  4036   3802 3802 2 3482 ));
-DATA(insert (  4036   3802 3802 3 3483 ));
-DATA(insert (  4036   3802 3802 4 3484 ));
-DATA(insert (  4036   3802 3802 6 3488 ));
-DATA(insert (  4037   3802 3802 1 351 ));
-DATA(insert (  4037   3802 3802 2 3485 ));
-DATA(insert (  4037   3802 3802 3 3486 ));
-DATA(insert (  4037   3802 3802 4 3487 ));
-DATA(insert (  4037   3802 3802 6 3489 ));
-
-/* sp-gist */
-DATA(insert (  3474   3831 3831 1 3469 ));
-DATA(insert (  3474   3831 3831 2 3470 ));
-DATA(insert (  3474   3831 3831 3 3471 ));
-DATA(insert (  3474   3831 3831 4 3472 ));
-DATA(insert (  3474   3831 3831 5 3473 ));
-DATA(insert (  3794   869 869 1 3795 ));
-DATA(insert (  3794   869 869 2 3796 ));
-DATA(insert (  3794   869 869 3 3797 ));
-DATA(insert (  3794   869 869 4 3798 ));
-DATA(insert (  3794   869 869 5 3799 ));
-DATA(insert (  4015   600 600 1 4018 ));
-DATA(insert (  4015   600 600 2 4019 ));
-DATA(insert (  4015   600 600 3 4020 ));
-DATA(insert (  4015   600 600 4 4021 ));
-DATA(insert (  4015   600 600 5 4022 ));
-DATA(insert (  4016   600 600 1 4023 ));
-DATA(insert (  4016   600 600 2 4024 ));
-DATA(insert (  4016   600 600 3 4025 ));
-DATA(insert (  4016   600 600 4 4026 ));
-DATA(insert (  4016   600 600 5 4022 ));
-DATA(insert (  4017   25 25 1 4027 ));
-DATA(insert (  4017   25 25 2 4028 ));
-DATA(insert (  4017   25 25 3 4029 ));
-DATA(insert (  4017   25 25 4 4030 ));
-DATA(insert (  4017   25 25 5 4031 ));
-DATA(insert (  5000   603 603 1 5012 ));
-DATA(insert (  5000   603 603 2 5013 ));
-DATA(insert (  5000   603 603 3 5014 ));
-DATA(insert (  5000   603 603 4 5015 ));
-DATA(insert (  5000   603 603 5 5016 ));
-DATA(insert (  5008   604 604 1 5010 ));
-DATA(insert (  5008   604 604 2 5013 ));
-DATA(insert (  5008   604 604 3 5014 ));
-DATA(insert (  5008   604 604 4 5015 ));
-DATA(insert (  5008   604 604 5 5016 ));
-DATA(insert (  5008   604 604 6 5011 ));
-
-/* BRIN opclasses */
-/* minmax bytea */
-DATA(insert (  4064    17        17  1  3383 ));
-DATA(insert (  4064    17        17  2  3384 ));
-DATA(insert (  4064    17        17  3  3385 ));
-DATA(insert (  4064    17        17  4  3386 ));
-/* minmax "char" */
-DATA(insert (  4062    18        18  1  3383 ));
-DATA(insert (  4062    18        18  2  3384 ));
-DATA(insert (  4062    18        18  3  3385 ));
-DATA(insert (  4062    18        18  4  3386 ));
-/* minmax name */
-DATA(insert (  4065    19        19  1  3383 ));
-DATA(insert (  4065    19        19  2  3384 ));
-DATA(insert (  4065    19        19  3  3385 ));
-DATA(insert (  4065    19        19  4  3386 ));
-/* minmax integer: int2, int4, int8 */
-DATA(insert (  4054    20        20  1  3383 ));
-DATA(insert (  4054    20        20  2  3384 ));
-DATA(insert (  4054    20        20  3  3385 ));
-DATA(insert (  4054    20        20  4  3386 ));
-DATA(insert (  4054    20        21  1  3383 ));
-DATA(insert (  4054    20        21  2  3384 ));
-DATA(insert (  4054    20        21  3  3385 ));
-DATA(insert (  4054    20        21  4  3386 ));
-DATA(insert (  4054    20        23  1  3383 ));
-DATA(insert (  4054    20        23  2  3384 ));
-DATA(insert (  4054    20        23  3  3385 ));
-DATA(insert (  4054    20        23  4  3386 ));
-
-DATA(insert (  4054    21        21  1  3383 ));
-DATA(insert (  4054    21        21  2  3384 ));
-DATA(insert (  4054    21        21  3  3385 ));
-DATA(insert (  4054    21        21  4  3386 ));
-DATA(insert (  4054    21        20  1  3383 ));
-DATA(insert (  4054    21        20  2  3384 ));
-DATA(insert (  4054    21        20  3  3385 ));
-DATA(insert (  4054    21        20  4  3386 ));
-DATA(insert (  4054    21        23  1  3383 ));
-DATA(insert (  4054    21        23  2  3384 ));
-DATA(insert (  4054    21        23  3  3385 ));
-DATA(insert (  4054    21        23  4  3386 ));
-
-DATA(insert (  4054    23        23  1  3383 ));
-DATA(insert (  4054    23        23  2  3384 ));
-DATA(insert (  4054    23        23  3  3385 ));
-DATA(insert (  4054    23        23  4  3386 ));
-DATA(insert (  4054    23        20  1  3383 ));
-DATA(insert (  4054    23        20  2  3384 ));
-DATA(insert (  4054    23        20  3  3385 ));
-DATA(insert (  4054    23        20  4  3386 ));
-DATA(insert (  4054    23        21  1  3383 ));
-DATA(insert (  4054    23        21  2  3384 ));
-DATA(insert (  4054    23        21  3  3385 ));
-DATA(insert (  4054    23        21  4  3386 ));
-
-/* minmax text */
-DATA(insert (  4056    25        25  1  3383 ));
-DATA(insert (  4056    25        25  2  3384 ));
-DATA(insert (  4056    25        25  3  3385 ));
-DATA(insert (  4056    25        25  4  3386 ));
-/* minmax oid */
-DATA(insert (  4068    26        26  1  3383 ));
-DATA(insert (  4068    26        26  2  3384 ));
-DATA(insert (  4068    26        26  3  3385 ));
-DATA(insert (  4068    26        26  4  3386 ));
-/* minmax tid */
-DATA(insert (  4069    27        27  1  3383 ));
-DATA(insert (  4069    27        27  2  3384 ));
-DATA(insert (  4069    27        27  3  3385 ));
-DATA(insert (  4069    27        27  4  3386 ));
-/* minmax float */
-DATA(insert (  4070   700       700  1  3383 ));
-DATA(insert (  4070   700       700  2  3384 ));
-DATA(insert (  4070   700       700  3  3385 ));
-DATA(insert (  4070   700       700  4  3386 ));
-
-DATA(insert (  4070   700       701  1  3383 ));
-DATA(insert (  4070   700       701  2  3384 ));
-DATA(insert (  4070   700       701  3  3385 ));
-DATA(insert (  4070   700       701  4  3386 ));
-
-DATA(insert (  4070   701       701  1  3383 ));
-DATA(insert (  4070   701       701  2  3384 ));
-DATA(insert (  4070   701       701  3  3385 ));
-DATA(insert (  4070   701       701  4  3386 ));
-
-DATA(insert (  4070   701       700  1  3383 ));
-DATA(insert (  4070   701       700  2  3384 ));
-DATA(insert (  4070   701       700  3  3385 ));
-DATA(insert (  4070   701       700  4  3386 ));
-
-/* minmax abstime */
-DATA(insert (  4072   702       702  1  3383 ));
-DATA(insert (  4072   702       702  2  3384 ));
-DATA(insert (  4072   702       702  3  3385 ));
-DATA(insert (  4072   702       702  4  3386 ));
-/* minmax reltime */
-DATA(insert (  4073   703       703  1  3383 ));
-DATA(insert (  4073   703       703  2  3384 ));
-DATA(insert (  4073   703       703  3  3385 ));
-DATA(insert (  4073   703       703  4  3386 ));
-/* minmax macaddr */
-DATA(insert (  4074   829       829  1  3383 ));
-DATA(insert (  4074   829       829  2  3384 ));
-DATA(insert (  4074   829       829  3  3385 ));
-DATA(insert (  4074   829       829  4  3386 ));
-/* minmax macaddr8 */
-DATA(insert (  4109   774       774  1  3383 ));
-DATA(insert (  4109   774       774  2  3384 ));
-DATA(insert (  4109   774       774  3  3385 ));
-DATA(insert (  4109   774       774  4  3386 ));
-/* minmax inet */
-DATA(insert (  4075   869       869  1  3383 ));
-DATA(insert (  4075   869       869  2  3384 ));
-DATA(insert (  4075   869       869  3  3385 ));
-DATA(insert (  4075   869       869  4  3386 ));
-/* inclusion inet */
-DATA(insert (  4102   869       869  1  4105 ));
-DATA(insert (  4102   869       869  2  4106 ));
-DATA(insert (  4102   869       869  3  4107 ));
-DATA(insert (  4102   869       869  4  4108 ));
-DATA(insert (  4102   869       869 11  4063 ));
-DATA(insert (  4102   869       869 12  4071 ));
-DATA(insert (  4102   869       869 13   930 ));
-/* minmax character */
-DATA(insert (  4076  1042      1042  1  3383 ));
-DATA(insert (  4076  1042      1042  2  3384 ));
-DATA(insert (  4076  1042      1042  3  3385 ));
-DATA(insert (  4076  1042      1042  4  3386 ));
-/* minmax time without time zone */
-DATA(insert (  4077  1083      1083  1  3383 ));
-DATA(insert (  4077  1083      1083  2  3384 ));
-DATA(insert (  4077  1083      1083  3  3385 ));
-DATA(insert (  4077  1083      1083  4  3386 ));
-/* minmax datetime (date, timestamp, timestamptz) */
-DATA(insert (  4059  1114      1114  1  3383 ));
-DATA(insert (  4059  1114      1114  2  3384 ));
-DATA(insert (  4059  1114      1114  3  3385 ));
-DATA(insert (  4059  1114      1114  4  3386 ));
-DATA(insert (  4059  1114      1184  1  3383 ));
-DATA(insert (  4059  1114      1184  2  3384 ));
-DATA(insert (  4059  1114      1184  3  3385 ));
-DATA(insert (  4059  1114      1184  4  3386 ));
-DATA(insert (  4059  1114      1082  1  3383 ));
-DATA(insert (  4059  1114      1082  2  3384 ));
-DATA(insert (  4059  1114      1082  3  3385 ));
-DATA(insert (  4059  1114      1082  4  3386 ));
-
-DATA(insert (  4059  1184      1184  1  3383 ));
-DATA(insert (  4059  1184      1184  2  3384 ));
-DATA(insert (  4059  1184      1184  3  3385 ));
-DATA(insert (  4059  1184      1184  4  3386 ));
-DATA(insert (  4059  1184      1114  1  3383 ));
-DATA(insert (  4059  1184      1114  2  3384 ));
-DATA(insert (  4059  1184      1114  3  3385 ));
-DATA(insert (  4059  1184      1114  4  3386 ));
-DATA(insert (  4059  1184      1082  1  3383 ));
-DATA(insert (  4059  1184      1082  2  3384 ));
-DATA(insert (  4059  1184      1082  3  3385 ));
-DATA(insert (  4059  1184      1082  4  3386 ));
-
-DATA(insert (  4059  1082      1082  1  3383 ));
-DATA(insert (  4059  1082      1082  2  3384 ));
-DATA(insert (  4059  1082      1082  3  3385 ));
-DATA(insert (  4059  1082      1082  4  3386 ));
-DATA(insert (  4059  1082      1114  1  3383 ));
-DATA(insert (  4059  1082      1114  2  3384 ));
-DATA(insert (  4059  1082      1114  3  3385 ));
-DATA(insert (  4059  1082      1114  4  3386 ));
-DATA(insert (  4059  1082      1184  1  3383 ));
-DATA(insert (  4059  1082      1184  2  3384 ));
-DATA(insert (  4059  1082      1184  3  3385 ));
-DATA(insert (  4059  1082      1184  4  3386 ));
-
-/* minmax interval */
-DATA(insert (  4078  1186      1186  1  3383 ));
-DATA(insert (  4078  1186      1186  2  3384 ));
-DATA(insert (  4078  1186      1186  3  3385 ));
-DATA(insert (  4078  1186      1186  4  3386 ));
-/* minmax time with time zone */
-DATA(insert (  4058  1266      1266  1  3383 ));
-DATA(insert (  4058  1266      1266  2  3384 ));
-DATA(insert (  4058  1266      1266  3  3385 ));
-DATA(insert (  4058  1266      1266  4  3386 ));
-/* minmax bit */
-DATA(insert (  4079  1560      1560  1  3383 ));
-DATA(insert (  4079  1560      1560  2  3384 ));
-DATA(insert (  4079  1560      1560  3  3385 ));
-DATA(insert (  4079  1560      1560  4  3386 ));
-/* minmax bit varying */
-DATA(insert (  4080  1562      1562  1  3383 ));
-DATA(insert (  4080  1562      1562  2  3384 ));
-DATA(insert (  4080  1562      1562  3  3385 ));
-DATA(insert (  4080  1562      1562  4  3386 ));
-/* minmax numeric */
-DATA(insert (  4055  1700      1700  1  3383 ));
-DATA(insert (  4055  1700      1700  2  3384 ));
-DATA(insert (  4055  1700      1700  3  3385 ));
-DATA(insert (  4055  1700      1700  4  3386 ));
-/* minmax uuid */
-DATA(insert (  4081  2950      2950  1  3383 ));
-DATA(insert (  4081  2950      2950  2  3384 ));
-DATA(insert (  4081  2950      2950  3  3385 ));
-DATA(insert (  4081  2950      2950  4  3386 ));
-/* inclusion range types */
-DATA(insert (  4103  3831      3831  1  4105 ));
-DATA(insert (  4103  3831      3831  2  4106 ));
-DATA(insert (  4103  3831      3831  3  4107 ));
-DATA(insert (  4103  3831      3831  4  4108 ));
-DATA(insert (  4103  3831      3831  11 4057 ));
-DATA(insert (  4103  3831      3831  13 3859 ));
-DATA(insert (  4103  3831      3831  14 3850 ));
-/* minmax pg_lsn */
-DATA(insert (  4082  3220      3220  1  3383 ));
-DATA(insert (  4082  3220      3220  2  3384 ));
-DATA(insert (  4082  3220      3220  3  3385 ));
-DATA(insert (  4082  3220      3220  4  3386 ));
-/* inclusion box */
-DATA(insert (  4104   603       603  1  4105 ));
-DATA(insert (  4104   603       603  2  4106 ));
-DATA(insert (  4104   603       603  3  4107 ));
-DATA(insert (  4104   603       603  4  4108 ));
-DATA(insert (  4104   603       603  11 4067 ));
-DATA(insert (  4104   603       603  13  187 ));
-
 #endif                                                 /* PG_AMPROC_H */
index 8a8b8cac52dc6db4d52f415b77a8700098c10456..16b106d9add31878eb52d85ee6b2db66749ec91b 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_attrdef.h
  *       definition of the system "attribute defaults" relation (pg_attrdef)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_attrdef.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_ATTRDEF_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_attrdef_d.h"
 
 /* ----------------
  *             pg_attrdef definition.  cpp turns this into
  *             typedef struct FormData_pg_attrdef
  * ----------------
  */
-#define AttrDefaultRelationId  2604
-
-CATALOG(pg_attrdef,2604)
+CATALOG(pg_attrdef,2604,AttrDefaultRelationId)
 {
        Oid                     adrelid;                /* OID of table containing attribute */
        int16           adnum;                  /* attnum of attribute */
@@ -46,14 +44,4 @@ CATALOG(pg_attrdef,2604)
  */
 typedef FormData_pg_attrdef *Form_pg_attrdef;
 
-/* ----------------
- *             compiler constants for pg_attrdef
- * ----------------
- */
-#define Natts_pg_attrdef                               4
-#define Anum_pg_attrdef_adrelid                        1
-#define Anum_pg_attrdef_adnum                  2
-#define Anum_pg_attrdef_adbin                  3
-#define Anum_pg_attrdef_adsrc                  4
-
 #endif                                                 /* PG_ATTRDEF_H */
index 5bb64f7c31dc97f8c83bf1b1f9525928db9b3413..8eef7d2fedcab66fe5f043d26bd938fc10d7d519 100644 (file)
@@ -2,7 +2,10 @@
  *
  * pg_attribute.h
  *       definition of the system "attribute" relation (pg_attribute)
- *       along with the relation's initial contents.
+ *
+ * The initial contents of pg_attribute are generated at compile time by
+ * genbki.pl, so there is no pg_attribute.dat file.  Only "bootstrapped"
+ * relations need be included.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +14,8 @@
  * src/include/catalog/pg_attribute.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
@@ -20,6 +23,7 @@
 #define PG_ATTRIBUTE_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_attribute_d.h"
 
 /* ----------------
  *             pg_attribute definition.  cpp turns this into
  *             You may need to change catalog/genbki.pl as well.
  * ----------------
  */
-#define AttributeRelationId  1249
-#define AttributeRelation_Rowtype_Id  75
-
-CATALOG(pg_attribute,1249) BKI_BOOTSTRAP BKI_WITHOUT_OIDS BKI_ROWTYPE_OID(75) BKI_SCHEMA_MACRO
+CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_WITHOUT_OIDS BKI_ROWTYPE_OID(75,AttributeRelation_Rowtype_Id) BKI_SCHEMA_MACRO
 {
        Oid                     attrelid;               /* OID of relation containing this attribute */
        NameData        attname;                /* name of attribute */
@@ -137,7 +138,7 @@ CATALOG(pg_attribute,1249) BKI_BOOTSTRAP BKI_WITHOUT_OIDS BKI_ROWTYPE_OID(75) BK
        bool            atthasmissing BKI_DEFAULT(f);
 
        /* One of the ATTRIBUTE_IDENTITY_* constants below, or '\0' */
-       char            attidentity BKI_DEFAULT("");
+       char            attidentity BKI_DEFAULT('\0');
 
        /* Is dropped (ie, logically invisible) or not */
        bool            attisdropped BKI_DEFAULT(f);
@@ -195,47 +196,11 @@ CATALOG(pg_attribute,1249) BKI_BOOTSTRAP BKI_WITHOUT_OIDS BKI_ROWTYPE_OID(75) BK
  */
 typedef FormData_pg_attribute *Form_pg_attribute;
 
-/* ----------------
- *             compiler constants for pg_attribute
- * ----------------
- */
-
-#define Natts_pg_attribute                             24
-#define Anum_pg_attribute_attrelid             1
-#define Anum_pg_attribute_attname              2
-#define Anum_pg_attribute_atttypid             3
-#define Anum_pg_attribute_attstattarget 4
-#define Anum_pg_attribute_attlen               5
-#define Anum_pg_attribute_attnum               6
-#define Anum_pg_attribute_attndims             7
-#define Anum_pg_attribute_attcacheoff  8
-#define Anum_pg_attribute_atttypmod            9
-#define Anum_pg_attribute_attbyval             10
-#define Anum_pg_attribute_attstorage   11
-#define Anum_pg_attribute_attalign             12
-#define Anum_pg_attribute_attnotnull   13
-#define Anum_pg_attribute_atthasdef            14
-#define Anum_pg_attribute_atthasmissing        15
-#define Anum_pg_attribute_attidentity  16
-#define Anum_pg_attribute_attisdropped 17
-#define Anum_pg_attribute_attislocal   18
-#define Anum_pg_attribute_attinhcount  19
-#define Anum_pg_attribute_attcollation 20
-#define Anum_pg_attribute_attacl               21
-#define Anum_pg_attribute_attoptions   22
-#define Anum_pg_attribute_attfdwoptions        23
-#define Anum_pg_attribute_attmissingval        24
-
-/* ----------------
- *             initial contents of pg_attribute
- *
- * The initial contents of pg_attribute are generated at compile time by
- * genbki.pl.  Only "bootstrapped" relations need be included.
- * ----------------
- */
-
+#ifdef EXPOSE_TO_CLIENT_CODE
 
 #define                  ATTRIBUTE_IDENTITY_ALWAYS             'a'
 #define                  ATTRIBUTE_IDENTITY_BY_DEFAULT 'd'
 
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
+
 #endif                                                 /* PG_ATTRIBUTE_H */
index ae3c14aa7a1a4bbdc0616c91ec99f4ad6617078c..75bc2baa14c796ea9c12c3443a12c00e87c6ea75 100644 (file)
@@ -2,7 +2,7 @@
  *
  * pg_auth_members.h
  *       definition of the system "authorization identifier members" relation
- *       (pg_auth_members) along with the relation's initial contents.
+ *       (pg_auth_members).
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +11,8 @@
  * src/include/catalog/pg_auth_members.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_AUTH_MEMBERS_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_auth_members_d.h"
 
 /* ----------------
  *             pg_auth_members definition.  cpp turns this into
  *             typedef struct FormData_pg_auth_members
  * ----------------
  */
-#define AuthMemRelationId      1261
-#define AuthMemRelation_Rowtype_Id     2843
-
-CATALOG(pg_auth_members,1261) BKI_SHARED_RELATION BKI_WITHOUT_OIDS BKI_ROWTYPE_OID(2843) BKI_SCHEMA_MACRO
+CATALOG(pg_auth_members,1261,AuthMemRelationId) BKI_SHARED_RELATION BKI_WITHOUT_OIDS BKI_ROWTYPE_OID(2843,AuthMemRelation_Rowtype_Id) BKI_SCHEMA_MACRO
 {
        Oid                     roleid;                 /* ID of a role */
        Oid                     member;                 /* ID of a member of that role */
@@ -44,14 +42,4 @@ CATALOG(pg_auth_members,1261) BKI_SHARED_RELATION BKI_WITHOUT_OIDS BKI_ROWTYPE_O
  */
 typedef FormData_pg_auth_members *Form_pg_auth_members;
 
-/* ----------------
- *             compiler constants for pg_auth_members
- * ----------------
- */
-#define Natts_pg_auth_members                          4
-#define Anum_pg_auth_members_roleid                    1
-#define Anum_pg_auth_members_member                    2
-#define Anum_pg_auth_members_grantor           3
-#define Anum_pg_auth_members_admin_option      4
-
 #endif                                                 /* PG_AUTH_MEMBERS_H */
diff --git a/src/include/catalog/pg_authid.dat b/src/include/catalog/pg_authid.dat
new file mode 100644 (file)
index 0000000..52f4259
--- /dev/null
@@ -0,0 +1,67 @@
+#----------------------------------------------------------------------
+#
+# pg_authid.dat
+#    Initial contents of the pg_authid system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_authid.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# POSTGRES will be replaced at initdb time with a user choice that might
+# contain non-word characters, so we must double-quote it.
+
+# The C code typically refers to these roles using the #define symbols,
+# so make sure every entry has an oid_symbol value.
+
+{ oid => '10', oid_symbol => 'BOOTSTRAP_SUPERUSERID',
+  rolname => '"POSTGRES"', rolsuper => 't', rolinherit => 't',
+  rolcreaterole => 't', rolcreatedb => 't', rolcanlogin => 't',
+  rolreplication => 't', rolbypassrls => 't', rolconnlimit => '-1',
+  rolpassword => '_null_', rolvaliduntil => '_null_' },
+{ oid => '3373', oid_symbol => 'DEFAULT_ROLE_MONITOR',
+  rolname => 'pg_monitor', rolsuper => 'f', rolinherit => 't',
+  rolcreaterole => 'f', rolcreatedb => 'f', rolcanlogin => 'f',
+  rolreplication => 'f', rolbypassrls => 'f', rolconnlimit => '-1',
+  rolpassword => '_null_', rolvaliduntil => '_null_' },
+{ oid => '3374', oid_symbol => 'DEFAULT_ROLE_READ_ALL_SETTINGS',
+  rolname => 'pg_read_all_settings', rolsuper => 'f', rolinherit => 't',
+  rolcreaterole => 'f', rolcreatedb => 'f', rolcanlogin => 'f',
+  rolreplication => 'f', rolbypassrls => 'f', rolconnlimit => '-1',
+  rolpassword => '_null_', rolvaliduntil => '_null_' },
+{ oid => '3375', oid_symbol => 'DEFAULT_ROLE_READ_ALL_STATS',
+  rolname => 'pg_read_all_stats', rolsuper => 'f', rolinherit => 't',
+  rolcreaterole => 'f', rolcreatedb => 'f', rolcanlogin => 'f',
+  rolreplication => 'f', rolbypassrls => 'f', rolconnlimit => '-1',
+  rolpassword => '_null_', rolvaliduntil => '_null_' },
+{ oid => '3377', oid_symbol => 'DEFAULT_ROLE_STAT_SCAN_TABLES',
+  rolname => 'pg_stat_scan_tables', rolsuper => 'f', rolinherit => 't',
+  rolcreaterole => 'f', rolcreatedb => 'f', rolcanlogin => 'f',
+  rolreplication => 'f', rolbypassrls => 'f', rolconnlimit => '-1',
+  rolpassword => '_null_', rolvaliduntil => '_null_' },
+{ oid => '4569', oid_symbol => 'DEFAULT_ROLE_READ_SERVER_FILES',
+  rolname => 'pg_read_server_files', rolsuper => 'f', rolinherit => 't',
+  rolcreaterole => 'f', rolcreatedb => 'f', rolcanlogin => 'f',
+  rolreplication => 'f', rolbypassrls => 'f', rolconnlimit => '-1',
+  rolpassword => '_null_', rolvaliduntil => '_null_' },
+{ oid => '4570', oid_symbol => 'DEFAULT_ROLE_WRITE_SERVER_FILES',
+  rolname => 'pg_write_server_files', rolsuper => 'f', rolinherit => 't',
+  rolcreaterole => 'f', rolcreatedb => 'f', rolcanlogin => 'f',
+  rolreplication => 'f', rolbypassrls => 'f', rolconnlimit => '-1',
+  rolpassword => '_null_', rolvaliduntil => '_null_' },
+{ oid => '4571', oid_symbol => 'DEFAULT_ROLE_EXECUTE_SERVER_PROGRAM',
+  rolname => 'pg_execute_server_program', rolsuper => 'f', rolinherit => 't',
+  rolcreaterole => 'f', rolcreatedb => 'f', rolcanlogin => 'f',
+  rolreplication => 'f', rolbypassrls => 'f', rolconnlimit => '-1',
+  rolpassword => '_null_', rolvaliduntil => '_null_' },
+{ oid => '4200', oid_symbol => 'DEFAULT_ROLE_SIGNAL_BACKENDID',
+  rolname => 'pg_signal_backend', rolsuper => 'f', rolinherit => 't',
+  rolcreaterole => 'f', rolcreatedb => 'f', rolcanlogin => 'f',
+  rolreplication => 'f', rolbypassrls => 'f', rolconnlimit => '-1',
+  rolpassword => '_null_', rolvaliduntil => '_null_' },
+
+]
index 8e98513530bc7ce7d865db8c2c7437ec8a5e15d0..863ef65ebfa6f11fdb427046ae39ea7e998a3c88 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_authid.h
  *       definition of the system "authorization identifier" relation (pg_authid)
- *       along with the relation's initial contents.
  *
  *       pg_shadow and pg_group are now publicly accessible views on pg_authid.
  *
@@ -13,8 +12,8 @@
  * src/include/catalog/pg_authid.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_AUTHID_H
 
 #include "catalog/genbki.h"
-
-/*
- * The CATALOG definition has to refer to the type of rolvaliduntil as
- * "timestamptz" (lower case) so that bootstrap mode recognizes it.  But
- * the C header files define this type as TimestampTz.  Since the field is
- * potentially-null and therefore can't be accessed directly from C code,
- * there is no particular need for the C struct definition to show the
- * field type as TimestampTz --- instead we just make it int.
- */
-#define timestamptz int
-
+#include "catalog/pg_authid_d.h"
 
 /* ----------------
  *             pg_authid definition.  cpp turns this into
  *             typedef struct FormData_pg_authid
  * ----------------
  */
-#define AuthIdRelationId       1260
-#define AuthIdRelation_Rowtype_Id      2842
-
-CATALOG(pg_authid,1260) BKI_SHARED_RELATION BKI_ROWTYPE_OID(2842) BKI_SCHEMA_MACRO
+CATALOG(pg_authid,1260,AuthIdRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_OID(2842,AuthIdRelation_Rowtype_Id) BKI_SCHEMA_MACRO
 {
        NameData        rolname;                /* name of role */
        bool            rolsuper;               /* read this field via superuser() only! */
@@ -61,9 +47,6 @@ CATALOG(pg_authid,1260) BKI_SHARED_RELATION BKI_ROWTYPE_OID(2842) BKI_SCHEMA_MAC
 #endif
 } FormData_pg_authid;
 
-#undef timestamptz
-
-
 /* ----------------
  *             Form_pg_authid corresponds to a pointer to a tuple with
  *             the format of pg_authid relation.
@@ -71,50 +54,4 @@ CATALOG(pg_authid,1260) BKI_SHARED_RELATION BKI_ROWTYPE_OID(2842) BKI_SCHEMA_MAC
  */
 typedef FormData_pg_authid *Form_pg_authid;
 
-/* ----------------
- *             compiler constants for pg_authid
- * ----------------
- */
-#define Natts_pg_authid                                        11
-#define Anum_pg_authid_rolname                 1
-#define Anum_pg_authid_rolsuper                        2
-#define Anum_pg_authid_rolinherit              3
-#define Anum_pg_authid_rolcreaterole   4
-#define Anum_pg_authid_rolcreatedb             5
-#define Anum_pg_authid_rolcanlogin             6
-#define Anum_pg_authid_rolreplication  7
-#define Anum_pg_authid_rolbypassrls            8
-#define Anum_pg_authid_rolconnlimit            9
-#define Anum_pg_authid_rolpassword             10
-#define Anum_pg_authid_rolvaliduntil   11
-
-/* ----------------
- *             initial contents of pg_authid
- *
- * The uppercase quantities will be replaced at initdb time with
- * user choices.
- *
- * The C code typically refers to these roles using the #define symbols,
- * so be sure to keep those in sync with the DATA lines.
- * ----------------
- */
-DATA(insert OID = 10 ( "POSTGRES" t t t t t t t -1 _null_ _null_));
-#define BOOTSTRAP_SUPERUSERID                  10
-DATA(insert OID = 3373 ( pg_monitor f t f f f f f -1 _null_ _null_));
-#define DEFAULT_ROLE_MONITOR           3373
-DATA(insert OID = 3374 ( pg_read_all_settings f t f f f f f -1 _null_ _null_));
-#define DEFAULT_ROLE_READ_ALL_SETTINGS 3374
-DATA(insert OID = 3375 ( pg_read_all_stats f t f f f f f -1 _null_ _null_));
-#define DEFAULT_ROLE_READ_ALL_STATS 3375
-DATA(insert OID = 3377 ( pg_stat_scan_tables f t f f f f f -1 _null_ _null_));
-#define DEFAULT_ROLE_STAT_SCAN_TABLES  3377
-DATA(insert OID = 4569 ( pg_read_server_files f t f f f f f -1 _null_ _null_));
-#define DEFAULT_ROLE_READ_SERVER_FILES 4569
-DATA(insert OID = 4570 ( pg_write_server_files f t f f f f f -1 _null_ _null_));
-#define DEFAULT_ROLE_WRITE_SERVER_FILES        4570
-DATA(insert OID = 4571 ( pg_execute_server_program f t f f f f f -1 _null_ _null_));
-#define DEFAULT_ROLE_EXECUTE_SERVER_PROGRAM    4571
-DATA(insert OID = 4200 ( pg_signal_backend f t f f f f f -1 _null_ _null_));
-#define DEFAULT_ROLE_SIGNAL_BACKENDID  4200
-
 #endif                                                 /* PG_AUTHID_H */
diff --git a/src/include/catalog/pg_cast.dat b/src/include/catalog/pg_cast.dat
new file mode 100644 (file)
index 0000000..c335a76
--- /dev/null
@@ -0,0 +1,535 @@
+#----------------------------------------------------------------------
+#
+# pg_cast.dat
+#    Initial contents of the pg_cast system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_cast.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# Note: this table has OIDs, but we don't bother to assign them manually,
+# since nothing needs to know the specific OID of any built-in cast.
+
+# Numeric category: implicit casts are allowed in the direction
+# int2->int4->int8->numeric->float4->float8, while casts in the
+# reverse direction are assignment-only.
+{ castsource => 'int8', casttarget => 'int2', castfunc => 'int2(int8)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'int8', casttarget => 'int4', castfunc => 'int4(int8)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'int8', casttarget => 'float4', castfunc => 'float4(int8)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int8', casttarget => 'float8', castfunc => 'float8(int8)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int8', casttarget => 'numeric', castfunc => 'numeric(int8)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int2', casttarget => 'int8', castfunc => 'int8(int2)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int2', casttarget => 'int4', castfunc => 'int4(int2)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int2', casttarget => 'float4', castfunc => 'float4(int2)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int2', casttarget => 'float8', castfunc => 'float8(int2)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int2', casttarget => 'numeric', castfunc => 'numeric(int2)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'int8', castfunc => 'int8(int4)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'int2', castfunc => 'int2(int4)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'float4', castfunc => 'float4(int4)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'float8', castfunc => 'float8(int4)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'numeric', castfunc => 'numeric(int4)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'float4', casttarget => 'int8', castfunc => 'int8(float4)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'float4', casttarget => 'int2', castfunc => 'int2(float4)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'float4', casttarget => 'int4', castfunc => 'int4(float4)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'float4', casttarget => 'float8', castfunc => 'float8(float4)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'float4', casttarget => 'numeric',
+  castfunc => 'numeric(float4)', castcontext => 'a', castmethod => 'f' },
+{ castsource => 'float8', casttarget => 'int8', castfunc => 'int8(float8)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'float8', casttarget => 'int2', castfunc => 'int2(float8)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'float8', casttarget => 'int4', castfunc => 'int4(float8)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'float8', casttarget => 'float4', castfunc => 'float4(float8)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'float8', casttarget => 'numeric',
+  castfunc => 'numeric(float8)', castcontext => 'a', castmethod => 'f' },
+{ castsource => 'numeric', casttarget => 'int8', castfunc => 'int8(numeric)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'numeric', casttarget => 'int2', castfunc => 'int2(numeric)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'numeric', casttarget => 'int4', castfunc => 'int4(numeric)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'numeric', casttarget => 'float4',
+  castfunc => 'float4(numeric)', castcontext => 'i', castmethod => 'f' },
+{ castsource => 'numeric', casttarget => 'float8',
+  castfunc => 'float8(numeric)', castcontext => 'i', castmethod => 'f' },
+{ castsource => 'money', casttarget => 'numeric', castfunc => 'numeric(money)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'numeric', casttarget => 'money', castfunc => 'money(numeric)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'money', castfunc => 'money(int4)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'int8', casttarget => 'money', castfunc => 'money(int8)',
+  castcontext => 'a', castmethod => 'f' },
+
+# Allow explicit coercions between int4 and bool
+{ castsource => 'int4', casttarget => 'bool', castfunc => 'bool(int4)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'bool', casttarget => 'int4', castfunc => 'int4(bool)',
+  castcontext => 'e', castmethod => 'f' },
+
+# OID category: allow implicit conversion from any integral type (including
+# int8, to support OID literals > 2G) to OID, as well as assignment coercion
+# from OID to int4 or int8.  Similarly for each OID-alias type.  Also allow
+# implicit coercions between OID and each OID-alias type, as well as
+# regproc<->regprocedure and regoper<->regoperator.  (Other coercions
+# between alias types must pass through OID.)  Lastly, there are implicit
+# casts from text and varchar to regclass, which exist mainly to support
+# legacy forms of nextval() and related functions.
+{ castsource => 'int8', casttarget => 'oid', castfunc => 'oid',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int2', casttarget => 'oid', castfunc => 'int4(int2)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'oid', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'oid', casttarget => 'int8', castfunc => 'int8(oid)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'oid', casttarget => 'int4', castfunc => '0',
+  castcontext => 'a', castmethod => 'b' },
+{ castsource => 'oid', casttarget => 'regproc', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regproc', casttarget => 'oid', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'int8', casttarget => 'regproc', castfunc => 'oid',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int2', casttarget => 'regproc', castfunc => 'int4(int2)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'regproc', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regproc', casttarget => 'int8', castfunc => 'int8(oid)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'regproc', casttarget => 'int4', castfunc => '0',
+  castcontext => 'a', castmethod => 'b' },
+{ castsource => 'regproc', casttarget => 'regprocedure', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regprocedure', casttarget => 'regproc', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'oid', casttarget => 'regprocedure', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regprocedure', casttarget => 'oid', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'int8', casttarget => 'regprocedure', castfunc => 'oid',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int2', casttarget => 'regprocedure', castfunc => 'int4(int2)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'regprocedure', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regprocedure', casttarget => 'int8', castfunc => 'int8(oid)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'regprocedure', casttarget => 'int4', castfunc => '0',
+  castcontext => 'a', castmethod => 'b' },
+{ castsource => 'oid', casttarget => 'regoper', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regoper', casttarget => 'oid', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'int8', casttarget => 'regoper', castfunc => 'oid',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int2', casttarget => 'regoper', castfunc => 'int4(int2)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'regoper', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regoper', casttarget => 'int8', castfunc => 'int8(oid)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'regoper', casttarget => 'int4', castfunc => '0',
+  castcontext => 'a', castmethod => 'b' },
+{ castsource => 'regoper', casttarget => 'regoperator', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regoperator', casttarget => 'regoper', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'oid', casttarget => 'regoperator', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regoperator', casttarget => 'oid', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'int8', casttarget => 'regoperator', castfunc => 'oid',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int2', casttarget => 'regoperator', castfunc => 'int4(int2)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'regoperator', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regoperator', casttarget => 'int8', castfunc => 'int8(oid)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'regoperator', casttarget => 'int4', castfunc => '0',
+  castcontext => 'a', castmethod => 'b' },
+{ castsource => 'oid', casttarget => 'regclass', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regclass', casttarget => 'oid', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'int8', casttarget => 'regclass', castfunc => 'oid',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int2', casttarget => 'regclass', castfunc => 'int4(int2)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'regclass', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regclass', casttarget => 'int8', castfunc => 'int8(oid)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'regclass', casttarget => 'int4', castfunc => '0',
+  castcontext => 'a', castmethod => 'b' },
+{ castsource => 'oid', casttarget => 'regtype', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regtype', casttarget => 'oid', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'int8', casttarget => 'regtype', castfunc => 'oid',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int2', casttarget => 'regtype', castfunc => 'int4(int2)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'regtype', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regtype', casttarget => 'int8', castfunc => 'int8(oid)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'regtype', casttarget => 'int4', castfunc => '0',
+  castcontext => 'a', castmethod => 'b' },
+{ castsource => 'oid', casttarget => 'regconfig', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regconfig', casttarget => 'oid', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'int8', casttarget => 'regconfig', castfunc => 'oid',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int2', casttarget => 'regconfig', castfunc => 'int4(int2)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'regconfig', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regconfig', casttarget => 'int8', castfunc => 'int8(oid)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'regconfig', casttarget => 'int4', castfunc => '0',
+  castcontext => 'a', castmethod => 'b' },
+{ castsource => 'oid', casttarget => 'regdictionary', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regdictionary', casttarget => 'oid', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'int8', casttarget => 'regdictionary', castfunc => 'oid',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int2', casttarget => 'regdictionary', castfunc => 'int4(int2)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'regdictionary', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regdictionary', casttarget => 'int8', castfunc => 'int8(oid)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'regdictionary', casttarget => 'int4', castfunc => '0',
+  castcontext => 'a', castmethod => 'b' },
+{ castsource => 'text', casttarget => 'regclass', castfunc => 'regclass',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'varchar', casttarget => 'regclass', castfunc => 'regclass',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'oid', casttarget => 'regrole', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regrole', casttarget => 'oid', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'int8', casttarget => 'regrole', castfunc => 'oid',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int2', casttarget => 'regrole', castfunc => 'int4(int2)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'regrole', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regrole', casttarget => 'int8', castfunc => 'int8(oid)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'regrole', casttarget => 'int4', castfunc => '0',
+  castcontext => 'a', castmethod => 'b' },
+{ castsource => 'oid', casttarget => 'regnamespace', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regnamespace', casttarget => 'oid', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'int8', casttarget => 'regnamespace', castfunc => 'oid',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int2', casttarget => 'regnamespace', castfunc => 'int4(int2)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'regnamespace', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'regnamespace', casttarget => 'int8', castfunc => 'int8(oid)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'regnamespace', casttarget => 'int4', castfunc => '0',
+  castcontext => 'a', castmethod => 'b' },
+
+# String category
+{ castsource => 'text', casttarget => 'bpchar', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'text', casttarget => 'varchar', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'bpchar', casttarget => 'text', castfunc => 'text(bpchar)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'bpchar', casttarget => 'varchar', castfunc => 'text(bpchar)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'varchar', casttarget => 'text', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'varchar', casttarget => 'bpchar', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'char', casttarget => 'text', castfunc => 'text(char)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'char', casttarget => 'bpchar', castfunc => 'bpchar(char)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'char', casttarget => 'varchar', castfunc => 'text(char)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'name', casttarget => 'text', castfunc => 'text(name)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'name', casttarget => 'bpchar', castfunc => 'bpchar(name)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'name', casttarget => 'varchar', castfunc => 'varchar(name)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'text', casttarget => 'char', castfunc => 'char(text)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'bpchar', casttarget => 'char', castfunc => 'char(text)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'varchar', casttarget => 'char', castfunc => 'char(text)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'text', casttarget => 'name', castfunc => 'name(text)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'bpchar', casttarget => 'name', castfunc => 'name(bpchar)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'varchar', casttarget => 'name', castfunc => 'name(varchar)',
+  castcontext => 'i', castmethod => 'f' },
+
+# Allow explicit coercions between int4 and "char"
+{ castsource => 'char', casttarget => 'int4', castfunc => 'int4(char)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'char', castfunc => 'char(int4)',
+  castcontext => 'e', castmethod => 'f' },
+
+# pg_node_tree can be coerced to, but not from, text
+{ castsource => 'pg_node_tree', casttarget => 'text', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+
+# pg_ndistinct can be coerced to, but not from, bytea and text
+{ castsource => 'pg_ndistinct', casttarget => 'bytea', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'pg_ndistinct', casttarget => 'text', castfunc => '0',
+  castcontext => 'i', castmethod => 'i' },
+
+# pg_dependencies can be coerced to, but not from, bytea and text
+{ castsource => 'pg_dependencies', casttarget => 'bytea', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'pg_dependencies', casttarget => 'text', castfunc => '0',
+  castcontext => 'i', castmethod => 'i' },
+
+# Datetime category
+{ castsource => 'abstime', casttarget => 'date', castfunc => 'date(abstime)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'abstime', casttarget => 'time', castfunc => 'time(abstime)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'abstime', casttarget => 'timestamp',
+  castfunc => 'timestamp(abstime)', castcontext => 'i', castmethod => 'f' },
+{ castsource => 'abstime', casttarget => 'timestamptz',
+  castfunc => 'timestamptz(abstime)', castcontext => 'i', castmethod => 'f' },
+{ castsource => 'reltime', casttarget => 'interval',
+  castfunc => 'interval(reltime)', castcontext => 'i', castmethod => 'f' },
+{ castsource => 'date', casttarget => 'timestamp',
+  castfunc => 'timestamp(date)', castcontext => 'i', castmethod => 'f' },
+{ castsource => 'date', casttarget => 'timestamptz',
+  castfunc => 'timestamptz(date)', castcontext => 'i', castmethod => 'f' },
+{ castsource => 'time', casttarget => 'interval', castfunc => 'interval(time)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'time', casttarget => 'timetz', castfunc => 'timetz(time)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'timestamp', casttarget => 'abstime',
+  castfunc => 'abstime(timestamp)', castcontext => 'a', castmethod => 'f' },
+{ castsource => 'timestamp', casttarget => 'date',
+  castfunc => 'date(timestamp)', castcontext => 'a', castmethod => 'f' },
+{ castsource => 'timestamp', casttarget => 'time',
+  castfunc => 'time(timestamp)', castcontext => 'a', castmethod => 'f' },
+{ castsource => 'timestamp', casttarget => 'timestamptz',
+  castfunc => 'timestamptz(timestamp)', castcontext => 'i', castmethod => 'f' },
+{ castsource => 'timestamptz', casttarget => 'abstime',
+  castfunc => 'abstime(timestamptz)', castcontext => 'a', castmethod => 'f' },
+{ castsource => 'timestamptz', casttarget => 'date',
+  castfunc => 'date(timestamptz)', castcontext => 'a', castmethod => 'f' },
+{ castsource => 'timestamptz', casttarget => 'time',
+  castfunc => 'time(timestamptz)', castcontext => 'a', castmethod => 'f' },
+{ castsource => 'timestamptz', casttarget => 'timestamp',
+  castfunc => 'timestamp(timestamptz)', castcontext => 'a', castmethod => 'f' },
+{ castsource => 'timestamptz', casttarget => 'timetz',
+  castfunc => 'timetz(timestamptz)', castcontext => 'a', castmethod => 'f' },
+{ castsource => 'interval', casttarget => 'reltime', castfunc => 'reltime',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'interval', casttarget => 'time', castfunc => 'time(interval)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'timetz', casttarget => 'time', castfunc => 'time(timetz)',
+  castcontext => 'a', castmethod => 'f' },
+
+# Cross-category casts between int4 and abstime, reltime
+{ castsource => 'int4', casttarget => 'abstime', castfunc => '0',
+  castcontext => 'e', castmethod => 'b' },
+{ castsource => 'abstime', casttarget => 'int4', castfunc => '0',
+  castcontext => 'e', castmethod => 'b' },
+{ castsource => 'int4', casttarget => 'reltime', castfunc => '0',
+  castcontext => 'e', castmethod => 'b' },
+{ castsource => 'reltime', casttarget => 'int4', castfunc => '0',
+  castcontext => 'e', castmethod => 'b' },
+
+# Geometric category
+{ castsource => 'point', casttarget => 'box', castfunc => 'box(point)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'lseg', casttarget => 'point', castfunc => 'point(lseg)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'path', casttarget => 'point', castfunc => 'point(path)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'path', casttarget => 'polygon', castfunc => 'polygon(path)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'box', casttarget => 'point', castfunc => 'point(box)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'box', casttarget => 'lseg', castfunc => 'lseg(box)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'box', casttarget => 'polygon', castfunc => 'polygon(box)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'box', casttarget => 'circle', castfunc => 'circle(box)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'polygon', casttarget => 'point', castfunc => 'point(polygon)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'polygon', casttarget => 'path', castfunc => 'path',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'polygon', casttarget => 'box', castfunc => 'box(polygon)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'polygon', casttarget => 'circle',
+  castfunc => 'circle(polygon)', castcontext => 'e', castmethod => 'f' },
+{ castsource => 'circle', casttarget => 'point', castfunc => 'point(circle)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'circle', casttarget => 'box', castfunc => 'box(circle)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'circle', casttarget => 'polygon',
+  castfunc => 'polygon(circle)', castcontext => 'e', castmethod => 'f' },
+
+# MAC address category
+{ castsource => 'macaddr', casttarget => 'macaddr8', castfunc => 'macaddr8',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'macaddr8', casttarget => 'macaddr', castfunc => 'macaddr',
+  castcontext => 'i', castmethod => 'f' },
+
+# INET category
+{ castsource => 'cidr', casttarget => 'inet', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'inet', casttarget => 'cidr', castfunc => 'cidr',
+  castcontext => 'a', castmethod => 'f' },
+
+# BitString category
+{ castsource => 'bit', casttarget => 'varbit', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+{ castsource => 'varbit', casttarget => 'bit', castfunc => '0',
+  castcontext => 'i', castmethod => 'b' },
+
+# Cross-category casts between bit and int4, int8
+{ castsource => 'int8', casttarget => 'bit', castfunc => 'bit(int8,int4)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'int4', casttarget => 'bit', castfunc => 'bit(int4,int4)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'bit', casttarget => 'int8', castfunc => 'int8(bit)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'bit', casttarget => 'int4', castfunc => 'int4(bit)',
+  castcontext => 'e', castmethod => 'f' },
+
+# Cross-category casts to and from TEXT
+# We need entries here only for a few specialized cases where the behavior
+# of the cast function differs from the datatype's I/O functions.  Otherwise,
+# parse_coerce.c will generate CoerceViaIO operations without any prompting.
+# Note that the castcontext values specified here should be no stronger than
+# parse_coerce.c's automatic casts ('a' to text, 'e' from text) else odd
+# behavior will ensue when the automatic cast is applied instead of the
+# pg_cast entry!
+{ castsource => 'cidr', casttarget => 'text', castfunc => 'text(inet)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'inet', casttarget => 'text', castfunc => 'text(inet)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'bool', casttarget => 'text', castfunc => 'text(bool)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'xml', casttarget => 'text', castfunc => '0',
+  castcontext => 'a', castmethod => 'b' },
+{ castsource => 'text', casttarget => 'xml', castfunc => 'xml',
+  castcontext => 'e', castmethod => 'f' },
+
+# Cross-category casts to and from VARCHAR
+# We support all the same casts as for TEXT.
+{ castsource => 'cidr', casttarget => 'varchar', castfunc => 'text(inet)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'inet', casttarget => 'varchar', castfunc => 'text(inet)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'bool', casttarget => 'varchar', castfunc => 'text(bool)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'xml', casttarget => 'varchar', castfunc => '0',
+  castcontext => 'a', castmethod => 'b' },
+{ castsource => 'varchar', casttarget => 'xml', castfunc => 'xml',
+  castcontext => 'e', castmethod => 'f' },
+
+# Cross-category casts to and from BPCHAR
+# We support all the same casts as for TEXT.
+{ castsource => 'cidr', casttarget => 'bpchar', castfunc => 'text(inet)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'inet', casttarget => 'bpchar', castfunc => 'text(inet)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'bool', casttarget => 'bpchar', castfunc => 'text(bool)',
+  castcontext => 'a', castmethod => 'f' },
+{ castsource => 'xml', casttarget => 'bpchar', castfunc => '0',
+  castcontext => 'a', castmethod => 'b' },
+{ castsource => 'bpchar', casttarget => 'xml', castfunc => 'xml',
+  castcontext => 'e', castmethod => 'f' },
+
+# Length-coercion functions
+{ castsource => 'bpchar', casttarget => 'bpchar',
+  castfunc => 'bpchar(bpchar,int4,bool)', castcontext => 'i',
+  castmethod => 'f' },
+{ castsource => 'varchar', casttarget => 'varchar',
+  castfunc => 'varchar(varchar,int4,bool)', castcontext => 'i',
+  castmethod => 'f' },
+{ castsource => 'time', casttarget => 'time', castfunc => 'time(time,int4)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'timestamp', casttarget => 'timestamp',
+  castfunc => 'timestamp(timestamp,int4)', castcontext => 'i',
+  castmethod => 'f' },
+{ castsource => 'timestamptz', casttarget => 'timestamptz',
+  castfunc => 'timestamptz(timestamptz,int4)', castcontext => 'i',
+  castmethod => 'f' },
+{ castsource => 'interval', casttarget => 'interval',
+  castfunc => 'interval(interval,int4)', castcontext => 'i',
+  castmethod => 'f' },
+{ castsource => 'timetz', casttarget => 'timetz',
+  castfunc => 'timetz(timetz,int4)', castcontext => 'i', castmethod => 'f' },
+{ castsource => 'bit', casttarget => 'bit', castfunc => 'bit(bit,int4,bool)',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'varbit', casttarget => 'varbit', castfunc => 'varbit',
+  castcontext => 'i', castmethod => 'f' },
+{ castsource => 'numeric', casttarget => 'numeric',
+  castfunc => 'numeric(numeric,int4)', castcontext => 'i', castmethod => 'f' },
+
+# json to/from jsonb
+{ castsource => 'json', casttarget => 'jsonb', castfunc => '0',
+  castcontext => 'a', castmethod => 'i' },
+{ castsource => 'jsonb', casttarget => 'json', castfunc => '0',
+  castcontext => 'a', castmethod => 'i' },
+
+# jsonb to numeric and bool types
+{ castsource => 'jsonb', casttarget => 'bool', castfunc => 'bool(jsonb)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'jsonb', casttarget => 'numeric', castfunc => 'numeric(jsonb)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'jsonb', casttarget => 'int2', castfunc => 'int2(jsonb)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'jsonb', casttarget => 'int4', castfunc => 'int4(jsonb)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'jsonb', casttarget => 'int8', castfunc => 'int8(jsonb)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'jsonb', casttarget => 'float4', castfunc => 'float4(jsonb)',
+  castcontext => 'e', castmethod => 'f' },
+{ castsource => 'jsonb', casttarget => 'float8', castfunc => 'float8(jsonb)',
+  castcontext => 'e', castmethod => 'f' },
+
+]
index c47fb5bd0ddf09c85ee51186e9c8c3389a926448..10c796ab02ed3eacdef877e953e496ce1a21e91c 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_cast.h
  *       definition of the system "type casts" relation (pg_cast)
- *       along with the relation's initial contents.
  *
  * As of Postgres 8.0, pg_cast describes not only type coercion functions
  * but also length coercion functions.
@@ -13,8 +12,8 @@
  * src/include/catalog/pg_cast.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_CAST_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_cast_d.h"
 
 /* ----------------
  *             pg_cast definition.  cpp turns this into
  *             typedef struct FormData_pg_cast
  * ----------------
  */
-#define CastRelationId 2605
-
-CATALOG(pg_cast,2605)
+CATALOG(pg_cast,2605,CastRelationId)
 {
-       Oid                     castsource;             /* source datatype for cast */
-       Oid                     casttarget;             /* destination datatype for cast */
-       Oid                     castfunc;               /* cast function; 0 = binary coercible */
-       char            castcontext;    /* contexts in which cast can be used */
-       char            castmethod;             /* cast method */
+       /* source datatype for cast */
+       Oid                     castsource BKI_LOOKUP(pg_type);
+
+       /* destination datatype for cast */
+       Oid                     casttarget BKI_LOOKUP(pg_type);
+
+       /* cast function; 0 = binary coercible */
+       Oid                     castfunc BKI_LOOKUP(pg_proc);
+
+       /* contexts in which cast can be used */
+       char            castcontext;
+
+       /* cast method */
+       char            castmethod;
 } FormData_pg_cast;
 
+/* ----------------
+ *             Form_pg_cast corresponds to a pointer to a tuple with
+ *             the format of pg_cast relation.
+ * ----------------
+ */
 typedef FormData_pg_cast *Form_pg_cast;
 
+#ifdef EXPOSE_TO_CLIENT_CODE
+
 /*
  * The allowable values for pg_cast.castcontext are specified by this enum.
  * Since castcontext is stored as a "char", we use ASCII codes for human
@@ -69,336 +83,6 @@ typedef enum CoercionMethod
        COERCION_METHOD_INOUT = 'i' /* use input/output functions */
 } CoercionMethod;
 
-
-/* ----------------
- *             compiler constants for pg_cast
- * ----------------
- */
-#define Natts_pg_cast                          5
-#define Anum_pg_cast_castsource                1
-#define Anum_pg_cast_casttarget                2
-#define Anum_pg_cast_castfunc          3
-#define Anum_pg_cast_castcontext       4
-#define Anum_pg_cast_castmethod                5
-
-/* ----------------
- *             initial contents of pg_cast
- *
- * Note: this table has OIDs, but we don't bother to assign them manually,
- * since nothing needs to know the specific OID of any built-in cast.
- * ----------------
- */
-
-/*
- * Numeric category: implicit casts are allowed in the direction
- * int2->int4->int8->numeric->float4->float8, while casts in the
- * reverse direction are assignment-only.
- */
-DATA(insert (  20       21  714 a f ));
-DATA(insert (  20       23  480 a f ));
-DATA(insert (  20      700  652 i f ));
-DATA(insert (  20      701  482 i f ));
-DATA(insert (  20 1700 1781 i f ));
-DATA(insert (  21       20  754 i f ));
-DATA(insert (  21       23  313 i f ));
-DATA(insert (  21      700  236 i f ));
-DATA(insert (  21      701  235 i f ));
-DATA(insert (  21 1700 1782 i f ));
-DATA(insert (  23       20  481 i f ));
-DATA(insert (  23       21  314 a f ));
-DATA(insert (  23      700  318 i f ));
-DATA(insert (  23      701  316 i f ));
-DATA(insert (  23 1700 1740 i f ));
-DATA(insert (  700      20  653 a f ));
-DATA(insert (  700      21  238 a f ));
-DATA(insert (  700      23  319 a f ));
-DATA(insert (  700     701  311 i f ));
-DATA(insert (  700 1700 1742 a f ));
-DATA(insert (  701      20  483 a f ));
-DATA(insert (  701      21  237 a f ));
-DATA(insert (  701      23  317 a f ));
-DATA(insert (  701     700  312 a f ));
-DATA(insert (  701 1700 1743 a f ));
-DATA(insert ( 1700      20 1779 a f ));
-DATA(insert ( 1700      21 1783 a f ));
-DATA(insert ( 1700      23 1744 a f ));
-DATA(insert ( 1700     700 1745 i f ));
-DATA(insert ( 1700     701 1746 i f ));
-DATA(insert (  790 1700 3823 a f ));
-DATA(insert ( 1700     790 3824 a f ));
-DATA(insert ( 23       790 3811 a f ));
-DATA(insert ( 20       790 3812 a f ));
-
-/* Allow explicit coercions between int4 and bool */
-DATA(insert (  23      16      2557 e f ));
-DATA(insert (  16      23      2558 e f ));
-
-/*
- * OID category: allow implicit conversion from any integral type (including
- * int8, to support OID literals > 2G) to OID, as well as assignment coercion
- * from OID to int4 or int8.  Similarly for each OID-alias type.  Also allow
- * implicit coercions between OID and each OID-alias type, as well as
- * regproc<->regprocedure and regoper<->regoperator.  (Other coercions
- * between alias types must pass through OID.) Lastly, there are implicit
- * casts from text and varchar to regclass, which exist mainly to support
- * legacy forms of nextval() and related functions.
- */
-DATA(insert (  20       26 1287 i f ));
-DATA(insert (  21       26  313 i f ));
-DATA(insert (  23       26    0 i b ));
-DATA(insert (  26       20 1288 a f ));
-DATA(insert (  26       23    0 a b ));
-DATA(insert (  26       24    0 i b ));
-DATA(insert (  24       26    0 i b ));
-DATA(insert (  20       24 1287 i f ));
-DATA(insert (  21       24  313 i f ));
-DATA(insert (  23       24    0 i b ));
-DATA(insert (  24       20 1288 a f ));
-DATA(insert (  24       23    0 a b ));
-DATA(insert (  24 2202    0 i b ));
-DATA(insert ( 2202      24    0 i b ));
-DATA(insert (  26 2202    0 i b ));
-DATA(insert ( 2202      26    0 i b ));
-DATA(insert (  20 2202 1287 i f ));
-DATA(insert (  21 2202  313 i f ));
-DATA(insert (  23 2202    0 i b ));
-DATA(insert ( 2202      20 1288 a f ));
-DATA(insert ( 2202      23    0 a b ));
-DATA(insert (  26 2203    0 i b ));
-DATA(insert ( 2203      26    0 i b ));
-DATA(insert (  20 2203 1287 i f ));
-DATA(insert (  21 2203  313 i f ));
-DATA(insert (  23 2203    0 i b ));
-DATA(insert ( 2203      20 1288 a f ));
-DATA(insert ( 2203      23    0 a b ));
-DATA(insert ( 2203 2204    0 i b ));
-DATA(insert ( 2204 2203    0 i b ));
-DATA(insert (  26 2204    0 i b ));
-DATA(insert ( 2204      26    0 i b ));
-DATA(insert (  20 2204 1287 i f ));
-DATA(insert (  21 2204  313 i f ));
-DATA(insert (  23 2204    0 i b ));
-DATA(insert ( 2204      20 1288 a f ));
-DATA(insert ( 2204      23    0 a b ));
-DATA(insert (  26 2205    0 i b ));
-DATA(insert ( 2205      26    0 i b ));
-DATA(insert (  20 2205 1287 i f ));
-DATA(insert (  21 2205  313 i f ));
-DATA(insert (  23 2205    0 i b ));
-DATA(insert ( 2205      20 1288 a f ));
-DATA(insert ( 2205      23    0 a b ));
-DATA(insert (  26 2206    0 i b ));
-DATA(insert ( 2206      26    0 i b ));
-DATA(insert (  20 2206 1287 i f ));
-DATA(insert (  21 2206  313 i f ));
-DATA(insert (  23 2206    0 i b ));
-DATA(insert ( 2206      20 1288 a f ));
-DATA(insert ( 2206      23    0 a b ));
-DATA(insert (  26 3734    0 i b ));
-DATA(insert ( 3734      26    0 i b ));
-DATA(insert (  20 3734 1287 i f ));
-DATA(insert (  21 3734  313 i f ));
-DATA(insert (  23 3734    0 i b ));
-DATA(insert ( 3734      20 1288 a f ));
-DATA(insert ( 3734      23    0 a b ));
-DATA(insert (  26 3769    0 i b ));
-DATA(insert ( 3769      26    0 i b ));
-DATA(insert (  20 3769 1287 i f ));
-DATA(insert (  21 3769  313 i f ));
-DATA(insert (  23 3769    0 i b ));
-DATA(insert ( 3769      20 1288 a f ));
-DATA(insert ( 3769      23    0 a b ));
-DATA(insert (  25 2205 1079 i f ));
-DATA(insert ( 1043 2205 1079 i f ));
-DATA(insert (  26 4096    0 i b ));
-DATA(insert ( 4096      26    0 i b ));
-DATA(insert (  20 4096 1287 i f ));
-DATA(insert (  21 4096  313 i f ));
-DATA(insert (  23 4096    0 i b ));
-DATA(insert ( 4096      20 1288 a f ));
-DATA(insert ( 4096      23    0 a b ));
-DATA(insert (  26 4089    0 i b ));
-DATA(insert ( 4089      26    0 i b ));
-DATA(insert (  20 4089 1287 i f ));
-DATA(insert (  21 4089  313 i f ));
-DATA(insert (  23 4089    0 i b ));
-DATA(insert ( 4089      20 1288 a f ));
-DATA(insert ( 4089      23    0 a b ));
-
-/*
- * String category
- */
-DATA(insert (  25 1042    0 i b ));
-DATA(insert (  25 1043    0 i b ));
-DATA(insert ( 1042      25  401 i f ));
-DATA(insert ( 1042 1043  401 i f ));
-DATA(insert ( 1043      25    0 i b ));
-DATA(insert ( 1043 1042    0 i b ));
-DATA(insert (  18       25  946 i f ));
-DATA(insert (  18 1042  860 a f ));
-DATA(insert (  18 1043  946 a f ));
-DATA(insert (  19       25  406 i f ));
-DATA(insert (  19 1042  408 a f ));
-DATA(insert (  19 1043 1401 a f ));
-DATA(insert (  25       18  944 a f ));
-DATA(insert ( 1042      18  944 a f ));
-DATA(insert ( 1043      18  944 a f ));
-DATA(insert (  25       19  407 i f ));
-DATA(insert ( 1042      19  409 i f ));
-DATA(insert ( 1043      19 1400 i f ));
-
-/* Allow explicit coercions between int4 and "char" */
-DATA(insert (  18       23   77 e f ));
-DATA(insert (  23       18   78 e f ));
-
-/* pg_node_tree can be coerced to, but not from, text */
-DATA(insert (  194      25    0 i b ));
-
-/* pg_ndistinct can be coerced to, but not from, bytea and text */
-DATA(insert (  3361  17    0 i b ));
-DATA(insert (  3361  25    0 i i ));
-
-/* pg_dependencies can be coerced to, but not from, bytea and text */
-DATA(insert (  3402  17    0 i b ));
-DATA(insert (  3402  25    0 i i ));
-
-/*
- * Datetime category
- */
-DATA(insert (  702 1082 1179 a f ));
-DATA(insert (  702 1083 1364 a f ));
-DATA(insert (  702 1114 2023 i f ));
-DATA(insert (  702 1184 1173 i f ));
-DATA(insert (  703 1186 1177 i f ));
-DATA(insert ( 1082 1114 2024 i f ));
-DATA(insert ( 1082 1184 1174 i f ));
-DATA(insert ( 1083 1186 1370 i f ));
-DATA(insert ( 1083 1266 2047 i f ));
-DATA(insert ( 1114     702 2030 a f ));
-DATA(insert ( 1114 1082 2029 a f ));
-DATA(insert ( 1114 1083 1316 a f ));
-DATA(insert ( 1114 1184 2028 i f ));
-DATA(insert ( 1184     702 1180 a f ));
-DATA(insert ( 1184 1082 1178 a f ));
-DATA(insert ( 1184 1083 2019 a f ));
-DATA(insert ( 1184 1114 2027 a f ));
-DATA(insert ( 1184 1266 1388 a f ));
-DATA(insert ( 1186     703 1194 a f ));
-DATA(insert ( 1186 1083 1419 a f ));
-DATA(insert ( 1266 1083 2046 a f ));
-/* Cross-category casts between int4 and abstime, reltime */
-DATA(insert (  23      702    0 e b ));
-DATA(insert (  702      23    0 e b ));
-DATA(insert (  23      703    0 e b ));
-DATA(insert (  703      23    0 e b ));
-
-/*
- * Geometric category
- */
-DATA(insert (  600     603 4091 a f ));
-DATA(insert (  601     600 1532 e f ));
-DATA(insert (  602     600 1533 e f ));
-DATA(insert (  602     604 1449 a f ));
-DATA(insert (  603     600 1534 e f ));
-DATA(insert (  603     601 1541 e f ));
-DATA(insert (  603     604 1448 a f ));
-DATA(insert (  603     718 1479 e f ));
-DATA(insert (  604     600 1540 e f ));
-DATA(insert (  604     602 1447 a f ));
-DATA(insert (  604     603 1446 e f ));
-DATA(insert (  604     718 1474 e f ));
-DATA(insert (  718     600 1416 e f ));
-DATA(insert (  718     603 1480 e f ));
-DATA(insert (  718     604 1544 e f ));
-
-/*
- * MAC address category
- */
-DATA(insert (  829     774    4123 i f ));
-DATA(insert (  774     829    4124 i f ));
-
-/*
- * INET category
- */
-DATA(insert (  650     869    0 i b ));
-DATA(insert (  869     650 1715 a f ));
-
-/*
- * BitString category
- */
-DATA(insert ( 1560 1562    0 i b ));
-DATA(insert ( 1562 1560    0 i b ));
-/* Cross-category casts between bit and int4, int8 */
-DATA(insert (  20 1560 2075 e f ));
-DATA(insert (  23 1560 1683 e f ));
-DATA(insert ( 1560      20 2076 e f ));
-DATA(insert ( 1560      23 1684 e f ));
-
-/*
- * Cross-category casts to and from TEXT
- *
- * We need entries here only for a few specialized cases where the behavior
- * of the cast function differs from the datatype's I/O functions.  Otherwise,
- * parse_coerce.c will generate CoerceViaIO operations without any prompting.
- *
- * Note that the castcontext values specified here should be no stronger than
- * parse_coerce.c's automatic casts ('a' to text, 'e' from text) else odd
- * behavior will ensue when the automatic cast is applied instead of the
- * pg_cast entry!
- */
-DATA(insert (  650      25  730 a f ));
-DATA(insert (  869      25  730 a f ));
-DATA(insert (  16       25 2971 a f ));
-DATA(insert (  142      25    0 a b ));
-DATA(insert (  25      142 2896 e f ));
-
-/*
- * Cross-category casts to and from VARCHAR
- *
- * We support all the same casts as for TEXT.
- */
-DATA(insert (  650 1043  730 a f ));
-DATA(insert (  869 1043  730 a f ));
-DATA(insert (  16 1043 2971 a f ));
-DATA(insert (  142 1043    0 a b ));
-DATA(insert ( 1043     142 2896 e f ));
-
-/*
- * Cross-category casts to and from BPCHAR
- *
- * We support all the same casts as for TEXT.
- */
-DATA(insert (  650 1042  730 a f ));
-DATA(insert (  869 1042  730 a f ));
-DATA(insert (  16 1042 2971 a f ));
-DATA(insert (  142 1042    0 a b ));
-DATA(insert ( 1042     142 2896 e f ));
-
-/*
- * Length-coercion functions
- */
-DATA(insert ( 1042 1042  668 i f ));
-DATA(insert ( 1043 1043  669 i f ));
-DATA(insert ( 1083 1083 1968 i f ));
-DATA(insert ( 1114 1114 1961 i f ));
-DATA(insert ( 1184 1184 1967 i f ));
-DATA(insert ( 1186 1186 1200 i f ));
-DATA(insert ( 1266 1266 1969 i f ));
-DATA(insert ( 1560 1560 1685 i f ));
-DATA(insert ( 1562 1562 1687 i f ));
-DATA(insert ( 1700 1700 1703 i f ));
-
-/* json to/from jsonb */
-DATA(insert (  114 3802    0 a i ));
-DATA(insert ( 3802     114    0 a i ));
-
-/* jsonb to numeric and bool types */
-DATA(insert ( 3802     16       3556 e f ));
-DATA(insert ( 3802     1700 3449 e f ));
-DATA(insert ( 3802     21   3450 e f ));
-DATA(insert ( 3802     23   3451 e f ));
-DATA(insert ( 3802     20   3452 e f ));
-DATA(insert ( 3802     700  3453 e f ));
-DATA(insert ( 3802     701  2580 e f ));
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
 
 #endif                                                 /* PG_CAST_H */
diff --git a/src/include/catalog/pg_class.dat b/src/include/catalog/pg_class.dat
new file mode 100644 (file)
index 0000000..e1450e3
--- /dev/null
@@ -0,0 +1,68 @@
+#----------------------------------------------------------------------
+#
+# pg_class.dat
+#    Initial contents of the pg_class system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_class.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# Note: only "bootstrapped" relations, ie those marked BKI_BOOTSTRAP, need to
+# have entries here.  Be sure that the OIDs listed here match those given in
+# their CATALOG and BKI_ROWTYPE_OID macros, and that the relnatts values are
+# correct.
+
+# Note: "3" in the relfrozenxid column stands for FirstNormalTransactionId;
+# similarly, "1" in relminmxid stands for FirstMultiXactId
+
+{ oid => '1247',
+  relname => 'pg_type', relnamespace => 'PGNSP', reltype => '71',
+  reloftype => '0', relowner => 'PGUID', relam => '0', relfilenode => '0',
+  reltablespace => '0', relpages => '0', reltuples => '0', relallvisible => '0',
+  reltoastrelid => '0', relhasindex => 'f', relisshared => 'f',
+  relpersistence => 'p', relkind => 'r', relnatts => '30', relchecks => '0',
+  relhasoids => 't', relhasrules => 'f', relhastriggers => 'f',
+  relhassubclass => 'f', relrowsecurity => 'f', relforcerowsecurity => 'f',
+  relispopulated => 't', relreplident => 'n', relispartition => 'f',
+  relrewrite => '0', relfrozenxid => '3', relminmxid => '1', relacl => '_null_',
+  reloptions => '_null_', relpartbound => '_null_' },
+{ oid => '1249',
+  relname => 'pg_attribute', relnamespace => 'PGNSP', reltype => '75',
+  reloftype => '0', relowner => 'PGUID', relam => '0', relfilenode => '0',
+  reltablespace => '0', relpages => '0', reltuples => '0', relallvisible => '0',
+  reltoastrelid => '0', relhasindex => 'f', relisshared => 'f',
+  relpersistence => 'p', relkind => 'r', relnatts => '24', relchecks => '0',
+  relhasoids => 'f', relhasrules => 'f', relhastriggers => 'f',
+  relhassubclass => 'f', relrowsecurity => 'f', relforcerowsecurity => 'f',
+  relispopulated => 't', relreplident => 'n', relispartition => 'f',
+  relrewrite => '0', relfrozenxid => '3', relminmxid => '1', relacl => '_null_',
+  reloptions => '_null_', relpartbound => '_null_' },
+{ oid => '1255',
+  relname => 'pg_proc', relnamespace => 'PGNSP', reltype => '81',
+  reloftype => '0', relowner => 'PGUID', relam => '0', relfilenode => '0',
+  reltablespace => '0', relpages => '0', reltuples => '0', relallvisible => '0',
+  reltoastrelid => '0', relhasindex => 'f', relisshared => 'f',
+  relpersistence => 'p', relkind => 'r', relnatts => '28', relchecks => '0',
+  relhasoids => 't', relhasrules => 'f', relhastriggers => 'f',
+  relhassubclass => 'f', relrowsecurity => 'f', relforcerowsecurity => 'f',
+  relispopulated => 't', relreplident => 'n', relispartition => 'f',
+  relrewrite => '0', relfrozenxid => '3', relminmxid => '1', relacl => '_null_',
+  reloptions => '_null_', relpartbound => '_null_' },
+{ oid => '1259',
+  relname => 'pg_class', relnamespace => 'PGNSP', reltype => '83',
+  reloftype => '0', relowner => 'PGUID', relam => '0', relfilenode => '0',
+  reltablespace => '0', relpages => '0', reltuples => '0', relallvisible => '0',
+  reltoastrelid => '0', relhasindex => 'f', relisshared => 'f',
+  relpersistence => 'p', relkind => 'r', relnatts => '33', relchecks => '0',
+  relhasoids => 't', relhasrules => 'f', relhastriggers => 'f',
+  relhassubclass => 'f', relrowsecurity => 'f', relforcerowsecurity => 'f',
+  relispopulated => 't', relreplident => 'n', relispartition => 'f',
+  relrewrite => '0', relfrozenxid => '3', relminmxid => '1', relacl => '_null_',
+  reloptions => '_null_', relpartbound => '_null_' },
+
+]
index 135f33d0f30e5d563b0a1558ab776e5ef4c02ed5..ef62c30cf950f4194c95145bbc0fce0afd1cc588 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_class.h
  *       definition of the system "relation" relation (pg_class)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_class.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_CLASS_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_class_d.h"
 
 /* ----------------
  *             pg_class definition.  cpp turns this into
  *             typedef struct FormData_pg_class
  * ----------------
  */
-#define RelationRelationId     1259
-#define RelationRelation_Rowtype_Id  83
-
-CATALOG(pg_class,1259) BKI_BOOTSTRAP BKI_ROWTYPE_OID(83) BKI_SCHEMA_MACRO
+CATALOG(pg_class,1259,RelationRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(83,RelationRelation_Rowtype_Id) BKI_SCHEMA_MACRO
 {
        NameData        relname;                /* class name */
        Oid                     relnamespace;   /* OID of namespace containing this class */
@@ -94,68 +91,7 @@ CATALOG(pg_class,1259) BKI_BOOTSTRAP BKI_ROWTYPE_OID(83) BKI_SCHEMA_MACRO
  */
 typedef FormData_pg_class *Form_pg_class;
 
-/* ----------------
- *             compiler constants for pg_class
- * ----------------
- */
-
-#define Natts_pg_class                                         33
-#define Anum_pg_class_relname                          1
-#define Anum_pg_class_relnamespace                     2
-#define Anum_pg_class_reltype                          3
-#define Anum_pg_class_reloftype                                4
-#define Anum_pg_class_relowner                         5
-#define Anum_pg_class_relam                                    6
-#define Anum_pg_class_relfilenode                      7
-#define Anum_pg_class_reltablespace                    8
-#define Anum_pg_class_relpages                         9
-#define Anum_pg_class_reltuples                                10
-#define Anum_pg_class_relallvisible                    11
-#define Anum_pg_class_reltoastrelid                    12
-#define Anum_pg_class_relhasindex                      13
-#define Anum_pg_class_relisshared                      14
-#define Anum_pg_class_relpersistence           15
-#define Anum_pg_class_relkind                          16
-#define Anum_pg_class_relnatts                         17
-#define Anum_pg_class_relchecks                                18
-#define Anum_pg_class_relhasoids                       19
-#define Anum_pg_class_relhasrules                      20
-#define Anum_pg_class_relhastriggers           21
-#define Anum_pg_class_relhassubclass           22
-#define Anum_pg_class_relrowsecurity           23
-#define Anum_pg_class_relforcerowsecurity      24
-#define Anum_pg_class_relispopulated           25
-#define Anum_pg_class_relreplident                     26
-#define Anum_pg_class_relispartition           27
-#define Anum_pg_class_relrewrite                       28
-#define Anum_pg_class_relfrozenxid                     29
-#define Anum_pg_class_relminmxid                       30
-#define Anum_pg_class_relacl                           31
-#define Anum_pg_class_reloptions                       32
-#define Anum_pg_class_relpartbound                     33
-
-/* ----------------
- *             initial contents of pg_class
- *
- * NOTE: only "bootstrapped" relations need to be declared here.  Be sure that
- * the OIDs listed here match those given in their CATALOG macros, and that
- * the relnatts values are correct.
- * ----------------
- */
-
-/*
- * Note: "3" in the relfrozenxid column stands for FirstNormalTransactionId;
- * similarly, "1" in relminmxid stands for FirstMultiXactId
- */
-DATA(insert OID = 1247 (  pg_type              PGNSP 71 0 PGUID 0 0 0 0 0 0 0 f f p r 30 0 t f f f f f t n f 0 3 1 _null_ _null_ _null_));
-DESCR("");
-DATA(insert OID = 1249 (  pg_attribute PGNSP 75 0 PGUID 0 0 0 0 0 0 0 f f p r 24 0 f f f f f f t n f 0 3 1 _null_ _null_ _null_));
-DESCR("");
-DATA(insert OID = 1255 (  pg_proc              PGNSP 81 0 PGUID 0 0 0 0 0 0 0 f f p r 28 0 t f f f f f t n f 0 3 1 _null_ _null_ _null_));
-DESCR("");
-DATA(insert OID = 1259 (  pg_class             PGNSP 83 0 PGUID 0 0 0 0 0 0 0 f f p r 33 0 t f f f f f t n f 0 3 1 _null_ _null_ _null_));
-DESCR("");
-
+#ifdef EXPOSE_TO_CLIENT_CODE
 
 #define                  RELKIND_RELATION                'r'   /* ordinary table */
 #define                  RELKIND_INDEX                   'i'   /* secondary index */
@@ -185,4 +121,6 @@ DESCR("");
  */
 #define                  REPLICA_IDENTITY_INDEX        'i'
 
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
+
 #endif                                                 /* PG_CLASS_H */
diff --git a/src/include/catalog/pg_collation.dat b/src/include/catalog/pg_collation.dat
new file mode 100644 (file)
index 0000000..e98a4fd
--- /dev/null
@@ -0,0 +1,31 @@
+#----------------------------------------------------------------------
+#
+# pg_collation.dat
+#    Initial contents of the pg_collation system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_collation.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+{ oid => '100', oid_symbol => 'DEFAULT_COLLATION_OID',
+  descr => 'database\'s default collation',
+  collname => 'default', collnamespace => 'PGNSP', collowner => 'PGUID',
+  collprovider => 'd', collencoding => '-1', collcollate => '', collctype => '',
+  collversion => '_null_' },
+{ oid => '950', oid_symbol => 'C_COLLATION_OID',
+  descr => 'standard C collation',
+  collname => 'C', collnamespace => 'PGNSP', collowner => 'PGUID',
+  collprovider => 'c', collencoding => '-1', collcollate => 'C',
+  collctype => 'C', collversion => '_null_' },
+{ oid => '951', oid_symbol => 'POSIX_COLLATION_OID',
+  descr => 'standard POSIX collation',
+  collname => 'POSIX', collnamespace => 'PGNSP', collowner => 'PGUID',
+  collprovider => 'c', collencoding => '-1', collcollate => 'POSIX',
+  collctype => 'POSIX', collversion => '_null_' },
+
+]
index 8ef804c73b3b8a7b2edb97e1a93bf68bc2b979da..d932a42ce0d459a0da750a7cc42aadbf2efd676e 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_collation.h
  *       definition of the system "collation" relation (pg_collation)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -12,8 +11,8 @@
  *             src/include/catalog/pg_collation.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_COLLATION_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_collation_d.h"
 
 /* ----------------
  *             pg_collation definition.  cpp turns this into
  *             typedef struct FormData_pg_collation
  * ----------------
  */
-#define CollationRelationId  3456
-
-CATALOG(pg_collation,3456)
+CATALOG(pg_collation,3456,CollationRelationId)
 {
        NameData        collname;               /* collation name */
        Oid                     collnamespace;  /* OID of namespace containing collation */
@@ -51,38 +49,12 @@ CATALOG(pg_collation,3456)
  */
 typedef FormData_pg_collation *Form_pg_collation;
 
-/* ----------------
- *             compiler constants for pg_collation
- * ----------------
- */
-#define Natts_pg_collation                             8
-#define Anum_pg_collation_collname             1
-#define Anum_pg_collation_collnamespace 2
-#define Anum_pg_collation_collowner            3
-#define Anum_pg_collation_collprovider 4
-#define Anum_pg_collation_collencoding 5
-#define Anum_pg_collation_collcollate  6
-#define Anum_pg_collation_collctype            7
-#define Anum_pg_collation_collversion  8
-
-/* ----------------
- *             initial contents of pg_collation
- * ----------------
- */
-
-DATA(insert OID = 100 ( default                PGNSP PGUID d -1 "" "" _null_ ));
-DESCR("database's default collation");
-#define DEFAULT_COLLATION_OID  100
-DATA(insert OID = 950 ( C                      PGNSP PGUID c -1 C C _null_ ));
-DESCR("standard C collation");
-#define C_COLLATION_OID                        950
-DATA(insert OID = 951 ( POSIX          PGNSP PGUID c -1 POSIX POSIX _null_ ));
-DESCR("standard POSIX collation");
-#define POSIX_COLLATION_OID            951
-
+#ifdef EXPOSE_TO_CLIENT_CODE
 
 #define COLLPROVIDER_DEFAULT   'd'
 #define COLLPROVIDER_ICU               'i'
 #define COLLPROVIDER_LIBC              'c'
 
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
+
 #endif                                                 /* PG_COLLATION_H */
index a0fb5f8243209fc3ed9340f1a4d07ec481cd82b3..5164092231562e343ce60ad0b96e062a21fefddb 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_constraint.h
  *       definition of the system "constraint" relation (pg_constraint)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_constraint.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_CONSTRAINT_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_constraint_d.h"
 
 /* ----------------
  *             pg_constraint definition.  cpp turns this into
  *             typedef struct FormData_pg_constraint
  * ----------------
  */
-#define ConstraintRelationId  2606
-
-CATALOG(pg_constraint,2606)
+CATALOG(pg_constraint,2606,ConstraintRelationId)
 {
        /*
         * conname + connamespace is deliberately not unique; we allow, for
@@ -105,8 +103,8 @@ CATALOG(pg_constraint,2606)
        int16           conkey[1];
 
        /*
-        * Columns of conrelid that the constraint does not apply to, but included
-        * into the same index with key columns.
+        * Columns of conrelid that the constraint does not apply to, but are
+        * included into the same index as the key columns
         */
        int16           conincluding[1];
 
@@ -158,45 +156,7 @@ CATALOG(pg_constraint,2606)
  */
 typedef FormData_pg_constraint *Form_pg_constraint;
 
-/* ----------------
- *             compiler constants for pg_constraint
- * ----------------
- */
-#define Natts_pg_constraint                                    26
-#define Anum_pg_constraint_conname                     1
-#define Anum_pg_constraint_connamespace                2
-#define Anum_pg_constraint_contype                     3
-#define Anum_pg_constraint_condeferrable       4
-#define Anum_pg_constraint_condeferred         5
-#define Anum_pg_constraint_convalidated                6
-#define Anum_pg_constraint_conrelid                    7
-#define Anum_pg_constraint_contypid                    8
-#define Anum_pg_constraint_conindid                    9
-#define Anum_pg_constraint_conparentid         10
-#define Anum_pg_constraint_confrelid           11
-#define Anum_pg_constraint_confupdtype         12
-#define Anum_pg_constraint_confdeltype         13
-#define Anum_pg_constraint_confmatchtype       14
-#define Anum_pg_constraint_conislocal          15
-#define Anum_pg_constraint_coninhcount         16
-#define Anum_pg_constraint_connoinherit                17
-#define Anum_pg_constraint_conkey                      18
-#define Anum_pg_constraint_conincluding                19
-#define Anum_pg_constraint_confkey                     20
-#define Anum_pg_constraint_conpfeqop           21
-#define Anum_pg_constraint_conppeqop           22
-#define Anum_pg_constraint_conffeqop           23
-#define Anum_pg_constraint_conexclop           24
-#define Anum_pg_constraint_conbin                      25
-#define Anum_pg_constraint_consrc                      26
-
-/* ----------------
- *             initial contents of pg_constraint
- * ----------------
- */
-
-/* nothing, at present */
-
+#ifdef EXPOSE_TO_CLIENT_CODE
 
 /* Valid values for contype */
 #define CONSTRAINT_CHECK                       'c'
@@ -212,4 +172,6 @@ typedef FormData_pg_constraint *Form_pg_constraint;
  * the FKCONSTR_MATCH_xxx constants defined in parsenodes.h.
  */
 
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
+
 #endif                                                 /* PG_CONSTRAINT_H */
index 29f3c9d65ad1a9bae18cc3e3103eb644fd93b6d4..2a38d71b4820db5ffe3e33444b8216d064869180 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_conversion.h
  *       definition of the system "conversion" relation (pg_conversion)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_conversion.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
@@ -20,6 +19,7 @@
 #define PG_CONVERSION_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_conversion_d.h"
 
 /* ----------------------------------------------------------------
  *             pg_conversion definition.
@@ -35,9 +35,7 @@
  *     condefault                      true if this is a default conversion
  * ----------------------------------------------------------------
  */
-#define ConversionRelationId  2607
-
-CATALOG(pg_conversion,2607)
+CATALOG(pg_conversion,2607,ConversionRelationId)
 {
        NameData        conname;
        Oid                     connamespace;
@@ -55,23 +53,4 @@ CATALOG(pg_conversion,2607)
  */
 typedef FormData_pg_conversion *Form_pg_conversion;
 
-/* ----------------
- *             compiler constants for pg_conversion
- * ----------------
- */
-
-#define Natts_pg_conversion                            7
-#define Anum_pg_conversion_conname             1
-#define Anum_pg_conversion_connamespace 2
-#define Anum_pg_conversion_conowner            3
-#define Anum_pg_conversion_conforencoding              4
-#define Anum_pg_conversion_contoencoding               5
-#define Anum_pg_conversion_conproc             6
-#define Anum_pg_conversion_condefault  7
-
-/* ----------------
- * initial contents of pg_conversion
- * ---------------
- */
-
 #endif                                                 /* PG_CONVERSION_H */
diff --git a/src/include/catalog/pg_database.dat b/src/include/catalog/pg_database.dat
new file mode 100644 (file)
index 0000000..957ca84
--- /dev/null
@@ -0,0 +1,26 @@
+#----------------------------------------------------------------------
+#
+# pg_database.dat
+#    Initial contents of the pg_database system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_database.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# LC_COLLATE and LC_CTYPE will be replaced at initdb time with user choices
+# that might contain non-word characters, so we must double-quote them.
+
+{ oid => '1', oid_symbol => 'TemplateDbOid',
+  descr => 'default template for new databases',
+  datname => 'template1', datdba => 'PGUID', encoding => 'ENCODING',
+  datcollate => '"LC_COLLATE"', datctype => '"LC_CTYPE"', datistemplate => 't',
+  datallowconn => 't', datconnlimit => '-1', datlastsysoid => '0',
+  datfrozenxid => '0', datminmxid => '1', dattablespace => '1663',
+  datacl => '_null_' },
+
+]
index 56f9960dfe81579da3ff346a8c3780a47dd5a6c8..7f03d24c1e9362b390dc6f98850ff058a29abddf 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_database.h
  *       definition of the system "database" relation (pg_database)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_database.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_DATABASE_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_database_d.h"
 
 /* ----------------
  *             pg_database definition.  cpp turns this into
  *             typedef struct FormData_pg_database
  * ----------------
  */
-#define DatabaseRelationId     1262
-#define DatabaseRelation_Rowtype_Id  1248
-
-CATALOG(pg_database,1262) BKI_SHARED_RELATION BKI_ROWTYPE_OID(1248) BKI_SCHEMA_MACRO
+CATALOG(pg_database,1262,DatabaseRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_OID(1248,DatabaseRelation_Rowtype_Id) BKI_SCHEMA_MACRO
 {
        NameData        datname;                /* database name */
        Oid                     datdba;                 /* owner of database */
@@ -56,27 +53,4 @@ CATALOG(pg_database,1262) BKI_SHARED_RELATION BKI_ROWTYPE_OID(1248) BKI_SCHEMA_M
  */
 typedef FormData_pg_database *Form_pg_database;
 
-/* ----------------
- *             compiler constants for pg_database
- * ----------------
- */
-#define Natts_pg_database                              13
-#define Anum_pg_database_datname               1
-#define Anum_pg_database_datdba                        2
-#define Anum_pg_database_encoding              3
-#define Anum_pg_database_datcollate            4
-#define Anum_pg_database_datctype              5
-#define Anum_pg_database_datistemplate 6
-#define Anum_pg_database_datallowconn  7
-#define Anum_pg_database_datconnlimit  8
-#define Anum_pg_database_datlastsysoid 9
-#define Anum_pg_database_datfrozenxid  10
-#define Anum_pg_database_datminmxid            11
-#define Anum_pg_database_dattablespace 12
-#define Anum_pg_database_datacl                        13
-
-DATA(insert OID = 1 (  template1 PGUID ENCODING "LC_COLLATE" "LC_CTYPE" t t -1 0 0 1 1663 _null_));
-SHDESCR("default template for new databases");
-#define TemplateDbOid                  1
-
 #endif                                                 /* PG_DATABASE_H */
index 86cc17d725c0c100afe82d9c18904afeafbf0209..896c410a17346780346cef9bc4000e8b7cbee49e 100644 (file)
@@ -1,7 +1,7 @@
 /*-------------------------------------------------------------------------
  *
  * pg_db_role_setting.h
- *     definition of configuration settings
+ *       definition of per-database/per-user configuration settings relation
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
  * src/include/catalog/pg_db_role_setting.h
  *
  * NOTES
- *             the genbki.pl script reads this file and generates .bki
- *             information from the DATA() statements.
- *
- *             XXX do NOT break up DATA() statements into multiple lines!
- *                     the scripts are not as smart as you might think...
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #ifndef PG_DB_ROLE_SETTING_H
 #define PG_DB_ROLE_SETTING_H
 
+#include "catalog/genbki.h"
+#include "catalog/pg_db_role_setting_d.h"
 #include "utils/guc.h"
 #include "utils/relcache.h"
 #include "utils/snapshot.h"
@@ -30,9 +29,7 @@
  *             typedef struct FormData_pg_db_role_setting
  * ----------------
  */
-#define DbRoleSettingRelationId 2964
-
-CATALOG(pg_db_role_setting,2964) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
+CATALOG(pg_db_role_setting,2964,DbRoleSettingRelationId) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
 {
        Oid                     setdatabase;    /* database */
        Oid                     setrole;                /* role */
@@ -44,20 +41,6 @@ CATALOG(pg_db_role_setting,2964) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
 
 typedef FormData_pg_db_role_setting * Form_pg_db_role_setting;
 
-/* ----------------
- *             compiler constants for pg_db_role_setting
- * ----------------
- */
-#define Natts_pg_db_role_setting                               3
-#define Anum_pg_db_role_setting_setdatabase            1
-#define Anum_pg_db_role_setting_setrole                        2
-#define Anum_pg_db_role_setting_setconfig              3
-
-/* ----------------
- *             initial contents of pg_db_role_setting are NOTHING
- * ----------------
- */
-
 /*
  * prototypes for functions in pg_db_role_setting.h
  */
index 11b306037d0bc51d3b220a00a782c3ad94579405..d672d5b3f888c5e9bef57a9d9980c3f912d09b47 100644 (file)
@@ -10,8 +10,8 @@
  * src/include/catalog/pg_default_acl.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_DEFAULT_ACL_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_default_acl_d.h"
 
 /* ----------------
  *             pg_default_acl definition.  cpp turns this into
  *             typedef struct FormData_pg_default_acl
  * ----------------
  */
-#define DefaultAclRelationId   826
-
-CATALOG(pg_default_acl,826)
+CATALOG(pg_default_acl,826,DefaultAclRelationId)
 {
        Oid                     defaclrole;             /* OID of role owning this ACL */
        Oid                     defaclnamespace;        /* OID of namespace, or 0 for all */
@@ -45,21 +44,7 @@ CATALOG(pg_default_acl,826)
  */
 typedef FormData_pg_default_acl *Form_pg_default_acl;
 
-/* ----------------
- *             compiler constants for pg_default_acl
- * ----------------
- */
-
-#define Natts_pg_default_acl                                   4
-#define Anum_pg_default_acl_defaclrole                 1
-#define Anum_pg_default_acl_defaclnamespace            2
-#define Anum_pg_default_acl_defaclobjtype              3
-#define Anum_pg_default_acl_defaclacl                  4
-
-/* ----------------
- *             pg_default_acl has no initial contents
- * ----------------
- */
+#ifdef EXPOSE_TO_CLIENT_CODE
 
 /*
  * Types of objects for which the user is allowed to specify default
@@ -72,4 +57,6 @@ typedef FormData_pg_default_acl *Form_pg_default_acl;
 #define DEFACLOBJ_TYPE                 'T' /* type */
 #define DEFACLOBJ_NAMESPACE            'n' /* namespace */
 
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
+
 #endif                                                 /* PG_DEFAULT_ACL_H */
index be3867bbf2fd9e16dca054b6f303f8a944055191..bf31c1ab408ac14bf4e78f38e80a485e1368f117 100644 (file)
@@ -2,7 +2,18 @@
  *
  * pg_depend.h
  *       definition of the system "dependency" relation (pg_depend)
- *       along with the relation's initial contents.
+ *
+ * pg_depend has no preloaded contents, so there is no pg_depend.dat
+ * file; system-defined dependencies are loaded into it during a late stage
+ * of the initdb process.
+ *
+ * NOTE: we do not represent all possible dependency pairs in pg_depend;
+ * for example, there's not much value in creating an explicit dependency
+ * from an attribute to its relation.  Usually we make a dependency for
+ * cases where the relationship is conditional rather than essential
+ * (for example, not all triggers are dependent on constraints, but all
+ * attributes are dependent on relations) or where the dependency is not
+ * convenient to find from the contents of other catalogs.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +22,8 @@
  * src/include/catalog/pg_depend.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_DEPEND_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_depend_d.h"
 
 /* ----------------
  *             pg_depend definition.  cpp turns this into
  *             typedef struct FormData_pg_depend
  * ----------------
  */
-#define DependRelationId  2608
-
-CATALOG(pg_depend,2608) BKI_WITHOUT_OIDS
+CATALOG(pg_depend,2608,DependRelationId) BKI_WITHOUT_OIDS
 {
        /*
         * Identification of the dependent (referencing) object.
@@ -60,31 +70,4 @@ CATALOG(pg_depend,2608) BKI_WITHOUT_OIDS
  */
 typedef FormData_pg_depend *Form_pg_depend;
 
-/* ----------------
- *             compiler constants for pg_depend
- * ----------------
- */
-#define Natts_pg_depend                                7
-#define Anum_pg_depend_classid         1
-#define Anum_pg_depend_objid           2
-#define Anum_pg_depend_objsubid                3
-#define Anum_pg_depend_refclassid      4
-#define Anum_pg_depend_refobjid                5
-#define Anum_pg_depend_refobjsubid     6
-#define Anum_pg_depend_deptype         7
-
-
-/*
- * pg_depend has no preloaded contents; system-defined dependencies are
- * loaded into it during a late stage of the initdb process.
- *
- * NOTE: we do not represent all possible dependency pairs in pg_depend;
- * for example, there's not much value in creating an explicit dependency
- * from an attribute to its relation.  Usually we make a dependency for
- * cases where the relationship is conditional rather than essential
- * (for example, not all triggers are dependent on constraints, but all
- * attributes are dependent on relations) or where the dependency is not
- * convenient to find from the contents of other catalogs.
- */
-
 #endif                                                 /* PG_DEPEND_H */
index d29100013ea49eadd63da0fa683af7694a618881..b95b188d2894c8980c5fea46d6b4017122905af7 100644 (file)
@@ -3,6 +3,10 @@
  * pg_description.h
  *       definition of the system "description" relation (pg_description)
  *
+ * Because the contents of this table are taken from the *.dat files
+ * of other catalogs, there is no pg_description.dat file. The initial
+ * contents are assembled by genbki.pl and loaded during initdb.
+ *
  * NOTE: an object is identified by the OID of the row that primarily
  * defines the object, plus the OID of the table that that row appears in.
  * For example, a function is identified by the OID of its pg_proc row
  * src/include/catalog/pg_description.h
  *
  * NOTES
- *             the genbki.pl script reads this file and generates .bki
- *             information from the DATA() statements.
- *
- *             XXX do NOT break up DATA() statements into multiple lines!
- *                     the scripts are not as smart as you might think...
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_DESCRIPTION_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_description_d.h"
 
 /* ----------------
  *             pg_description definition.  cpp turns this into
  *             typedef struct FormData_pg_description
  * ----------------
  */
-#define DescriptionRelationId  2609
-
-CATALOG(pg_description,2609) BKI_WITHOUT_OIDS
+CATALOG(pg_description,2609,DescriptionRelationId) BKI_WITHOUT_OIDS
 {
        Oid                     objoid;                 /* OID of object itself */
        Oid                     classoid;               /* OID of table containing object */
@@ -63,25 +63,4 @@ CATALOG(pg_description,2609) BKI_WITHOUT_OIDS
  */
 typedef FormData_pg_description * Form_pg_description;
 
-/* ----------------
- *             compiler constants for pg_description
- * ----------------
- */
-#define Natts_pg_description                   4
-#define Anum_pg_description_objoid             1
-#define Anum_pg_description_classoid   2
-#define Anum_pg_description_objsubid   3
-#define Anum_pg_description_description 4
-
-/* ----------------
- *             initial contents of pg_description
- * ----------------
- */
-
-/*
- *     Because the contents of this table are taken from the other *.h files,
- *     there is no initialization here.  The initial contents are extracted
- *     by genbki.pl and loaded during initdb.
- */
-
 #endif                                                 /* PG_DESCRIPTION_H */
index a65a8f45b6a6a5ca6c23a59bdc4ec7eb6c70d08c..a0922be49ba710b14c88f63b43f95f234c994a30 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_enum.h
  *       definition of the system "enum" relation (pg_enum)
- *       along with the relation's initial contents.
  *
  *
  * Copyright (c) 2006-2018, PostgreSQL Global Development Group
@@ -10,11 +9,8 @@
  * src/include/catalog/pg_enum.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
- *
- *       XXX do NOT break up DATA() statements into multiple lines!
- *               the scripts are not as smart as you might think...
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
@@ -22,6 +18,7 @@
 #define PG_ENUM_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_enum_d.h"
 #include "nodes/pg_list.h"
 
 /* ----------------
@@ -29,9 +26,7 @@
  *             typedef struct FormData_pg_enum
  * ----------------
  */
-#define EnumRelationId 3501
-
-CATALOG(pg_enum,3501)
+CATALOG(pg_enum,3501,EnumRelationId)
 {
        Oid                     enumtypid;              /* OID of owning enum type */
        float4          enumsortorder;  /* sort position of this enum value */
@@ -45,20 +40,6 @@ CATALOG(pg_enum,3501)
  */
 typedef FormData_pg_enum *Form_pg_enum;
 
-/* ----------------
- *             compiler constants for pg_enum
- * ----------------
- */
-#define Natts_pg_enum                                  3
-#define Anum_pg_enum_enumtypid                 1
-#define Anum_pg_enum_enumsortorder             2
-#define Anum_pg_enum_enumlabel                 3
-
-/* ----------------
- *             pg_enum has no initial contents
- * ----------------
- */
-
 /*
  * prototypes for functions in pg_enum.c
  */
index e03c81997c62baf7b105c0d0f9014989075f0439..f06cbe04dc187331a77d14d6a94126455c880a8b 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_event_trigger.h
  *       definition of the system "event trigger" relation (pg_event_trigger)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_event_trigger.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_EVENT_TRIGGER_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_event_trigger_d.h"
 
 /* ----------------
  *             pg_event_trigger definition.    cpp turns this into
  *             typedef struct FormData_pg_event_trigger
  * ----------------
  */
-#define EventTriggerRelationId 3466
-
-CATALOG(pg_event_trigger,3466)
+CATALOG(pg_event_trigger,3466,EventTriggerRelationId)
 {
        NameData        evtname;                /* trigger's name */
        NameData        evtevent;               /* trigger's event */
@@ -49,16 +47,4 @@ CATALOG(pg_event_trigger,3466)
  */
 typedef FormData_pg_event_trigger *Form_pg_event_trigger;
 
-/* ----------------
- *             compiler constants for pg_event_trigger
- * ----------------
- */
-#define Natts_pg_event_trigger                                 6
-#define Anum_pg_event_trigger_evtname                  1
-#define Anum_pg_event_trigger_evtevent                 2
-#define Anum_pg_event_trigger_evtowner                 3
-#define Anum_pg_event_trigger_evtfoid                  4
-#define Anum_pg_event_trigger_evtenabled               5
-#define Anum_pg_event_trigger_evttags                  6
-
 #endif                                                 /* PG_EVENT_TRIGGER_H */
index 9ca6ca7936c7dca83c0db779f19993e8887f1e62..10bbb692a5d280b7ba907b19fb820acb8d474469 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_extension.h
  *       definition of the system "extension" relation (pg_extension)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_extension.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_EXTENSION_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_extension_d.h"
 
 /* ----------------
  *             pg_extension definition.  cpp turns this into
  *             typedef struct FormData_pg_extension
  * ----------------
  */
-#define ExtensionRelationId 3079
-
-CATALOG(pg_extension,3079)
+CATALOG(pg_extension,3079,ExtensionRelationId)
 {
        NameData        extname;                /* extension name */
        Oid                     extowner;               /* extension owner */
@@ -50,23 +48,4 @@ CATALOG(pg_extension,3079)
  */
 typedef FormData_pg_extension *Form_pg_extension;
 
-/* ----------------
- *             compiler constants for pg_extension
- * ----------------
- */
-
-#define Natts_pg_extension                                     7
-#define Anum_pg_extension_extname                      1
-#define Anum_pg_extension_extowner                     2
-#define Anum_pg_extension_extnamespace         3
-#define Anum_pg_extension_extrelocatable       4
-#define Anum_pg_extension_extversion           5
-#define Anum_pg_extension_extconfig                    6
-#define Anum_pg_extension_extcondition         7
-
-/* ----------------
- *             pg_extension has no initial contents
- * ----------------
- */
-
 #endif                                                 /* PG_EXTENSION_H */
index dd00586b6e31b66bf7dd278bcb6f6956b892c98e..67e331987cfe39a516e67d3734c486d458e8952d 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_foreign_data_wrapper.h
  *       definition of the system "foreign-data wrapper" relation (pg_foreign_data_wrapper)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_foreign_data_wrapper.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_FOREIGN_DATA_WRAPPER_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_foreign_data_wrapper_d.h"
 
 /* ----------------
  *             pg_foreign_data_wrapper definition.  cpp turns this into
  *             typedef struct FormData_pg_foreign_data_wrapper
  * ----------------
  */
-#define ForeignDataWrapperRelationId   2328
-
-CATALOG(pg_foreign_data_wrapper,2328)
+CATALOG(pg_foreign_data_wrapper,2328,ForeignDataWrapperRelationId)
 {
        NameData        fdwname;                /* foreign-data wrapper name */
        Oid                     fdwowner;               /* FDW owner */
@@ -48,17 +46,4 @@ CATALOG(pg_foreign_data_wrapper,2328)
  */
 typedef FormData_pg_foreign_data_wrapper *Form_pg_foreign_data_wrapper;
 
-/* ----------------
- *             compiler constants for pg_fdw
- * ----------------
- */
-
-#define Natts_pg_foreign_data_wrapper                          6
-#define Anum_pg_foreign_data_wrapper_fdwname           1
-#define Anum_pg_foreign_data_wrapper_fdwowner          2
-#define Anum_pg_foreign_data_wrapper_fdwhandler                3
-#define Anum_pg_foreign_data_wrapper_fdwvalidator      4
-#define Anum_pg_foreign_data_wrapper_fdwacl                    5
-#define Anum_pg_foreign_data_wrapper_fdwoptions                6
-
 #endif                                                 /* PG_FOREIGN_DATA_WRAPPER_H */
index a8c9e8754030fa0efb360e07f197a38841f98e00..0d25839c3da97b1ca7b1b6113b4a63463483def9 100644 (file)
@@ -9,8 +9,8 @@
  * src/include/catalog/pg_foreign_server.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_FOREIGN_SERVER_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_foreign_server_d.h"
 
 /* ----------------
  *             pg_foreign_server definition.  cpp turns this into
  *             typedef struct FormData_pg_foreign_server
  * ----------------
  */
-#define ForeignServerRelationId 1417
-
-CATALOG(pg_foreign_server,1417)
+CATALOG(pg_foreign_server,1417,ForeignServerRelationId)
 {
        NameData        srvname;                /* foreign server name */
        Oid                     srvowner;               /* server owner */
@@ -47,18 +46,4 @@ CATALOG(pg_foreign_server,1417)
  */
 typedef FormData_pg_foreign_server *Form_pg_foreign_server;
 
-/* ----------------
- *             compiler constants for pg_foreign_server
- * ----------------
- */
-
-#define Natts_pg_foreign_server                                        7
-#define Anum_pg_foreign_server_srvname                 1
-#define Anum_pg_foreign_server_srvowner                        2
-#define Anum_pg_foreign_server_srvfdw                  3
-#define Anum_pg_foreign_server_srvtype                 4
-#define Anum_pg_foreign_server_srvversion              5
-#define Anum_pg_foreign_server_srvacl                  6
-#define Anum_pg_foreign_server_srvoptions              7
-
 #endif                                                 /* PG_FOREIGN_SERVER_H */
index 210e77b79ad5809117f28d8c2193faab36a0ee04..13de918880faf84040c790edbebb7c7c80e6eb1e 100644 (file)
@@ -9,8 +9,8 @@
  * src/include/catalog/pg_foreign_table.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_FOREIGN_TABLE_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_foreign_table_d.h"
 
 /* ----------------
  *             pg_foreign_table definition.  cpp turns this into
  *             typedef struct FormData_pg_foreign_table
  * ----------------
  */
-#define ForeignTableRelationId 3118
-
-CATALOG(pg_foreign_table,3118) BKI_WITHOUT_OIDS
+CATALOG(pg_foreign_table,3118,ForeignTableRelationId) BKI_WITHOUT_OIDS
 {
        Oid                     ftrelid;                /* OID of foreign table */
        Oid                     ftserver;               /* OID of foreign server */
@@ -43,14 +42,4 @@ CATALOG(pg_foreign_table,3118) BKI_WITHOUT_OIDS
  */
 typedef FormData_pg_foreign_table *Form_pg_foreign_table;
 
-/* ----------------
- *             compiler constants for pg_foreign_table
- * ----------------
- */
-
-#define Natts_pg_foreign_table                                 3
-#define Anum_pg_foreign_table_ftrelid                  1
-#define Anum_pg_foreign_table_ftserver                 2
-#define Anum_pg_foreign_table_ftoptions                        3
-
 #endif                                                 /* PG_FOREIGN_TABLE_H */
index 6ae03dbcbbc70b985f284c786e27397aecc9c7cb..88ff40f82076d20303eac9bb201bbcacdff419aa 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_index.h
  *       definition of the system "index" relation (pg_index)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_index.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_INDEX_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_index_d.h"
 
 /* ----------------
  *             pg_index definition.  cpp turns this into
  *             typedef struct FormData_pg_index.
  * ----------------
  */
-#define IndexRelationId  2610
-
-CATALOG(pg_index,2610) BKI_WITHOUT_OIDS BKI_SCHEMA_MACRO
+CATALOG(pg_index,2610,IndexRelationId) BKI_WITHOUT_OIDS BKI_SCHEMA_MACRO
 {
        Oid                     indexrelid;             /* OID of the index */
        Oid                     indrelid;               /* OID of the relation it indexes */
@@ -67,31 +65,7 @@ CATALOG(pg_index,2610) BKI_WITHOUT_OIDS BKI_SCHEMA_MACRO
  */
 typedef FormData_pg_index *Form_pg_index;
 
-/* ----------------
- *             compiler constants for pg_index
- * ----------------
- */
-#define Natts_pg_index                                 20
-#define Anum_pg_index_indexrelid               1
-#define Anum_pg_index_indrelid                 2
-#define Anum_pg_index_indnatts                 3
-#define Anum_pg_index_indnkeyatts              4
-#define Anum_pg_index_indisunique              5
-#define Anum_pg_index_indisprimary             6
-#define Anum_pg_index_indisexclusion   7
-#define Anum_pg_index_indimmediate             8
-#define Anum_pg_index_indisclustered   9
-#define Anum_pg_index_indisvalid               10
-#define Anum_pg_index_indcheckxmin             11
-#define Anum_pg_index_indisready               12
-#define Anum_pg_index_indislive                        13
-#define Anum_pg_index_indisreplident   14
-#define Anum_pg_index_indkey                   15
-#define Anum_pg_index_indcollation             16
-#define Anum_pg_index_indclass                 17
-#define Anum_pg_index_indoption                        18
-#define Anum_pg_index_indexprs                 19
-#define Anum_pg_index_indpred                  20
+#ifdef EXPOSE_TO_CLIENT_CODE
 
 /*
  * Index AMs that support ordered scans must support these two indoption
@@ -101,6 +75,8 @@ typedef FormData_pg_index *Form_pg_index;
 #define INDOPTION_DESC                 0x0001  /* values are in reverse order */
 #define INDOPTION_NULLS_FIRST  0x0002  /* NULLs are first instead of last */
 
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
+
 /*
  * Use of these macros is recommended over direct examination of the state
  * flag columns where possible; this allows source code compatibility with
index 3c572f421bcbd5693fc8ca09d3134d3cb916f358..3b2e03c4bfdb23941899b21fb3a33283693dd81e 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_inherits.h
  *       definition of the system "inherits" relation (pg_inherits)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_inherits.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_INHERITS_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_inherits_d.h"
 
 /* ----------------
  *             pg_inherits definition.  cpp turns this into
  *             typedef struct FormData_pg_inherits
  * ----------------
  */
-#define InheritsRelationId     2611
-
-CATALOG(pg_inherits,2611) BKI_WITHOUT_OIDS
+CATALOG(pg_inherits,2611,InheritsRelationId) BKI_WITHOUT_OIDS
 {
        Oid                     inhrelid;
        Oid                     inhparent;
@@ -42,18 +40,4 @@ CATALOG(pg_inherits,2611) BKI_WITHOUT_OIDS
  */
 typedef FormData_pg_inherits *Form_pg_inherits;
 
-/* ----------------
- *             compiler constants for pg_inherits
- * ----------------
- */
-#define Natts_pg_inherits                              3
-#define Anum_pg_inherits_inhrelid              1
-#define Anum_pg_inherits_inhparent             2
-#define Anum_pg_inherits_inhseqno              3
-
-/* ----------------
- *             pg_inherits has no initial contents
- * ----------------
- */
-
 #endif                                                 /* PG_INHERITS_H */
index 65f02c2aefe080976e0f61d0bdf26c90dd849ad7..6ce26463507f0a07125a4950a1eb311b6b31b644 100644 (file)
  * for a table itself, so that it is distinct from any column privilege.
  * Currently, objsubid is unused and zero for all other kinds of objects.
  *
+ * Because the contents of this table depend on what is done with the other
+ * objects in the system (and, in particular, may change due to changes in
+ * system_views.sql), there is no pg_init_privs.dat file. The initial contents
+ * are loaded near the end of initdb.
+ *
+ *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * src/include/catalog/pg_init_privs.h
  *
  * NOTES
- *             the genbki.pl script reads this file and generates .bki
- *             information from the DATA() statements.
- *
- *             XXX do NOT break up DATA() statements into multiple lines!
- *                     the scripts are not as smart as you might think...
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_INIT_PRIVS_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_init_privs_d.h"
 
 /* ----------------
  *             pg_init_privs definition.  cpp turns this into
  *             typedef struct FormData_pg_init_privs
  * ----------------
  */
-#define InitPrivsRelationId  3394
-
-CATALOG(pg_init_privs,3394) BKI_WITHOUT_OIDS
+CATALOG(pg_init_privs,3394,InitPrivsRelationId) BKI_WITHOUT_OIDS
 {
        Oid                     objoid;                 /* OID of object itself */
        Oid                     classoid;               /* OID of table containing object */
@@ -60,17 +62,6 @@ CATALOG(pg_init_privs,3394) BKI_WITHOUT_OIDS
  */
 typedef FormData_pg_init_privs * Form_pg_init_privs;
 
-/* ----------------
- *             compiler constants for pg_init_privs
- * ----------------
- */
-#define Natts_pg_init_privs                            5
-#define Anum_pg_init_privs_objoid              1
-#define Anum_pg_init_privs_classoid            2
-#define Anum_pg_init_privs_objsubid            3
-#define Anum_pg_init_privs_privtype            4
-#define Anum_pg_init_privs_initprivs   5
-
 /*
  * It is important to know if the initial privileges are from initdb or from an
  * extension.  This enum is used to provide that differentiation and the two
@@ -84,17 +75,4 @@ typedef enum InitPrivsType
        INITPRIVS_EXTENSION = 'e'
 } InitPrivsType;
 
-/* ----------------
- *             initial contents of pg_init_privs
- * ----------------
- */
-
-/*
- *     Because the contents of this table depend on what is done with the other
- *     objects in the system (and, in particular, may change due to changes is
- *     system_views.sql), there is no initialization here.
- *
- *     The initial contents are loaded near the end of initdb.
- */
-
 #endif                                                 /* PG_INIT_PRIVS_H */
diff --git a/src/include/catalog/pg_language.dat b/src/include/catalog/pg_language.dat
new file mode 100644 (file)
index 0000000..1b50a66
--- /dev/null
@@ -0,0 +1,31 @@
+#----------------------------------------------------------------------
+#
+# pg_language.dat
+#    Initial contents of the pg_language system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_language.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+{ oid => '12', oid_symbol => 'INTERNALlanguageId',
+  descr => 'built-in functions',
+  lanname => 'internal', lanowner => 'PGUID', lanispl => 'f',
+  lanpltrusted => 'f', lanplcallfoid => '0', laninline => '0',
+  lanvalidator => '2246', lanacl => '_null_' },
+{ oid => '13', oid_symbol => 'ClanguageId',
+  descr => 'dynamically-loaded C functions',
+  lanname => 'c', lanowner => 'PGUID', lanispl => 'f', lanpltrusted => 'f',
+  lanplcallfoid => '0', laninline => '0', lanvalidator => '2247',
+  lanacl => '_null_' },
+{ oid => '14', oid_symbol => 'SQLlanguageId',
+  descr => 'SQL-language functions',
+  lanname => 'sql', lanowner => 'PGUID', lanispl => 'f', lanpltrusted => 't',
+  lanplcallfoid => '0', laninline => '0', lanvalidator => '2248',
+  lanacl => '_null_' },
+
+]
index 6b373f96d56b498d953a97b78113bd449d4745af..e2d8d1571b44015e03bee3b85c0d5b36adfc5993 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_language.h
  *       definition of the system "language" relation (pg_language)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_language.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_LANGUAGE_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_language_d.h"
 
 /* ----------------
  *             pg_language definition.  cpp turns this into
  *             typedef struct FormData_pg_language
  * ----------------
  */
-#define LanguageRelationId     2612
-
-CATALOG(pg_language,2612)
+CATALOG(pg_language,2612,LanguageRelationId)
 {
        NameData        lanname;                /* Language name */
        Oid                     lanowner;               /* Language's owner */
@@ -50,33 +48,4 @@ CATALOG(pg_language,2612)
  */
 typedef FormData_pg_language *Form_pg_language;
 
-/* ----------------
- *             compiler constants for pg_language
- * ----------------
- */
-#define Natts_pg_language                              8
-#define Anum_pg_language_lanname               1
-#define Anum_pg_language_lanowner              2
-#define Anum_pg_language_lanispl               3
-#define Anum_pg_language_lanpltrusted  4
-#define Anum_pg_language_lanplcallfoid 5
-#define Anum_pg_language_laninline             6
-#define Anum_pg_language_lanvalidator  7
-#define Anum_pg_language_lanacl                        8
-
-/* ----------------
- *             initial contents of pg_language
- * ----------------
- */
-
-DATA(insert OID = 12 ( internal        PGUID f f 0 0 2246 _null_ ));
-DESCR("built-in functions");
-#define INTERNALlanguageId 12
-DATA(insert OID = 13 ( c                       PGUID f f 0 0 2247 _null_ ));
-DESCR("dynamically-loaded C functions");
-#define ClanguageId 13
-DATA(insert OID = 14 ( sql             PGUID f t 0 0 2248 _null_ ));
-DESCR("SQL-language functions");
-#define SQLlanguageId 14
-
 #endif                                                 /* PG_LANGUAGE_H */
index 0a15649dddbddac4a8d88f795b6b4affdfdea677..481d2ff63ba40f3d5118148403ea1f0ab56b65a2 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_largeobject.h
  *       definition of the system "largeobject" relation (pg_largeobject)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_largeobject.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_LARGEOBJECT_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_largeobject_d.h"
 
 /* ----------------
  *             pg_largeobject definition.  cpp turns this into
  *             typedef struct FormData_pg_largeobject
  * ----------------
  */
-#define LargeObjectRelationId  2613
-
-CATALOG(pg_largeobject,2613) BKI_WITHOUT_OIDS
+CATALOG(pg_largeobject,2613,LargeObjectRelationId) BKI_WITHOUT_OIDS
 {
        Oid                     loid;                   /* Identifier of large object */
        int32           pageno;                 /* Page number (starting from 0) */
@@ -45,15 +43,6 @@ CATALOG(pg_largeobject,2613) BKI_WITHOUT_OIDS
  */
 typedef FormData_pg_largeobject *Form_pg_largeobject;
 
-/* ----------------
- *             compiler constants for pg_largeobject
- * ----------------
- */
-#define Natts_pg_largeobject                   3
-#define Anum_pg_largeobject_loid               1
-#define Anum_pg_largeobject_pageno             2
-#define Anum_pg_largeobject_data               3
-
 extern Oid     LargeObjectCreate(Oid loid);
 extern void LargeObjectDrop(Oid loid);
 extern bool LargeObjectExists(Oid loid);
index 4535b51b53abb538555be2f5d1cc4adf16ab7fee..a8732bc48905007d1022342d976020343627d3b3 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_largeobject_metadata.h
  *       definition of the system "largeobject_metadata" relation (pg_largeobject_metadata)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_largeobject_metadata.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_LARGEOBJECT_METADATA_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_largeobject_metadata_d.h"
 
 /* ----------------
  *             pg_largeobject_metadata definition. cpp turns this into
  *             typedef struct FormData_pg_largeobject_metadata
  * ----------------
  */
-#define LargeObjectMetadataRelationId  2995
-
-CATALOG(pg_largeobject_metadata,2995)
+CATALOG(pg_largeobject_metadata,2995,LargeObjectMetadataRelationId)
 {
        Oid                     lomowner;               /* OID of the largeobject owner */
 
@@ -44,12 +42,4 @@ CATALOG(pg_largeobject_metadata,2995)
  */
 typedef FormData_pg_largeobject_metadata *Form_pg_largeobject_metadata;
 
-/* ----------------
- *             compiler constants for pg_largeobject_metadata
- * ----------------
- */
-#define Natts_pg_largeobject_metadata                  2
-#define Anum_pg_largeobject_metadata_lomowner  1
-#define Anum_pg_largeobject_metadata_lomacl            2
-
 #endif                                                 /* PG_LARGEOBJECT_METADATA_H */
diff --git a/src/include/catalog/pg_namespace.dat b/src/include/catalog/pg_namespace.dat
new file mode 100644 (file)
index 0000000..e3549df
--- /dev/null
@@ -0,0 +1,25 @@
+#----------------------------------------------------------------------
+#
+# pg_namespace.dat
+#    Initial contents of the pg_namespace system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_namespace.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+{ oid => '11', oid_symbol => 'PG_CATALOG_NAMESPACE',
+  descr => 'system catalog schema',
+  nspname => 'pg_catalog', nspowner => 'PGUID', nspacl => '_null_' },
+{ oid => '99', oid_symbol => 'PG_TOAST_NAMESPACE',
+  descr => 'reserved schema for TOAST tables',
+  nspname => 'pg_toast', nspowner => 'PGUID', nspacl => '_null_' },
+{ oid => '2200', oid_symbol => 'PG_PUBLIC_NAMESPACE',
+  descr => 'standard public schema',
+  nspname => 'public', nspowner => 'PGUID', nspacl => '_null_' },
+
+]
index dbb9f6626fc93eff8c9c80505ec2f745c3de0b2c..0d9cada79f7a8cc146d85747b05cb588038654ca 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_namespace.h
  *       definition of the system "namespace" relation (pg_namespace)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_namespace.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
@@ -20,6 +19,7 @@
 #define PG_NAMESPACE_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_namespace_d.h"
 
 /* ----------------------------------------------------------------
  *             pg_namespace definition.
@@ -31,9 +31,7 @@
  *     nspacl                          access privilege list
  * ----------------------------------------------------------------
  */
-#define NamespaceRelationId  2615
-
-CATALOG(pg_namespace,2615)
+CATALOG(pg_namespace,2615,NamespaceRelationId)
 {
        NameData        nspname;
        Oid                     nspowner;
@@ -50,33 +48,6 @@ CATALOG(pg_namespace,2615)
  */
 typedef FormData_pg_namespace *Form_pg_namespace;
 
-/* ----------------
- *             compiler constants for pg_namespace
- * ----------------
- */
-
-#define Natts_pg_namespace                             3
-#define Anum_pg_namespace_nspname              1
-#define Anum_pg_namespace_nspowner             2
-#define Anum_pg_namespace_nspacl               3
-
-
-/* ----------------
- * initial contents of pg_namespace
- * ---------------
- */
-
-DATA(insert OID = 11 ( pg_catalog PGUID _null_ ));
-DESCR("system catalog schema");
-#define PG_CATALOG_NAMESPACE 11
-DATA(insert OID = 99 ( pg_toast PGUID _null_ ));
-DESCR("reserved schema for TOAST tables");
-#define PG_TOAST_NAMESPACE 99
-DATA(insert OID = 2200 ( public PGUID _null_ ));
-DESCR("standard public schema");
-#define PG_PUBLIC_NAMESPACE 2200
-
-
 /*
  * prototypes for functions in pg_namespace.c
  */
diff --git a/src/include/catalog/pg_opclass.dat b/src/include/catalog/pg_opclass.dat
new file mode 100644 (file)
index 0000000..94e3e1e
--- /dev/null
@@ -0,0 +1,357 @@
+#----------------------------------------------------------------------
+#
+# pg_opclass.dat
+#    Initial contents of the pg_opclass system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_opclass.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# Note: we hard-wire an OID only for a few entries that have to be explicitly
+# referenced in the C code or in built-in catalog entries.  The rest get OIDs
+# assigned on-the-fly during initdb.
+
+{ opcmethod => 'btree', opcname => 'abstime_ops',
+  opcfamily => 'btree/abstime_ops', opcintype => 'abstime' },
+{ opcmethod => 'btree', opcname => 'array_ops', opcfamily => 'btree/array_ops',
+  opcintype => 'anyarray' },
+{ opcmethod => 'hash', opcname => 'array_ops', opcfamily => 'hash/array_ops',
+  opcintype => 'anyarray' },
+{ opcmethod => 'btree', opcname => 'bit_ops', opcfamily => 'btree/bit_ops',
+  opcintype => 'bit' },
+{ opcmethod => 'btree', opcname => 'bool_ops', opcfamily => 'btree/bool_ops',
+  opcintype => 'bool' },
+{ opcmethod => 'btree', opcname => 'bpchar_ops',
+  opcfamily => 'btree/bpchar_ops', opcintype => 'bpchar' },
+{ opcmethod => 'hash', opcname => 'bpchar_ops', opcfamily => 'hash/bpchar_ops',
+  opcintype => 'bpchar' },
+{ opcmethod => 'btree', opcname => 'bytea_ops', opcfamily => 'btree/bytea_ops',
+  opcintype => 'bytea' },
+{ opcmethod => 'btree', opcname => 'char_ops', opcfamily => 'btree/char_ops',
+  opcintype => 'char' },
+{ opcmethod => 'hash', opcname => 'char_ops', opcfamily => 'hash/char_ops',
+  opcintype => 'char' },
+{ opcmethod => 'btree', opcname => 'cidr_ops', opcfamily => 'btree/network_ops',
+  opcintype => 'inet', opcdefault => 'f' },
+{ opcmethod => 'hash', opcname => 'cidr_ops', opcfamily => 'hash/network_ops',
+  opcintype => 'inet', opcdefault => 'f' },
+{ oid => '3122', oid_symbol => 'DATE_BTREE_OPS_OID',
+  opcmethod => 'btree', opcname => 'date_ops',
+  opcfamily => 'btree/datetime_ops', opcintype => 'date' },
+{ opcmethod => 'hash', opcname => 'date_ops', opcfamily => 'hash/date_ops',
+  opcintype => 'date' },
+{ opcmethod => 'btree', opcname => 'float4_ops', opcfamily => 'btree/float_ops',
+  opcintype => 'float4' },
+{ opcmethod => 'hash', opcname => 'float4_ops', opcfamily => 'hash/float_ops',
+  opcintype => 'float4' },
+{ oid => '3123', oid_symbol => 'FLOAT8_BTREE_OPS_OID',
+  opcmethod => 'btree', opcname => 'float8_ops', opcfamily => 'btree/float_ops',
+  opcintype => 'float8' },
+{ opcmethod => 'hash', opcname => 'float8_ops', opcfamily => 'hash/float_ops',
+  opcintype => 'float8' },
+{ opcmethod => 'btree', opcname => 'inet_ops', opcfamily => 'btree/network_ops',
+  opcintype => 'inet' },
+{ opcmethod => 'hash', opcname => 'inet_ops', opcfamily => 'hash/network_ops',
+  opcintype => 'inet' },
+{ opcmethod => 'gist', opcname => 'inet_ops', opcfamily => 'gist/network_ops',
+  opcintype => 'inet', opcdefault => 'f' },
+{ opcmethod => 'spgist', opcname => 'inet_ops',
+  opcfamily => 'spgist/network_ops', opcintype => 'inet' },
+{ oid => '1979', oid_symbol => 'INT2_BTREE_OPS_OID',
+  opcmethod => 'btree', opcname => 'int2_ops', opcfamily => 'btree/integer_ops',
+  opcintype => 'int2' },
+{ opcmethod => 'hash', opcname => 'int2_ops', opcfamily => 'hash/integer_ops',
+  opcintype => 'int2' },
+{ oid => '1978', oid_symbol => 'INT4_BTREE_OPS_OID',
+  opcmethod => 'btree', opcname => 'int4_ops', opcfamily => 'btree/integer_ops',
+  opcintype => 'int4' },
+{ opcmethod => 'hash', opcname => 'int4_ops', opcfamily => 'hash/integer_ops',
+  opcintype => 'int4' },
+{ oid => '3124', oid_symbol => 'INT8_BTREE_OPS_OID',
+  opcmethod => 'btree', opcname => 'int8_ops', opcfamily => 'btree/integer_ops',
+  opcintype => 'int8' },
+{ opcmethod => 'hash', opcname => 'int8_ops', opcfamily => 'hash/integer_ops',
+  opcintype => 'int8' },
+{ opcmethod => 'btree', opcname => 'interval_ops',
+  opcfamily => 'btree/interval_ops', opcintype => 'interval' },
+{ opcmethod => 'hash', opcname => 'interval_ops',
+  opcfamily => 'hash/interval_ops', opcintype => 'interval' },
+{ opcmethod => 'btree', opcname => 'macaddr_ops',
+  opcfamily => 'btree/macaddr_ops', opcintype => 'macaddr' },
+{ opcmethod => 'hash', opcname => 'macaddr_ops',
+  opcfamily => 'hash/macaddr_ops', opcintype => 'macaddr' },
+{ opcmethod => 'btree', opcname => 'macaddr8_ops',
+  opcfamily => 'btree/macaddr8_ops', opcintype => 'macaddr8' },
+{ opcmethod => 'hash', opcname => 'macaddr8_ops',
+  opcfamily => 'hash/macaddr8_ops', opcintype => 'macaddr8' },
+
+# Here's an ugly little hack to save space in the system catalog indexes.
+# btree doesn't ordinarily allow a storage type different from input type;
+# but cstring and name are the same thing except for trailing padding,
+# and we can safely omit that within an index entry.  So we declare the
+# btree opclass for name as using cstring storage type.
+{ opcmethod => 'btree', opcname => 'name_ops', opcfamily => 'btree/name_ops',
+  opcintype => 'name', opckeytype => 'cstring' },
+
+{ opcmethod => 'hash', opcname => 'name_ops', opcfamily => 'hash/name_ops',
+  opcintype => 'name' },
+{ oid => '3125', oid_symbol => 'NUMERIC_BTREE_OPS_OID',
+  opcmethod => 'btree', opcname => 'numeric_ops',
+  opcfamily => 'btree/numeric_ops', opcintype => 'numeric' },
+{ opcmethod => 'hash', opcname => 'numeric_ops',
+  opcfamily => 'hash/numeric_ops', opcintype => 'numeric' },
+{ oid => '1981', oid_symbol => 'OID_BTREE_OPS_OID',
+  opcmethod => 'btree', opcname => 'oid_ops', opcfamily => 'btree/oid_ops',
+  opcintype => 'oid' },
+{ opcmethod => 'hash', opcname => 'oid_ops', opcfamily => 'hash/oid_ops',
+  opcintype => 'oid' },
+{ opcmethod => 'btree', opcname => 'oidvector_ops',
+  opcfamily => 'btree/oidvector_ops', opcintype => 'oidvector' },
+{ opcmethod => 'hash', opcname => 'oidvector_ops',
+  opcfamily => 'hash/oidvector_ops', opcintype => 'oidvector' },
+{ opcmethod => 'btree', opcname => 'record_ops',
+  opcfamily => 'btree/record_ops', opcintype => 'record' },
+{ opcmethod => 'btree', opcname => 'record_image_ops',
+  opcfamily => 'btree/record_image_ops', opcintype => 'record',
+  opcdefault => 'f' },
+{ oid => '3126', oid_symbol => 'TEXT_BTREE_OPS_OID',
+  opcmethod => 'btree', opcname => 'text_ops', opcfamily => 'btree/text_ops',
+  opcintype => 'text' },
+{ opcmethod => 'hash', opcname => 'text_ops', opcfamily => 'hash/text_ops',
+  opcintype => 'text' },
+{ opcmethod => 'btree', opcname => 'time_ops', opcfamily => 'btree/time_ops',
+  opcintype => 'time' },
+{ opcmethod => 'hash', opcname => 'time_ops', opcfamily => 'hash/time_ops',
+  opcintype => 'time' },
+{ oid => '3127', oid_symbol => 'TIMESTAMPTZ_BTREE_OPS_OID',
+  opcmethod => 'btree', opcname => 'timestamptz_ops',
+  opcfamily => 'btree/datetime_ops', opcintype => 'timestamptz' },
+{ opcmethod => 'hash', opcname => 'timestamptz_ops',
+  opcfamily => 'hash/timestamptz_ops', opcintype => 'timestamptz' },
+{ opcmethod => 'btree', opcname => 'timetz_ops',
+  opcfamily => 'btree/timetz_ops', opcintype => 'timetz' },
+{ opcmethod => 'hash', opcname => 'timetz_ops', opcfamily => 'hash/timetz_ops',
+  opcintype => 'timetz' },
+{ opcmethod => 'btree', opcname => 'varbit_ops',
+  opcfamily => 'btree/varbit_ops', opcintype => 'varbit' },
+{ opcmethod => 'btree', opcname => 'varchar_ops', opcfamily => 'btree/text_ops',
+  opcintype => 'text', opcdefault => 'f' },
+{ opcmethod => 'hash', opcname => 'varchar_ops', opcfamily => 'hash/text_ops',
+  opcintype => 'text', opcdefault => 'f' },
+{ oid => '3128', oid_symbol => 'TIMESTAMP_BTREE_OPS_OID',
+  opcmethod => 'btree', opcname => 'timestamp_ops',
+  opcfamily => 'btree/datetime_ops', opcintype => 'timestamp' },
+{ opcmethod => 'hash', opcname => 'timestamp_ops',
+  opcfamily => 'hash/timestamp_ops', opcintype => 'timestamp' },
+{ opcmethod => 'btree', opcname => 'text_pattern_ops',
+  opcfamily => 'btree/text_pattern_ops', opcintype => 'text',
+  opcdefault => 'f' },
+{ opcmethod => 'btree', opcname => 'varchar_pattern_ops',
+  opcfamily => 'btree/text_pattern_ops', opcintype => 'text',
+  opcdefault => 'f' },
+{ opcmethod => 'btree', opcname => 'bpchar_pattern_ops',
+  opcfamily => 'btree/bpchar_pattern_ops', opcintype => 'bpchar',
+  opcdefault => 'f' },
+{ opcmethod => 'btree', opcname => 'money_ops', opcfamily => 'btree/money_ops',
+  opcintype => 'money' },
+{ opcmethod => 'hash', opcname => 'bool_ops', opcfamily => 'hash/bool_ops',
+  opcintype => 'bool' },
+{ opcmethod => 'hash', opcname => 'bytea_ops', opcfamily => 'hash/bytea_ops',
+  opcintype => 'bytea' },
+{ opcmethod => 'btree', opcname => 'tid_ops', opcfamily => 'btree/tid_ops',
+  opcintype => 'tid' },
+{ opcmethod => 'hash', opcname => 'xid_ops', opcfamily => 'hash/xid_ops',
+  opcintype => 'xid' },
+{ opcmethod => 'hash', opcname => 'cid_ops', opcfamily => 'hash/cid_ops',
+  opcintype => 'cid' },
+{ opcmethod => 'hash', opcname => 'abstime_ops',
+  opcfamily => 'hash/abstime_ops', opcintype => 'abstime' },
+{ opcmethod => 'hash', opcname => 'reltime_ops',
+  opcfamily => 'hash/reltime_ops', opcintype => 'reltime' },
+{ opcmethod => 'hash', opcname => 'text_pattern_ops',
+  opcfamily => 'hash/text_pattern_ops', opcintype => 'text',
+  opcdefault => 'f' },
+{ opcmethod => 'hash', opcname => 'varchar_pattern_ops',
+  opcfamily => 'hash/text_pattern_ops', opcintype => 'text',
+  opcdefault => 'f' },
+{ opcmethod => 'hash', opcname => 'bpchar_pattern_ops',
+  opcfamily => 'hash/bpchar_pattern_ops', opcintype => 'bpchar',
+  opcdefault => 'f' },
+{ opcmethod => 'btree', opcname => 'reltime_ops',
+  opcfamily => 'btree/reltime_ops', opcintype => 'reltime' },
+{ opcmethod => 'btree', opcname => 'tinterval_ops',
+  opcfamily => 'btree/tinterval_ops', opcintype => 'tinterval' },
+{ opcmethod => 'hash', opcname => 'aclitem_ops',
+  opcfamily => 'hash/aclitem_ops', opcintype => 'aclitem' },
+{ opcmethod => 'gist', opcname => 'box_ops', opcfamily => 'gist/box_ops',
+  opcintype => 'box' },
+{ opcmethod => 'gist', opcname => 'point_ops', opcfamily => 'gist/point_ops',
+  opcintype => 'point', opckeytype => 'box' },
+{ opcmethod => 'gist', opcname => 'poly_ops', opcfamily => 'gist/poly_ops',
+  opcintype => 'polygon', opckeytype => 'box' },
+{ opcmethod => 'gist', opcname => 'circle_ops', opcfamily => 'gist/circle_ops',
+  opcintype => 'circle', opckeytype => 'box' },
+{ opcmethod => 'gin', opcname => 'array_ops', opcfamily => 'gin/array_ops',
+  opcintype => 'anyarray', opckeytype => 'anyelement' },
+{ opcmethod => 'btree', opcname => 'uuid_ops', opcfamily => 'btree/uuid_ops',
+  opcintype => 'uuid' },
+{ opcmethod => 'hash', opcname => 'uuid_ops', opcfamily => 'hash/uuid_ops',
+  opcintype => 'uuid' },
+{ opcmethod => 'btree', opcname => 'pg_lsn_ops',
+  opcfamily => 'btree/pg_lsn_ops', opcintype => 'pg_lsn' },
+{ opcmethod => 'hash', opcname => 'pg_lsn_ops', opcfamily => 'hash/pg_lsn_ops',
+  opcintype => 'pg_lsn' },
+{ opcmethod => 'btree', opcname => 'enum_ops', opcfamily => 'btree/enum_ops',
+  opcintype => 'anyenum' },
+{ opcmethod => 'hash', opcname => 'enum_ops', opcfamily => 'hash/enum_ops',
+  opcintype => 'anyenum' },
+{ opcmethod => 'btree', opcname => 'tsvector_ops',
+  opcfamily => 'btree/tsvector_ops', opcintype => 'tsvector' },
+{ opcmethod => 'gist', opcname => 'tsvector_ops',
+  opcfamily => 'gist/tsvector_ops', opcintype => 'tsvector',
+  opckeytype => 'gtsvector' },
+{ opcmethod => 'gin', opcname => 'tsvector_ops',
+  opcfamily => 'gin/tsvector_ops', opcintype => 'tsvector',
+  opckeytype => 'text' },
+{ opcmethod => 'btree', opcname => 'tsquery_ops',
+  opcfamily => 'btree/tsquery_ops', opcintype => 'tsquery' },
+{ opcmethod => 'gist', opcname => 'tsquery_ops',
+  opcfamily => 'gist/tsquery_ops', opcintype => 'tsquery',
+  opckeytype => 'int8' },
+{ opcmethod => 'btree', opcname => 'range_ops', opcfamily => 'btree/range_ops',
+  opcintype => 'anyrange' },
+{ opcmethod => 'hash', opcname => 'range_ops', opcfamily => 'hash/range_ops',
+  opcintype => 'anyrange' },
+{ opcmethod => 'gist', opcname => 'range_ops', opcfamily => 'gist/range_ops',
+  opcintype => 'anyrange' },
+{ opcmethod => 'spgist', opcname => 'range_ops',
+  opcfamily => 'spgist/range_ops', opcintype => 'anyrange' },
+{ opcmethod => 'spgist', opcname => 'box_ops', opcfamily => 'spgist/box_ops',
+  opcintype => 'box' },
+{ opcmethod => 'spgist', opcname => 'quad_point_ops',
+  opcfamily => 'spgist/quad_point_ops', opcintype => 'point' },
+{ opcmethod => 'spgist', opcname => 'kd_point_ops',
+  opcfamily => 'spgist/kd_point_ops', opcintype => 'point', opcdefault => 'f' },
+{ opcmethod => 'spgist', opcname => 'text_ops', opcfamily => 'spgist/text_ops',
+  opcintype => 'text' },
+{ opcmethod => 'spgist', opcname => 'poly_ops', opcfamily => 'spgist/poly_ops',
+  opcintype => 'polygon', opckeytype => 'box' },
+{ opcmethod => 'btree', opcname => 'jsonb_ops', opcfamily => 'btree/jsonb_ops',
+  opcintype => 'jsonb' },
+{ opcmethod => 'hash', opcname => 'jsonb_ops', opcfamily => 'hash/jsonb_ops',
+  opcintype => 'jsonb' },
+{ opcmethod => 'gin', opcname => 'jsonb_ops', opcfamily => 'gin/jsonb_ops',
+  opcintype => 'jsonb', opckeytype => 'text' },
+{ opcmethod => 'gin', opcname => 'jsonb_path_ops',
+  opcfamily => 'gin/jsonb_path_ops', opcintype => 'jsonb', opcdefault => 'f',
+  opckeytype => 'int4' },
+
+# BRIN operator classes
+
+# no brin opclass for bool
+
+{ opcmethod => 'brin', opcname => 'bytea_minmax_ops',
+  opcfamily => 'brin/bytea_minmax_ops', opcintype => 'bytea',
+  opckeytype => 'bytea' },
+{ opcmethod => 'brin', opcname => 'char_minmax_ops',
+  opcfamily => 'brin/char_minmax_ops', opcintype => 'char',
+  opckeytype => 'char' },
+{ opcmethod => 'brin', opcname => 'name_minmax_ops',
+  opcfamily => 'brin/name_minmax_ops', opcintype => 'name',
+  opckeytype => 'name' },
+{ opcmethod => 'brin', opcname => 'int8_minmax_ops',
+  opcfamily => 'brin/integer_minmax_ops', opcintype => 'int8',
+  opckeytype => 'int8' },
+{ opcmethod => 'brin', opcname => 'int2_minmax_ops',
+  opcfamily => 'brin/integer_minmax_ops', opcintype => 'int2',
+  opckeytype => 'int2' },
+{ opcmethod => 'brin', opcname => 'int4_minmax_ops',
+  opcfamily => 'brin/integer_minmax_ops', opcintype => 'int4',
+  opckeytype => 'int4' },
+{ opcmethod => 'brin', opcname => 'text_minmax_ops',
+  opcfamily => 'brin/text_minmax_ops', opcintype => 'text',
+  opckeytype => 'text' },
+{ opcmethod => 'brin', opcname => 'oid_minmax_ops',
+  opcfamily => 'brin/oid_minmax_ops', opcintype => 'oid', opckeytype => 'oid' },
+{ opcmethod => 'brin', opcname => 'tid_minmax_ops',
+  opcfamily => 'brin/tid_minmax_ops', opcintype => 'tid', opckeytype => 'tid' },
+{ opcmethod => 'brin', opcname => 'float4_minmax_ops',
+  opcfamily => 'brin/float_minmax_ops', opcintype => 'float4',
+  opckeytype => 'float4' },
+{ opcmethod => 'brin', opcname => 'float8_minmax_ops',
+  opcfamily => 'brin/float_minmax_ops', opcintype => 'float8',
+  opckeytype => 'float8' },
+{ opcmethod => 'brin', opcname => 'abstime_minmax_ops',
+  opcfamily => 'brin/abstime_minmax_ops', opcintype => 'abstime',
+  opckeytype => 'abstime' },
+{ opcmethod => 'brin', opcname => 'reltime_minmax_ops',
+  opcfamily => 'brin/reltime_minmax_ops', opcintype => 'reltime',
+  opckeytype => 'reltime' },
+{ opcmethod => 'brin', opcname => 'macaddr_minmax_ops',
+  opcfamily => 'brin/macaddr_minmax_ops', opcintype => 'macaddr',
+  opckeytype => 'macaddr' },
+{ opcmethod => 'brin', opcname => 'macaddr8_minmax_ops',
+  opcfamily => 'brin/macaddr8_minmax_ops', opcintype => 'macaddr8',
+  opckeytype => 'macaddr8' },
+{ opcmethod => 'brin', opcname => 'inet_minmax_ops',
+  opcfamily => 'brin/network_minmax_ops', opcintype => 'inet',
+  opcdefault => 'f', opckeytype => 'inet' },
+{ opcmethod => 'brin', opcname => 'inet_inclusion_ops',
+  opcfamily => 'brin/network_inclusion_ops', opcintype => 'inet',
+  opckeytype => 'inet' },
+{ opcmethod => 'brin', opcname => 'bpchar_minmax_ops',
+  opcfamily => 'brin/bpchar_minmax_ops', opcintype => 'bpchar',
+  opckeytype => 'bpchar' },
+{ opcmethod => 'brin', opcname => 'time_minmax_ops',
+  opcfamily => 'brin/time_minmax_ops', opcintype => 'time',
+  opckeytype => 'time' },
+{ opcmethod => 'brin', opcname => 'date_minmax_ops',
+  opcfamily => 'brin/datetime_minmax_ops', opcintype => 'date',
+  opckeytype => 'date' },
+{ opcmethod => 'brin', opcname => 'timestamp_minmax_ops',
+  opcfamily => 'brin/datetime_minmax_ops', opcintype => 'timestamp',
+  opckeytype => 'timestamp' },
+{ opcmethod => 'brin', opcname => 'timestamptz_minmax_ops',
+  opcfamily => 'brin/datetime_minmax_ops', opcintype => 'timestamptz',
+  opckeytype => 'timestamptz' },
+{ opcmethod => 'brin', opcname => 'interval_minmax_ops',
+  opcfamily => 'brin/interval_minmax_ops', opcintype => 'interval',
+  opckeytype => 'interval' },
+{ opcmethod => 'brin', opcname => 'timetz_minmax_ops',
+  opcfamily => 'brin/timetz_minmax_ops', opcintype => 'timetz',
+  opckeytype => 'timetz' },
+{ opcmethod => 'brin', opcname => 'bit_minmax_ops',
+  opcfamily => 'brin/bit_minmax_ops', opcintype => 'bit', opckeytype => 'bit' },
+{ opcmethod => 'brin', opcname => 'varbit_minmax_ops',
+  opcfamily => 'brin/varbit_minmax_ops', opcintype => 'varbit',
+  opckeytype => 'varbit' },
+{ opcmethod => 'brin', opcname => 'numeric_minmax_ops',
+  opcfamily => 'brin/numeric_minmax_ops', opcintype => 'numeric',
+  opckeytype => 'numeric' },
+
+# no brin opclass for record, anyarray
+
+{ opcmethod => 'brin', opcname => 'uuid_minmax_ops',
+  opcfamily => 'brin/uuid_minmax_ops', opcintype => 'uuid',
+  opckeytype => 'uuid' },
+{ opcmethod => 'brin', opcname => 'range_inclusion_ops',
+  opcfamily => 'brin/range_inclusion_ops', opcintype => 'anyrange',
+  opckeytype => 'anyrange' },
+{ opcmethod => 'brin', opcname => 'pg_lsn_minmax_ops',
+  opcfamily => 'brin/pg_lsn_minmax_ops', opcintype => 'pg_lsn',
+  opckeytype => 'pg_lsn' },
+
+# no brin opclass for enum, tsvector, tsquery, jsonb
+
+{ opcmethod => 'brin', opcname => 'box_inclusion_ops',
+  opcfamily => 'brin/box_inclusion_ops', opcintype => 'box',
+  opckeytype => 'box' },
+
+# no brin opclass for the geometric types except box
+
+]
index e11d52eaa812ea71922adbdf76fea7c4c8b337e7..16c3875daa8b3b3496ca4336c43b9a6423aaa733 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_opclass.h
  *       definition of the system "opclass" relation (pg_opclass)
- *       along with the relation's initial contents.
  *
  * The primary key for this table is <opcmethod, opcname, opcnamespace> ---
  * that is, there is a row for each valid combination of opclass name and
@@ -31,8 +30,8 @@
  * src/include/catalog/pg_opclass.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_OPCLASS_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_opclass_d.h"
 
 /* ----------------
  *             pg_opclass definition.  cpp turns this into
  *             typedef struct FormData_pg_opclass
  * ----------------
  */
-#define OperatorClassRelationId  2616
-
-CATALOG(pg_opclass,2616)
+CATALOG(pg_opclass,2616,OperatorClassRelationId)
 {
-       Oid                     opcmethod;              /* index access method opclass is for */
-       NameData        opcname;                /* name of this opclass */
-       Oid                     opcnamespace;   /* namespace of this opclass */
-       Oid                     opcowner;               /* opclass owner */
-       Oid                     opcfamily;              /* containing operator family */
-       Oid                     opcintype;              /* type of data indexed by opclass */
-       bool            opcdefault;             /* T if opclass is default for opcintype */
-       Oid                     opckeytype;             /* type of data in index, or InvalidOid */
+       /* index access method opclass is for */
+       Oid                     opcmethod BKI_LOOKUP(pg_am);
+
+       /* name of this opclass */
+       NameData        opcname;
+
+       /* namespace of this opclass */
+       Oid                     opcnamespace BKI_DEFAULT(PGNSP);
+
+       /* opclass owner */
+       Oid                     opcowner BKI_DEFAULT(PGUID);
+
+       /* containing operator family */
+       Oid                     opcfamily BKI_LOOKUP(pg_opfamily);
+
+       /* type of data indexed by opclass */
+       Oid                     opcintype BKI_LOOKUP(pg_type);
+
+       /* T if opclass is default for opcintype */
+       bool            opcdefault BKI_DEFAULT(t);
+
+       /* type of data in index, or InvalidOid */
+       Oid                     opckeytype BKI_DEFAULT(0) BKI_LOOKUP(pg_type);
 } FormData_pg_opclass;
 
 /* ----------------
@@ -67,185 +80,4 @@ CATALOG(pg_opclass,2616)
  */
 typedef FormData_pg_opclass *Form_pg_opclass;
 
-/* ----------------
- *             compiler constants for pg_opclass
- * ----------------
- */
-#define Natts_pg_opclass                               8
-#define Anum_pg_opclass_opcmethod              1
-#define Anum_pg_opclass_opcname                        2
-#define Anum_pg_opclass_opcnamespace   3
-#define Anum_pg_opclass_opcowner               4
-#define Anum_pg_opclass_opcfamily              5
-#define Anum_pg_opclass_opcintype              6
-#define Anum_pg_opclass_opcdefault             7
-#define Anum_pg_opclass_opckeytype             8
-
-/* ----------------
- *             initial contents of pg_opclass
- *
- * Note: we hard-wire an OID only for a few entries that have to be explicitly
- * referenced in the C code or in built-in catalog entries.  The rest get OIDs
- * assigned on-the-fly during initdb.
- * ----------------
- */
-
-DATA(insert (  403             abstime_ops                     PGNSP PGUID  421  702 t 0 ));
-DATA(insert (  403             array_ops                       PGNSP PGUID  397 2277 t 0 ));
-DATA(insert (  405             array_ops                       PGNSP PGUID  627 2277 t 0 ));
-DATA(insert (  403             bit_ops                         PGNSP PGUID  423 1560 t 0 ));
-DATA(insert (  403             bool_ops                        PGNSP PGUID  424   16 t 0 ));
-DATA(insert (  403             bpchar_ops                      PGNSP PGUID  426 1042 t 0 ));
-DATA(insert (  405             bpchar_ops                      PGNSP PGUID  427 1042 t 0 ));
-DATA(insert (  403             bytea_ops                       PGNSP PGUID  428   17 t 0 ));
-DATA(insert (  403             char_ops                        PGNSP PGUID  429   18 t 0 ));
-DATA(insert (  405             char_ops                        PGNSP PGUID  431   18 t 0 ));
-DATA(insert (  403             cidr_ops                        PGNSP PGUID 1974  869 f 0 ));
-DATA(insert (  405             cidr_ops                        PGNSP PGUID 1975  869 f 0 ));
-DATA(insert OID = 3122 ( 403   date_ops        PGNSP PGUID  434 1082 t 0 ));
-#define DATE_BTREE_OPS_OID 3122
-DATA(insert (  405             date_ops                        PGNSP PGUID  435 1082 t 0 ));
-DATA(insert (  403             float4_ops                      PGNSP PGUID 1970  700 t 0 ));
-DATA(insert (  405             float4_ops                      PGNSP PGUID 1971  700 t 0 ));
-DATA(insert OID = 3123 ( 403   float8_ops      PGNSP PGUID 1970  701 t 0 ));
-#define FLOAT8_BTREE_OPS_OID 3123
-DATA(insert (  405             float8_ops                      PGNSP PGUID 1971  701 t 0 ));
-DATA(insert (  403             inet_ops                        PGNSP PGUID 1974  869 t 0 ));
-DATA(insert (  405             inet_ops                        PGNSP PGUID 1975  869 t 0 ));
-DATA(insert (  783             inet_ops                        PGNSP PGUID 3550  869 f 0 ));
-DATA(insert (  4000    inet_ops                        PGNSP PGUID 3794  869 t 0 ));
-DATA(insert OID = 1979 ( 403   int2_ops        PGNSP PGUID 1976   21 t 0 ));
-#define INT2_BTREE_OPS_OID 1979
-DATA(insert (  405             int2_ops                        PGNSP PGUID 1977   21 t 0 ));
-DATA(insert OID = 1978 ( 403   int4_ops        PGNSP PGUID 1976   23 t 0 ));
-#define INT4_BTREE_OPS_OID 1978
-DATA(insert (  405             int4_ops                        PGNSP PGUID 1977   23 t 0 ));
-DATA(insert OID = 3124 ( 403   int8_ops        PGNSP PGUID 1976   20 t 0 ));
-#define INT8_BTREE_OPS_OID 3124
-DATA(insert (  405             int8_ops                        PGNSP PGUID 1977   20 t 0 ));
-DATA(insert (  403             interval_ops            PGNSP PGUID 1982 1186 t 0 ));
-DATA(insert (  405             interval_ops            PGNSP PGUID 1983 1186 t 0 ));
-DATA(insert (  403             macaddr_ops                     PGNSP PGUID 1984  829 t 0 ));
-DATA(insert (  405             macaddr_ops                     PGNSP PGUID 1985  829 t 0 ));
-DATA(insert (  403             macaddr8_ops            PGNSP PGUID 3371  774 t 0 ));
-DATA(insert (  405             macaddr8_ops            PGNSP PGUID 3372  774 t 0 ));
-/*
- * Here's an ugly little hack to save space in the system catalog indexes.
- * btree doesn't ordinarily allow a storage type different from input type;
- * but cstring and name are the same thing except for trailing padding,
- * and we can safely omit that within an index entry.  So we declare the
- * btree opclass for name as using cstring storage type.
- */
-DATA(insert (  403             name_ops                        PGNSP PGUID 1986   19 t 2275 ));
-DATA(insert (  405             name_ops                        PGNSP PGUID 1987   19 t 0 ));
-DATA(insert OID = 3125 ( 403   numeric_ops PGNSP PGUID 1988 1700 t 0 ));
-#define NUMERIC_BTREE_OPS_OID 3125
-DATA(insert (  405             numeric_ops                     PGNSP PGUID 1998 1700 t 0 ));
-DATA(insert OID = 1981 ( 403   oid_ops         PGNSP PGUID 1989   26 t 0 ));
-#define OID_BTREE_OPS_OID 1981
-DATA(insert (  405             oid_ops                         PGNSP PGUID 1990   26 t 0 ));
-DATA(insert (  403             oidvector_ops           PGNSP PGUID 1991   30 t 0 ));
-DATA(insert (  405             oidvector_ops           PGNSP PGUID 1992   30 t 0 ));
-DATA(insert (  403             record_ops                      PGNSP PGUID 2994 2249 t 0 ));
-DATA(insert (  403             record_image_ops        PGNSP PGUID 3194 2249 f 0 ));
-DATA(insert OID = 3126 ( 403   text_ops        PGNSP PGUID 1994   25 t 0 ));
-#define TEXT_BTREE_OPS_OID 3126
-DATA(insert (  405             text_ops                        PGNSP PGUID 1995   25 t 0 ));
-DATA(insert (  403             time_ops                        PGNSP PGUID 1996 1083 t 0 ));
-DATA(insert (  405             time_ops                        PGNSP PGUID 1997 1083 t 0 ));
-DATA(insert OID = 3127 ( 403   timestamptz_ops PGNSP PGUID  434 1184 t 0 ));
-#define TIMESTAMPTZ_BTREE_OPS_OID 3127
-DATA(insert (  405             timestamptz_ops         PGNSP PGUID 1999 1184 t 0 ));
-DATA(insert (  403             timetz_ops                      PGNSP PGUID 2000 1266 t 0 ));
-DATA(insert (  405             timetz_ops                      PGNSP PGUID 2001 1266 t 0 ));
-DATA(insert (  403             varbit_ops                      PGNSP PGUID 2002 1562 t 0 ));
-DATA(insert (  403             varchar_ops                     PGNSP PGUID 1994   25 f 0 ));
-DATA(insert (  405             varchar_ops                     PGNSP PGUID 1995   25 f 0 ));
-DATA(insert OID = 3128 ( 403   timestamp_ops   PGNSP PGUID  434 1114 t 0 ));
-#define TIMESTAMP_BTREE_OPS_OID 3128
-DATA(insert (  405             timestamp_ops           PGNSP PGUID 2040 1114 t 0 ));
-DATA(insert (  403             text_pattern_ops        PGNSP PGUID 2095   25 f 0 ));
-DATA(insert (  403             varchar_pattern_ops PGNSP PGUID 2095   25 f 0 ));
-DATA(insert (  403             bpchar_pattern_ops      PGNSP PGUID 2097 1042 f 0 ));
-DATA(insert (  403             money_ops                       PGNSP PGUID 2099  790 t 0 ));
-DATA(insert (  405             bool_ops                        PGNSP PGUID 2222   16 t 0 ));
-DATA(insert (  405             bytea_ops                       PGNSP PGUID 2223   17 t 0 ));
-DATA(insert (  403             tid_ops                         PGNSP PGUID 2789   27 t 0 ));
-DATA(insert (  405             xid_ops                         PGNSP PGUID 2225   28 t 0 ));
-DATA(insert (  405             cid_ops                         PGNSP PGUID 2226   29 t 0 ));
-DATA(insert (  405             abstime_ops                     PGNSP PGUID 2227  702 t 0 ));
-DATA(insert (  405             reltime_ops                     PGNSP PGUID 2228  703 t 0 ));
-DATA(insert (  405             text_pattern_ops        PGNSP PGUID 2229   25 f 0 ));
-DATA(insert (  405             varchar_pattern_ops PGNSP PGUID 2229   25 f 0 ));
-DATA(insert (  405             bpchar_pattern_ops      PGNSP PGUID 2231 1042 f 0 ));
-DATA(insert (  403             reltime_ops                     PGNSP PGUID 2233  703 t 0 ));
-DATA(insert (  403             tinterval_ops           PGNSP PGUID 2234  704 t 0 ));
-DATA(insert (  405             aclitem_ops                     PGNSP PGUID 2235 1033 t 0 ));
-DATA(insert (  783             box_ops                         PGNSP PGUID 2593  603 t 0 ));
-DATA(insert (  783             point_ops                       PGNSP PGUID 1029  600 t 603 ));
-DATA(insert (  783             poly_ops                        PGNSP PGUID 2594  604 t 603 ));
-DATA(insert (  783             circle_ops                      PGNSP PGUID 2595  718 t 603 ));
-DATA(insert (  2742    array_ops                       PGNSP PGUID 2745  2277 t 2283 ));
-DATA(insert (  403             uuid_ops                        PGNSP PGUID 2968  2950 t 0 ));
-DATA(insert (  405             uuid_ops                        PGNSP PGUID 2969  2950 t 0 ));
-DATA(insert (  403             pg_lsn_ops                      PGNSP PGUID 3253  3220 t 0 ));
-DATA(insert (  405             pg_lsn_ops                      PGNSP PGUID 3254  3220 t 0 ));
-DATA(insert (  403             enum_ops                        PGNSP PGUID 3522  3500 t 0 ));
-DATA(insert (  405             enum_ops                        PGNSP PGUID 3523  3500 t 0 ));
-DATA(insert (  403             tsvector_ops            PGNSP PGUID 3626  3614 t 0 ));
-DATA(insert (  783             tsvector_ops            PGNSP PGUID 3655  3614 t 3642 ));
-DATA(insert (  2742    tsvector_ops            PGNSP PGUID 3659  3614 t 25 ));
-DATA(insert (  403             tsquery_ops                     PGNSP PGUID 3683  3615 t 0 ));
-DATA(insert (  783             tsquery_ops                     PGNSP PGUID 3702  3615 t 20 ));
-DATA(insert (  403             range_ops                       PGNSP PGUID 3901  3831 t 0 ));
-DATA(insert (  405             range_ops                       PGNSP PGUID 3903  3831 t 0 ));
-DATA(insert (  783             range_ops                       PGNSP PGUID 3919  3831 t 0 ));
-DATA(insert (  4000    range_ops                       PGNSP PGUID 3474  3831 t 0 ));
-DATA(insert (  4000    box_ops                         PGNSP PGUID 5000  603  t 0 ));
-DATA(insert (  4000    quad_point_ops          PGNSP PGUID 4015  600 t 0 ));
-DATA(insert (  4000    kd_point_ops            PGNSP PGUID 4016  600 f 0 ));
-DATA(insert (  4000    text_ops                        PGNSP PGUID 4017  25 t 0 ));
-DATA(insert (  4000    poly_ops                        PGNSP PGUID 5008  604 t 603 ));
-DATA(insert (  403             jsonb_ops                       PGNSP PGUID 4033  3802 t 0 ));
-DATA(insert (  405             jsonb_ops                       PGNSP PGUID 4034  3802 t 0 ));
-DATA(insert (  2742    jsonb_ops                       PGNSP PGUID 4036  3802 t 25 ));
-DATA(insert (  2742    jsonb_path_ops          PGNSP PGUID 4037  3802 f 23 ));
-
-/* BRIN operator classes */
-/* no brin opclass for bool */
-DATA(insert (  3580    bytea_minmax_ops                PGNSP PGUID 4064        17 t 17 ));
-DATA(insert (  3580    char_minmax_ops                 PGNSP PGUID 4062        18 t 18 ));
-DATA(insert (  3580    name_minmax_ops                 PGNSP PGUID 4065        19 t 19 ));
-DATA(insert (  3580    int8_minmax_ops                 PGNSP PGUID 4054        20 t 20 ));
-DATA(insert (  3580    int2_minmax_ops                 PGNSP PGUID 4054        21 t 21 ));
-DATA(insert (  3580    int4_minmax_ops                 PGNSP PGUID 4054        23 t 23 ));
-DATA(insert (  3580    text_minmax_ops                 PGNSP PGUID 4056        25 t 25 ));
-DATA(insert (  3580    oid_minmax_ops                  PGNSP PGUID 4068        26 t 26 ));
-DATA(insert (  3580    tid_minmax_ops                  PGNSP PGUID 4069        27 t 27 ));
-DATA(insert (  3580    float4_minmax_ops               PGNSP PGUID 4070   700 t 700 ));
-DATA(insert (  3580    float8_minmax_ops               PGNSP PGUID 4070   701 t 701 ));
-DATA(insert (  3580    abstime_minmax_ops              PGNSP PGUID 4072   702 t 702 ));
-DATA(insert (  3580    reltime_minmax_ops              PGNSP PGUID 4073   703 t 703 ));
-DATA(insert (  3580    macaddr_minmax_ops              PGNSP PGUID 4074   829 t 829 ));
-DATA(insert (  3580    macaddr8_minmax_ops             PGNSP PGUID 4109   774 t 774 ));
-DATA(insert (  3580    inet_minmax_ops                 PGNSP PGUID 4075   869 f 869 ));
-DATA(insert (  3580    inet_inclusion_ops              PGNSP PGUID 4102   869 t 869 ));
-DATA(insert (  3580    bpchar_minmax_ops               PGNSP PGUID 4076  1042 t 1042 ));
-DATA(insert (  3580    time_minmax_ops                 PGNSP PGUID 4077  1083 t 1083 ));
-DATA(insert (  3580    date_minmax_ops                 PGNSP PGUID 4059  1082 t 1082 ));
-DATA(insert (  3580    timestamp_minmax_ops    PGNSP PGUID 4059  1114 t 1114 ));
-DATA(insert (  3580    timestamptz_minmax_ops  PGNSP PGUID 4059  1184 t 1184 ));
-DATA(insert (  3580    interval_minmax_ops             PGNSP PGUID 4078  1186 t 1186 ));
-DATA(insert (  3580    timetz_minmax_ops               PGNSP PGUID 4058  1266 t 1266 ));
-DATA(insert (  3580    bit_minmax_ops                  PGNSP PGUID 4079  1560 t 1560 ));
-DATA(insert (  3580    varbit_minmax_ops               PGNSP PGUID 4080  1562 t 1562 ));
-DATA(insert (  3580    numeric_minmax_ops              PGNSP PGUID 4055  1700 t 1700 ));
-/* no brin opclass for record, anyarray */
-DATA(insert (  3580    uuid_minmax_ops                 PGNSP PGUID 4081  2950 t 2950 ));
-DATA(insert (  3580    range_inclusion_ops             PGNSP PGUID 4103  3831 t 3831 ));
-DATA(insert (  3580    pg_lsn_minmax_ops               PGNSP PGUID 4082  3220 t 3220 ));
-/* no brin opclass for enum, tsvector, tsquery, jsonb */
-DATA(insert (  3580    box_inclusion_ops               PGNSP PGUID 4104   603 t 603 ));
-/* no brin opclass for the geometric types except box */
-
 #endif                                                 /* PG_OPCLASS_H */
diff --git a/src/include/catalog/pg_operator.dat b/src/include/catalog/pg_operator.dat
new file mode 100644 (file)
index 0000000..4382738
--- /dev/null
@@ -0,0 +1,3340 @@
+#----------------------------------------------------------------------
+#
+# pg_operator.dat
+#    Initial contents of the pg_operator system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_operator.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# Note: every entry in pg_operator.dat is expected to have a 'descr' comment.
+# If the operator is a deprecated equivalent of some other entry, be sure
+# to comment it as such so that initdb doesn't think it's a preferred name
+# for the underlying function.
+
+{ oid => '15', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int4',
+  oprright => 'int8', oprresult => 'bool', oprcom => '=(int8,int4)',
+  oprnegate => '<>(int4,int8)', oprcode => 'int48eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '36', descr => 'not equal',
+  oprname => '<>', oprleft => 'int4', oprright => 'int8', oprresult => 'bool',
+  oprcom => '<>(int8,int4)', oprnegate => '=(int4,int8)', oprcode => 'int48ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '37', descr => 'less than',
+  oprname => '<', oprleft => 'int4', oprright => 'int8', oprresult => 'bool',
+  oprcom => '>(int8,int4)', oprnegate => '>=(int4,int8)', oprcode => 'int48lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '76', descr => 'greater than',
+  oprname => '>', oprleft => 'int4', oprright => 'int8', oprresult => 'bool',
+  oprcom => '<(int8,int4)', oprnegate => '<=(int4,int8)', oprcode => 'int48gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '80', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'int4', oprright => 'int8', oprresult => 'bool',
+  oprcom => '>=(int8,int4)', oprnegate => '>(int4,int8)', oprcode => 'int48le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '82', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'int4', oprright => 'int8', oprresult => 'bool',
+  oprcom => '<=(int8,int4)', oprnegate => '<(int4,int8)', oprcode => 'int48ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+{ oid => '58', descr => 'less than',
+  oprname => '<', oprleft => 'bool', oprright => 'bool', oprresult => 'bool',
+  oprcom => '>(bool,bool)', oprnegate => '>=(bool,bool)', oprcode => 'boollt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '59', descr => 'greater than',
+  oprname => '>', oprleft => 'bool', oprright => 'bool', oprresult => 'bool',
+  oprcom => '<(bool,bool)', oprnegate => '<=(bool,bool)', oprcode => 'boolgt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '85', oid_symbol => 'BooleanNotEqualOperator', descr => 'not equal',
+  oprname => '<>', oprleft => 'bool', oprright => 'bool', oprresult => 'bool',
+  oprcom => '<>(bool,bool)', oprnegate => '=(bool,bool)', oprcode => 'boolne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '91', oid_symbol => 'BooleanEqualOperator', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'bool',
+  oprright => 'bool', oprresult => 'bool', oprcom => '=(bool,bool)',
+  oprnegate => '<>(bool,bool)', oprcode => 'booleq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '1694', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'bool', oprright => 'bool', oprresult => 'bool',
+  oprcom => '>=(bool,bool)', oprnegate => '>(bool,bool)', oprcode => 'boolle',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '1695', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'bool', oprright => 'bool', oprresult => 'bool',
+  oprcom => '<=(bool,bool)', oprnegate => '<(bool,bool)', oprcode => 'boolge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+{ oid => '92', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'char',
+  oprright => 'char', oprresult => 'bool', oprcom => '=(char,char)',
+  oprnegate => '<>(char,char)', oprcode => 'chareq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '93', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'name',
+  oprright => 'name', oprresult => 'bool', oprcom => '=(name,name)',
+  oprnegate => '<>(name,name)', oprcode => 'nameeq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '94', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int2',
+  oprright => 'int2', oprresult => 'bool', oprcom => '=(int2,int2)',
+  oprnegate => '<>(int2,int2)', oprcode => 'int2eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '95', descr => 'less than',
+  oprname => '<', oprleft => 'int2', oprright => 'int2', oprresult => 'bool',
+  oprcom => '>(int2,int2)', oprnegate => '>=(int2,int2)', oprcode => 'int2lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '96', oid_symbol => 'Int4EqualOperator', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int4',
+  oprright => 'int4', oprresult => 'bool', oprcom => '=(int4,int4)',
+  oprnegate => '<>(int4,int4)', oprcode => 'int4eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '97', oid_symbol => 'Int4LessOperator', descr => 'less than',
+  oprname => '<', oprleft => 'int4', oprright => 'int4', oprresult => 'bool',
+  oprcom => '>(int4,int4)', oprnegate => '>=(int4,int4)', oprcode => 'int4lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '98', oid_symbol => 'TextEqualOperator', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'text',
+  oprright => 'text', oprresult => 'bool', oprcom => '=(text,text)',
+  oprnegate => '<>(text,text)', oprcode => 'texteq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '3877', descr => 'starts with',
+  oprname => '^@', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprcode => 'starts_with', oprrest => 'prefixsel',
+  oprjoin => 'prefixjoinsel' },
+
+{ oid => '349', descr => 'append element onto end of array',
+  oprname => '||', oprleft => 'anyarray', oprright => 'anyelement',
+  oprresult => 'anyarray', oprcode => 'array_append' },
+{ oid => '374', descr => 'prepend element onto front of array',
+  oprname => '||', oprleft => 'anyelement', oprright => 'anyarray',
+  oprresult => 'anyarray', oprcode => 'array_prepend' },
+{ oid => '375', descr => 'concatenate',
+  oprname => '||', oprleft => 'anyarray', oprright => 'anyarray',
+  oprresult => 'anyarray', oprcode => 'array_cat' },
+
+{ oid => '352', descr => 'equal',
+  oprname => '=', oprcanhash => 't', oprleft => 'xid', oprright => 'xid',
+  oprresult => 'bool', oprcom => '=(xid,xid)', oprnegate => '<>(xid,xid)',
+  oprcode => 'xideq', oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '353', descr => 'equal',
+  oprname => '=', oprleft => 'xid', oprright => 'int4', oprresult => 'bool',
+  oprnegate => '<>(xid,int4)', oprcode => 'xideqint4', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '3315', descr => 'not equal',
+  oprname => '<>', oprleft => 'xid', oprright => 'xid', oprresult => 'bool',
+  oprcom => '<>(xid,xid)', oprnegate => '=(xid,xid)', oprcode => 'xidneq',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '3316', descr => 'not equal',
+  oprname => '<>', oprleft => 'xid', oprright => 'int4', oprresult => 'bool',
+  oprnegate => '=(xid,int4)', oprcode => 'xidneqint4', oprrest => 'neqsel',
+  oprjoin => 'neqjoinsel' },
+{ oid => '388', descr => 'factorial',
+  oprname => '!', oprkind => 'r', oprleft => 'int8', oprright => '0',
+  oprresult => 'numeric', oprcode => 'numeric_fac' },
+{ oid => '389', descr => 'deprecated, use ! instead',
+  oprname => '!!', oprkind => 'l', oprleft => '0', oprright => 'int8',
+  oprresult => 'numeric', oprcode => 'numeric_fac' },
+{ oid => '385', descr => 'equal',
+  oprname => '=', oprcanhash => 't', oprleft => 'cid', oprright => 'cid',
+  oprresult => 'bool', oprcom => '=(cid,cid)', oprcode => 'cideq',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+
+{ oid => '387', oid_symbol => 'TIDEqualOperator', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprleft => 'tid', oprright => 'tid',
+  oprresult => 'bool', oprcom => '=(tid,tid)', oprnegate => '<>(tid,tid)',
+  oprcode => 'tideq', oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '402', descr => 'not equal',
+  oprname => '<>', oprleft => 'tid', oprright => 'tid', oprresult => 'bool',
+  oprcom => '<>(tid,tid)', oprnegate => '=(tid,tid)', oprcode => 'tidne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '2799', oid_symbol => 'TIDLessOperator', descr => 'less than',
+  oprname => '<', oprleft => 'tid', oprright => 'tid', oprresult => 'bool',
+  oprcom => '>(tid,tid)', oprnegate => '>=(tid,tid)', oprcode => 'tidlt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '2800', descr => 'greater than',
+  oprname => '>', oprleft => 'tid', oprright => 'tid', oprresult => 'bool',
+  oprcom => '<(tid,tid)', oprnegate => '<=(tid,tid)', oprcode => 'tidgt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '2801', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'tid', oprright => 'tid', oprresult => 'bool',
+  oprcom => '>=(tid,tid)', oprnegate => '>(tid,tid)', oprcode => 'tidle',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '2802', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'tid', oprright => 'tid', oprresult => 'bool',
+  oprcom => '<=(tid,tid)', oprnegate => '<(tid,tid)', oprcode => 'tidge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+{ oid => '410', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int8',
+  oprright => 'int8', oprresult => 'bool', oprcom => '=(int8,int8)',
+  oprnegate => '<>(int8,int8)', oprcode => 'int8eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '411', descr => 'not equal',
+  oprname => '<>', oprleft => 'int8', oprright => 'int8', oprresult => 'bool',
+  oprcom => '<>(int8,int8)', oprnegate => '=(int8,int8)', oprcode => 'int8ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '412', oid_symbol => 'Int8LessOperator', descr => 'less than',
+  oprname => '<', oprleft => 'int8', oprright => 'int8', oprresult => 'bool',
+  oprcom => '>(int8,int8)', oprnegate => '>=(int8,int8)', oprcode => 'int8lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '413', descr => 'greater than',
+  oprname => '>', oprleft => 'int8', oprright => 'int8', oprresult => 'bool',
+  oprcom => '<(int8,int8)', oprnegate => '<=(int8,int8)', oprcode => 'int8gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '414', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'int8', oprright => 'int8', oprresult => 'bool',
+  oprcom => '>=(int8,int8)', oprnegate => '>(int8,int8)', oprcode => 'int8le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '415', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'int8', oprright => 'int8', oprresult => 'bool',
+  oprcom => '<=(int8,int8)', oprnegate => '<(int8,int8)', oprcode => 'int8ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+{ oid => '416', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int8',
+  oprright => 'int4', oprresult => 'bool', oprcom => '=(int4,int8)',
+  oprnegate => '<>(int8,int4)', oprcode => 'int84eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '417', descr => 'not equal',
+  oprname => '<>', oprleft => 'int8', oprright => 'int4', oprresult => 'bool',
+  oprcom => '<>(int4,int8)', oprnegate => '=(int8,int4)', oprcode => 'int84ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '418', descr => 'less than',
+  oprname => '<', oprleft => 'int8', oprright => 'int4', oprresult => 'bool',
+  oprcom => '>(int4,int8)', oprnegate => '>=(int8,int4)', oprcode => 'int84lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '419', descr => 'greater than',
+  oprname => '>', oprleft => 'int8', oprright => 'int4', oprresult => 'bool',
+  oprcom => '<(int4,int8)', oprnegate => '<=(int8,int4)', oprcode => 'int84gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '420', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'int8', oprright => 'int4', oprresult => 'bool',
+  oprcom => '>=(int4,int8)', oprnegate => '>(int8,int4)', oprcode => 'int84le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '430', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'int8', oprright => 'int4', oprresult => 'bool',
+  oprcom => '<=(int4,int8)', oprnegate => '<(int8,int4)', oprcode => 'int84ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '439', descr => 'modulus',
+  oprname => '%', oprleft => 'int8', oprright => 'int8', oprresult => 'int8',
+  oprcode => 'int8mod' },
+{ oid => '473', descr => 'absolute value',
+  oprname => '@', oprkind => 'l', oprleft => '0', oprright => 'int8',
+  oprresult => 'int8', oprcode => 'int8abs' },
+
+{ oid => '484', descr => 'negate',
+  oprname => '-', oprkind => 'l', oprleft => '0', oprright => 'int8',
+  oprresult => 'int8', oprcode => 'int8um' },
+{ oid => '485', descr => 'is left of',
+  oprname => '<<', oprleft => 'polygon', oprright => 'polygon',
+  oprresult => 'bool', oprcode => 'poly_left', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '486', descr => 'overlaps or is left of',
+  oprname => '&<', oprleft => 'polygon', oprright => 'polygon',
+  oprresult => 'bool', oprcode => 'poly_overleft', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '487', descr => 'overlaps or is right of',
+  oprname => '&>', oprleft => 'polygon', oprright => 'polygon',
+  oprresult => 'bool', oprcode => 'poly_overright', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '488', descr => 'is right of',
+  oprname => '>>', oprleft => 'polygon', oprright => 'polygon',
+  oprresult => 'bool', oprcode => 'poly_right', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '489', descr => 'is contained by',
+  oprname => '<@', oprleft => 'polygon', oprright => 'polygon',
+  oprresult => 'bool', oprcom => '@>(polygon,polygon)',
+  oprcode => 'poly_contained', oprrest => 'contsel', oprjoin => 'contjoinsel' },
+{ oid => '490', descr => 'contains',
+  oprname => '@>', oprleft => 'polygon', oprright => 'polygon',
+  oprresult => 'bool', oprcom => '<@(polygon,polygon)',
+  oprcode => 'poly_contain', oprrest => 'contsel', oprjoin => 'contjoinsel' },
+{ oid => '491', descr => 'same as',
+  oprname => '~=', oprleft => 'polygon', oprright => 'polygon',
+  oprresult => 'bool', oprcom => '~=(polygon,polygon)', oprcode => 'poly_same',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '492', descr => 'overlaps',
+  oprname => '&&', oprleft => 'polygon', oprright => 'polygon',
+  oprresult => 'bool', oprcom => '&&(polygon,polygon)',
+  oprcode => 'poly_overlap', oprrest => 'areasel', oprjoin => 'areajoinsel' },
+{ oid => '493', descr => 'is left of',
+  oprname => '<<', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcode => 'box_left', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '494', descr => 'overlaps or is left of',
+  oprname => '&<', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcode => 'box_overleft', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '495', descr => 'overlaps or is right of',
+  oprname => '&>', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcode => 'box_overright', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '496', descr => 'is right of',
+  oprname => '>>', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcode => 'box_right', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '497', descr => 'is contained by',
+  oprname => '<@', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcom => '@>(box,box)', oprcode => 'box_contained', oprrest => 'contsel',
+  oprjoin => 'contjoinsel' },
+{ oid => '498', descr => 'contains',
+  oprname => '@>', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcom => '<@(box,box)', oprcode => 'box_contain', oprrest => 'contsel',
+  oprjoin => 'contjoinsel' },
+{ oid => '499', descr => 'same as',
+  oprname => '~=', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcom => '~=(box,box)', oprcode => 'box_same', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '500', descr => 'overlaps',
+  oprname => '&&', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcom => '&&(box,box)', oprcode => 'box_overlap', oprrest => 'areasel',
+  oprjoin => 'areajoinsel' },
+{ oid => '501', descr => 'greater than or equal by area',
+  oprname => '>=', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcom => '<=(box,box)', oprnegate => '<(box,box)', oprcode => 'box_ge',
+  oprrest => 'areasel', oprjoin => 'areajoinsel' },
+{ oid => '502', descr => 'greater than by area',
+  oprname => '>', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcom => '<(box,box)', oprnegate => '<=(box,box)', oprcode => 'box_gt',
+  oprrest => 'areasel', oprjoin => 'areajoinsel' },
+{ oid => '503', descr => 'equal by area',
+  oprname => '=', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcom => '=(box,box)', oprcode => 'box_eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '504', descr => 'less than by area',
+  oprname => '<', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcom => '>(box,box)', oprnegate => '>=(box,box)', oprcode => 'box_lt',
+  oprrest => 'areasel', oprjoin => 'areajoinsel' },
+{ oid => '505', descr => 'less than or equal by area',
+  oprname => '<=', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcom => '>=(box,box)', oprnegate => '>(box,box)', oprcode => 'box_le',
+  oprrest => 'areasel', oprjoin => 'areajoinsel' },
+{ oid => '506', descr => 'is above',
+  oprname => '>^', oprleft => 'point', oprright => 'point', oprresult => 'bool',
+  oprcode => 'point_above', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '507', descr => 'is left of',
+  oprname => '<<', oprleft => 'point', oprright => 'point', oprresult => 'bool',
+  oprcode => 'point_left', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '508', descr => 'is right of',
+  oprname => '>>', oprleft => 'point', oprright => 'point', oprresult => 'bool',
+  oprcode => 'point_right', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '509', descr => 'is below',
+  oprname => '<^', oprleft => 'point', oprright => 'point', oprresult => 'bool',
+  oprcode => 'point_below', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '510', descr => 'same as',
+  oprname => '~=', oprleft => 'point', oprright => 'point', oprresult => 'bool',
+  oprcom => '~=(point,point)', oprnegate => '<>(point,point)',
+  oprcode => 'point_eq', oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '511', descr => 'point inside box',
+  oprname => '<@', oprleft => 'point', oprright => 'box', oprresult => 'bool',
+  oprcom => '@>(box,point)', oprcode => 'on_pb', oprrest => 'contsel',
+  oprjoin => 'contjoinsel' },
+{ oid => '433', descr => 'contains',
+  oprname => '@>', oprleft => 'box', oprright => 'point', oprresult => 'bool',
+  oprcom => '<@(point,box)', oprcode => 'box_contain_pt', oprrest => 'contsel',
+  oprjoin => 'contjoinsel' },
+{ oid => '512', descr => 'point within closed path, or point on open path',
+  oprname => '<@', oprleft => 'point', oprright => 'path', oprresult => 'bool',
+  oprcom => '@>(path,point)', oprcode => 'on_ppath' },
+{ oid => '513', descr => 'center of',
+  oprname => '@@', oprkind => 'l', oprleft => '0', oprright => 'box',
+  oprresult => 'point', oprcode => 'box_center' },
+{ oid => '514', descr => 'multiply',
+  oprname => '*', oprleft => 'int4', oprright => 'int4', oprresult => 'int4',
+  oprcom => '*(int4,int4)', oprcode => 'int4mul' },
+{ oid => '517', descr => 'distance between',
+  oprname => '<->', oprleft => 'point', oprright => 'point',
+  oprresult => 'float8', oprcom => '<->(point,point)',
+  oprcode => 'point_distance' },
+{ oid => '518', descr => 'not equal',
+  oprname => '<>', oprleft => 'int4', oprright => 'int4', oprresult => 'bool',
+  oprcom => '<>(int4,int4)', oprnegate => '=(int4,int4)', oprcode => 'int4ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '519', descr => 'not equal',
+  oprname => '<>', oprleft => 'int2', oprright => 'int2', oprresult => 'bool',
+  oprcom => '<>(int2,int2)', oprnegate => '=(int2,int2)', oprcode => 'int2ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '520', descr => 'greater than',
+  oprname => '>', oprleft => 'int2', oprright => 'int2', oprresult => 'bool',
+  oprcom => '<(int2,int2)', oprnegate => '<=(int2,int2)', oprcode => 'int2gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '521', descr => 'greater than',
+  oprname => '>', oprleft => 'int4', oprright => 'int4', oprresult => 'bool',
+  oprcom => '<(int4,int4)', oprnegate => '<=(int4,int4)', oprcode => 'int4gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '522', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'int2', oprright => 'int2', oprresult => 'bool',
+  oprcom => '>=(int2,int2)', oprnegate => '>(int2,int2)', oprcode => 'int2le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '523', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'int4', oprright => 'int4', oprresult => 'bool',
+  oprcom => '>=(int4,int4)', oprnegate => '>(int4,int4)', oprcode => 'int4le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '524', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'int2', oprright => 'int2', oprresult => 'bool',
+  oprcom => '<=(int2,int2)', oprnegate => '<(int2,int2)', oprcode => 'int2ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '525', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'int4', oprright => 'int4', oprresult => 'bool',
+  oprcom => '<=(int4,int4)', oprnegate => '<(int4,int4)', oprcode => 'int4ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '526', descr => 'multiply',
+  oprname => '*', oprleft => 'int2', oprright => 'int2', oprresult => 'int2',
+  oprcom => '*(int2,int2)', oprcode => 'int2mul' },
+{ oid => '527', descr => 'divide',
+  oprname => '/', oprleft => 'int2', oprright => 'int2', oprresult => 'int2',
+  oprcode => 'int2div' },
+{ oid => '528', descr => 'divide',
+  oprname => '/', oprleft => 'int4', oprright => 'int4', oprresult => 'int4',
+  oprcode => 'int4div' },
+{ oid => '529', descr => 'modulus',
+  oprname => '%', oprleft => 'int2', oprright => 'int2', oprresult => 'int2',
+  oprcode => 'int2mod' },
+{ oid => '530', descr => 'modulus',
+  oprname => '%', oprleft => 'int4', oprright => 'int4', oprresult => 'int4',
+  oprcode => 'int4mod' },
+{ oid => '531', descr => 'not equal',
+  oprname => '<>', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprcom => '<>(text,text)', oprnegate => '=(text,text)', oprcode => 'textne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '532', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int2',
+  oprright => 'int4', oprresult => 'bool', oprcom => '=(int4,int2)',
+  oprnegate => '<>(int2,int4)', oprcode => 'int24eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '533', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int4',
+  oprright => 'int2', oprresult => 'bool', oprcom => '=(int2,int4)',
+  oprnegate => '<>(int4,int2)', oprcode => 'int42eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '534', descr => 'less than',
+  oprname => '<', oprleft => 'int2', oprright => 'int4', oprresult => 'bool',
+  oprcom => '>(int4,int2)', oprnegate => '>=(int2,int4)', oprcode => 'int24lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '535', descr => 'less than',
+  oprname => '<', oprleft => 'int4', oprright => 'int2', oprresult => 'bool',
+  oprcom => '>(int2,int4)', oprnegate => '>=(int4,int2)', oprcode => 'int42lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '536', descr => 'greater than',
+  oprname => '>', oprleft => 'int2', oprright => 'int4', oprresult => 'bool',
+  oprcom => '<(int4,int2)', oprnegate => '<=(int2,int4)', oprcode => 'int24gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '537', descr => 'greater than',
+  oprname => '>', oprleft => 'int4', oprright => 'int2', oprresult => 'bool',
+  oprcom => '<(int2,int4)', oprnegate => '<=(int4,int2)', oprcode => 'int42gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '538', descr => 'not equal',
+  oprname => '<>', oprleft => 'int2', oprright => 'int4', oprresult => 'bool',
+  oprcom => '<>(int4,int2)', oprnegate => '=(int2,int4)', oprcode => 'int24ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '539', descr => 'not equal',
+  oprname => '<>', oprleft => 'int4', oprright => 'int2', oprresult => 'bool',
+  oprcom => '<>(int2,int4)', oprnegate => '=(int4,int2)', oprcode => 'int42ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '540', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'int2', oprright => 'int4', oprresult => 'bool',
+  oprcom => '>=(int4,int2)', oprnegate => '>(int2,int4)', oprcode => 'int24le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '541', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'int4', oprright => 'int2', oprresult => 'bool',
+  oprcom => '>=(int2,int4)', oprnegate => '>(int4,int2)', oprcode => 'int42le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '542', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'int2', oprright => 'int4', oprresult => 'bool',
+  oprcom => '<=(int4,int2)', oprnegate => '<(int2,int4)', oprcode => 'int24ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '543', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'int4', oprright => 'int2', oprresult => 'bool',
+  oprcom => '<=(int2,int4)', oprnegate => '<(int4,int2)', oprcode => 'int42ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '544', descr => 'multiply',
+  oprname => '*', oprleft => 'int2', oprright => 'int4', oprresult => 'int4',
+  oprcom => '*(int4,int2)', oprcode => 'int24mul' },
+{ oid => '545', descr => 'multiply',
+  oprname => '*', oprleft => 'int4', oprright => 'int2', oprresult => 'int4',
+  oprcom => '*(int2,int4)', oprcode => 'int42mul' },
+{ oid => '546', descr => 'divide',
+  oprname => '/', oprleft => 'int2', oprright => 'int4', oprresult => 'int4',
+  oprcode => 'int24div' },
+{ oid => '547', descr => 'divide',
+  oprname => '/', oprleft => 'int4', oprright => 'int2', oprresult => 'int4',
+  oprcode => 'int42div' },
+{ oid => '550', descr => 'add',
+  oprname => '+', oprleft => 'int2', oprright => 'int2', oprresult => 'int2',
+  oprcom => '+(int2,int2)', oprcode => 'int2pl' },
+{ oid => '551', descr => 'add',
+  oprname => '+', oprleft => 'int4', oprright => 'int4', oprresult => 'int4',
+  oprcom => '+(int4,int4)', oprcode => 'int4pl' },
+{ oid => '552', descr => 'add',
+  oprname => '+', oprleft => 'int2', oprright => 'int4', oprresult => 'int4',
+  oprcom => '+(int4,int2)', oprcode => 'int24pl' },
+{ oid => '553', descr => 'add',
+  oprname => '+', oprleft => 'int4', oprright => 'int2', oprresult => 'int4',
+  oprcom => '+(int2,int4)', oprcode => 'int42pl' },
+{ oid => '554', descr => 'subtract',
+  oprname => '-', oprleft => 'int2', oprright => 'int2', oprresult => 'int2',
+  oprcode => 'int2mi' },
+{ oid => '555', descr => 'subtract',
+  oprname => '-', oprleft => 'int4', oprright => 'int4', oprresult => 'int4',
+  oprcode => 'int4mi' },
+{ oid => '556', descr => 'subtract',
+  oprname => '-', oprleft => 'int2', oprright => 'int4', oprresult => 'int4',
+  oprcode => 'int24mi' },
+{ oid => '557', descr => 'subtract',
+  oprname => '-', oprleft => 'int4', oprright => 'int2', oprresult => 'int4',
+  oprcode => 'int42mi' },
+{ oid => '558', descr => 'negate',
+  oprname => '-', oprkind => 'l', oprleft => '0', oprright => 'int4',
+  oprresult => 'int4', oprcode => 'int4um' },
+{ oid => '559', descr => 'negate',
+  oprname => '-', oprkind => 'l', oprleft => '0', oprright => 'int2',
+  oprresult => 'int2', oprcode => 'int2um' },
+{ oid => '560', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'abstime',
+  oprright => 'abstime', oprresult => 'bool', oprcom => '=(abstime,abstime)',
+  oprnegate => '<>(abstime,abstime)', oprcode => 'abstimeeq',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '561', descr => 'not equal',
+  oprname => '<>', oprleft => 'abstime', oprright => 'abstime',
+  oprresult => 'bool', oprcom => '<>(abstime,abstime)',
+  oprnegate => '=(abstime,abstime)', oprcode => 'abstimene',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '562', descr => 'less than',
+  oprname => '<', oprleft => 'abstime', oprright => 'abstime',
+  oprresult => 'bool', oprcom => '>(abstime,abstime)',
+  oprnegate => '>=(abstime,abstime)', oprcode => 'abstimelt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '563', descr => 'greater than',
+  oprname => '>', oprleft => 'abstime', oprright => 'abstime',
+  oprresult => 'bool', oprcom => '<(abstime,abstime)',
+  oprnegate => '<=(abstime,abstime)', oprcode => 'abstimegt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '564', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'abstime', oprright => 'abstime',
+  oprresult => 'bool', oprcom => '>=(abstime,abstime)',
+  oprnegate => '>(abstime,abstime)', oprcode => 'abstimele',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '565', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'abstime', oprright => 'abstime',
+  oprresult => 'bool', oprcom => '<=(abstime,abstime)',
+  oprnegate => '<(abstime,abstime)', oprcode => 'abstimege',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '566', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'reltime',
+  oprright => 'reltime', oprresult => 'bool', oprcom => '=(reltime,reltime)',
+  oprnegate => '<>(reltime,reltime)', oprcode => 'reltimeeq',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '567', descr => 'not equal',
+  oprname => '<>', oprleft => 'reltime', oprright => 'reltime',
+  oprresult => 'bool', oprcom => '<>(reltime,reltime)',
+  oprnegate => '=(reltime,reltime)', oprcode => 'reltimene',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '568', descr => 'less than',
+  oprname => '<', oprleft => 'reltime', oprright => 'reltime',
+  oprresult => 'bool', oprcom => '>(reltime,reltime)',
+  oprnegate => '>=(reltime,reltime)', oprcode => 'reltimelt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '569', descr => 'greater than',
+  oprname => '>', oprleft => 'reltime', oprright => 'reltime',
+  oprresult => 'bool', oprcom => '<(reltime,reltime)',
+  oprnegate => '<=(reltime,reltime)', oprcode => 'reltimegt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '570', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'reltime', oprright => 'reltime',
+  oprresult => 'bool', oprcom => '>=(reltime,reltime)',
+  oprnegate => '>(reltime,reltime)', oprcode => 'reltimele',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '571', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'reltime', oprright => 'reltime',
+  oprresult => 'bool', oprcom => '<=(reltime,reltime)',
+  oprnegate => '<(reltime,reltime)', oprcode => 'reltimege',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '572', descr => 'same as',
+  oprname => '~=', oprleft => 'tinterval', oprright => 'tinterval',
+  oprresult => 'bool', oprcom => '~=(tinterval,tinterval)',
+  oprcode => 'tintervalsame', oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '573', descr => 'contains',
+  oprname => '<<', oprleft => 'tinterval', oprright => 'tinterval',
+  oprresult => 'bool', oprcode => 'tintervalct' },
+{ oid => '574', descr => 'overlaps',
+  oprname => '&&', oprleft => 'tinterval', oprright => 'tinterval',
+  oprresult => 'bool', oprcom => '&&(tinterval,tinterval)',
+  oprcode => 'tintervalov' },
+{ oid => '575', descr => 'equal by length',
+  oprname => '#=', oprleft => 'tinterval', oprright => 'reltime',
+  oprresult => 'bool', oprnegate => '#<>(tinterval,reltime)',
+  oprcode => 'tintervalleneq' },
+{ oid => '576', descr => 'not equal by length',
+  oprname => '#<>', oprleft => 'tinterval', oprright => 'reltime',
+  oprresult => 'bool', oprnegate => '#=(tinterval,reltime)',
+  oprcode => 'tintervallenne' },
+{ oid => '577', descr => 'less than by length',
+  oprname => '#<', oprleft => 'tinterval', oprright => 'reltime',
+  oprresult => 'bool', oprnegate => '#>=(tinterval,reltime)',
+  oprcode => 'tintervallenlt' },
+{ oid => '578', descr => 'greater than by length',
+  oprname => '#>', oprleft => 'tinterval', oprright => 'reltime',
+  oprresult => 'bool', oprnegate => '#<=(tinterval,reltime)',
+  oprcode => 'tintervallengt' },
+{ oid => '579', descr => 'less than or equal by length',
+  oprname => '#<=', oprleft => 'tinterval', oprright => 'reltime',
+  oprresult => 'bool', oprnegate => '#>(tinterval,reltime)',
+  oprcode => 'tintervallenle' },
+{ oid => '580', descr => 'greater than or equal by length',
+  oprname => '#>=', oprleft => 'tinterval', oprright => 'reltime',
+  oprresult => 'bool', oprnegate => '#<(tinterval,reltime)',
+  oprcode => 'tintervallenge' },
+{ oid => '581', descr => 'add',
+  oprname => '+', oprleft => 'abstime', oprright => 'reltime',
+  oprresult => 'abstime', oprcode => 'timepl' },
+{ oid => '582', descr => 'subtract',
+  oprname => '-', oprleft => 'abstime', oprright => 'reltime',
+  oprresult => 'abstime', oprcode => 'timemi' },
+{ oid => '583', descr => 'is contained by',
+  oprname => '<?>', oprleft => 'abstime', oprright => 'tinterval',
+  oprresult => 'bool', oprcode => 'intinterval' },
+{ oid => '584', descr => 'negate',
+  oprname => '-', oprkind => 'l', oprleft => '0', oprright => 'float4',
+  oprresult => 'float4', oprcode => 'float4um' },
+{ oid => '585', descr => 'negate',
+  oprname => '-', oprkind => 'l', oprleft => '0', oprright => 'float8',
+  oprresult => 'float8', oprcode => 'float8um' },
+{ oid => '586', descr => 'add',
+  oprname => '+', oprleft => 'float4', oprright => 'float4',
+  oprresult => 'float4', oprcom => '+(float4,float4)', oprcode => 'float4pl' },
+{ oid => '587', descr => 'subtract',
+  oprname => '-', oprleft => 'float4', oprright => 'float4',
+  oprresult => 'float4', oprcode => 'float4mi' },
+{ oid => '588', descr => 'divide',
+  oprname => '/', oprleft => 'float4', oprright => 'float4',
+  oprresult => 'float4', oprcode => 'float4div' },
+{ oid => '589', descr => 'multiply',
+  oprname => '*', oprleft => 'float4', oprright => 'float4',
+  oprresult => 'float4', oprcom => '*(float4,float4)', oprcode => 'float4mul' },
+{ oid => '590', descr => 'absolute value',
+  oprname => '@', oprkind => 'l', oprleft => '0', oprright => 'float4',
+  oprresult => 'float4', oprcode => 'float4abs' },
+{ oid => '591', descr => 'add',
+  oprname => '+', oprleft => 'float8', oprright => 'float8',
+  oprresult => 'float8', oprcom => '+(float8,float8)', oprcode => 'float8pl' },
+{ oid => '592', descr => 'subtract',
+  oprname => '-', oprleft => 'float8', oprright => 'float8',
+  oprresult => 'float8', oprcode => 'float8mi' },
+{ oid => '593', descr => 'divide',
+  oprname => '/', oprleft => 'float8', oprright => 'float8',
+  oprresult => 'float8', oprcode => 'float8div' },
+{ oid => '594', descr => 'multiply',
+  oprname => '*', oprleft => 'float8', oprright => 'float8',
+  oprresult => 'float8', oprcom => '*(float8,float8)', oprcode => 'float8mul' },
+{ oid => '595', descr => 'absolute value',
+  oprname => '@', oprkind => 'l', oprleft => '0', oprright => 'float8',
+  oprresult => 'float8', oprcode => 'float8abs' },
+{ oid => '596', descr => 'square root',
+  oprname => '|/', oprkind => 'l', oprleft => '0', oprright => 'float8',
+  oprresult => 'float8', oprcode => 'dsqrt' },
+{ oid => '597', descr => 'cube root',
+  oprname => '||/', oprkind => 'l', oprleft => '0', oprright => 'float8',
+  oprresult => 'float8', oprcode => 'dcbrt' },
+{ oid => '1284', descr => 'start of interval',
+  oprname => '|', oprkind => 'l', oprleft => '0', oprright => 'tinterval',
+  oprresult => 'abstime', oprcode => 'tintervalstart' },
+{ oid => '606', descr => 'convert to tinterval',
+  oprname => '<#>', oprleft => 'abstime', oprright => 'abstime',
+  oprresult => 'tinterval', oprcode => 'mktinterval' },
+
+{ oid => '607', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'oid',
+  oprright => 'oid', oprresult => 'bool', oprcom => '=(oid,oid)',
+  oprnegate => '<>(oid,oid)', oprcode => 'oideq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '608', descr => 'not equal',
+  oprname => '<>', oprleft => 'oid', oprright => 'oid', oprresult => 'bool',
+  oprcom => '<>(oid,oid)', oprnegate => '=(oid,oid)', oprcode => 'oidne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '609', descr => 'less than',
+  oprname => '<', oprleft => 'oid', oprright => 'oid', oprresult => 'bool',
+  oprcom => '>(oid,oid)', oprnegate => '>=(oid,oid)', oprcode => 'oidlt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '610', descr => 'greater than',
+  oprname => '>', oprleft => 'oid', oprright => 'oid', oprresult => 'bool',
+  oprcom => '<(oid,oid)', oprnegate => '<=(oid,oid)', oprcode => 'oidgt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '611', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'oid', oprright => 'oid', oprresult => 'bool',
+  oprcom => '>=(oid,oid)', oprnegate => '>(oid,oid)', oprcode => 'oidle',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '612', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'oid', oprright => 'oid', oprresult => 'bool',
+  oprcom => '<=(oid,oid)', oprnegate => '<(oid,oid)', oprcode => 'oidge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+{ oid => '644', descr => 'not equal',
+  oprname => '<>', oprleft => 'oidvector', oprright => 'oidvector',
+  oprresult => 'bool', oprcom => '<>(oidvector,oidvector)',
+  oprnegate => '=(oidvector,oidvector)', oprcode => 'oidvectorne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '645', descr => 'less than',
+  oprname => '<', oprleft => 'oidvector', oprright => 'oidvector',
+  oprresult => 'bool', oprcom => '>(oidvector,oidvector)',
+  oprnegate => '>=(oidvector,oidvector)', oprcode => 'oidvectorlt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '646', descr => 'greater than',
+  oprname => '>', oprleft => 'oidvector', oprright => 'oidvector',
+  oprresult => 'bool', oprcom => '<(oidvector,oidvector)',
+  oprnegate => '<=(oidvector,oidvector)', oprcode => 'oidvectorgt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '647', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'oidvector', oprright => 'oidvector',
+  oprresult => 'bool', oprcom => '>=(oidvector,oidvector)',
+  oprnegate => '>(oidvector,oidvector)', oprcode => 'oidvectorle',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '648', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'oidvector', oprright => 'oidvector',
+  oprresult => 'bool', oprcom => '<=(oidvector,oidvector)',
+  oprnegate => '<(oidvector,oidvector)', oprcode => 'oidvectorge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '649', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'oidvector',
+  oprright => 'oidvector', oprresult => 'bool',
+  oprcom => '=(oidvector,oidvector)', oprnegate => '<>(oidvector,oidvector)',
+  oprcode => 'oidvectoreq', oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+
+{ oid => '613', descr => 'distance between',
+  oprname => '<->', oprleft => 'point', oprright => 'line',
+  oprresult => 'float8', oprcode => 'dist_pl' },
+{ oid => '614', descr => 'distance between',
+  oprname => '<->', oprleft => 'point', oprright => 'lseg',
+  oprresult => 'float8', oprcode => 'dist_ps' },
+{ oid => '615', descr => 'distance between',
+  oprname => '<->', oprleft => 'point', oprright => 'box',
+  oprresult => 'float8', oprcode => 'dist_pb' },
+{ oid => '616', descr => 'distance between',
+  oprname => '<->', oprleft => 'lseg', oprright => 'line',
+  oprresult => 'float8', oprcode => 'dist_sl' },
+{ oid => '617', descr => 'distance between',
+  oprname => '<->', oprleft => 'lseg', oprright => 'box', oprresult => 'float8',
+  oprcode => 'dist_sb' },
+{ oid => '618', descr => 'distance between',
+  oprname => '<->', oprleft => 'point', oprright => 'path',
+  oprresult => 'float8', oprcode => 'dist_ppath' },
+
+{ oid => '620', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'float4',
+  oprright => 'float4', oprresult => 'bool', oprcom => '=(float4,float4)',
+  oprnegate => '<>(float4,float4)', oprcode => 'float4eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '621', descr => 'not equal',
+  oprname => '<>', oprleft => 'float4', oprright => 'float4',
+  oprresult => 'bool', oprcom => '<>(float4,float4)',
+  oprnegate => '=(float4,float4)', oprcode => 'float4ne', oprrest => 'neqsel',
+  oprjoin => 'neqjoinsel' },
+{ oid => '622', descr => 'less than',
+  oprname => '<', oprleft => 'float4', oprright => 'float4',
+  oprresult => 'bool', oprcom => '>(float4,float4)',
+  oprnegate => '>=(float4,float4)', oprcode => 'float4lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '623', descr => 'greater than',
+  oprname => '>', oprleft => 'float4', oprright => 'float4',
+  oprresult => 'bool', oprcom => '<(float4,float4)',
+  oprnegate => '<=(float4,float4)', oprcode => 'float4gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '624', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'float4', oprright => 'float4',
+  oprresult => 'bool', oprcom => '>=(float4,float4)',
+  oprnegate => '>(float4,float4)', oprcode => 'float4le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '625', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'float4', oprright => 'float4',
+  oprresult => 'bool', oprcom => '<=(float4,float4)',
+  oprnegate => '<(float4,float4)', oprcode => 'float4ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '630', descr => 'not equal',
+  oprname => '<>', oprleft => 'char', oprright => 'char', oprresult => 'bool',
+  oprcom => '<>(char,char)', oprnegate => '=(char,char)', oprcode => 'charne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+
+{ oid => '631', descr => 'less than',
+  oprname => '<', oprleft => 'char', oprright => 'char', oprresult => 'bool',
+  oprcom => '>(char,char)', oprnegate => '>=(char,char)', oprcode => 'charlt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '632', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'char', oprright => 'char', oprresult => 'bool',
+  oprcom => '>=(char,char)', oprnegate => '>(char,char)', oprcode => 'charle',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '633', descr => 'greater than',
+  oprname => '>', oprleft => 'char', oprright => 'char', oprresult => 'bool',
+  oprcom => '<(char,char)', oprnegate => '<=(char,char)', oprcode => 'chargt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '634', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'char', oprright => 'char', oprresult => 'bool',
+  oprcom => '<=(char,char)', oprnegate => '<(char,char)', oprcode => 'charge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+{ oid => '639', oid_symbol => 'OID_NAME_REGEXEQ_OP',
+  descr => 'matches regular expression, case-sensitive',
+  oprname => '~', oprleft => 'name', oprright => 'text', oprresult => 'bool',
+  oprnegate => '!~(name,text)', oprcode => 'nameregexeq',
+  oprrest => 'regexeqsel', oprjoin => 'regexeqjoinsel' },
+{ oid => '640', descr => 'does not match regular expression, case-sensitive',
+  oprname => '!~', oprleft => 'name', oprright => 'text', oprresult => 'bool',
+  oprnegate => '~(name,text)', oprcode => 'nameregexne',
+  oprrest => 'regexnesel', oprjoin => 'regexnejoinsel' },
+{ oid => '641', oid_symbol => 'OID_TEXT_REGEXEQ_OP',
+  descr => 'matches regular expression, case-sensitive',
+  oprname => '~', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprnegate => '!~(text,text)', oprcode => 'textregexeq',
+  oprrest => 'regexeqsel', oprjoin => 'regexeqjoinsel' },
+{ oid => '642', descr => 'does not match regular expression, case-sensitive',
+  oprname => '!~', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprnegate => '~(text,text)', oprcode => 'textregexne',
+  oprrest => 'regexnesel', oprjoin => 'regexnejoinsel' },
+{ oid => '643', descr => 'not equal',
+  oprname => '<>', oprleft => 'name', oprright => 'name', oprresult => 'bool',
+  oprcom => '<>(name,name)', oprnegate => '=(name,name)', oprcode => 'namene',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '654', descr => 'concatenate',
+  oprname => '||', oprleft => 'text', oprright => 'text', oprresult => 'text',
+  oprcode => 'textcat' },
+
+{ oid => '660', descr => 'less than',
+  oprname => '<', oprleft => 'name', oprright => 'name', oprresult => 'bool',
+  oprcom => '>(name,name)', oprnegate => '>=(name,name)', oprcode => 'namelt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '661', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'name', oprright => 'name', oprresult => 'bool',
+  oprcom => '>=(name,name)', oprnegate => '>(name,name)', oprcode => 'namele',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '662', descr => 'greater than',
+  oprname => '>', oprleft => 'name', oprright => 'name', oprresult => 'bool',
+  oprcom => '<(name,name)', oprnegate => '<=(name,name)', oprcode => 'namegt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '663', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'name', oprright => 'name', oprresult => 'bool',
+  oprcom => '<=(name,name)', oprnegate => '<(name,name)', oprcode => 'namege',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '664', descr => 'less than',
+  oprname => '<', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprcom => '>(text,text)', oprnegate => '>=(text,text)', oprcode => 'text_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '665', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprcom => '>=(text,text)', oprnegate => '>(text,text)', oprcode => 'text_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '666', descr => 'greater than',
+  oprname => '>', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprcom => '<(text,text)', oprnegate => '<=(text,text)', oprcode => 'text_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '667', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprcom => '<=(text,text)', oprnegate => '<(text,text)', oprcode => 'text_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+{ oid => '670', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'float8',
+  oprright => 'float8', oprresult => 'bool', oprcom => '=(float8,float8)',
+  oprnegate => '<>(float8,float8)', oprcode => 'float8eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '671', descr => 'not equal',
+  oprname => '<>', oprleft => 'float8', oprright => 'float8',
+  oprresult => 'bool', oprcom => '<>(float8,float8)',
+  oprnegate => '=(float8,float8)', oprcode => 'float8ne', oprrest => 'neqsel',
+  oprjoin => 'neqjoinsel' },
+{ oid => '672', oid_symbol => 'Float8LessOperator', descr => 'less than',
+  oprname => '<', oprleft => 'float8', oprright => 'float8',
+  oprresult => 'bool', oprcom => '>(float8,float8)',
+  oprnegate => '>=(float8,float8)', oprcode => 'float8lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '673', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'float8', oprright => 'float8',
+  oprresult => 'bool', oprcom => '>=(float8,float8)',
+  oprnegate => '>(float8,float8)', oprcode => 'float8le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '674', descr => 'greater than',
+  oprname => '>', oprleft => 'float8', oprright => 'float8',
+  oprresult => 'bool', oprcom => '<(float8,float8)',
+  oprnegate => '<=(float8,float8)', oprcode => 'float8gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '675', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'float8', oprright => 'float8',
+  oprresult => 'bool', oprcom => '<=(float8,float8)',
+  oprnegate => '<(float8,float8)', oprcode => 'float8ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+{ oid => '682', descr => 'absolute value',
+  oprname => '@', oprkind => 'l', oprleft => '0', oprright => 'int2',
+  oprresult => 'int2', oprcode => 'int2abs' },
+{ oid => '684', descr => 'add',
+  oprname => '+', oprleft => 'int8', oprright => 'int8', oprresult => 'int8',
+  oprcom => '+(int8,int8)', oprcode => 'int8pl' },
+{ oid => '685', descr => 'subtract',
+  oprname => '-', oprleft => 'int8', oprright => 'int8', oprresult => 'int8',
+  oprcode => 'int8mi' },
+{ oid => '686', descr => 'multiply',
+  oprname => '*', oprleft => 'int8', oprright => 'int8', oprresult => 'int8',
+  oprcom => '*(int8,int8)', oprcode => 'int8mul' },
+{ oid => '687', descr => 'divide',
+  oprname => '/', oprleft => 'int8', oprright => 'int8', oprresult => 'int8',
+  oprcode => 'int8div' },
+
+{ oid => '688', descr => 'add',
+  oprname => '+', oprleft => 'int8', oprright => 'int4', oprresult => 'int8',
+  oprcom => '+(int4,int8)', oprcode => 'int84pl' },
+{ oid => '689', descr => 'subtract',
+  oprname => '-', oprleft => 'int8', oprright => 'int4', oprresult => 'int8',
+  oprcode => 'int84mi' },
+{ oid => '690', descr => 'multiply',
+  oprname => '*', oprleft => 'int8', oprright => 'int4', oprresult => 'int8',
+  oprcom => '*(int4,int8)', oprcode => 'int84mul' },
+{ oid => '691', descr => 'divide',
+  oprname => '/', oprleft => 'int8', oprright => 'int4', oprresult => 'int8',
+  oprcode => 'int84div' },
+{ oid => '692', descr => 'add',
+  oprname => '+', oprleft => 'int4', oprright => 'int8', oprresult => 'int8',
+  oprcom => '+(int8,int4)', oprcode => 'int48pl' },
+{ oid => '693', descr => 'subtract',
+  oprname => '-', oprleft => 'int4', oprright => 'int8', oprresult => 'int8',
+  oprcode => 'int48mi' },
+{ oid => '694', descr => 'multiply',
+  oprname => '*', oprleft => 'int4', oprright => 'int8', oprresult => 'int8',
+  oprcom => '*(int8,int4)', oprcode => 'int48mul' },
+{ oid => '695', descr => 'divide',
+  oprname => '/', oprleft => 'int4', oprright => 'int8', oprresult => 'int8',
+  oprcode => 'int48div' },
+
+{ oid => '818', descr => 'add',
+  oprname => '+', oprleft => 'int8', oprright => 'int2', oprresult => 'int8',
+  oprcom => '+(int2,int8)', oprcode => 'int82pl' },
+{ oid => '819', descr => 'subtract',
+  oprname => '-', oprleft => 'int8', oprright => 'int2', oprresult => 'int8',
+  oprcode => 'int82mi' },
+{ oid => '820', descr => 'multiply',
+  oprname => '*', oprleft => 'int8', oprright => 'int2', oprresult => 'int8',
+  oprcom => '*(int2,int8)', oprcode => 'int82mul' },
+{ oid => '821', descr => 'divide',
+  oprname => '/', oprleft => 'int8', oprright => 'int2', oprresult => 'int8',
+  oprcode => 'int82div' },
+{ oid => '822', descr => 'add',
+  oprname => '+', oprleft => 'int2', oprright => 'int8', oprresult => 'int8',
+  oprcom => '+(int8,int2)', oprcode => 'int28pl' },
+{ oid => '823', descr => 'subtract',
+  oprname => '-', oprleft => 'int2', oprright => 'int8', oprresult => 'int8',
+  oprcode => 'int28mi' },
+{ oid => '824', descr => 'multiply',
+  oprname => '*', oprleft => 'int2', oprright => 'int8', oprresult => 'int8',
+  oprcom => '*(int8,int2)', oprcode => 'int28mul' },
+{ oid => '825', descr => 'divide',
+  oprname => '/', oprleft => 'int2', oprright => 'int8', oprresult => 'int8',
+  oprcode => 'int28div' },
+
+{ oid => '706', descr => 'distance between',
+  oprname => '<->', oprleft => 'box', oprright => 'box', oprresult => 'float8',
+  oprcom => '<->(box,box)', oprcode => 'box_distance' },
+{ oid => '707', descr => 'distance between',
+  oprname => '<->', oprleft => 'path', oprright => 'path',
+  oprresult => 'float8', oprcom => '<->(path,path)',
+  oprcode => 'path_distance' },
+{ oid => '708', descr => 'distance between',
+  oprname => '<->', oprleft => 'line', oprright => 'line',
+  oprresult => 'float8', oprcom => '<->(line,line)',
+  oprcode => 'line_distance' },
+{ oid => '709', descr => 'distance between',
+  oprname => '<->', oprleft => 'lseg', oprright => 'lseg',
+  oprresult => 'float8', oprcom => '<->(lseg,lseg)',
+  oprcode => 'lseg_distance' },
+{ oid => '712', descr => 'distance between',
+  oprname => '<->', oprleft => 'polygon', oprright => 'polygon',
+  oprresult => 'float8', oprcom => '<->(polygon,polygon)',
+  oprcode => 'poly_distance' },
+
+{ oid => '713', descr => 'not equal',
+  oprname => '<>', oprleft => 'point', oprright => 'point', oprresult => 'bool',
+  oprcom => '<>(point,point)', oprnegate => '~=(point,point)',
+  oprcode => 'point_ne', oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+
+# add translation/rotation/scaling operators for geometric types. - thomas 97/05/10
+{ oid => '731', descr => 'add points (translate)',
+  oprname => '+', oprleft => 'point', oprright => 'point', oprresult => 'point',
+  oprcom => '+(point,point)', oprcode => 'point_add' },
+{ oid => '732', descr => 'subtract points (translate)',
+  oprname => '-', oprleft => 'point', oprright => 'point', oprresult => 'point',
+  oprcode => 'point_sub' },
+{ oid => '733', descr => 'multiply points (scale/rotate)',
+  oprname => '*', oprleft => 'point', oprright => 'point', oprresult => 'point',
+  oprcom => '*(point,point)', oprcode => 'point_mul' },
+{ oid => '734', descr => 'divide points (scale/rotate)',
+  oprname => '/', oprleft => 'point', oprright => 'point', oprresult => 'point',
+  oprcode => 'point_div' },
+{ oid => '735', descr => 'concatenate',
+  oprname => '+', oprleft => 'path', oprright => 'path', oprresult => 'path',
+  oprcom => '+(path,path)', oprcode => 'path_add' },
+{ oid => '736', descr => 'add (translate path)',
+  oprname => '+', oprleft => 'path', oprright => 'point', oprresult => 'path',
+  oprcode => 'path_add_pt' },
+{ oid => '737', descr => 'subtract (translate path)',
+  oprname => '-', oprleft => 'path', oprright => 'point', oprresult => 'path',
+  oprcode => 'path_sub_pt' },
+{ oid => '738', descr => 'multiply (rotate/scale path)',
+  oprname => '*', oprleft => 'path', oprright => 'point', oprresult => 'path',
+  oprcode => 'path_mul_pt' },
+{ oid => '739', descr => 'divide (rotate/scale path)',
+  oprname => '/', oprleft => 'path', oprright => 'point', oprresult => 'path',
+  oprcode => 'path_div_pt' },
+{ oid => '755', descr => 'contains',
+  oprname => '@>', oprleft => 'path', oprright => 'point', oprresult => 'bool',
+  oprcom => '<@(point,path)', oprcode => 'path_contain_pt' },
+{ oid => '756', descr => 'is contained by',
+  oprname => '<@', oprleft => 'point', oprright => 'polygon',
+  oprresult => 'bool', oprcom => '@>(polygon,point)',
+  oprcode => 'pt_contained_poly', oprrest => 'contsel',
+  oprjoin => 'contjoinsel' },
+{ oid => '757', descr => 'contains',
+  oprname => '@>', oprleft => 'polygon', oprright => 'point',
+  oprresult => 'bool', oprcom => '<@(point,polygon)',
+  oprcode => 'poly_contain_pt', oprrest => 'contsel',
+  oprjoin => 'contjoinsel' },
+{ oid => '758', descr => 'is contained by',
+  oprname => '<@', oprleft => 'point', oprright => 'circle',
+  oprresult => 'bool', oprcom => '@>(circle,point)',
+  oprcode => 'pt_contained_circle', oprrest => 'contsel',
+  oprjoin => 'contjoinsel' },
+{ oid => '759', descr => 'contains',
+  oprname => '@>', oprleft => 'circle', oprright => 'point',
+  oprresult => 'bool', oprcom => '<@(point,circle)',
+  oprcode => 'circle_contain_pt', oprrest => 'contsel',
+  oprjoin => 'contjoinsel' },
+
+{ oid => '773', descr => 'absolute value',
+  oprname => '@', oprkind => 'l', oprleft => '0', oprright => 'int4',
+  oprresult => 'int4', oprcode => 'int4abs' },
+
+# additional operators for geometric types - thomas 1997-07-09
+{ oid => '792', descr => 'equal',
+  oprname => '=', oprleft => 'path', oprright => 'path', oprresult => 'bool',
+  oprcom => '=(path,path)', oprcode => 'path_n_eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '793', descr => 'less than',
+  oprname => '<', oprleft => 'path', oprright => 'path', oprresult => 'bool',
+  oprcom => '>(path,path)', oprcode => 'path_n_lt' },
+{ oid => '794', descr => 'greater than',
+  oprname => '>', oprleft => 'path', oprright => 'path', oprresult => 'bool',
+  oprcom => '<(path,path)', oprcode => 'path_n_gt' },
+{ oid => '795', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'path', oprright => 'path', oprresult => 'bool',
+  oprcom => '>=(path,path)', oprcode => 'path_n_le' },
+{ oid => '796', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'path', oprright => 'path', oprresult => 'bool',
+  oprcom => '<=(path,path)', oprcode => 'path_n_ge' },
+{ oid => '797', descr => 'number of points',
+  oprname => '#', oprkind => 'l', oprleft => '0', oprright => 'path',
+  oprresult => 'int4', oprcode => 'path_npoints' },
+{ oid => '798', descr => 'intersect',
+  oprname => '?#', oprleft => 'path', oprright => 'path', oprresult => 'bool',
+  oprcode => 'path_inter' },
+{ oid => '799', descr => 'sum of path segment lengths',
+  oprname => '@-@', oprkind => 'l', oprleft => '0', oprright => 'path',
+  oprresult => 'float8', oprcode => 'path_length' },
+{ oid => '800', descr => 'is above (allows touching)',
+  oprname => '>^', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcode => 'box_above_eq', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '801', descr => 'is below (allows touching)',
+  oprname => '<^', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcode => 'box_below_eq', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '802', descr => 'deprecated, use && instead',
+  oprname => '?#', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcode => 'box_overlap', oprrest => 'areasel', oprjoin => 'areajoinsel' },
+{ oid => '803', descr => 'box intersection',
+  oprname => '#', oprleft => 'box', oprright => 'box', oprresult => 'box',
+  oprcode => 'box_intersect' },
+{ oid => '804', descr => 'add point to box (translate)',
+  oprname => '+', oprleft => 'box', oprright => 'point', oprresult => 'box',
+  oprcode => 'box_add' },
+{ oid => '805', descr => 'subtract point from box (translate)',
+  oprname => '-', oprleft => 'box', oprright => 'point', oprresult => 'box',
+  oprcode => 'box_sub' },
+{ oid => '806', descr => 'multiply box by point (scale)',
+  oprname => '*', oprleft => 'box', oprright => 'point', oprresult => 'box',
+  oprcode => 'box_mul' },
+{ oid => '807', descr => 'divide box by point (scale)',
+  oprname => '/', oprleft => 'box', oprright => 'point', oprresult => 'box',
+  oprcode => 'box_div' },
+{ oid => '808', descr => 'horizontally aligned',
+  oprname => '?-', oprleft => 'point', oprright => 'point', oprresult => 'bool',
+  oprcom => '?-(point,point)', oprcode => 'point_horiz' },
+{ oid => '809', descr => 'vertically aligned',
+  oprname => '?|', oprleft => 'point', oprright => 'point', oprresult => 'bool',
+  oprcom => '?|(point,point)', oprcode => 'point_vert' },
+
+{ oid => '811', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprleft => 'tinterval',
+  oprright => 'tinterval', oprresult => 'bool',
+  oprcom => '=(tinterval,tinterval)', oprnegate => '<>(tinterval,tinterval)',
+  oprcode => 'tintervaleq', oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '812', descr => 'not equal',
+  oprname => '<>', oprleft => 'tinterval', oprright => 'tinterval',
+  oprresult => 'bool', oprcom => '<>(tinterval,tinterval)',
+  oprnegate => '=(tinterval,tinterval)', oprcode => 'tintervalne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '813', descr => 'less than',
+  oprname => '<', oprleft => 'tinterval', oprright => 'tinterval',
+  oprresult => 'bool', oprcom => '>(tinterval,tinterval)',
+  oprnegate => '>=(tinterval,tinterval)', oprcode => 'tintervallt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '814', descr => 'greater than',
+  oprname => '>', oprleft => 'tinterval', oprright => 'tinterval',
+  oprresult => 'bool', oprcom => '<(tinterval,tinterval)',
+  oprnegate => '<=(tinterval,tinterval)', oprcode => 'tintervalgt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '815', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'tinterval', oprright => 'tinterval',
+  oprresult => 'bool', oprcom => '>=(tinterval,tinterval)',
+  oprnegate => '>(tinterval,tinterval)', oprcode => 'tintervalle',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '816', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'tinterval', oprright => 'tinterval',
+  oprresult => 'bool', oprcom => '<=(tinterval,tinterval)',
+  oprnegate => '<(tinterval,tinterval)', oprcode => 'tintervalge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+{ oid => '843', descr => 'multiply',
+  oprname => '*', oprleft => 'money', oprright => 'float4',
+  oprresult => 'money', oprcom => '*(float4,money)',
+  oprcode => 'cash_mul_flt4' },
+{ oid => '844', descr => 'divide',
+  oprname => '/', oprleft => 'money', oprright => 'float4',
+  oprresult => 'money', oprcode => 'cash_div_flt4' },
+{ oid => '845', descr => 'multiply',
+  oprname => '*', oprleft => 'float4', oprright => 'money',
+  oprresult => 'money', oprcom => '*(money,float4)',
+  oprcode => 'flt4_mul_cash' },
+
+{ oid => '900', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprleft => 'money', oprright => 'money',
+  oprresult => 'bool', oprcom => '=(money,money)',
+  oprnegate => '<>(money,money)', oprcode => 'cash_eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '901', descr => 'not equal',
+  oprname => '<>', oprleft => 'money', oprright => 'money', oprresult => 'bool',
+  oprcom => '<>(money,money)', oprnegate => '=(money,money)',
+  oprcode => 'cash_ne', oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '902', descr => 'less than',
+  oprname => '<', oprleft => 'money', oprright => 'money', oprresult => 'bool',
+  oprcom => '>(money,money)', oprnegate => '>=(money,money)',
+  oprcode => 'cash_lt', oprrest => 'scalarltsel',
+  oprjoin => 'scalarltjoinsel' },
+{ oid => '903', descr => 'greater than',
+  oprname => '>', oprleft => 'money', oprright => 'money', oprresult => 'bool',
+  oprcom => '<(money,money)', oprnegate => '<=(money,money)',
+  oprcode => 'cash_gt', oprrest => 'scalargtsel',
+  oprjoin => 'scalargtjoinsel' },
+{ oid => '904', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'money', oprright => 'money', oprresult => 'bool',
+  oprcom => '>=(money,money)', oprnegate => '>(money,money)',
+  oprcode => 'cash_le', oprrest => 'scalarlesel',
+  oprjoin => 'scalarlejoinsel' },
+{ oid => '905', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'money', oprright => 'money', oprresult => 'bool',
+  oprcom => '<=(money,money)', oprnegate => '<(money,money)',
+  oprcode => 'cash_ge', oprrest => 'scalargesel',
+  oprjoin => 'scalargejoinsel' },
+{ oid => '906', descr => 'add',
+  oprname => '+', oprleft => 'money', oprright => 'money', oprresult => 'money',
+  oprcom => '+(money,money)', oprcode => 'cash_pl' },
+{ oid => '907', descr => 'subtract',
+  oprname => '-', oprleft => 'money', oprright => 'money', oprresult => 'money',
+  oprcode => 'cash_mi' },
+{ oid => '908', descr => 'multiply',
+  oprname => '*', oprleft => 'money', oprright => 'float8',
+  oprresult => 'money', oprcom => '*(float8,money)',
+  oprcode => 'cash_mul_flt8' },
+{ oid => '909', descr => 'divide',
+  oprname => '/', oprleft => 'money', oprright => 'float8',
+  oprresult => 'money', oprcode => 'cash_div_flt8' },
+{ oid => '3346', descr => 'multiply',
+  oprname => '*', oprleft => 'money', oprright => 'int8', oprresult => 'money',
+  oprcom => '*(int8,money)', oprcode => 'cash_mul_int8' },
+{ oid => '3347', descr => 'divide',
+  oprname => '/', oprleft => 'money', oprright => 'int8', oprresult => 'money',
+  oprcode => 'cash_div_int8' },
+{ oid => '912', descr => 'multiply',
+  oprname => '*', oprleft => 'money', oprright => 'int4', oprresult => 'money',
+  oprcom => '*(int4,money)', oprcode => 'cash_mul_int4' },
+{ oid => '913', descr => 'divide',
+  oprname => '/', oprleft => 'money', oprright => 'int4', oprresult => 'money',
+  oprcode => 'cash_div_int4' },
+{ oid => '914', descr => 'multiply',
+  oprname => '*', oprleft => 'money', oprright => 'int2', oprresult => 'money',
+  oprcom => '*(int2,money)', oprcode => 'cash_mul_int2' },
+{ oid => '915', descr => 'divide',
+  oprname => '/', oprleft => 'money', oprright => 'int2', oprresult => 'money',
+  oprcode => 'cash_div_int2' },
+{ oid => '916', descr => 'multiply',
+  oprname => '*', oprleft => 'float8', oprright => 'money',
+  oprresult => 'money', oprcom => '*(money,float8)',
+  oprcode => 'flt8_mul_cash' },
+{ oid => '3349', descr => 'multiply',
+  oprname => '*', oprleft => 'int8', oprright => 'money', oprresult => 'money',
+  oprcom => '*(money,int8)', oprcode => 'int8_mul_cash' },
+{ oid => '917', descr => 'multiply',
+  oprname => '*', oprleft => 'int4', oprright => 'money', oprresult => 'money',
+  oprcom => '*(money,int4)', oprcode => 'int4_mul_cash' },
+{ oid => '918', descr => 'multiply',
+  oprname => '*', oprleft => 'int2', oprright => 'money', oprresult => 'money',
+  oprcom => '*(money,int2)', oprcode => 'int2_mul_cash' },
+{ oid => '3825', descr => 'divide',
+  oprname => '/', oprleft => 'money', oprright => 'money',
+  oprresult => 'float8', oprcode => 'cash_div_cash' },
+
+{ oid => '965', descr => 'exponentiation',
+  oprname => '^', oprleft => 'float8', oprright => 'float8',
+  oprresult => 'float8', oprcode => 'dpow' },
+{ oid => '966', descr => 'add/update ACL item',
+  oprname => '+', oprleft => '_aclitem', oprright => 'aclitem',
+  oprresult => '_aclitem', oprcode => 'aclinsert' },
+{ oid => '967', descr => 'remove ACL item',
+  oprname => '-', oprleft => '_aclitem', oprright => 'aclitem',
+  oprresult => '_aclitem', oprcode => 'aclremove' },
+{ oid => '968', descr => 'contains',
+  oprname => '@>', oprleft => '_aclitem', oprright => 'aclitem',
+  oprresult => 'bool', oprcode => 'aclcontains' },
+{ oid => '974', descr => 'equal',
+  oprname => '=', oprcanhash => 't', oprleft => 'aclitem',
+  oprright => 'aclitem', oprresult => 'bool', oprcom => '=(aclitem,aclitem)',
+  oprcode => 'aclitemeq', oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+
+# additional geometric operators - thomas 1997-07-09
+{ oid => '969', descr => 'center of',
+  oprname => '@@', oprkind => 'l', oprleft => '0', oprright => 'lseg',
+  oprresult => 'point', oprcode => 'lseg_center' },
+{ oid => '970', descr => 'center of',
+  oprname => '@@', oprkind => 'l', oprleft => '0', oprright => 'path',
+  oprresult => 'point', oprcode => 'path_center' },
+{ oid => '971', descr => 'center of',
+  oprname => '@@', oprkind => 'l', oprleft => '0', oprright => 'polygon',
+  oprresult => 'point', oprcode => 'poly_center' },
+
+{ oid => '1054', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'bpchar',
+  oprright => 'bpchar', oprresult => 'bool', oprcom => '=(bpchar,bpchar)',
+  oprnegate => '<>(bpchar,bpchar)', oprcode => 'bpchareq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+
+{ oid => '1055', oid_symbol => 'OID_BPCHAR_REGEXEQ_OP',
+  descr => 'matches regular expression, case-sensitive',
+  oprname => '~', oprleft => 'bpchar', oprright => 'text', oprresult => 'bool',
+  oprnegate => '!~(bpchar,text)', oprcode => 'bpcharregexeq',
+  oprrest => 'regexeqsel', oprjoin => 'regexeqjoinsel' },
+{ oid => '1056', descr => 'does not match regular expression, case-sensitive',
+  oprname => '!~', oprleft => 'bpchar', oprright => 'text', oprresult => 'bool',
+  oprnegate => '~(bpchar,text)', oprcode => 'bpcharregexne',
+  oprrest => 'regexnesel', oprjoin => 'regexnejoinsel' },
+{ oid => '1057', descr => 'not equal',
+  oprname => '<>', oprleft => 'bpchar', oprright => 'bpchar',
+  oprresult => 'bool', oprcom => '<>(bpchar,bpchar)',
+  oprnegate => '=(bpchar,bpchar)', oprcode => 'bpcharne', oprrest => 'neqsel',
+  oprjoin => 'neqjoinsel' },
+{ oid => '1058', descr => 'less than',
+  oprname => '<', oprleft => 'bpchar', oprright => 'bpchar',
+  oprresult => 'bool', oprcom => '>(bpchar,bpchar)',
+  oprnegate => '>=(bpchar,bpchar)', oprcode => 'bpcharlt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '1059', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'bpchar', oprright => 'bpchar',
+  oprresult => 'bool', oprcom => '>=(bpchar,bpchar)',
+  oprnegate => '>(bpchar,bpchar)', oprcode => 'bpcharle',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '1060', descr => 'greater than',
+  oprname => '>', oprleft => 'bpchar', oprright => 'bpchar',
+  oprresult => 'bool', oprcom => '<(bpchar,bpchar)',
+  oprnegate => '<=(bpchar,bpchar)', oprcode => 'bpchargt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '1061', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'bpchar', oprright => 'bpchar',
+  oprresult => 'bool', oprcom => '<=(bpchar,bpchar)',
+  oprnegate => '<(bpchar,bpchar)', oprcode => 'bpcharge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+# generic array comparison operators
+{ oid => '1070', oid_symbol => 'ARRAY_EQ_OP', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'anyarray',
+  oprright => 'anyarray', oprresult => 'bool', oprcom => '=(anyarray,anyarray)',
+  oprnegate => '<>(anyarray,anyarray)', oprcode => 'array_eq',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '1071', descr => 'not equal',
+  oprname => '<>', oprleft => 'anyarray', oprright => 'anyarray',
+  oprresult => 'bool', oprcom => '<>(anyarray,anyarray)',
+  oprnegate => '=(anyarray,anyarray)', oprcode => 'array_ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '1072', oid_symbol => 'ARRAY_LT_OP', descr => 'less than',
+  oprname => '<', oprleft => 'anyarray', oprright => 'anyarray',
+  oprresult => 'bool', oprcom => '>(anyarray,anyarray)',
+  oprnegate => '>=(anyarray,anyarray)', oprcode => 'array_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '1073', oid_symbol => 'ARRAY_GT_OP', descr => 'greater than',
+  oprname => '>', oprleft => 'anyarray', oprright => 'anyarray',
+  oprresult => 'bool', oprcom => '<(anyarray,anyarray)',
+  oprnegate => '<=(anyarray,anyarray)', oprcode => 'array_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '1074', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'anyarray', oprright => 'anyarray',
+  oprresult => 'bool', oprcom => '>=(anyarray,anyarray)',
+  oprnegate => '>(anyarray,anyarray)', oprcode => 'array_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '1075', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'anyarray', oprright => 'anyarray',
+  oprresult => 'bool', oprcom => '<=(anyarray,anyarray)',
+  oprnegate => '<(anyarray,anyarray)', oprcode => 'array_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+# date operators
+{ oid => '1076', descr => 'add',
+  oprname => '+', oprleft => 'date', oprright => 'interval',
+  oprresult => 'timestamp', oprcom => '+(interval,date)',
+  oprcode => 'date_pl_interval' },
+{ oid => '1077', descr => 'subtract',
+  oprname => '-', oprleft => 'date', oprright => 'interval',
+  oprresult => 'timestamp', oprcode => 'date_mi_interval' },
+{ oid => '1093', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'date',
+  oprright => 'date', oprresult => 'bool', oprcom => '=(date,date)',
+  oprnegate => '<>(date,date)', oprcode => 'date_eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '1094', descr => 'not equal',
+  oprname => '<>', oprleft => 'date', oprright => 'date', oprresult => 'bool',
+  oprcom => '<>(date,date)', oprnegate => '=(date,date)', oprcode => 'date_ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '1095', descr => 'less than',
+  oprname => '<', oprleft => 'date', oprright => 'date', oprresult => 'bool',
+  oprcom => '>(date,date)', oprnegate => '>=(date,date)', oprcode => 'date_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '1096', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'date', oprright => 'date', oprresult => 'bool',
+  oprcom => '>=(date,date)', oprnegate => '>(date,date)', oprcode => 'date_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '1097', descr => 'greater than',
+  oprname => '>', oprleft => 'date', oprright => 'date', oprresult => 'bool',
+  oprcom => '<(date,date)', oprnegate => '<=(date,date)', oprcode => 'date_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '1098', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'date', oprright => 'date', oprresult => 'bool',
+  oprcom => '<=(date,date)', oprnegate => '<(date,date)', oprcode => 'date_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '1099', descr => 'subtract',
+  oprname => '-', oprleft => 'date', oprright => 'date', oprresult => 'int4',
+  oprcode => 'date_mi' },
+{ oid => '1100', descr => 'add',
+  oprname => '+', oprleft => 'date', oprright => 'int4', oprresult => 'date',
+  oprcom => '+(int4,date)', oprcode => 'date_pli' },
+{ oid => '1101', descr => 'subtract',
+  oprname => '-', oprleft => 'date', oprright => 'int4', oprresult => 'date',
+  oprcode => 'date_mii' },
+
+# time operators
+{ oid => '1108', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'time',
+  oprright => 'time', oprresult => 'bool', oprcom => '=(time,time)',
+  oprnegate => '<>(time,time)', oprcode => 'time_eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '1109', descr => 'not equal',
+  oprname => '<>', oprleft => 'time', oprright => 'time', oprresult => 'bool',
+  oprcom => '<>(time,time)', oprnegate => '=(time,time)', oprcode => 'time_ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '1110', descr => 'less than',
+  oprname => '<', oprleft => 'time', oprright => 'time', oprresult => 'bool',
+  oprcom => '>(time,time)', oprnegate => '>=(time,time)', oprcode => 'time_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '1111', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'time', oprright => 'time', oprresult => 'bool',
+  oprcom => '>=(time,time)', oprnegate => '>(time,time)', oprcode => 'time_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '1112', descr => 'greater than',
+  oprname => '>', oprleft => 'time', oprright => 'time', oprresult => 'bool',
+  oprcom => '<(time,time)', oprnegate => '<=(time,time)', oprcode => 'time_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '1113', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'time', oprright => 'time', oprresult => 'bool',
+  oprcom => '<=(time,time)', oprnegate => '<(time,time)', oprcode => 'time_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+# timetz operators
+{ oid => '1550', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'timetz',
+  oprright => 'timetz', oprresult => 'bool', oprcom => '=(timetz,timetz)',
+  oprnegate => '<>(timetz,timetz)', oprcode => 'timetz_eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '1551', descr => 'not equal',
+  oprname => '<>', oprleft => 'timetz', oprright => 'timetz',
+  oprresult => 'bool', oprcom => '<>(timetz,timetz)',
+  oprnegate => '=(timetz,timetz)', oprcode => 'timetz_ne', oprrest => 'neqsel',
+  oprjoin => 'neqjoinsel' },
+{ oid => '1552', descr => 'less than',
+  oprname => '<', oprleft => 'timetz', oprright => 'timetz',
+  oprresult => 'bool', oprcom => '>(timetz,timetz)',
+  oprnegate => '>=(timetz,timetz)', oprcode => 'timetz_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '1553', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'timetz', oprright => 'timetz',
+  oprresult => 'bool', oprcom => '>=(timetz,timetz)',
+  oprnegate => '>(timetz,timetz)', oprcode => 'timetz_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '1554', descr => 'greater than',
+  oprname => '>', oprleft => 'timetz', oprright => 'timetz',
+  oprresult => 'bool', oprcom => '<(timetz,timetz)',
+  oprnegate => '<=(timetz,timetz)', oprcode => 'timetz_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '1555', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'timetz', oprright => 'timetz',
+  oprresult => 'bool', oprcom => '<=(timetz,timetz)',
+  oprnegate => '<(timetz,timetz)', oprcode => 'timetz_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+# float48 operators
+{ oid => '1116', descr => 'add',
+  oprname => '+', oprleft => 'float4', oprright => 'float8',
+  oprresult => 'float8', oprcom => '+(float8,float4)', oprcode => 'float48pl' },
+{ oid => '1117', descr => 'subtract',
+  oprname => '-', oprleft => 'float4', oprright => 'float8',
+  oprresult => 'float8', oprcode => 'float48mi' },
+{ oid => '1118', descr => 'divide',
+  oprname => '/', oprleft => 'float4', oprright => 'float8',
+  oprresult => 'float8', oprcode => 'float48div' },
+{ oid => '1119', descr => 'multiply',
+  oprname => '*', oprleft => 'float4', oprright => 'float8',
+  oprresult => 'float8', oprcom => '*(float8,float4)',
+  oprcode => 'float48mul' },
+{ oid => '1120', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'float4',
+  oprright => 'float8', oprresult => 'bool', oprcom => '=(float8,float4)',
+  oprnegate => '<>(float4,float8)', oprcode => 'float48eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '1121', descr => 'not equal',
+  oprname => '<>', oprleft => 'float4', oprright => 'float8',
+  oprresult => 'bool', oprcom => '<>(float8,float4)',
+  oprnegate => '=(float4,float8)', oprcode => 'float48ne', oprrest => 'neqsel',
+  oprjoin => 'neqjoinsel' },
+{ oid => '1122', descr => 'less than',
+  oprname => '<', oprleft => 'float4', oprright => 'float8',
+  oprresult => 'bool', oprcom => '>(float8,float4)',
+  oprnegate => '>=(float4,float8)', oprcode => 'float48lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '1123', descr => 'greater than',
+  oprname => '>', oprleft => 'float4', oprright => 'float8',
+  oprresult => 'bool', oprcom => '<(float8,float4)',
+  oprnegate => '<=(float4,float8)', oprcode => 'float48gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '1124', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'float4', oprright => 'float8',
+  oprresult => 'bool', oprcom => '>=(float8,float4)',
+  oprnegate => '>(float4,float8)', oprcode => 'float48le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '1125', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'float4', oprright => 'float8',
+  oprresult => 'bool', oprcom => '<=(float8,float4)',
+  oprnegate => '<(float4,float8)', oprcode => 'float48ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+# float84 operators
+{ oid => '1126', descr => 'add',
+  oprname => '+', oprleft => 'float8', oprright => 'float4',
+  oprresult => 'float8', oprcom => '+(float4,float8)', oprcode => 'float84pl' },
+{ oid => '1127', descr => 'subtract',
+  oprname => '-', oprleft => 'float8', oprright => 'float4',
+  oprresult => 'float8', oprcode => 'float84mi' },
+{ oid => '1128', descr => 'divide',
+  oprname => '/', oprleft => 'float8', oprright => 'float4',
+  oprresult => 'float8', oprcode => 'float84div' },
+{ oid => '1129', descr => 'multiply',
+  oprname => '*', oprleft => 'float8', oprright => 'float4',
+  oprresult => 'float8', oprcom => '*(float4,float8)',
+  oprcode => 'float84mul' },
+{ oid => '1130', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'float8',
+  oprright => 'float4', oprresult => 'bool', oprcom => '=(float4,float8)',
+  oprnegate => '<>(float8,float4)', oprcode => 'float84eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '1131', descr => 'not equal',
+  oprname => '<>', oprleft => 'float8', oprright => 'float4',
+  oprresult => 'bool', oprcom => '<>(float4,float8)',
+  oprnegate => '=(float8,float4)', oprcode => 'float84ne', oprrest => 'neqsel',
+  oprjoin => 'neqjoinsel' },
+{ oid => '1132', descr => 'less than',
+  oprname => '<', oprleft => 'float8', oprright => 'float4',
+  oprresult => 'bool', oprcom => '>(float4,float8)',
+  oprnegate => '>=(float8,float4)', oprcode => 'float84lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '1133', descr => 'greater than',
+  oprname => '>', oprleft => 'float8', oprright => 'float4',
+  oprresult => 'bool', oprcom => '<(float4,float8)',
+  oprnegate => '<=(float8,float4)', oprcode => 'float84gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '1134', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'float8', oprright => 'float4',
+  oprresult => 'bool', oprcom => '>=(float4,float8)',
+  oprnegate => '>(float8,float4)', oprcode => 'float84le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '1135', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'float8', oprright => 'float4',
+  oprresult => 'bool', oprcom => '<=(float4,float8)',
+  oprnegate => '<(float8,float4)', oprcode => 'float84ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+# LIKE hacks by Keith Parks.
+{ oid => '1207', oid_symbol => 'OID_NAME_LIKE_OP',
+  descr => 'matches LIKE expression',
+  oprname => '~~', oprleft => 'name', oprright => 'text', oprresult => 'bool',
+  oprnegate => '!~~(name,text)', oprcode => 'namelike', oprrest => 'likesel',
+  oprjoin => 'likejoinsel' },
+{ oid => '1208', descr => 'does not match LIKE expression',
+  oprname => '!~~', oprleft => 'name', oprright => 'text', oprresult => 'bool',
+  oprnegate => '~~(name,text)', oprcode => 'namenlike', oprrest => 'nlikesel',
+  oprjoin => 'nlikejoinsel' },
+{ oid => '1209', oid_symbol => 'OID_TEXT_LIKE_OP',
+  descr => 'matches LIKE expression',
+  oprname => '~~', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprnegate => '!~~(text,text)', oprcode => 'textlike', oprrest => 'likesel',
+  oprjoin => 'likejoinsel' },
+{ oid => '1210', descr => 'does not match LIKE expression',
+  oprname => '!~~', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprnegate => '~~(text,text)', oprcode => 'textnlike', oprrest => 'nlikesel',
+  oprjoin => 'nlikejoinsel' },
+{ oid => '1211', oid_symbol => 'OID_BPCHAR_LIKE_OP',
+  descr => 'matches LIKE expression',
+  oprname => '~~', oprleft => 'bpchar', oprright => 'text', oprresult => 'bool',
+  oprnegate => '!~~(bpchar,text)', oprcode => 'bpcharlike',
+  oprrest => 'likesel', oprjoin => 'likejoinsel' },
+{ oid => '1212', descr => 'does not match LIKE expression',
+  oprname => '!~~', oprleft => 'bpchar', oprright => 'text',
+  oprresult => 'bool', oprnegate => '~~(bpchar,text)', oprcode => 'bpcharnlike',
+  oprrest => 'nlikesel', oprjoin => 'nlikejoinsel' },
+
+# case-insensitive regex hacks
+{ oid => '1226', oid_symbol => 'OID_NAME_ICREGEXEQ_OP',
+  descr => 'matches regular expression, case-insensitive',
+  oprname => '~*', oprleft => 'name', oprright => 'text', oprresult => 'bool',
+  oprnegate => '!~*(name,text)', oprcode => 'nameicregexeq',
+  oprrest => 'icregexeqsel', oprjoin => 'icregexeqjoinsel' },
+{ oid => '1227',
+  descr => 'does not match regular expression, case-insensitive',
+  oprname => '!~*', oprleft => 'name', oprright => 'text', oprresult => 'bool',
+  oprnegate => '~*(name,text)', oprcode => 'nameicregexne',
+  oprrest => 'icregexnesel', oprjoin => 'icregexnejoinsel' },
+{ oid => '1228', oid_symbol => 'OID_TEXT_ICREGEXEQ_OP',
+  descr => 'matches regular expression, case-insensitive',
+  oprname => '~*', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprnegate => '!~*(text,text)', oprcode => 'texticregexeq',
+  oprrest => 'icregexeqsel', oprjoin => 'icregexeqjoinsel' },
+{ oid => '1229',
+  descr => 'does not match regular expression, case-insensitive',
+  oprname => '!~*', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprnegate => '~*(text,text)', oprcode => 'texticregexne',
+  oprrest => 'icregexnesel', oprjoin => 'icregexnejoinsel' },
+{ oid => '1234', oid_symbol => 'OID_BPCHAR_ICREGEXEQ_OP',
+  descr => 'matches regular expression, case-insensitive',
+  oprname => '~*', oprleft => 'bpchar', oprright => 'text', oprresult => 'bool',
+  oprnegate => '!~*(bpchar,text)', oprcode => 'bpcharicregexeq',
+  oprrest => 'icregexeqsel', oprjoin => 'icregexeqjoinsel' },
+{ oid => '1235',
+  descr => 'does not match regular expression, case-insensitive',
+  oprname => '!~*', oprleft => 'bpchar', oprright => 'text',
+  oprresult => 'bool', oprnegate => '~*(bpchar,text)',
+  oprcode => 'bpcharicregexne', oprrest => 'icregexnesel',
+  oprjoin => 'icregexnejoinsel' },
+
+# timestamptz operators
+{ oid => '1320', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't',
+  oprleft => 'timestamptz', oprright => 'timestamptz', oprresult => 'bool',
+  oprcom => '=(timestamptz,timestamptz)',
+  oprnegate => '<>(timestamptz,timestamptz)', oprcode => 'timestamptz_eq',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '1321', descr => 'not equal',
+  oprname => '<>', oprleft => 'timestamptz', oprright => 'timestamptz',
+  oprresult => 'bool', oprcom => '<>(timestamptz,timestamptz)',
+  oprnegate => '=(timestamptz,timestamptz)', oprcode => 'timestamptz_ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '1322', descr => 'less than',
+  oprname => '<', oprleft => 'timestamptz', oprright => 'timestamptz',
+  oprresult => 'bool', oprcom => '>(timestamptz,timestamptz)',
+  oprnegate => '>=(timestamptz,timestamptz)', oprcode => 'timestamptz_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '1323', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'timestamptz', oprright => 'timestamptz',
+  oprresult => 'bool', oprcom => '>=(timestamptz,timestamptz)',
+  oprnegate => '>(timestamptz,timestamptz)', oprcode => 'timestamptz_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '1324', descr => 'greater than',
+  oprname => '>', oprleft => 'timestamptz', oprright => 'timestamptz',
+  oprresult => 'bool', oprcom => '<(timestamptz,timestamptz)',
+  oprnegate => '<=(timestamptz,timestamptz)', oprcode => 'timestamptz_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '1325', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'timestamptz', oprright => 'timestamptz',
+  oprresult => 'bool', oprcom => '<=(timestamptz,timestamptz)',
+  oprnegate => '<(timestamptz,timestamptz)', oprcode => 'timestamptz_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '1327', descr => 'add',
+  oprname => '+', oprleft => 'timestamptz', oprright => 'interval',
+  oprresult => 'timestamptz', oprcom => '+(interval,timestamptz)',
+  oprcode => 'timestamptz_pl_interval' },
+{ oid => '1328', descr => 'subtract',
+  oprname => '-', oprleft => 'timestamptz', oprright => 'timestamptz',
+  oprresult => 'interval', oprcode => 'timestamptz_mi' },
+{ oid => '1329', descr => 'subtract',
+  oprname => '-', oprleft => 'timestamptz', oprright => 'interval',
+  oprresult => 'timestamptz', oprcode => 'timestamptz_mi_interval' },
+
+# interval operators
+{ oid => '1330', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'interval',
+  oprright => 'interval', oprresult => 'bool', oprcom => '=(interval,interval)',
+  oprnegate => '<>(interval,interval)', oprcode => 'interval_eq',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '1331', descr => 'not equal',
+  oprname => '<>', oprleft => 'interval', oprright => 'interval',
+  oprresult => 'bool', oprcom => '<>(interval,interval)',
+  oprnegate => '=(interval,interval)', oprcode => 'interval_ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '1332', descr => 'less than',
+  oprname => '<', oprleft => 'interval', oprright => 'interval',
+  oprresult => 'bool', oprcom => '>(interval,interval)',
+  oprnegate => '>=(interval,interval)', oprcode => 'interval_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '1333', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'interval', oprright => 'interval',
+  oprresult => 'bool', oprcom => '>=(interval,interval)',
+  oprnegate => '>(interval,interval)', oprcode => 'interval_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '1334', descr => 'greater than',
+  oprname => '>', oprleft => 'interval', oprright => 'interval',
+  oprresult => 'bool', oprcom => '<(interval,interval)',
+  oprnegate => '<=(interval,interval)', oprcode => 'interval_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '1335', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'interval', oprright => 'interval',
+  oprresult => 'bool', oprcom => '<=(interval,interval)',
+  oprnegate => '<(interval,interval)', oprcode => 'interval_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+{ oid => '1336', descr => 'negate',
+  oprname => '-', oprkind => 'l', oprleft => '0', oprright => 'interval',
+  oprresult => 'interval', oprcode => 'interval_um' },
+{ oid => '1337', descr => 'add',
+  oprname => '+', oprleft => 'interval', oprright => 'interval',
+  oprresult => 'interval', oprcom => '+(interval,interval)',
+  oprcode => 'interval_pl' },
+{ oid => '1338', descr => 'subtract',
+  oprname => '-', oprleft => 'interval', oprright => 'interval',
+  oprresult => 'interval', oprcode => 'interval_mi' },
+
+{ oid => '1360', descr => 'convert date and time to timestamp',
+  oprname => '+', oprleft => 'date', oprright => 'time',
+  oprresult => 'timestamp', oprcom => '+(time,date)',
+  oprcode => 'datetime_pl' },
+{ oid => '1361',
+  descr => 'convert date and time with time zone to timestamp with time zone',
+  oprname => '+', oprleft => 'date', oprright => 'timetz',
+  oprresult => 'timestamptz', oprcom => '+(timetz,date)',
+  oprcode => 'datetimetz_pl' },
+{ oid => '1363', descr => 'convert time and date to timestamp',
+  oprname => '+', oprleft => 'time', oprright => 'date',
+  oprresult => 'timestamp', oprcom => '+(date,time)',
+  oprcode => 'timedate_pl' },
+{ oid => '1366',
+  descr => 'convert time with time zone and date to timestamp with time zone',
+  oprname => '+', oprleft => 'timetz', oprright => 'date',
+  oprresult => 'timestamptz', oprcom => '+(date,timetz)',
+  oprcode => 'timetzdate_pl' },
+
+{ oid => '1399', descr => 'subtract',
+  oprname => '-', oprleft => 'time', oprright => 'time',
+  oprresult => 'interval', oprcode => 'time_mi_time' },
+
+# additional geometric operators - thomas 97/04/18
+{ oid => '1420', descr => 'center of',
+  oprname => '@@', oprkind => 'l', oprleft => '0', oprright => 'circle',
+  oprresult => 'point', oprcode => 'circle_center' },
+{ oid => '1500', descr => 'equal by area',
+  oprname => '=', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcom => '=(circle,circle)',
+  oprnegate => '<>(circle,circle)', oprcode => 'circle_eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '1501', descr => 'not equal by area',
+  oprname => '<>', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcom => '<>(circle,circle)',
+  oprnegate => '=(circle,circle)', oprcode => 'circle_ne', oprrest => 'neqsel',
+  oprjoin => 'neqjoinsel' },
+{ oid => '1502', descr => 'less than by area',
+  oprname => '<', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcom => '>(circle,circle)',
+  oprnegate => '>=(circle,circle)', oprcode => 'circle_lt',
+  oprrest => 'areasel', oprjoin => 'areajoinsel' },
+{ oid => '1503', descr => 'greater than by area',
+  oprname => '>', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcom => '<(circle,circle)',
+  oprnegate => '<=(circle,circle)', oprcode => 'circle_gt',
+  oprrest => 'areasel', oprjoin => 'areajoinsel' },
+{ oid => '1504', descr => 'less than or equal by area',
+  oprname => '<=', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcom => '>=(circle,circle)',
+  oprnegate => '>(circle,circle)', oprcode => 'circle_le', oprrest => 'areasel',
+  oprjoin => 'areajoinsel' },
+{ oid => '1505', descr => 'greater than or equal by area',
+  oprname => '>=', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcom => '<=(circle,circle)',
+  oprnegate => '<(circle,circle)', oprcode => 'circle_ge', oprrest => 'areasel',
+  oprjoin => 'areajoinsel' },
+
+{ oid => '1506', descr => 'is left of',
+  oprname => '<<', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcode => 'circle_left', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '1507', descr => 'overlaps or is left of',
+  oprname => '&<', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcode => 'circle_overleft', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '1508', descr => 'overlaps or is right of',
+  oprname => '&>', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcode => 'circle_overright', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '1509', descr => 'is right of',
+  oprname => '>>', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcode => 'circle_right', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '1510', descr => 'is contained by',
+  oprname => '<@', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcom => '@>(circle,circle)',
+  oprcode => 'circle_contained', oprrest => 'contsel',
+  oprjoin => 'contjoinsel' },
+{ oid => '1511', descr => 'contains',
+  oprname => '@>', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcom => '<@(circle,circle)',
+  oprcode => 'circle_contain', oprrest => 'contsel', oprjoin => 'contjoinsel' },
+{ oid => '1512', descr => 'same as',
+  oprname => '~=', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcom => '~=(circle,circle)', oprcode => 'circle_same',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '1513', descr => 'overlaps',
+  oprname => '&&', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcom => '&&(circle,circle)',
+  oprcode => 'circle_overlap', oprrest => 'areasel', oprjoin => 'areajoinsel' },
+{ oid => '1514', descr => 'is above',
+  oprname => '|>>', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcode => 'circle_above', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '1515', descr => 'is below',
+  oprname => '<<|', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcode => 'circle_below', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+
+{ oid => '1516', descr => 'add',
+  oprname => '+', oprleft => 'circle', oprright => 'point',
+  oprresult => 'circle', oprcode => 'circle_add_pt' },
+{ oid => '1517', descr => 'subtract',
+  oprname => '-', oprleft => 'circle', oprright => 'point',
+  oprresult => 'circle', oprcode => 'circle_sub_pt' },
+{ oid => '1518', descr => 'multiply',
+  oprname => '*', oprleft => 'circle', oprright => 'point',
+  oprresult => 'circle', oprcode => 'circle_mul_pt' },
+{ oid => '1519', descr => 'divide',
+  oprname => '/', oprleft => 'circle', oprright => 'point',
+  oprresult => 'circle', oprcode => 'circle_div_pt' },
+
+{ oid => '1520', descr => 'distance between',
+  oprname => '<->', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'float8', oprcom => '<->(circle,circle)',
+  oprcode => 'circle_distance' },
+{ oid => '1521', descr => 'number of points',
+  oprname => '#', oprkind => 'l', oprleft => '0', oprright => 'polygon',
+  oprresult => 'int4', oprcode => 'poly_npoints' },
+{ oid => '1522', descr => 'distance between',
+  oprname => '<->', oprleft => 'point', oprright => 'circle',
+  oprresult => 'float8', oprcom => '<->(circle,point)', oprcode => 'dist_pc' },
+{ oid => '3291', descr => 'distance between',
+  oprname => '<->', oprleft => 'circle', oprright => 'point',
+  oprresult => 'float8', oprcom => '<->(point,circle)',
+  oprcode => 'dist_cpoint' },
+{ oid => '3276', descr => 'distance between',
+  oprname => '<->', oprleft => 'point', oprright => 'polygon',
+  oprresult => 'float8', oprcom => '<->(polygon,point)',
+  oprcode => 'dist_ppoly' },
+{ oid => '3289', descr => 'distance between',
+  oprname => '<->', oprleft => 'polygon', oprright => 'point',
+  oprresult => 'float8', oprcom => '<->(point,polygon)',
+  oprcode => 'dist_polyp' },
+{ oid => '1523', descr => 'distance between',
+  oprname => '<->', oprleft => 'circle', oprright => 'polygon',
+  oprresult => 'float8', oprcode => 'dist_cpoly' },
+
+# additional geometric operators - thomas 1997-07-09
+{ oid => '1524', descr => 'distance between',
+  oprname => '<->', oprleft => 'line', oprright => 'box', oprresult => 'float8',
+  oprcode => 'dist_lb' },
+
+{ oid => '1525', descr => 'intersect',
+  oprname => '?#', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool',
+  oprcom => '?#(lseg,lseg)', oprcode => 'lseg_intersect' },
+{ oid => '1526', descr => 'parallel',
+  oprname => '?||', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool',
+  oprcom => '?||(lseg,lseg)', oprcode => 'lseg_parallel' },
+{ oid => '1527', descr => 'perpendicular',
+  oprname => '?-|', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool',
+  oprcom => '?-|(lseg,lseg)', oprcode => 'lseg_perp' },
+{ oid => '1528', descr => 'horizontal',
+  oprname => '?-', oprkind => 'l', oprleft => '0', oprright => 'lseg',
+  oprresult => 'bool', oprcode => 'lseg_horizontal' },
+{ oid => '1529', descr => 'vertical',
+  oprname => '?|', oprkind => 'l', oprleft => '0', oprright => 'lseg',
+  oprresult => 'bool', oprcode => 'lseg_vertical' },
+{ oid => '1535', descr => 'equal',
+  oprname => '=', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool',
+  oprcom => '=(lseg,lseg)', oprnegate => '<>(lseg,lseg)', oprcode => 'lseg_eq',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '1536', descr => 'intersection point',
+  oprname => '#', oprleft => 'lseg', oprright => 'lseg', oprresult => 'point',
+  oprcom => '#(lseg,lseg)', oprcode => 'lseg_interpt' },
+{ oid => '1537', descr => 'intersect',
+  oprname => '?#', oprleft => 'lseg', oprright => 'line', oprresult => 'bool',
+  oprcode => 'inter_sl' },
+{ oid => '1538', descr => 'intersect',
+  oprname => '?#', oprleft => 'lseg', oprright => 'box', oprresult => 'bool',
+  oprcode => 'inter_sb' },
+{ oid => '1539', descr => 'intersect',
+  oprname => '?#', oprleft => 'line', oprright => 'box', oprresult => 'bool',
+  oprcode => 'inter_lb' },
+
+{ oid => '1546', descr => 'point on line',
+  oprname => '<@', oprleft => 'point', oprright => 'line', oprresult => 'bool',
+  oprcode => 'on_pl' },
+{ oid => '1547', descr => 'is contained by',
+  oprname => '<@', oprleft => 'point', oprright => 'lseg', oprresult => 'bool',
+  oprcode => 'on_ps' },
+{ oid => '1548', descr => 'lseg on line',
+  oprname => '<@', oprleft => 'lseg', oprright => 'line', oprresult => 'bool',
+  oprcode => 'on_sl' },
+{ oid => '1549', descr => 'is contained by',
+  oprname => '<@', oprleft => 'lseg', oprright => 'box', oprresult => 'bool',
+  oprcode => 'on_sb' },
+
+{ oid => '1557', descr => 'closest point to A on B',
+  oprname => '##', oprleft => 'point', oprright => 'line', oprresult => 'point',
+  oprcode => 'close_pl' },
+{ oid => '1558', descr => 'closest point to A on B',
+  oprname => '##', oprleft => 'point', oprright => 'lseg', oprresult => 'point',
+  oprcode => 'close_ps' },
+{ oid => '1559', descr => 'closest point to A on B',
+  oprname => '##', oprleft => 'point', oprright => 'box', oprresult => 'point',
+  oprcode => 'close_pb' },
+
+{ oid => '1566', descr => 'closest point to A on B',
+  oprname => '##', oprleft => 'lseg', oprright => 'line', oprresult => 'point',
+  oprcode => 'close_sl' },
+{ oid => '1567', descr => 'closest point to A on B',
+  oprname => '##', oprleft => 'lseg', oprright => 'box', oprresult => 'point',
+  oprcode => 'close_sb' },
+{ oid => '1568', descr => 'closest point to A on B',
+  oprname => '##', oprleft => 'line', oprright => 'box', oprresult => 'point',
+  oprcode => 'close_lb' },
+{ oid => '1577', descr => 'closest point to A on B',
+  oprname => '##', oprleft => 'line', oprright => 'lseg', oprresult => 'point',
+  oprcode => 'close_ls' },
+{ oid => '1578', descr => 'closest point to A on B',
+  oprname => '##', oprleft => 'lseg', oprright => 'lseg', oprresult => 'point',
+  oprcode => 'close_lseg' },
+{ oid => '1583', descr => 'multiply',
+  oprname => '*', oprleft => 'interval', oprright => 'float8',
+  oprresult => 'interval', oprcom => '*(float8,interval)',
+  oprcode => 'interval_mul' },
+{ oid => '1584', descr => 'multiply',
+  oprname => '*', oprleft => 'float8', oprright => 'interval',
+  oprresult => 'interval', oprcom => '*(interval,float8)',
+  oprcode => 'mul_d_interval' },
+{ oid => '1585', descr => 'divide',
+  oprname => '/', oprleft => 'interval', oprright => 'float8',
+  oprresult => 'interval', oprcode => 'interval_div' },
+
+{ oid => '1586', descr => 'not equal',
+  oprname => '<>', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool',
+  oprcom => '<>(lseg,lseg)', oprnegate => '=(lseg,lseg)', oprcode => 'lseg_ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '1587', descr => 'less than by length',
+  oprname => '<', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool',
+  oprcom => '>(lseg,lseg)', oprnegate => '>=(lseg,lseg)',
+  oprcode => 'lseg_lt' },
+{ oid => '1588', descr => 'less than or equal by length',
+  oprname => '<=', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool',
+  oprcom => '>=(lseg,lseg)', oprnegate => '>(lseg,lseg)',
+  oprcode => 'lseg_le' },
+{ oid => '1589', descr => 'greater than by length',
+  oprname => '>', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool',
+  oprcom => '<(lseg,lseg)', oprnegate => '<=(lseg,lseg)',
+  oprcode => 'lseg_gt' },
+{ oid => '1590', descr => 'greater than or equal by length',
+  oprname => '>=', oprleft => 'lseg', oprright => 'lseg', oprresult => 'bool',
+  oprcom => '<=(lseg,lseg)', oprnegate => '<(lseg,lseg)',
+  oprcode => 'lseg_ge' },
+
+{ oid => '1591', descr => 'distance between endpoints',
+  oprname => '@-@', oprkind => 'l', oprleft => '0', oprright => 'lseg',
+  oprresult => 'float8', oprcode => 'lseg_length' },
+
+{ oid => '1611', descr => 'intersect',
+  oprname => '?#', oprleft => 'line', oprright => 'line', oprresult => 'bool',
+  oprcom => '?#(line,line)', oprcode => 'line_intersect' },
+{ oid => '1612', descr => 'parallel',
+  oprname => '?||', oprleft => 'line', oprright => 'line', oprresult => 'bool',
+  oprcom => '?||(line,line)', oprcode => 'line_parallel' },
+{ oid => '1613', descr => 'perpendicular',
+  oprname => '?-|', oprleft => 'line', oprright => 'line', oprresult => 'bool',
+  oprcom => '?-|(line,line)', oprcode => 'line_perp' },
+{ oid => '1614', descr => 'horizontal',
+  oprname => '?-', oprkind => 'l', oprleft => '0', oprright => 'line',
+  oprresult => 'bool', oprcode => 'line_horizontal' },
+{ oid => '1615', descr => 'vertical',
+  oprname => '?|', oprkind => 'l', oprleft => '0', oprright => 'line',
+  oprresult => 'bool', oprcode => 'line_vertical' },
+{ oid => '1616', descr => 'equal',
+  oprname => '=', oprleft => 'line', oprright => 'line', oprresult => 'bool',
+  oprcom => '=(line,line)', oprcode => 'line_eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '1617', descr => 'intersection point',
+  oprname => '#', oprleft => 'line', oprright => 'line', oprresult => 'point',
+  oprcom => '#(line,line)', oprcode => 'line_interpt' },
+
+# MACADDR type
+{ oid => '1220', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'macaddr',
+  oprright => 'macaddr', oprresult => 'bool', oprcom => '=(macaddr,macaddr)',
+  oprnegate => '<>(macaddr,macaddr)', oprcode => 'macaddr_eq',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '1221', descr => 'not equal',
+  oprname => '<>', oprleft => 'macaddr', oprright => 'macaddr',
+  oprresult => 'bool', oprcom => '<>(macaddr,macaddr)',
+  oprnegate => '=(macaddr,macaddr)', oprcode => 'macaddr_ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '1222', descr => 'less than',
+  oprname => '<', oprleft => 'macaddr', oprright => 'macaddr',
+  oprresult => 'bool', oprcom => '>(macaddr,macaddr)',
+  oprnegate => '>=(macaddr,macaddr)', oprcode => 'macaddr_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '1223', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'macaddr', oprright => 'macaddr',
+  oprresult => 'bool', oprcom => '>=(macaddr,macaddr)',
+  oprnegate => '>(macaddr,macaddr)', oprcode => 'macaddr_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '1224', descr => 'greater than',
+  oprname => '>', oprleft => 'macaddr', oprright => 'macaddr',
+  oprresult => 'bool', oprcom => '<(macaddr,macaddr)',
+  oprnegate => '<=(macaddr,macaddr)', oprcode => 'macaddr_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '1225', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'macaddr', oprright => 'macaddr',
+  oprresult => 'bool', oprcom => '<=(macaddr,macaddr)',
+  oprnegate => '<(macaddr,macaddr)', oprcode => 'macaddr_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+{ oid => '3147', descr => 'bitwise not',
+  oprname => '~', oprkind => 'l', oprleft => '0', oprright => 'macaddr',
+  oprresult => 'macaddr', oprcode => 'macaddr_not' },
+{ oid => '3148', descr => 'bitwise and',
+  oprname => '&', oprleft => 'macaddr', oprright => 'macaddr',
+  oprresult => 'macaddr', oprcode => 'macaddr_and' },
+{ oid => '3149', descr => 'bitwise or',
+  oprname => '|', oprleft => 'macaddr', oprright => 'macaddr',
+  oprresult => 'macaddr', oprcode => 'macaddr_or' },
+
+# MACADDR8 type
+{ oid => '3362', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'macaddr8',
+  oprright => 'macaddr8', oprresult => 'bool', oprcom => '=(macaddr8,macaddr8)',
+  oprnegate => '<>(macaddr8,macaddr8)', oprcode => 'macaddr8_eq',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '3363', descr => 'not equal',
+  oprname => '<>', oprleft => 'macaddr8', oprright => 'macaddr8',
+  oprresult => 'bool', oprcom => '<>(macaddr8,macaddr8)',
+  oprnegate => '=(macaddr8,macaddr8)', oprcode => 'macaddr8_ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '3364', descr => 'less than',
+  oprname => '<', oprleft => 'macaddr8', oprright => 'macaddr8',
+  oprresult => 'bool', oprcom => '>(macaddr8,macaddr8)',
+  oprnegate => '>=(macaddr8,macaddr8)', oprcode => 'macaddr8_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '3365', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'macaddr8', oprright => 'macaddr8',
+  oprresult => 'bool', oprcom => '>=(macaddr8,macaddr8)',
+  oprnegate => '>(macaddr8,macaddr8)', oprcode => 'macaddr8_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '3366', descr => 'greater than',
+  oprname => '>', oprleft => 'macaddr8', oprright => 'macaddr8',
+  oprresult => 'bool', oprcom => '<(macaddr8,macaddr8)',
+  oprnegate => '<=(macaddr8,macaddr8)', oprcode => 'macaddr8_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '3367', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'macaddr8', oprright => 'macaddr8',
+  oprresult => 'bool', oprcom => '<=(macaddr8,macaddr8)',
+  oprnegate => '<(macaddr8,macaddr8)', oprcode => 'macaddr8_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+{ oid => '3368', descr => 'bitwise not',
+  oprname => '~', oprkind => 'l', oprleft => '0', oprright => 'macaddr8',
+  oprresult => 'macaddr8', oprcode => 'macaddr8_not' },
+{ oid => '3369', descr => 'bitwise and',
+  oprname => '&', oprleft => 'macaddr8', oprright => 'macaddr8',
+  oprresult => 'macaddr8', oprcode => 'macaddr8_and' },
+{ oid => '3370', descr => 'bitwise or',
+  oprname => '|', oprleft => 'macaddr8', oprright => 'macaddr8',
+  oprresult => 'macaddr8', oprcode => 'macaddr8_or' },
+
+# INET type (these also support CIDR via implicit cast)
+{ oid => '1201', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'inet',
+  oprright => 'inet', oprresult => 'bool', oprcom => '=(inet,inet)',
+  oprnegate => '<>(inet,inet)', oprcode => 'network_eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '1202', descr => 'not equal',
+  oprname => '<>', oprleft => 'inet', oprright => 'inet', oprresult => 'bool',
+  oprcom => '<>(inet,inet)', oprnegate => '=(inet,inet)',
+  oprcode => 'network_ne', oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '1203', descr => 'less than',
+  oprname => '<', oprleft => 'inet', oprright => 'inet', oprresult => 'bool',
+  oprcom => '>(inet,inet)', oprnegate => '>=(inet,inet)',
+  oprcode => 'network_lt', oprrest => 'scalarltsel',
+  oprjoin => 'scalarltjoinsel' },
+{ oid => '1204', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'inet', oprright => 'inet', oprresult => 'bool',
+  oprcom => '>=(inet,inet)', oprnegate => '>(inet,inet)',
+  oprcode => 'network_le', oprrest => 'scalarlesel',
+  oprjoin => 'scalarlejoinsel' },
+{ oid => '1205', descr => 'greater than',
+  oprname => '>', oprleft => 'inet', oprright => 'inet', oprresult => 'bool',
+  oprcom => '<(inet,inet)', oprnegate => '<=(inet,inet)',
+  oprcode => 'network_gt', oprrest => 'scalargtsel',
+  oprjoin => 'scalargtjoinsel' },
+{ oid => '1206', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'inet', oprright => 'inet', oprresult => 'bool',
+  oprcom => '<=(inet,inet)', oprnegate => '<(inet,inet)',
+  oprcode => 'network_ge', oprrest => 'scalargesel',
+  oprjoin => 'scalargejoinsel' },
+{ oid => '931', oid_symbol => 'OID_INET_SUB_OP', descr => 'is subnet',
+  oprname => '<<', oprleft => 'inet', oprright => 'inet', oprresult => 'bool',
+  oprcom => '>>(inet,inet)', oprcode => 'network_sub', oprrest => 'networksel',
+  oprjoin => 'networkjoinsel' },
+{ oid => '932', oid_symbol => 'OID_INET_SUBEQ_OP',
+  descr => 'is subnet or equal',
+  oprname => '<<=', oprleft => 'inet', oprright => 'inet', oprresult => 'bool',
+  oprcom => '>>=(inet,inet)', oprcode => 'network_subeq',
+  oprrest => 'networksel', oprjoin => 'networkjoinsel' },
+{ oid => '933', oid_symbol => 'OID_INET_SUP_OP', descr => 'is supernet',
+  oprname => '>>', oprleft => 'inet', oprright => 'inet', oprresult => 'bool',
+  oprcom => '<<(inet,inet)', oprcode => 'network_sup', oprrest => 'networksel',
+  oprjoin => 'networkjoinsel' },
+{ oid => '934', oid_symbol => 'OID_INET_SUPEQ_OP',
+  descr => 'is supernet or equal',
+  oprname => '>>=', oprleft => 'inet', oprright => 'inet', oprresult => 'bool',
+  oprcom => '<<=(inet,inet)', oprcode => 'network_supeq',
+  oprrest => 'networksel', oprjoin => 'networkjoinsel' },
+{ oid => '3552', oid_symbol => 'OID_INET_OVERLAP_OP',
+  descr => 'overlaps (is subnet or supernet)',
+  oprname => '&&', oprleft => 'inet', oprright => 'inet', oprresult => 'bool',
+  oprcom => '&&(inet,inet)', oprcode => 'network_overlap',
+  oprrest => 'networksel', oprjoin => 'networkjoinsel' },
+
+{ oid => '2634', descr => 'bitwise not',
+  oprname => '~', oprkind => 'l', oprleft => '0', oprright => 'inet',
+  oprresult => 'inet', oprcode => 'inetnot' },
+{ oid => '2635', descr => 'bitwise and',
+  oprname => '&', oprleft => 'inet', oprright => 'inet', oprresult => 'inet',
+  oprcode => 'inetand' },
+{ oid => '2636', descr => 'bitwise or',
+  oprname => '|', oprleft => 'inet', oprright => 'inet', oprresult => 'inet',
+  oprcode => 'inetor' },
+{ oid => '2637', descr => 'add',
+  oprname => '+', oprleft => 'inet', oprright => 'int8', oprresult => 'inet',
+  oprcom => '+(int8,inet)', oprcode => 'inetpl' },
+{ oid => '2638', descr => 'add',
+  oprname => '+', oprleft => 'int8', oprright => 'inet', oprresult => 'inet',
+  oprcom => '+(inet,int8)', oprcode => 'int8pl_inet' },
+{ oid => '2639', descr => 'subtract',
+  oprname => '-', oprleft => 'inet', oprright => 'int8', oprresult => 'inet',
+  oprcode => 'inetmi_int8' },
+{ oid => '2640', descr => 'subtract',
+  oprname => '-', oprleft => 'inet', oprright => 'inet', oprresult => 'int8',
+  oprcode => 'inetmi' },
+
+# case-insensitive LIKE hacks
+{ oid => '1625', oid_symbol => 'OID_NAME_ICLIKE_OP',
+  descr => 'matches LIKE expression, case-insensitive',
+  oprname => '~~*', oprleft => 'name', oprright => 'text', oprresult => 'bool',
+  oprnegate => '!~~*(name,text)', oprcode => 'nameiclike',
+  oprrest => 'iclikesel', oprjoin => 'iclikejoinsel' },
+{ oid => '1626', descr => 'does not match LIKE expression, case-insensitive',
+  oprname => '!~~*', oprleft => 'name', oprright => 'text', oprresult => 'bool',
+  oprnegate => '~~*(name,text)', oprcode => 'nameicnlike',
+  oprrest => 'icnlikesel', oprjoin => 'icnlikejoinsel' },
+{ oid => '1627', oid_symbol => 'OID_TEXT_ICLIKE_OP',
+  descr => 'matches LIKE expression, case-insensitive',
+  oprname => '~~*', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprnegate => '!~~*(text,text)', oprcode => 'texticlike',
+  oprrest => 'iclikesel', oprjoin => 'iclikejoinsel' },
+{ oid => '1628', descr => 'does not match LIKE expression, case-insensitive',
+  oprname => '!~~*', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprnegate => '~~*(text,text)', oprcode => 'texticnlike',
+  oprrest => 'icnlikesel', oprjoin => 'icnlikejoinsel' },
+{ oid => '1629', oid_symbol => 'OID_BPCHAR_ICLIKE_OP',
+  descr => 'matches LIKE expression, case-insensitive',
+  oprname => '~~*', oprleft => 'bpchar', oprright => 'text',
+  oprresult => 'bool', oprnegate => '!~~*(bpchar,text)',
+  oprcode => 'bpchariclike', oprrest => 'iclikesel',
+  oprjoin => 'iclikejoinsel' },
+{ oid => '1630', descr => 'does not match LIKE expression, case-insensitive',
+  oprname => '!~~*', oprleft => 'bpchar', oprright => 'text',
+  oprresult => 'bool', oprnegate => '~~*(bpchar,text)',
+  oprcode => 'bpcharicnlike', oprrest => 'icnlikesel',
+  oprjoin => 'icnlikejoinsel' },
+
+# NUMERIC type - OID's 1700-1799
+{ oid => '1751', descr => 'negate',
+  oprname => '-', oprkind => 'l', oprleft => '0', oprright => 'numeric',
+  oprresult => 'numeric', oprcode => 'numeric_uminus' },
+{ oid => '1752', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'numeric',
+  oprright => 'numeric', oprresult => 'bool', oprcom => '=(numeric,numeric)',
+  oprnegate => '<>(numeric,numeric)', oprcode => 'numeric_eq',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '1753', descr => 'not equal',
+  oprname => '<>', oprleft => 'numeric', oprright => 'numeric',
+  oprresult => 'bool', oprcom => '<>(numeric,numeric)',
+  oprnegate => '=(numeric,numeric)', oprcode => 'numeric_ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '1754', descr => 'less than',
+  oprname => '<', oprleft => 'numeric', oprright => 'numeric',
+  oprresult => 'bool', oprcom => '>(numeric,numeric)',
+  oprnegate => '>=(numeric,numeric)', oprcode => 'numeric_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '1755', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'numeric', oprright => 'numeric',
+  oprresult => 'bool', oprcom => '>=(numeric,numeric)',
+  oprnegate => '>(numeric,numeric)', oprcode => 'numeric_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '1756', descr => 'greater than',
+  oprname => '>', oprleft => 'numeric', oprright => 'numeric',
+  oprresult => 'bool', oprcom => '<(numeric,numeric)',
+  oprnegate => '<=(numeric,numeric)', oprcode => 'numeric_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '1757', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'numeric', oprright => 'numeric',
+  oprresult => 'bool', oprcom => '<=(numeric,numeric)',
+  oprnegate => '<(numeric,numeric)', oprcode => 'numeric_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '1758', descr => 'add',
+  oprname => '+', oprleft => 'numeric', oprright => 'numeric',
+  oprresult => 'numeric', oprcom => '+(numeric,numeric)',
+  oprcode => 'numeric_add' },
+{ oid => '1759', descr => 'subtract',
+  oprname => '-', oprleft => 'numeric', oprright => 'numeric',
+  oprresult => 'numeric', oprcode => 'numeric_sub' },
+{ oid => '1760', descr => 'multiply',
+  oprname => '*', oprleft => 'numeric', oprright => 'numeric',
+  oprresult => 'numeric', oprcom => '*(numeric,numeric)',
+  oprcode => 'numeric_mul' },
+{ oid => '1761', descr => 'divide',
+  oprname => '/', oprleft => 'numeric', oprright => 'numeric',
+  oprresult => 'numeric', oprcode => 'numeric_div' },
+{ oid => '1762', descr => 'modulus',
+  oprname => '%', oprleft => 'numeric', oprright => 'numeric',
+  oprresult => 'numeric', oprcode => 'numeric_mod' },
+{ oid => '1038', descr => 'exponentiation',
+  oprname => '^', oprleft => 'numeric', oprright => 'numeric',
+  oprresult => 'numeric', oprcode => 'numeric_power' },
+{ oid => '1763', descr => 'absolute value',
+  oprname => '@', oprkind => 'l', oprleft => '0', oprright => 'numeric',
+  oprresult => 'numeric', oprcode => 'numeric_abs' },
+
+{ oid => '1784', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprleft => 'bit', oprright => 'bit',
+  oprresult => 'bool', oprcom => '=(bit,bit)', oprnegate => '<>(bit,bit)',
+  oprcode => 'biteq', oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '1785', descr => 'not equal',
+  oprname => '<>', oprleft => 'bit', oprright => 'bit', oprresult => 'bool',
+  oprcom => '<>(bit,bit)', oprnegate => '=(bit,bit)', oprcode => 'bitne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '1786', descr => 'less than',
+  oprname => '<', oprleft => 'bit', oprright => 'bit', oprresult => 'bool',
+  oprcom => '>(bit,bit)', oprnegate => '>=(bit,bit)', oprcode => 'bitlt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '1787', descr => 'greater than',
+  oprname => '>', oprleft => 'bit', oprright => 'bit', oprresult => 'bool',
+  oprcom => '<(bit,bit)', oprnegate => '<=(bit,bit)', oprcode => 'bitgt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '1788', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'bit', oprright => 'bit', oprresult => 'bool',
+  oprcom => '>=(bit,bit)', oprnegate => '>(bit,bit)', oprcode => 'bitle',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '1789', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'bit', oprright => 'bit', oprresult => 'bool',
+  oprcom => '<=(bit,bit)', oprnegate => '<(bit,bit)', oprcode => 'bitge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '1791', descr => 'bitwise and',
+  oprname => '&', oprleft => 'bit', oprright => 'bit', oprresult => 'bit',
+  oprcom => '&(bit,bit)', oprcode => 'bitand' },
+{ oid => '1792', descr => 'bitwise or',
+  oprname => '|', oprleft => 'bit', oprright => 'bit', oprresult => 'bit',
+  oprcom => '|(bit,bit)', oprcode => 'bitor' },
+{ oid => '1793', descr => 'bitwise exclusive or',
+  oprname => '#', oprleft => 'bit', oprright => 'bit', oprresult => 'bit',
+  oprcom => '#(bit,bit)', oprcode => 'bitxor' },
+{ oid => '1794', descr => 'bitwise not',
+  oprname => '~', oprkind => 'l', oprleft => '0', oprright => 'bit',
+  oprresult => 'bit', oprcode => 'bitnot' },
+{ oid => '1795', descr => 'bitwise shift left',
+  oprname => '<<', oprleft => 'bit', oprright => 'int4', oprresult => 'bit',
+  oprcode => 'bitshiftleft' },
+{ oid => '1796', descr => 'bitwise shift right',
+  oprname => '>>', oprleft => 'bit', oprright => 'int4', oprresult => 'bit',
+  oprcode => 'bitshiftright' },
+{ oid => '1797', descr => 'concatenate',
+  oprname => '||', oprleft => 'varbit', oprright => 'varbit',
+  oprresult => 'varbit', oprcode => 'bitcat' },
+
+{ oid => '1800', descr => 'add',
+  oprname => '+', oprleft => 'time', oprright => 'interval',
+  oprresult => 'time', oprcom => '+(interval,time)',
+  oprcode => 'time_pl_interval' },
+{ oid => '1801', descr => 'subtract',
+  oprname => '-', oprleft => 'time', oprright => 'interval',
+  oprresult => 'time', oprcode => 'time_mi_interval' },
+{ oid => '1802', descr => 'add',
+  oprname => '+', oprleft => 'timetz', oprright => 'interval',
+  oprresult => 'timetz', oprcom => '+(interval,timetz)',
+  oprcode => 'timetz_pl_interval' },
+{ oid => '1803', descr => 'subtract',
+  oprname => '-', oprleft => 'timetz', oprright => 'interval',
+  oprresult => 'timetz', oprcode => 'timetz_mi_interval' },
+
+{ oid => '1804', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprleft => 'varbit', oprright => 'varbit',
+  oprresult => 'bool', oprcom => '=(varbit,varbit)',
+  oprnegate => '<>(varbit,varbit)', oprcode => 'varbiteq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '1805', descr => 'not equal',
+  oprname => '<>', oprleft => 'varbit', oprright => 'varbit',
+  oprresult => 'bool', oprcom => '<>(varbit,varbit)',
+  oprnegate => '=(varbit,varbit)', oprcode => 'varbitne', oprrest => 'neqsel',
+  oprjoin => 'neqjoinsel' },
+{ oid => '1806', descr => 'less than',
+  oprname => '<', oprleft => 'varbit', oprright => 'varbit',
+  oprresult => 'bool', oprcom => '>(varbit,varbit)',
+  oprnegate => '>=(varbit,varbit)', oprcode => 'varbitlt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '1807', descr => 'greater than',
+  oprname => '>', oprleft => 'varbit', oprright => 'varbit',
+  oprresult => 'bool', oprcom => '<(varbit,varbit)',
+  oprnegate => '<=(varbit,varbit)', oprcode => 'varbitgt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '1808', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'varbit', oprright => 'varbit',
+  oprresult => 'bool', oprcom => '>=(varbit,varbit)',
+  oprnegate => '>(varbit,varbit)', oprcode => 'varbitle',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '1809', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'varbit', oprright => 'varbit',
+  oprresult => 'bool', oprcom => '<=(varbit,varbit)',
+  oprnegate => '<(varbit,varbit)', oprcode => 'varbitge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+{ oid => '1849', descr => 'add',
+  oprname => '+', oprleft => 'interval', oprright => 'time',
+  oprresult => 'time', oprcom => '+(time,interval)',
+  oprcode => 'interval_pl_time' },
+
+{ oid => '1862', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int2',
+  oprright => 'int8', oprresult => 'bool', oprcom => '=(int8,int2)',
+  oprnegate => '<>(int2,int8)', oprcode => 'int28eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '1863', descr => 'not equal',
+  oprname => '<>', oprleft => 'int2', oprright => 'int8', oprresult => 'bool',
+  oprcom => '<>(int8,int2)', oprnegate => '=(int2,int8)', oprcode => 'int28ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '1864', descr => 'less than',
+  oprname => '<', oprleft => 'int2', oprright => 'int8', oprresult => 'bool',
+  oprcom => '>(int8,int2)', oprnegate => '>=(int2,int8)', oprcode => 'int28lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '1865', descr => 'greater than',
+  oprname => '>', oprleft => 'int2', oprright => 'int8', oprresult => 'bool',
+  oprcom => '<(int8,int2)', oprnegate => '<=(int2,int8)', oprcode => 'int28gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '1866', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'int2', oprright => 'int8', oprresult => 'bool',
+  oprcom => '>=(int8,int2)', oprnegate => '>(int2,int8)', oprcode => 'int28le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '1867', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'int2', oprright => 'int8', oprresult => 'bool',
+  oprcom => '<=(int8,int2)', oprnegate => '<(int2,int8)', oprcode => 'int28ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+{ oid => '1868', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'int8',
+  oprright => 'int2', oprresult => 'bool', oprcom => '=(int2,int8)',
+  oprnegate => '<>(int8,int2)', oprcode => 'int82eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '1869', descr => 'not equal',
+  oprname => '<>', oprleft => 'int8', oprright => 'int2', oprresult => 'bool',
+  oprcom => '<>(int2,int8)', oprnegate => '=(int8,int2)', oprcode => 'int82ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '1870', descr => 'less than',
+  oprname => '<', oprleft => 'int8', oprright => 'int2', oprresult => 'bool',
+  oprcom => '>(int2,int8)', oprnegate => '>=(int8,int2)', oprcode => 'int82lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '1871', descr => 'greater than',
+  oprname => '>', oprleft => 'int8', oprright => 'int2', oprresult => 'bool',
+  oprcom => '<(int2,int8)', oprnegate => '<=(int8,int2)', oprcode => 'int82gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '1872', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'int8', oprright => 'int2', oprresult => 'bool',
+  oprcom => '>=(int2,int8)', oprnegate => '>(int8,int2)', oprcode => 'int82le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '1873', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'int8', oprright => 'int2', oprresult => 'bool',
+  oprcom => '<=(int2,int8)', oprnegate => '<(int8,int2)', oprcode => 'int82ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+{ oid => '1874', descr => 'bitwise and',
+  oprname => '&', oprleft => 'int2', oprright => 'int2', oprresult => 'int2',
+  oprcom => '&(int2,int2)', oprcode => 'int2and' },
+{ oid => '1875', descr => 'bitwise or',
+  oprname => '|', oprleft => 'int2', oprright => 'int2', oprresult => 'int2',
+  oprcom => '|(int2,int2)', oprcode => 'int2or' },
+{ oid => '1876', descr => 'bitwise exclusive or',
+  oprname => '#', oprleft => 'int2', oprright => 'int2', oprresult => 'int2',
+  oprcom => '#(int2,int2)', oprcode => 'int2xor' },
+{ oid => '1877', descr => 'bitwise not',
+  oprname => '~', oprkind => 'l', oprleft => '0', oprright => 'int2',
+  oprresult => 'int2', oprcode => 'int2not' },
+{ oid => '1878', descr => 'bitwise shift left',
+  oprname => '<<', oprleft => 'int2', oprright => 'int4', oprresult => 'int2',
+  oprcode => 'int2shl' },
+{ oid => '1879', descr => 'bitwise shift right',
+  oprname => '>>', oprleft => 'int2', oprright => 'int4', oprresult => 'int2',
+  oprcode => 'int2shr' },
+
+{ oid => '1880', descr => 'bitwise and',
+  oprname => '&', oprleft => 'int4', oprright => 'int4', oprresult => 'int4',
+  oprcom => '&(int4,int4)', oprcode => 'int4and' },
+{ oid => '1881', descr => 'bitwise or',
+  oprname => '|', oprleft => 'int4', oprright => 'int4', oprresult => 'int4',
+  oprcom => '|(int4,int4)', oprcode => 'int4or' },
+{ oid => '1882', descr => 'bitwise exclusive or',
+  oprname => '#', oprleft => 'int4', oprright => 'int4', oprresult => 'int4',
+  oprcom => '#(int4,int4)', oprcode => 'int4xor' },
+{ oid => '1883', descr => 'bitwise not',
+  oprname => '~', oprkind => 'l', oprleft => '0', oprright => 'int4',
+  oprresult => 'int4', oprcode => 'int4not' },
+{ oid => '1884', descr => 'bitwise shift left',
+  oprname => '<<', oprleft => 'int4', oprright => 'int4', oprresult => 'int4',
+  oprcode => 'int4shl' },
+{ oid => '1885', descr => 'bitwise shift right',
+  oprname => '>>', oprleft => 'int4', oprright => 'int4', oprresult => 'int4',
+  oprcode => 'int4shr' },
+
+{ oid => '1886', descr => 'bitwise and',
+  oprname => '&', oprleft => 'int8', oprright => 'int8', oprresult => 'int8',
+  oprcom => '&(int8,int8)', oprcode => 'int8and' },
+{ oid => '1887', descr => 'bitwise or',
+  oprname => '|', oprleft => 'int8', oprright => 'int8', oprresult => 'int8',
+  oprcom => '|(int8,int8)', oprcode => 'int8or' },
+{ oid => '1888', descr => 'bitwise exclusive or',
+  oprname => '#', oprleft => 'int8', oprright => 'int8', oprresult => 'int8',
+  oprcom => '#(int8,int8)', oprcode => 'int8xor' },
+{ oid => '1889', descr => 'bitwise not',
+  oprname => '~', oprkind => 'l', oprleft => '0', oprright => 'int8',
+  oprresult => 'int8', oprcode => 'int8not' },
+{ oid => '1890', descr => 'bitwise shift left',
+  oprname => '<<', oprleft => 'int8', oprright => 'int4', oprresult => 'int8',
+  oprcode => 'int8shl' },
+{ oid => '1891', descr => 'bitwise shift right',
+  oprname => '>>', oprleft => 'int8', oprright => 'int4', oprresult => 'int8',
+  oprcode => 'int8shr' },
+
+{ oid => '1916', descr => 'unary plus',
+  oprname => '+', oprkind => 'l', oprleft => '0', oprright => 'int8',
+  oprresult => 'int8', oprcode => 'int8up' },
+{ oid => '1917', descr => 'unary plus',
+  oprname => '+', oprkind => 'l', oprleft => '0', oprright => 'int2',
+  oprresult => 'int2', oprcode => 'int2up' },
+{ oid => '1918', descr => 'unary plus',
+  oprname => '+', oprkind => 'l', oprleft => '0', oprright => 'int4',
+  oprresult => 'int4', oprcode => 'int4up' },
+{ oid => '1919', descr => 'unary plus',
+  oprname => '+', oprkind => 'l', oprleft => '0', oprright => 'float4',
+  oprresult => 'float4', oprcode => 'float4up' },
+{ oid => '1920', descr => 'unary plus',
+  oprname => '+', oprkind => 'l', oprleft => '0', oprright => 'float8',
+  oprresult => 'float8', oprcode => 'float8up' },
+{ oid => '1921', descr => 'unary plus',
+  oprname => '+', oprkind => 'l', oprleft => '0', oprright => 'numeric',
+  oprresult => 'numeric', oprcode => 'numeric_uplus' },
+
+# bytea operators
+{ oid => '1955', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'bytea',
+  oprright => 'bytea', oprresult => 'bool', oprcom => '=(bytea,bytea)',
+  oprnegate => '<>(bytea,bytea)', oprcode => 'byteaeq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '1956', descr => 'not equal',
+  oprname => '<>', oprleft => 'bytea', oprright => 'bytea', oprresult => 'bool',
+  oprcom => '<>(bytea,bytea)', oprnegate => '=(bytea,bytea)',
+  oprcode => 'byteane', oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '1957', descr => 'less than',
+  oprname => '<', oprleft => 'bytea', oprright => 'bytea', oprresult => 'bool',
+  oprcom => '>(bytea,bytea)', oprnegate => '>=(bytea,bytea)',
+  oprcode => 'bytealt', oprrest => 'scalarltsel',
+  oprjoin => 'scalarltjoinsel' },
+{ oid => '1958', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'bytea', oprright => 'bytea', oprresult => 'bool',
+  oprcom => '>=(bytea,bytea)', oprnegate => '>(bytea,bytea)',
+  oprcode => 'byteale', oprrest => 'scalarlesel',
+  oprjoin => 'scalarlejoinsel' },
+{ oid => '1959', descr => 'greater than',
+  oprname => '>', oprleft => 'bytea', oprright => 'bytea', oprresult => 'bool',
+  oprcom => '<(bytea,bytea)', oprnegate => '<=(bytea,bytea)',
+  oprcode => 'byteagt', oprrest => 'scalargtsel',
+  oprjoin => 'scalargtjoinsel' },
+{ oid => '1960', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'bytea', oprright => 'bytea', oprresult => 'bool',
+  oprcom => '<=(bytea,bytea)', oprnegate => '<(bytea,bytea)',
+  oprcode => 'byteage', oprrest => 'scalargesel',
+  oprjoin => 'scalargejoinsel' },
+
+{ oid => '2016', oid_symbol => 'OID_BYTEA_LIKE_OP',
+  descr => 'matches LIKE expression',
+  oprname => '~~', oprleft => 'bytea', oprright => 'bytea', oprresult => 'bool',
+  oprnegate => '!~~(bytea,bytea)', oprcode => 'bytealike', oprrest => 'likesel',
+  oprjoin => 'likejoinsel' },
+{ oid => '2017', descr => 'does not match LIKE expression',
+  oprname => '!~~', oprleft => 'bytea', oprright => 'bytea',
+  oprresult => 'bool', oprnegate => '~~(bytea,bytea)', oprcode => 'byteanlike',
+  oprrest => 'nlikesel', oprjoin => 'nlikejoinsel' },
+{ oid => '2018', descr => 'concatenate',
+  oprname => '||', oprleft => 'bytea', oprright => 'bytea',
+  oprresult => 'bytea', oprcode => 'byteacat' },
+
+# timestamp operators
+{ oid => '2060', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'timestamp',
+  oprright => 'timestamp', oprresult => 'bool',
+  oprcom => '=(timestamp,timestamp)', oprnegate => '<>(timestamp,timestamp)',
+  oprcode => 'timestamp_eq', oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '2061', descr => 'not equal',
+  oprname => '<>', oprleft => 'timestamp', oprright => 'timestamp',
+  oprresult => 'bool', oprcom => '<>(timestamp,timestamp)',
+  oprnegate => '=(timestamp,timestamp)', oprcode => 'timestamp_ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '2062', descr => 'less than',
+  oprname => '<', oprleft => 'timestamp', oprright => 'timestamp',
+  oprresult => 'bool', oprcom => '>(timestamp,timestamp)',
+  oprnegate => '>=(timestamp,timestamp)', oprcode => 'timestamp_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '2063', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'timestamp', oprright => 'timestamp',
+  oprresult => 'bool', oprcom => '>=(timestamp,timestamp)',
+  oprnegate => '>(timestamp,timestamp)', oprcode => 'timestamp_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '2064', descr => 'greater than',
+  oprname => '>', oprleft => 'timestamp', oprright => 'timestamp',
+  oprresult => 'bool', oprcom => '<(timestamp,timestamp)',
+  oprnegate => '<=(timestamp,timestamp)', oprcode => 'timestamp_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '2065', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'timestamp', oprright => 'timestamp',
+  oprresult => 'bool', oprcom => '<=(timestamp,timestamp)',
+  oprnegate => '<(timestamp,timestamp)', oprcode => 'timestamp_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '2066', descr => 'add',
+  oprname => '+', oprleft => 'timestamp', oprright => 'interval',
+  oprresult => 'timestamp', oprcom => '+(interval,timestamp)',
+  oprcode => 'timestamp_pl_interval' },
+{ oid => '2067', descr => 'subtract',
+  oprname => '-', oprleft => 'timestamp', oprright => 'timestamp',
+  oprresult => 'interval', oprcode => 'timestamp_mi' },
+{ oid => '2068', descr => 'subtract',
+  oprname => '-', oprleft => 'timestamp', oprright => 'interval',
+  oprresult => 'timestamp', oprcode => 'timestamp_mi_interval' },
+
+# character-by-character (not collation order) comparison operators for character types
+{ oid => '2314', descr => 'less than',
+  oprname => '~<~', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprcom => '~>~(text,text)', oprnegate => '~>=~(text,text)',
+  oprcode => 'text_pattern_lt', oprrest => 'scalarltsel',
+  oprjoin => 'scalarltjoinsel' },
+{ oid => '2315', descr => 'less than or equal',
+  oprname => '~<=~', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprcom => '~>=~(text,text)', oprnegate => '~>~(text,text)',
+  oprcode => 'text_pattern_le', oprrest => 'scalarlesel',
+  oprjoin => 'scalarlejoinsel' },
+{ oid => '2317', descr => 'greater than or equal',
+  oprname => '~>=~', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprcom => '~<=~(text,text)', oprnegate => '~<~(text,text)',
+  oprcode => 'text_pattern_ge', oprrest => 'scalargesel',
+  oprjoin => 'scalargejoinsel' },
+{ oid => '2318', descr => 'greater than',
+  oprname => '~>~', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprcom => '~<~(text,text)', oprnegate => '~<=~(text,text)',
+  oprcode => 'text_pattern_gt', oprrest => 'scalargtsel',
+  oprjoin => 'scalargtjoinsel' },
+
+{ oid => '2326', descr => 'less than',
+  oprname => '~<~', oprleft => 'bpchar', oprright => 'bpchar',
+  oprresult => 'bool', oprcom => '~>~(bpchar,bpchar)',
+  oprnegate => '~>=~(bpchar,bpchar)', oprcode => 'bpchar_pattern_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '2327', descr => 'less than or equal',
+  oprname => '~<=~', oprleft => 'bpchar', oprright => 'bpchar',
+  oprresult => 'bool', oprcom => '~>=~(bpchar,bpchar)',
+  oprnegate => '~>~(bpchar,bpchar)', oprcode => 'bpchar_pattern_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '2329', descr => 'greater than or equal',
+  oprname => '~>=~', oprleft => 'bpchar', oprright => 'bpchar',
+  oprresult => 'bool', oprcom => '~<=~(bpchar,bpchar)',
+  oprnegate => '~<~(bpchar,bpchar)', oprcode => 'bpchar_pattern_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '2330', descr => 'greater than',
+  oprname => '~>~', oprleft => 'bpchar', oprright => 'bpchar',
+  oprresult => 'bool', oprcom => '~<~(bpchar,bpchar)',
+  oprnegate => '~<=~(bpchar,bpchar)', oprcode => 'bpchar_pattern_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+
+# crosstype operations for date vs. timestamp and timestamptz
+{ oid => '2345', descr => 'less than',
+  oprname => '<', oprleft => 'date', oprright => 'timestamp',
+  oprresult => 'bool', oprcom => '>(timestamp,date)',
+  oprnegate => '>=(date,timestamp)', oprcode => 'date_lt_timestamp',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '2346', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'date', oprright => 'timestamp',
+  oprresult => 'bool', oprcom => '>=(timestamp,date)',
+  oprnegate => '>(date,timestamp)', oprcode => 'date_le_timestamp',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '2347', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprleft => 'date',
+  oprright => 'timestamp', oprresult => 'bool', oprcom => '=(timestamp,date)',
+  oprnegate => '<>(date,timestamp)', oprcode => 'date_eq_timestamp',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '2348', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'date', oprright => 'timestamp',
+  oprresult => 'bool', oprcom => '<=(timestamp,date)',
+  oprnegate => '<(date,timestamp)', oprcode => 'date_ge_timestamp',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '2349', descr => 'greater than',
+  oprname => '>', oprleft => 'date', oprright => 'timestamp',
+  oprresult => 'bool', oprcom => '<(timestamp,date)',
+  oprnegate => '<=(date,timestamp)', oprcode => 'date_gt_timestamp',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '2350', descr => 'not equal',
+  oprname => '<>', oprleft => 'date', oprright => 'timestamp',
+  oprresult => 'bool', oprcom => '<>(timestamp,date)',
+  oprnegate => '=(date,timestamp)', oprcode => 'date_ne_timestamp',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+
+{ oid => '2358', descr => 'less than',
+  oprname => '<', oprleft => 'date', oprright => 'timestamptz',
+  oprresult => 'bool', oprcom => '>(timestamptz,date)',
+  oprnegate => '>=(date,timestamptz)', oprcode => 'date_lt_timestamptz',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '2359', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'date', oprright => 'timestamptz',
+  oprresult => 'bool', oprcom => '>=(timestamptz,date)',
+  oprnegate => '>(date,timestamptz)', oprcode => 'date_le_timestamptz',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '2360', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprleft => 'date',
+  oprright => 'timestamptz', oprresult => 'bool',
+  oprcom => '=(timestamptz,date)', oprnegate => '<>(date,timestamptz)',
+  oprcode => 'date_eq_timestamptz', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '2361', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'date', oprright => 'timestamptz',
+  oprresult => 'bool', oprcom => '<=(timestamptz,date)',
+  oprnegate => '<(date,timestamptz)', oprcode => 'date_ge_timestamptz',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '2362', descr => 'greater than',
+  oprname => '>', oprleft => 'date', oprright => 'timestamptz',
+  oprresult => 'bool', oprcom => '<(timestamptz,date)',
+  oprnegate => '<=(date,timestamptz)', oprcode => 'date_gt_timestamptz',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '2363', descr => 'not equal',
+  oprname => '<>', oprleft => 'date', oprright => 'timestamptz',
+  oprresult => 'bool', oprcom => '<>(timestamptz,date)',
+  oprnegate => '=(date,timestamptz)', oprcode => 'date_ne_timestamptz',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+
+{ oid => '2371', descr => 'less than',
+  oprname => '<', oprleft => 'timestamp', oprright => 'date',
+  oprresult => 'bool', oprcom => '>(date,timestamp)',
+  oprnegate => '>=(timestamp,date)', oprcode => 'timestamp_lt_date',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '2372', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'timestamp', oprright => 'date',
+  oprresult => 'bool', oprcom => '>=(date,timestamp)',
+  oprnegate => '>(timestamp,date)', oprcode => 'timestamp_le_date',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '2373', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprleft => 'timestamp',
+  oprright => 'date', oprresult => 'bool', oprcom => '=(date,timestamp)',
+  oprnegate => '<>(timestamp,date)', oprcode => 'timestamp_eq_date',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '2374', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'timestamp', oprright => 'date',
+  oprresult => 'bool', oprcom => '<=(date,timestamp)',
+  oprnegate => '<(timestamp,date)', oprcode => 'timestamp_ge_date',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '2375', descr => 'greater than',
+  oprname => '>', oprleft => 'timestamp', oprright => 'date',
+  oprresult => 'bool', oprcom => '<(date,timestamp)',
+  oprnegate => '<=(timestamp,date)', oprcode => 'timestamp_gt_date',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '2376', descr => 'not equal',
+  oprname => '<>', oprleft => 'timestamp', oprright => 'date',
+  oprresult => 'bool', oprcom => '<>(date,timestamp)',
+  oprnegate => '=(timestamp,date)', oprcode => 'timestamp_ne_date',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+
+{ oid => '2384', descr => 'less than',
+  oprname => '<', oprleft => 'timestamptz', oprright => 'date',
+  oprresult => 'bool', oprcom => '>(date,timestamptz)',
+  oprnegate => '>=(timestamptz,date)', oprcode => 'timestamptz_lt_date',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '2385', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'timestamptz', oprright => 'date',
+  oprresult => 'bool', oprcom => '>=(date,timestamptz)',
+  oprnegate => '>(timestamptz,date)', oprcode => 'timestamptz_le_date',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '2386', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprleft => 'timestamptz',
+  oprright => 'date', oprresult => 'bool', oprcom => '=(date,timestamptz)',
+  oprnegate => '<>(timestamptz,date)', oprcode => 'timestamptz_eq_date',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '2387', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'timestamptz', oprright => 'date',
+  oprresult => 'bool', oprcom => '<=(date,timestamptz)',
+  oprnegate => '<(timestamptz,date)', oprcode => 'timestamptz_ge_date',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '2388', descr => 'greater than',
+  oprname => '>', oprleft => 'timestamptz', oprright => 'date',
+  oprresult => 'bool', oprcom => '<(date,timestamptz)',
+  oprnegate => '<=(timestamptz,date)', oprcode => 'timestamptz_gt_date',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '2389', descr => 'not equal',
+  oprname => '<>', oprleft => 'timestamptz', oprright => 'date',
+  oprresult => 'bool', oprcom => '<>(date,timestamptz)',
+  oprnegate => '=(timestamptz,date)', oprcode => 'timestamptz_ne_date',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+
+# crosstype operations for timestamp vs. timestamptz
+{ oid => '2534', descr => 'less than',
+  oprname => '<', oprleft => 'timestamp', oprright => 'timestamptz',
+  oprresult => 'bool', oprcom => '>(timestamptz,timestamp)',
+  oprnegate => '>=(timestamp,timestamptz)',
+  oprcode => 'timestamp_lt_timestamptz', oprrest => 'scalarltsel',
+  oprjoin => 'scalarltjoinsel' },
+{ oid => '2535', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'timestamp', oprright => 'timestamptz',
+  oprresult => 'bool', oprcom => '>=(timestamptz,timestamp)',
+  oprnegate => '>(timestamp,timestamptz)',
+  oprcode => 'timestamp_le_timestamptz', oprrest => 'scalarlesel',
+  oprjoin => 'scalarlejoinsel' },
+{ oid => '2536', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprleft => 'timestamp',
+  oprright => 'timestamptz', oprresult => 'bool',
+  oprcom => '=(timestamptz,timestamp)',
+  oprnegate => '<>(timestamp,timestamptz)',
+  oprcode => 'timestamp_eq_timestamptz', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '2537', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'timestamp', oprright => 'timestamptz',
+  oprresult => 'bool', oprcom => '<=(timestamptz,timestamp)',
+  oprnegate => '<(timestamp,timestamptz)',
+  oprcode => 'timestamp_ge_timestamptz', oprrest => 'scalargesel',
+  oprjoin => 'scalargejoinsel' },
+{ oid => '2538', descr => 'greater than',
+  oprname => '>', oprleft => 'timestamp', oprright => 'timestamptz',
+  oprresult => 'bool', oprcom => '<(timestamptz,timestamp)',
+  oprnegate => '<=(timestamp,timestamptz)',
+  oprcode => 'timestamp_gt_timestamptz', oprrest => 'scalargtsel',
+  oprjoin => 'scalargtjoinsel' },
+{ oid => '2539', descr => 'not equal',
+  oprname => '<>', oprleft => 'timestamp', oprright => 'timestamptz',
+  oprresult => 'bool', oprcom => '<>(timestamptz,timestamp)',
+  oprnegate => '=(timestamp,timestamptz)',
+  oprcode => 'timestamp_ne_timestamptz', oprrest => 'neqsel',
+  oprjoin => 'neqjoinsel' },
+
+{ oid => '2540', descr => 'less than',
+  oprname => '<', oprleft => 'timestamptz', oprright => 'timestamp',
+  oprresult => 'bool', oprcom => '>(timestamp,timestamptz)',
+  oprnegate => '>=(timestamptz,timestamp)',
+  oprcode => 'timestamptz_lt_timestamp', oprrest => 'scalarltsel',
+  oprjoin => 'scalarltjoinsel' },
+{ oid => '2541', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'timestamptz', oprright => 'timestamp',
+  oprresult => 'bool', oprcom => '>=(timestamp,timestamptz)',
+  oprnegate => '>(timestamptz,timestamp)',
+  oprcode => 'timestamptz_le_timestamp', oprrest => 'scalarlesel',
+  oprjoin => 'scalarlejoinsel' },
+{ oid => '2542', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprleft => 'timestamptz',
+  oprright => 'timestamp', oprresult => 'bool',
+  oprcom => '=(timestamp,timestamptz)',
+  oprnegate => '<>(timestamptz,timestamp)',
+  oprcode => 'timestamptz_eq_timestamp', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '2543', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'timestamptz', oprright => 'timestamp',
+  oprresult => 'bool', oprcom => '<=(timestamp,timestamptz)',
+  oprnegate => '<(timestamptz,timestamp)',
+  oprcode => 'timestamptz_ge_timestamp', oprrest => 'scalargesel',
+  oprjoin => 'scalargejoinsel' },
+{ oid => '2544', descr => 'greater than',
+  oprname => '>', oprleft => 'timestamptz', oprright => 'timestamp',
+  oprresult => 'bool', oprcom => '<(timestamp,timestamptz)',
+  oprnegate => '<=(timestamptz,timestamp)',
+  oprcode => 'timestamptz_gt_timestamp', oprrest => 'scalargtsel',
+  oprjoin => 'scalargtjoinsel' },
+{ oid => '2545', descr => 'not equal',
+  oprname => '<>', oprleft => 'timestamptz', oprright => 'timestamp',
+  oprresult => 'bool', oprcom => '<>(timestamp,timestamptz)',
+  oprnegate => '=(timestamptz,timestamp)',
+  oprcode => 'timestamptz_ne_timestamp', oprrest => 'neqsel',
+  oprjoin => 'neqjoinsel' },
+
+# formerly-missing interval + datetime operators
+{ oid => '2551', descr => 'add',
+  oprname => '+', oprleft => 'interval', oprright => 'date',
+  oprresult => 'timestamp', oprcom => '+(date,interval)',
+  oprcode => 'interval_pl_date' },
+{ oid => '2552', descr => 'add',
+  oprname => '+', oprleft => 'interval', oprright => 'timetz',
+  oprresult => 'timetz', oprcom => '+(timetz,interval)',
+  oprcode => 'interval_pl_timetz' },
+{ oid => '2553', descr => 'add',
+  oprname => '+', oprleft => 'interval', oprright => 'timestamp',
+  oprresult => 'timestamp', oprcom => '+(timestamp,interval)',
+  oprcode => 'interval_pl_timestamp' },
+{ oid => '2554', descr => 'add',
+  oprname => '+', oprleft => 'interval', oprright => 'timestamptz',
+  oprresult => 'timestamptz', oprcom => '+(timestamptz,interval)',
+  oprcode => 'interval_pl_timestamptz' },
+{ oid => '2555', descr => 'add',
+  oprname => '+', oprleft => 'int4', oprright => 'date', oprresult => 'date',
+  oprcom => '+(date,int4)', oprcode => 'integer_pl_date' },
+
+# new operators for Y-direction rtree opfamilies
+{ oid => '2570', descr => 'is below',
+  oprname => '<<|', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcode => 'box_below', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '2571', descr => 'overlaps or is below',
+  oprname => '&<|', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcode => 'box_overbelow', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '2572', descr => 'overlaps or is above',
+  oprname => '|&>', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcode => 'box_overabove', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '2573', descr => 'is above',
+  oprname => '|>>', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcode => 'box_above', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '2574', descr => 'is below',
+  oprname => '<<|', oprleft => 'polygon', oprright => 'polygon',
+  oprresult => 'bool', oprcode => 'poly_below', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '2575', descr => 'overlaps or is below',
+  oprname => '&<|', oprleft => 'polygon', oprright => 'polygon',
+  oprresult => 'bool', oprcode => 'poly_overbelow', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '2576', descr => 'overlaps or is above',
+  oprname => '|&>', oprleft => 'polygon', oprright => 'polygon',
+  oprresult => 'bool', oprcode => 'poly_overabove', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '2577', descr => 'is above',
+  oprname => '|>>', oprleft => 'polygon', oprright => 'polygon',
+  oprresult => 'bool', oprcode => 'poly_above', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '2589', descr => 'overlaps or is below',
+  oprname => '&<|', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcode => 'circle_overbelow', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+{ oid => '2590', descr => 'overlaps or is above',
+  oprname => '|&>', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcode => 'circle_overabove', oprrest => 'positionsel',
+  oprjoin => 'positionjoinsel' },
+
+# overlap/contains/contained for arrays
+{ oid => '2750', oid_symbol => 'OID_ARRAY_OVERLAP_OP', descr => 'overlaps',
+  oprname => '&&', oprleft => 'anyarray', oprright => 'anyarray',
+  oprresult => 'bool', oprcom => '&&(anyarray,anyarray)',
+  oprcode => 'arrayoverlap', oprrest => 'arraycontsel',
+  oprjoin => 'arraycontjoinsel' },
+{ oid => '2751', oid_symbol => 'OID_ARRAY_CONTAINS_OP', descr => 'contains',
+  oprname => '@>', oprleft => 'anyarray', oprright => 'anyarray',
+  oprresult => 'bool', oprcom => '<@(anyarray,anyarray)',
+  oprcode => 'arraycontains', oprrest => 'arraycontsel',
+  oprjoin => 'arraycontjoinsel' },
+{ oid => '2752', oid_symbol => 'OID_ARRAY_CONTAINED_OP',
+  descr => 'is contained by',
+  oprname => '<@', oprleft => 'anyarray', oprright => 'anyarray',
+  oprresult => 'bool', oprcom => '@>(anyarray,anyarray)',
+  oprcode => 'arraycontained', oprrest => 'arraycontsel',
+  oprjoin => 'arraycontjoinsel' },
+
+# capturing operators to preserve pre-8.3 behavior of text concatenation
+{ oid => '2779', descr => 'concatenate',
+  oprname => '||', oprleft => 'text', oprright => 'anynonarray',
+  oprresult => 'text', oprcode => 'textanycat' },
+{ oid => '2780', descr => 'concatenate',
+  oprname => '||', oprleft => 'anynonarray', oprright => 'text',
+  oprresult => 'text', oprcode => 'anytextcat' },
+
+# obsolete names for contains/contained-by operators; remove these someday
+{ oid => '2860', descr => 'deprecated, use <@ instead',
+  oprname => '@', oprleft => 'polygon', oprright => 'polygon',
+  oprresult => 'bool', oprcom => '~(polygon,polygon)',
+  oprcode => 'poly_contained', oprrest => 'contsel', oprjoin => 'contjoinsel' },
+{ oid => '2861', descr => 'deprecated, use @> instead',
+  oprname => '~', oprleft => 'polygon', oprright => 'polygon',
+  oprresult => 'bool', oprcom => '@(polygon,polygon)',
+  oprcode => 'poly_contain', oprrest => 'contsel', oprjoin => 'contjoinsel' },
+{ oid => '2862', descr => 'deprecated, use <@ instead',
+  oprname => '@', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcom => '~(box,box)', oprcode => 'box_contained', oprrest => 'contsel',
+  oprjoin => 'contjoinsel' },
+{ oid => '2863', descr => 'deprecated, use @> instead',
+  oprname => '~', oprleft => 'box', oprright => 'box', oprresult => 'bool',
+  oprcom => '@(box,box)', oprcode => 'box_contain', oprrest => 'contsel',
+  oprjoin => 'contjoinsel' },
+{ oid => '2864', descr => 'deprecated, use <@ instead',
+  oprname => '@', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcom => '~(circle,circle)',
+  oprcode => 'circle_contained', oprrest => 'contsel',
+  oprjoin => 'contjoinsel' },
+{ oid => '2865', descr => 'deprecated, use @> instead',
+  oprname => '~', oprleft => 'circle', oprright => 'circle',
+  oprresult => 'bool', oprcom => '@(circle,circle)',
+  oprcode => 'circle_contain', oprrest => 'contsel', oprjoin => 'contjoinsel' },
+{ oid => '2866', descr => 'deprecated, use <@ instead',
+  oprname => '@', oprleft => 'point', oprright => 'box', oprresult => 'bool',
+  oprcode => 'on_pb' },
+{ oid => '2867', descr => 'deprecated, use <@ instead',
+  oprname => '@', oprleft => 'point', oprright => 'path', oprresult => 'bool',
+  oprcom => '~(path,point)', oprcode => 'on_ppath' },
+{ oid => '2868', descr => 'deprecated, use @> instead',
+  oprname => '~', oprleft => 'path', oprright => 'point', oprresult => 'bool',
+  oprcom => '@(point,path)', oprcode => 'path_contain_pt' },
+{ oid => '2869', descr => 'deprecated, use <@ instead',
+  oprname => '@', oprleft => 'point', oprright => 'polygon',
+  oprresult => 'bool', oprcom => '~(polygon,point)',
+  oprcode => 'pt_contained_poly' },
+{ oid => '2870', descr => 'deprecated, use @> instead',
+  oprname => '~', oprleft => 'polygon', oprright => 'point',
+  oprresult => 'bool', oprcom => '@(point,polygon)',
+  oprcode => 'poly_contain_pt' },
+{ oid => '2871', descr => 'deprecated, use <@ instead',
+  oprname => '@', oprleft => 'point', oprright => 'circle', oprresult => 'bool',
+  oprcom => '~(circle,point)', oprcode => 'pt_contained_circle' },
+{ oid => '2872', descr => 'deprecated, use @> instead',
+  oprname => '~', oprleft => 'circle', oprright => 'point', oprresult => 'bool',
+  oprcom => '@(point,circle)', oprcode => 'circle_contain_pt' },
+{ oid => '2873', descr => 'deprecated, use <@ instead',
+  oprname => '@', oprleft => 'point', oprright => 'line', oprresult => 'bool',
+  oprcode => 'on_pl' },
+{ oid => '2874', descr => 'deprecated, use <@ instead',
+  oprname => '@', oprleft => 'point', oprright => 'lseg', oprresult => 'bool',
+  oprcode => 'on_ps' },
+{ oid => '2875', descr => 'deprecated, use <@ instead',
+  oprname => '@', oprleft => 'lseg', oprright => 'line', oprresult => 'bool',
+  oprcode => 'on_sl' },
+{ oid => '2876', descr => 'deprecated, use <@ instead',
+  oprname => '@', oprleft => 'lseg', oprright => 'box', oprresult => 'bool',
+  oprcode => 'on_sb' },
+{ oid => '2877', descr => 'deprecated, use @> instead',
+  oprname => '~', oprleft => '_aclitem', oprright => 'aclitem',
+  oprresult => 'bool', oprcode => 'aclcontains' },
+
+# uuid operators
+{ oid => '2972', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'uuid',
+  oprright => 'uuid', oprresult => 'bool', oprcom => '=(uuid,uuid)',
+  oprnegate => '<>(uuid,uuid)', oprcode => 'uuid_eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '2973', descr => 'not equal',
+  oprname => '<>', oprleft => 'uuid', oprright => 'uuid', oprresult => 'bool',
+  oprcom => '<>(uuid,uuid)', oprnegate => '=(uuid,uuid)', oprcode => 'uuid_ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '2974', descr => 'less than',
+  oprname => '<', oprleft => 'uuid', oprright => 'uuid', oprresult => 'bool',
+  oprcom => '>(uuid,uuid)', oprnegate => '>=(uuid,uuid)', oprcode => 'uuid_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '2975', descr => 'greater than',
+  oprname => '>', oprleft => 'uuid', oprright => 'uuid', oprresult => 'bool',
+  oprcom => '<(uuid,uuid)', oprnegate => '<=(uuid,uuid)', oprcode => 'uuid_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '2976', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'uuid', oprright => 'uuid', oprresult => 'bool',
+  oprcom => '>=(uuid,uuid)', oprnegate => '>(uuid,uuid)', oprcode => 'uuid_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '2977', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'uuid', oprright => 'uuid', oprresult => 'bool',
+  oprcom => '<=(uuid,uuid)', oprnegate => '<(uuid,uuid)', oprcode => 'uuid_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+# pg_lsn operators
+{ oid => '3222', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'pg_lsn',
+  oprright => 'pg_lsn', oprresult => 'bool', oprcom => '=(pg_lsn,pg_lsn)',
+  oprnegate => '<>(pg_lsn,pg_lsn)', oprcode => 'pg_lsn_eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '3223', descr => 'not equal',
+  oprname => '<>', oprleft => 'pg_lsn', oprright => 'pg_lsn',
+  oprresult => 'bool', oprcom => '<>(pg_lsn,pg_lsn)',
+  oprnegate => '=(pg_lsn,pg_lsn)', oprcode => 'pg_lsn_ne', oprrest => 'neqsel',
+  oprjoin => 'neqjoinsel' },
+{ oid => '3224', descr => 'less than',
+  oprname => '<', oprleft => 'pg_lsn', oprright => 'pg_lsn',
+  oprresult => 'bool', oprcom => '>(pg_lsn,pg_lsn)',
+  oprnegate => '>=(pg_lsn,pg_lsn)', oprcode => 'pg_lsn_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '3225', descr => 'greater than',
+  oprname => '>', oprleft => 'pg_lsn', oprright => 'pg_lsn',
+  oprresult => 'bool', oprcom => '<(pg_lsn,pg_lsn)',
+  oprnegate => '<=(pg_lsn,pg_lsn)', oprcode => 'pg_lsn_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '3226', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'pg_lsn', oprright => 'pg_lsn',
+  oprresult => 'bool', oprcom => '>=(pg_lsn,pg_lsn)',
+  oprnegate => '>(pg_lsn,pg_lsn)', oprcode => 'pg_lsn_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '3227', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'pg_lsn', oprright => 'pg_lsn',
+  oprresult => 'bool', oprcom => '<=(pg_lsn,pg_lsn)',
+  oprnegate => '<(pg_lsn,pg_lsn)', oprcode => 'pg_lsn_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '3228', descr => 'minus',
+  oprname => '-', oprleft => 'pg_lsn', oprright => 'pg_lsn',
+  oprresult => 'numeric', oprcode => 'pg_lsn_mi' },
+
+# enum operators
+{ oid => '3516', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'anyenum',
+  oprright => 'anyenum', oprresult => 'bool', oprcom => '=(anyenum,anyenum)',
+  oprnegate => '<>(anyenum,anyenum)', oprcode => 'enum_eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '3517', descr => 'not equal',
+  oprname => '<>', oprleft => 'anyenum', oprright => 'anyenum',
+  oprresult => 'bool', oprcom => '<>(anyenum,anyenum)',
+  oprnegate => '=(anyenum,anyenum)', oprcode => 'enum_ne', oprrest => 'neqsel',
+  oprjoin => 'neqjoinsel' },
+{ oid => '3518', descr => 'less than',
+  oprname => '<', oprleft => 'anyenum', oprright => 'anyenum',
+  oprresult => 'bool', oprcom => '>(anyenum,anyenum)',
+  oprnegate => '>=(anyenum,anyenum)', oprcode => 'enum_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '3519', descr => 'greater than',
+  oprname => '>', oprleft => 'anyenum', oprright => 'anyenum',
+  oprresult => 'bool', oprcom => '<(anyenum,anyenum)',
+  oprnegate => '<=(anyenum,anyenum)', oprcode => 'enum_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '3520', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'anyenum', oprright => 'anyenum',
+  oprresult => 'bool', oprcom => '>=(anyenum,anyenum)',
+  oprnegate => '>(anyenum,anyenum)', oprcode => 'enum_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '3521', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'anyenum', oprright => 'anyenum',
+  oprresult => 'bool', oprcom => '<=(anyenum,anyenum)',
+  oprnegate => '<(anyenum,anyenum)', oprcode => 'enum_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+# tsearch operations
+{ oid => '3627', descr => 'less than',
+  oprname => '<', oprleft => 'tsvector', oprright => 'tsvector',
+  oprresult => 'bool', oprcom => '>(tsvector,tsvector)',
+  oprnegate => '>=(tsvector,tsvector)', oprcode => 'tsvector_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '3628', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'tsvector', oprright => 'tsvector',
+  oprresult => 'bool', oprcom => '>=(tsvector,tsvector)',
+  oprnegate => '>(tsvector,tsvector)', oprcode => 'tsvector_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '3629', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprleft => 'tsvector',
+  oprright => 'tsvector', oprresult => 'bool', oprcom => '=(tsvector,tsvector)',
+  oprnegate => '<>(tsvector,tsvector)', oprcode => 'tsvector_eq',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '3630', descr => 'not equal',
+  oprname => '<>', oprleft => 'tsvector', oprright => 'tsvector',
+  oprresult => 'bool', oprcom => '<>(tsvector,tsvector)',
+  oprnegate => '=(tsvector,tsvector)', oprcode => 'tsvector_ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '3631', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'tsvector', oprright => 'tsvector',
+  oprresult => 'bool', oprcom => '<=(tsvector,tsvector)',
+  oprnegate => '<(tsvector,tsvector)', oprcode => 'tsvector_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '3632', descr => 'greater than',
+  oprname => '>', oprleft => 'tsvector', oprright => 'tsvector',
+  oprresult => 'bool', oprcom => '<(tsvector,tsvector)',
+  oprnegate => '<=(tsvector,tsvector)', oprcode => 'tsvector_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '3633', descr => 'concatenate',
+  oprname => '||', oprleft => 'tsvector', oprright => 'tsvector',
+  oprresult => 'tsvector', oprcode => 'tsvector_concat' },
+{ oid => '3636', descr => 'text search match',
+  oprname => '@@', oprleft => 'tsvector', oprright => 'tsquery',
+  oprresult => 'bool', oprcom => '@@(tsquery,tsvector)',
+  oprcode => 'ts_match_vq', oprrest => 'tsmatchsel',
+  oprjoin => 'tsmatchjoinsel' },
+{ oid => '3637', descr => 'text search match',
+  oprname => '@@', oprleft => 'tsquery', oprright => 'tsvector',
+  oprresult => 'bool', oprcom => '@@(tsvector,tsquery)',
+  oprcode => 'ts_match_qv', oprrest => 'tsmatchsel',
+  oprjoin => 'tsmatchjoinsel' },
+{ oid => '3660', descr => 'deprecated, use @@ instead',
+  oprname => '@@@', oprleft => 'tsvector', oprright => 'tsquery',
+  oprresult => 'bool', oprcom => '@@@(tsquery,tsvector)',
+  oprcode => 'ts_match_vq', oprrest => 'tsmatchsel',
+  oprjoin => 'tsmatchjoinsel' },
+{ oid => '3661', descr => 'deprecated, use @@ instead',
+  oprname => '@@@', oprleft => 'tsquery', oprright => 'tsvector',
+  oprresult => 'bool', oprcom => '@@@(tsvector,tsquery)',
+  oprcode => 'ts_match_qv', oprrest => 'tsmatchsel',
+  oprjoin => 'tsmatchjoinsel' },
+{ oid => '3674', descr => 'less than',
+  oprname => '<', oprleft => 'tsquery', oprright => 'tsquery',
+  oprresult => 'bool', oprcom => '>(tsquery,tsquery)',
+  oprnegate => '>=(tsquery,tsquery)', oprcode => 'tsquery_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '3675', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'tsquery', oprright => 'tsquery',
+  oprresult => 'bool', oprcom => '>=(tsquery,tsquery)',
+  oprnegate => '>(tsquery,tsquery)', oprcode => 'tsquery_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '3676', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprleft => 'tsquery',
+  oprright => 'tsquery', oprresult => 'bool', oprcom => '=(tsquery,tsquery)',
+  oprnegate => '<>(tsquery,tsquery)', oprcode => 'tsquery_eq',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '3677', descr => 'not equal',
+  oprname => '<>', oprleft => 'tsquery', oprright => 'tsquery',
+  oprresult => 'bool', oprcom => '<>(tsquery,tsquery)',
+  oprnegate => '=(tsquery,tsquery)', oprcode => 'tsquery_ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '3678', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'tsquery', oprright => 'tsquery',
+  oprresult => 'bool', oprcom => '<=(tsquery,tsquery)',
+  oprnegate => '<(tsquery,tsquery)', oprcode => 'tsquery_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+{ oid => '3679', descr => 'greater than',
+  oprname => '>', oprleft => 'tsquery', oprright => 'tsquery',
+  oprresult => 'bool', oprcom => '<(tsquery,tsquery)',
+  oprnegate => '<=(tsquery,tsquery)', oprcode => 'tsquery_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '3680', descr => 'AND-concatenate',
+  oprname => '&&', oprleft => 'tsquery', oprright => 'tsquery',
+  oprresult => 'tsquery', oprcode => 'tsquery_and' },
+{ oid => '3681', descr => 'OR-concatenate',
+  oprname => '||', oprleft => 'tsquery', oprright => 'tsquery',
+  oprresult => 'tsquery', oprcode => 'tsquery_or' },
+{ oid => '5005', descr => 'phrase-concatenate',
+  oprname => '<->', oprleft => 'tsquery', oprright => 'tsquery',
+  oprresult => 'tsquery', oprcode => 'tsquery_phrase(tsquery,tsquery)' },
+{ oid => '3682', descr => 'NOT tsquery',
+  oprname => '!!', oprkind => 'l', oprleft => '0', oprright => 'tsquery',
+  oprresult => 'tsquery', oprcode => 'tsquery_not' },
+{ oid => '3693', descr => 'contains',
+  oprname => '@>', oprleft => 'tsquery', oprright => 'tsquery',
+  oprresult => 'bool', oprcom => '<@(tsquery,tsquery)',
+  oprcode => 'tsq_mcontains', oprrest => 'contsel', oprjoin => 'contjoinsel' },
+{ oid => '3694', descr => 'is contained by',
+  oprname => '<@', oprleft => 'tsquery', oprright => 'tsquery',
+  oprresult => 'bool', oprcom => '@>(tsquery,tsquery)',
+  oprcode => 'tsq_mcontained', oprrest => 'contsel', oprjoin => 'contjoinsel' },
+{ oid => '3762', descr => 'text search match',
+  oprname => '@@', oprleft => 'text', oprright => 'text', oprresult => 'bool',
+  oprcode => 'ts_match_tt', oprrest => 'contsel', oprjoin => 'contjoinsel' },
+{ oid => '3763', descr => 'text search match',
+  oprname => '@@', oprleft => 'text', oprright => 'tsquery',
+  oprresult => 'bool', oprcode => 'ts_match_tq', oprrest => 'contsel',
+  oprjoin => 'contjoinsel' },
+
+# generic record comparison operators
+{ oid => '2988', oid_symbol => 'RECORD_EQ_OP', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprleft => 'record', oprright => 'record',
+  oprresult => 'bool', oprcom => '=(record,record)',
+  oprnegate => '<>(record,record)', oprcode => 'record_eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '2989', descr => 'not equal',
+  oprname => '<>', oprleft => 'record', oprright => 'record',
+  oprresult => 'bool', oprcom => '<>(record,record)',
+  oprnegate => '=(record,record)', oprcode => 'record_ne', oprrest => 'neqsel',
+  oprjoin => 'neqjoinsel' },
+{ oid => '2990', oid_symbol => 'RECORD_LT_OP', descr => 'less than',
+  oprname => '<', oprleft => 'record', oprright => 'record',
+  oprresult => 'bool', oprcom => '>(record,record)',
+  oprnegate => '>=(record,record)', oprcode => 'record_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '2991', oid_symbol => 'RECORD_GT_OP', descr => 'greater than',
+  oprname => '>', oprleft => 'record', oprright => 'record',
+  oprresult => 'bool', oprcom => '<(record,record)',
+  oprnegate => '<=(record,record)', oprcode => 'record_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '2992', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'record', oprright => 'record',
+  oprresult => 'bool', oprcom => '>=(record,record)',
+  oprnegate => '>(record,record)', oprcode => 'record_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '2993', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'record', oprright => 'record',
+  oprresult => 'bool', oprcom => '<=(record,record)',
+  oprnegate => '<(record,record)', oprcode => 'record_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+# byte-oriented tests for identical rows and fast sorting
+{ oid => '3188', descr => 'identical',
+  oprname => '*=', oprcanmerge => 't', oprleft => 'record',
+  oprright => 'record', oprresult => 'bool', oprcom => '*=(record,record)',
+  oprnegate => '*<>(record,record)', oprcode => 'record_image_eq',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '3189', descr => 'not identical',
+  oprname => '*<>', oprleft => 'record', oprright => 'record',
+  oprresult => 'bool', oprcom => '*<>(record,record)',
+  oprnegate => '*=(record,record)', oprcode => 'record_image_ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '3190', descr => 'less than',
+  oprname => '*<', oprleft => 'record', oprright => 'record',
+  oprresult => 'bool', oprcom => '*>(record,record)',
+  oprnegate => '*>=(record,record)', oprcode => 'record_image_lt',
+  oprrest => 'scalarltsel', oprjoin => 'scalarltjoinsel' },
+{ oid => '3191', descr => 'greater than',
+  oprname => '*>', oprleft => 'record', oprright => 'record',
+  oprresult => 'bool', oprcom => '*<(record,record)',
+  oprnegate => '*<=(record,record)', oprcode => 'record_image_gt',
+  oprrest => 'scalargtsel', oprjoin => 'scalargtjoinsel' },
+{ oid => '3192', descr => 'less than or equal',
+  oprname => '*<=', oprleft => 'record', oprright => 'record',
+  oprresult => 'bool', oprcom => '*>=(record,record)',
+  oprnegate => '*>(record,record)', oprcode => 'record_image_le',
+  oprrest => 'scalarlesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '3193', descr => 'greater than or equal',
+  oprname => '*>=', oprleft => 'record', oprright => 'record',
+  oprresult => 'bool', oprcom => '*<=(record,record)',
+  oprnegate => '*<(record,record)', oprcode => 'record_image_ge',
+  oprrest => 'scalargesel', oprjoin => 'scalargejoinsel' },
+
+# generic range type operators
+{ oid => '3882', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'anyrange',
+  oprright => 'anyrange', oprresult => 'bool', oprcom => '=(anyrange,anyrange)',
+  oprnegate => '<>(anyrange,anyrange)', oprcode => 'range_eq',
+  oprrest => 'eqsel', oprjoin => 'eqjoinsel' },
+{ oid => '3883', descr => 'not equal',
+  oprname => '<>', oprleft => 'anyrange', oprright => 'anyrange',
+  oprresult => 'bool', oprcom => '<>(anyrange,anyrange)',
+  oprnegate => '=(anyrange,anyrange)', oprcode => 'range_ne',
+  oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '3884', oid_symbol => 'OID_RANGE_LESS_OP', descr => 'less than',
+  oprname => '<', oprleft => 'anyrange', oprright => 'anyrange',
+  oprresult => 'bool', oprcom => '>(anyrange,anyrange)',
+  oprnegate => '>=(anyrange,anyrange)', oprcode => 'range_lt',
+  oprrest => 'rangesel', oprjoin => 'scalarltjoinsel' },
+{ oid => '3885', oid_symbol => 'OID_RANGE_LESS_EQUAL_OP',
+  descr => 'less than or equal',
+  oprname => '<=', oprleft => 'anyrange', oprright => 'anyrange',
+  oprresult => 'bool', oprcom => '>=(anyrange,anyrange)',
+  oprnegate => '>(anyrange,anyrange)', oprcode => 'range_le',
+  oprrest => 'rangesel', oprjoin => 'scalarlejoinsel' },
+{ oid => '3886', oid_symbol => 'OID_RANGE_GREATER_EQUAL_OP',
+  descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'anyrange', oprright => 'anyrange',
+  oprresult => 'bool', oprcom => '<=(anyrange,anyrange)',
+  oprnegate => '<(anyrange,anyrange)', oprcode => 'range_ge',
+  oprrest => 'rangesel', oprjoin => 'scalargejoinsel' },
+{ oid => '3887', oid_symbol => 'OID_RANGE_GREATER_OP',
+  descr => 'greater than',
+  oprname => '>', oprleft => 'anyrange', oprright => 'anyrange',
+  oprresult => 'bool', oprcom => '<(anyrange,anyrange)',
+  oprnegate => '<=(anyrange,anyrange)', oprcode => 'range_gt',
+  oprrest => 'rangesel', oprjoin => 'scalargtjoinsel' },
+{ oid => '3888', oid_symbol => 'OID_RANGE_OVERLAP_OP', descr => 'overlaps',
+  oprname => '&&', oprleft => 'anyrange', oprright => 'anyrange',
+  oprresult => 'bool', oprcom => '&&(anyrange,anyrange)',
+  oprcode => 'range_overlaps', oprrest => 'rangesel',
+  oprjoin => 'areajoinsel' },
+{ oid => '3889', oid_symbol => 'OID_RANGE_CONTAINS_ELEM_OP',
+  descr => 'contains',
+  oprname => '@>', oprleft => 'anyrange', oprright => 'anyelement',
+  oprresult => 'bool', oprcom => '<@(anyelement,anyrange)',
+  oprcode => 'range_contains_elem', oprrest => 'rangesel',
+  oprjoin => 'contjoinsel' },
+{ oid => '3890', oid_symbol => 'OID_RANGE_CONTAINS_OP', descr => 'contains',
+  oprname => '@>', oprleft => 'anyrange', oprright => 'anyrange',
+  oprresult => 'bool', oprcom => '<@(anyrange,anyrange)',
+  oprcode => 'range_contains', oprrest => 'rangesel',
+  oprjoin => 'contjoinsel' },
+{ oid => '3891', oid_symbol => 'OID_RANGE_ELEM_CONTAINED_OP',
+  descr => 'is contained by',
+  oprname => '<@', oprleft => 'anyelement', oprright => 'anyrange',
+  oprresult => 'bool', oprcom => '@>(anyrange,anyelement)',
+  oprcode => 'elem_contained_by_range', oprrest => 'rangesel',
+  oprjoin => 'contjoinsel' },
+{ oid => '3892', oid_symbol => 'OID_RANGE_CONTAINED_OP',
+  descr => 'is contained by',
+  oprname => '<@', oprleft => 'anyrange', oprright => 'anyrange',
+  oprresult => 'bool', oprcom => '@>(anyrange,anyrange)',
+  oprcode => 'range_contained_by', oprrest => 'rangesel',
+  oprjoin => 'contjoinsel' },
+{ oid => '3893', oid_symbol => 'OID_RANGE_LEFT_OP', descr => 'is left of',
+  oprname => '<<', oprleft => 'anyrange', oprright => 'anyrange',
+  oprresult => 'bool', oprcom => '>>(anyrange,anyrange)',
+  oprcode => 'range_before', oprrest => 'rangesel',
+  oprjoin => 'scalarltjoinsel' },
+{ oid => '3894', oid_symbol => 'OID_RANGE_RIGHT_OP', descr => 'is right of',
+  oprname => '>>', oprleft => 'anyrange', oprright => 'anyrange',
+  oprresult => 'bool', oprcom => '<<(anyrange,anyrange)',
+  oprcode => 'range_after', oprrest => 'rangesel',
+  oprjoin => 'scalargtjoinsel' },
+{ oid => '3895', oid_symbol => 'OID_RANGE_OVERLAPS_LEFT_OP',
+  descr => 'overlaps or is left of',
+  oprname => '&<', oprleft => 'anyrange', oprright => 'anyrange',
+  oprresult => 'bool', oprcode => 'range_overleft', oprrest => 'rangesel',
+  oprjoin => 'scalarltjoinsel' },
+{ oid => '3896', oid_symbol => 'OID_RANGE_OVERLAPS_RIGHT_OP',
+  descr => 'overlaps or is right of',
+  oprname => '&>', oprleft => 'anyrange', oprright => 'anyrange',
+  oprresult => 'bool', oprcode => 'range_overright', oprrest => 'rangesel',
+  oprjoin => 'scalargtjoinsel' },
+{ oid => '3897', descr => 'is adjacent to',
+  oprname => '-|-', oprleft => 'anyrange', oprright => 'anyrange',
+  oprresult => 'bool', oprcom => '-|-(anyrange,anyrange)',
+  oprcode => 'range_adjacent', oprrest => 'contsel', oprjoin => 'contjoinsel' },
+{ oid => '3898', descr => 'range union',
+  oprname => '+', oprleft => 'anyrange', oprright => 'anyrange',
+  oprresult => 'anyrange', oprcom => '+(anyrange,anyrange)',
+  oprcode => 'range_union' },
+{ oid => '3899', descr => 'range difference',
+  oprname => '-', oprleft => 'anyrange', oprright => 'anyrange',
+  oprresult => 'anyrange', oprcode => 'range_minus' },
+{ oid => '3900', descr => 'range intersection',
+  oprname => '*', oprleft => 'anyrange', oprright => 'anyrange',
+  oprresult => 'anyrange', oprcom => '*(anyrange,anyrange)',
+  oprcode => 'range_intersect' },
+{ oid => '3962', descr => 'get json object field',
+  oprname => '->', oprleft => 'json', oprright => 'text', oprresult => 'json',
+  oprcode => 'json_object_field' },
+{ oid => '3963', descr => 'get json object field as text',
+  oprname => '->>', oprleft => 'json', oprright => 'text', oprresult => 'text',
+  oprcode => 'json_object_field_text' },
+{ oid => '3964', descr => 'get json array element',
+  oprname => '->', oprleft => 'json', oprright => 'int4', oprresult => 'json',
+  oprcode => 'json_array_element' },
+{ oid => '3965', descr => 'get json array element as text',
+  oprname => '->>', oprleft => 'json', oprright => 'int4', oprresult => 'text',
+  oprcode => 'json_array_element_text' },
+{ oid => '3966', descr => 'get value from json with path elements',
+  oprname => '#>', oprleft => 'json', oprright => '_text', oprresult => 'json',
+  oprcode => 'json_extract_path' },
+{ oid => '3967', descr => 'get value from json as text with path elements',
+  oprname => '#>>', oprleft => 'json', oprright => '_text', oprresult => 'text',
+  oprcode => 'json_extract_path_text' },
+{ oid => '3211', descr => 'get jsonb object field',
+  oprname => '->', oprleft => 'jsonb', oprright => 'text', oprresult => 'jsonb',
+  oprcode => 'jsonb_object_field' },
+{ oid => '3477', descr => 'get jsonb object field as text',
+  oprname => '->>', oprleft => 'jsonb', oprright => 'text', oprresult => 'text',
+  oprcode => 'jsonb_object_field_text' },
+{ oid => '3212', descr => 'get jsonb array element',
+  oprname => '->', oprleft => 'jsonb', oprright => 'int4', oprresult => 'jsonb',
+  oprcode => 'jsonb_array_element' },
+{ oid => '3481', descr => 'get jsonb array element as text',
+  oprname => '->>', oprleft => 'jsonb', oprright => 'int4', oprresult => 'text',
+  oprcode => 'jsonb_array_element_text' },
+{ oid => '3213', descr => 'get value from jsonb with path elements',
+  oprname => '#>', oprleft => 'jsonb', oprright => '_text',
+  oprresult => 'jsonb', oprcode => 'jsonb_extract_path' },
+{ oid => '3206', descr => 'get value from jsonb as text with path elements',
+  oprname => '#>>', oprleft => 'jsonb', oprright => '_text',
+  oprresult => 'text', oprcode => 'jsonb_extract_path_text' },
+{ oid => '3240', descr => 'equal',
+  oprname => '=', oprcanmerge => 't', oprcanhash => 't', oprleft => 'jsonb',
+  oprright => 'jsonb', oprresult => 'bool', oprcom => '=(jsonb,jsonb)',
+  oprnegate => '<>(jsonb,jsonb)', oprcode => 'jsonb_eq', oprrest => 'eqsel',
+  oprjoin => 'eqjoinsel' },
+{ oid => '3241', descr => 'not equal',
+  oprname => '<>', oprleft => 'jsonb', oprright => 'jsonb', oprresult => 'bool',
+  oprcom => '<>(jsonb,jsonb)', oprnegate => '=(jsonb,jsonb)',
+  oprcode => 'jsonb_ne', oprrest => 'neqsel', oprjoin => 'neqjoinsel' },
+{ oid => '3242', descr => 'less than',
+  oprname => '<', oprleft => 'jsonb', oprright => 'jsonb', oprresult => 'bool',
+  oprcom => '>(jsonb,jsonb)', oprnegate => '>=(jsonb,jsonb)',
+  oprcode => 'jsonb_lt', oprrest => 'scalarltsel',
+  oprjoin => 'scalarltjoinsel' },
+{ oid => '3243', descr => 'greater than',
+  oprname => '>', oprleft => 'jsonb', oprright => 'jsonb', oprresult => 'bool',
+  oprcom => '<(jsonb,jsonb)', oprnegate => '<=(jsonb,jsonb)',
+  oprcode => 'jsonb_gt', oprrest => 'scalargtsel',
+  oprjoin => 'scalargtjoinsel' },
+{ oid => '3244', descr => 'less than or equal',
+  oprname => '<=', oprleft => 'jsonb', oprright => 'jsonb', oprresult => 'bool',
+  oprcom => '>=(jsonb,jsonb)', oprnegate => '>(jsonb,jsonb)',
+  oprcode => 'jsonb_le', oprrest => 'scalarlesel',
+  oprjoin => 'scalarlejoinsel' },
+{ oid => '3245', descr => 'greater than or equal',
+  oprname => '>=', oprleft => 'jsonb', oprright => 'jsonb', oprresult => 'bool',
+  oprcom => '<=(jsonb,jsonb)', oprnegate => '<(jsonb,jsonb)',
+  oprcode => 'jsonb_ge', oprrest => 'scalargesel',
+  oprjoin => 'scalargejoinsel' },
+{ oid => '3246', descr => 'contains',
+  oprname => '@>', oprleft => 'jsonb', oprright => 'jsonb', oprresult => 'bool',
+  oprcom => '<@(jsonb,jsonb)', oprcode => 'jsonb_contains',
+  oprrest => 'contsel', oprjoin => 'contjoinsel' },
+{ oid => '3247', descr => 'key exists',
+  oprname => '?', oprleft => 'jsonb', oprright => 'text', oprresult => 'bool',
+  oprcode => 'jsonb_exists', oprrest => 'contsel', oprjoin => 'contjoinsel' },
+{ oid => '3248', descr => 'any key exists',
+  oprname => '?|', oprleft => 'jsonb', oprright => '_text', oprresult => 'bool',
+  oprcode => 'jsonb_exists_any', oprrest => 'contsel',
+  oprjoin => 'contjoinsel' },
+{ oid => '3249', descr => 'all keys exist',
+  oprname => '?&', oprleft => 'jsonb', oprright => '_text', oprresult => 'bool',
+  oprcode => 'jsonb_exists_all', oprrest => 'contsel',
+  oprjoin => 'contjoinsel' },
+{ oid => '3250', descr => 'is contained by',
+  oprname => '<@', oprleft => 'jsonb', oprright => 'jsonb', oprresult => 'bool',
+  oprcom => '@>(jsonb,jsonb)', oprcode => 'jsonb_contained',
+  oprrest => 'contsel', oprjoin => 'contjoinsel' },
+{ oid => '3284', descr => 'concatenate',
+  oprname => '||', oprleft => 'jsonb', oprright => 'jsonb',
+  oprresult => 'jsonb', oprcode => 'jsonb_concat' },
+{ oid => '3285', descr => 'delete object field',
+  oprname => '-', oprleft => 'jsonb', oprright => 'text', oprresult => 'jsonb',
+  oprcode => 'jsonb_delete(jsonb,text)' },
+{ oid => '3398', descr => 'delete object fields',
+  oprname => '-', oprleft => 'jsonb', oprright => '_text', oprresult => 'jsonb',
+  oprcode => 'jsonb_delete(jsonb,_text)' },
+{ oid => '3286', descr => 'delete array element',
+  oprname => '-', oprleft => 'jsonb', oprright => 'int4', oprresult => 'jsonb',
+  oprcode => 'jsonb_delete(jsonb,int4)' },
+{ oid => '3287', descr => 'delete path',
+  oprname => '#-', oprleft => 'jsonb', oprright => '_text',
+  oprresult => 'jsonb', oprcode => 'jsonb_delete_path' },
+
+]
index 6a6f708914ccf358a2e0a067569761f54c1938bf..4950d28f1a9707c1289c5f685ce120a23c7b0989 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_operator.h
  *       definition of the system "operator" relation (pg_operator)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
  * src/include/catalog/pg_operator.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
- *
- *       XXX do NOT break up DATA() statements into multiple lines!
- *               the scripts are not as smart as you might think...
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_OPERATOR_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_operator_d.h"
 
 /* ----------------
  *             pg_operator definition.  cpp turns this into
  *             typedef struct FormData_pg_operator
  * ----------------
  */
-#define OperatorRelationId     2617
-
-CATALOG(pg_operator,2617)
+CATALOG(pg_operator,2617,OperatorRelationId)
 {
-       NameData        oprname;                /* name of operator */
-       Oid                     oprnamespace;   /* OID of namespace containing this oper */
-       Oid                     oprowner;               /* operator owner */
-       char            oprkind;                /* 'l', 'r', or 'b' */
-       bool            oprcanmerge;    /* can be used in merge join? */
-       bool            oprcanhash;             /* can be used in hash join? */
-       Oid                     oprleft;                /* left arg type, or 0 if 'l' oprkind */
-       Oid                     oprright;               /* right arg type, or 0 if 'r' oprkind */
-       Oid                     oprresult;              /* result datatype */
-       Oid                     oprcom;                 /* OID of commutator oper, or 0 if none */
-       Oid                     oprnegate;              /* OID of negator oper, or 0 if none */
-       regproc         oprcode;                /* OID of underlying function */
-       regproc         oprrest;                /* OID of restriction estimator, or 0 */
-       regproc         oprjoin;                /* OID of join estimator, or 0 */
-} FormData_pg_operator;
-
-/* ----------------
- *             Form_pg_operator corresponds to a pointer to a tuple with
- *             the format of pg_operator relation.
- * ----------------
- */
-typedef FormData_pg_operator *Form_pg_operator;
-
-/* ----------------
- *             compiler constants for pg_operator
- * ----------------
- */
-
-#define Natts_pg_operator                              14
-#define Anum_pg_operator_oprname               1
-#define Anum_pg_operator_oprnamespace  2
-#define Anum_pg_operator_oprowner              3
-#define Anum_pg_operator_oprkind               4
-#define Anum_pg_operator_oprcanmerge   5
-#define Anum_pg_operator_oprcanhash            6
-#define Anum_pg_operator_oprleft               7
-#define Anum_pg_operator_oprright              8
-#define Anum_pg_operator_oprresult             9
-#define Anum_pg_operator_oprcom                        10
-#define Anum_pg_operator_oprnegate             11
-#define Anum_pg_operator_oprcode               12
-#define Anum_pg_operator_oprrest               13
-#define Anum_pg_operator_oprjoin               14
-
-/* ----------------
- *             initial contents of pg_operator
- * ----------------
- */
-
-/*
- * Note: every entry in pg_operator.h is expected to have a DESCR() comment.
- * If the operator is a deprecated equivalent of some other entry, be sure
- * to comment it as such so that initdb doesn't think it's a preferred name
- * for the underlying function.
- */
-
-DATA(insert OID =  15 ( "="               PGNSP PGUID b t t    23      20      16 416  36 int48eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID =  36 ( "<>"      PGNSP PGUID b f f    23      20      16 417  15 int48ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID =  37 ( "<"               PGNSP PGUID b f f    23      20      16 419  82 int48lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID =  76 ( ">"               PGNSP PGUID b f f    23      20      16 418  80 int48gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID =  80 ( "<="      PGNSP PGUID b f f    23      20      16 430  76 int48le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID =  82 ( ">="      PGNSP PGUID b f f    23      20      16 420  37 int48ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-DATA(insert OID =  58 ( "<"               PGNSP PGUID b f f    16      16      16      59      1695 boollt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID =  59 ( ">"               PGNSP PGUID b f f    16      16      16      58      1694 boolgt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID =  85 ( "<>"      PGNSP PGUID b f f    16      16      16      85      91 boolne neqsel neqjoinsel ));
-DESCR("not equal");
-#define BooleanNotEqualOperator   85
-DATA(insert OID =  91 ( "="               PGNSP PGUID b t t    16      16      16      91      85 booleq eqsel eqjoinsel ));
-DESCR("equal");
-#define BooleanEqualOperator   91
-DATA(insert OID = 1694 (  "<="    PGNSP PGUID b f f    16      16      16 1695 59 boolle scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1695 (  ">="    PGNSP PGUID b f f    16      16      16 1694 58 boolge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-DATA(insert OID =  92 ( "="               PGNSP PGUID b t t    18      18      16      92 630 chareq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID =  93 ( "="               PGNSP PGUID b t t    19      19      16      93 643 nameeq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID =  94 ( "="               PGNSP PGUID b t t    21      21      16      94 519 int2eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID =  95 ( "<"               PGNSP PGUID b f f    21      21      16 520 524 int2lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID =  96 ( "="               PGNSP PGUID b t t    23      23      16      96 518 int4eq eqsel eqjoinsel ));
-DESCR("equal");
-#define Int4EqualOperator      96
-DATA(insert OID =  97 ( "<"               PGNSP PGUID b f f    23      23      16 521 525 int4lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-#define Int4LessOperator       97
-DATA(insert OID =  98 ( "="               PGNSP PGUID b t t    25      25      16      98 531 texteq eqsel eqjoinsel ));
-DESCR("equal");
-#define TextEqualOperator      98
-DATA(insert OID =  3877 ( "^@"    PGNSP PGUID b f f    25      25      16      0 0 starts_with prefixsel prefixjoinsel ));
-DESCR("starts with");
-
-DATA(insert OID = 349 (  "||"     PGNSP PGUID b f f 2277 2283 2277 0 0 array_append   -           -     ));
-DESCR("append element onto end of array");
-DATA(insert OID = 374 (  "||"     PGNSP PGUID b f f 2283 2277 2277 0 0 array_prepend  -           -     ));
-DESCR("prepend element onto front of array");
-DATA(insert OID = 375 (  "||"     PGNSP PGUID b f f 2277 2277 2277 0 0 array_cat          -       -     ));
-DESCR("concatenate");
-
-DATA(insert OID = 352 (  "="      PGNSP PGUID b f t    28      28      16      352   3315 xideq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 353 (  "="      PGNSP PGUID b f f    28      23      16      0         3316 xideqint4 eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 3315 (  "<>"    PGNSP PGUID b f f    28      28      16      3315   352 xidneq neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 3316 (  "<>"    PGNSP PGUID b f f    28      23      16      0          353 xidneqint4 neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 388 (  "!"      PGNSP PGUID r f f    20       0      1700  0  0 numeric_fac - - ));
-DESCR("factorial");
-DATA(insert OID = 389 (  "!!"     PGNSP PGUID l f f     0      20      1700  0  0 numeric_fac - - ));
-DESCR("deprecated, use ! instead");
-DATA(insert OID = 385 (  "="      PGNSP PGUID b f t    29      29      16 385   0 cideq eqsel eqjoinsel ));
-DESCR("equal");
-
-DATA(insert OID = 387 (  "="      PGNSP PGUID b t f    27      27      16 387 402 tideq eqsel eqjoinsel ));
-DESCR("equal");
-#define TIDEqualOperator   387
-DATA(insert OID = 402 (  "<>"     PGNSP PGUID b f f    27      27      16 402 387 tidne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 2799 (  "<"     PGNSP PGUID b f f    27      27      16 2800 2802 tidlt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-#define TIDLessOperator    2799
-DATA(insert OID = 2800 (  ">"     PGNSP PGUID b f f    27      27      16 2799 2801 tidgt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 2801 (  "<="    PGNSP PGUID b f f    27      27      16 2802 2800 tidle scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 2802 (  ">="    PGNSP PGUID b f f    27      27      16 2801 2799 tidge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-DATA(insert OID = 410 ( "="               PGNSP PGUID b t t    20      20      16 410 411 int8eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 411 ( "<>"      PGNSP PGUID b f f    20      20      16 411 410 int8ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 412 ( "<"               PGNSP PGUID b f f    20      20      16 413 415 int8lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-#define Int8LessOperator       412
-DATA(insert OID = 413 ( ">"               PGNSP PGUID b f f    20      20      16 412 414 int8gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 414 ( "<="      PGNSP PGUID b f f    20      20      16 415 413 int8le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 415 ( ">="      PGNSP PGUID b f f    20      20      16 414 412 int8ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-DATA(insert OID = 416 ( "="               PGNSP PGUID b t t    20      23      16      15 417 int84eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 417 ( "<>"      PGNSP PGUID b f f    20      23      16      36 416 int84ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 418 ( "<"               PGNSP PGUID b f f    20      23      16      76 430 int84lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 419 ( ">"               PGNSP PGUID b f f    20      23      16      37 420 int84gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 420 ( "<="      PGNSP PGUID b f f    20      23      16      82 419 int84le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 430 ( ">="      PGNSP PGUID b f f    20      23      16      80 418 int84ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 439 (  "%"      PGNSP PGUID b f f    20      20      20       0       0 int8mod - - ));
-DESCR("modulus");
-DATA(insert OID = 473 (  "@"      PGNSP PGUID l f f     0      20      20       0       0 int8abs - - ));
-DESCR("absolute value");
-
-DATA(insert OID = 484 (  "-"      PGNSP PGUID l f f     0      20      20       0       0 int8um - - ));
-DESCR("negate");
-DATA(insert OID = 485 (  "<<"     PGNSP PGUID b f f 604 604    16       0       0 poly_left positionsel positionjoinsel ));
-DESCR("is left of");
-DATA(insert OID = 486 (  "&<"     PGNSP PGUID b f f 604 604    16       0       0 poly_overleft positionsel positionjoinsel ));
-DESCR("overlaps or is left of");
-DATA(insert OID = 487 (  "&>"     PGNSP PGUID b f f 604 604    16       0       0 poly_overright positionsel positionjoinsel ));
-DESCR("overlaps or is right of");
-DATA(insert OID = 488 (  ">>"     PGNSP PGUID b f f 604 604    16       0       0 poly_right positionsel positionjoinsel ));
-DESCR("is right of");
-DATA(insert OID = 489 (  "<@"     PGNSP PGUID b f f 604 604    16 490   0 poly_contained contsel contjoinsel ));
-DESCR("is contained by");
-DATA(insert OID = 490 (  "@>"     PGNSP PGUID b f f 604 604    16 489   0 poly_contain contsel contjoinsel ));
-DESCR("contains");
-DATA(insert OID = 491 (  "~="     PGNSP PGUID b f f 604 604    16 491   0 poly_same eqsel eqjoinsel ));
-DESCR("same as");
-DATA(insert OID = 492 (  "&&"     PGNSP PGUID b f f 604 604    16 492   0 poly_overlap areasel areajoinsel ));
-DESCR("overlaps");
-DATA(insert OID = 493 (  "<<"     PGNSP PGUID b f f 603 603    16       0       0 box_left positionsel positionjoinsel ));
-DESCR("is left of");
-DATA(insert OID = 494 (  "&<"     PGNSP PGUID b f f 603 603    16       0       0 box_overleft positionsel positionjoinsel ));
-DESCR("overlaps or is left of");
-DATA(insert OID = 495 (  "&>"     PGNSP PGUID b f f 603 603    16       0       0 box_overright positionsel positionjoinsel ));
-DESCR("overlaps or is right of");
-DATA(insert OID = 496 (  ">>"     PGNSP PGUID b f f 603 603    16       0       0 box_right positionsel positionjoinsel ));
-DESCR("is right of");
-DATA(insert OID = 497 (  "<@"     PGNSP PGUID b f f 603 603    16 498   0 box_contained contsel contjoinsel ));
-DESCR("is contained by");
-DATA(insert OID = 498 (  "@>"     PGNSP PGUID b f f 603 603    16 497   0 box_contain contsel contjoinsel ));
-DESCR("contains");
-DATA(insert OID = 499 (  "~="     PGNSP PGUID b f f 603 603    16 499   0 box_same eqsel eqjoinsel ));
-DESCR("same as");
-DATA(insert OID = 500 (  "&&"     PGNSP PGUID b f f 603 603    16 500   0 box_overlap areasel areajoinsel ));
-DESCR("overlaps");
-DATA(insert OID = 501 (  ">="     PGNSP PGUID b f f 603 603    16 505 504 box_ge areasel areajoinsel ));
-DESCR("greater than or equal by area");
-DATA(insert OID = 502 (  ">"      PGNSP PGUID b f f 603 603    16 504 505 box_gt areasel areajoinsel ));
-DESCR("greater than by area");
-DATA(insert OID = 503 (  "="      PGNSP PGUID b f f 603 603    16 503   0 box_eq eqsel eqjoinsel ));
-DESCR("equal by area");
-DATA(insert OID = 504 (  "<"      PGNSP PGUID b f f 603 603    16 502 501 box_lt areasel areajoinsel ));
-DESCR("less than by area");
-DATA(insert OID = 505 (  "<="     PGNSP PGUID b f f 603 603    16 501 502 box_le areasel areajoinsel ));
-DESCR("less than or equal by area");
-DATA(insert OID = 506 (  ">^"     PGNSP PGUID b f f 600 600    16       0       0 point_above positionsel positionjoinsel ));
-DESCR("is above");
-DATA(insert OID = 507 (  "<<"     PGNSP PGUID b f f 600 600    16       0       0 point_left positionsel positionjoinsel ));
-DESCR("is left of");
-DATA(insert OID = 508 (  ">>"     PGNSP PGUID b f f 600 600    16       0       0 point_right positionsel positionjoinsel ));
-DESCR("is right of");
-DATA(insert OID = 509 (  "<^"     PGNSP PGUID b f f 600 600    16       0       0 point_below positionsel positionjoinsel ));
-DESCR("is below");
-DATA(insert OID = 510 (  "~="     PGNSP PGUID b f f 600 600    16 510 713 point_eq eqsel eqjoinsel ));
-DESCR("same as");
-DATA(insert OID = 511 (  "<@"     PGNSP PGUID b f f 600 603    16 433   0 on_pb contsel contjoinsel ));
-DESCR("point inside box");
-DATA(insert OID = 433 (  "@>"     PGNSP PGUID b f f 603 600    16 511   0 box_contain_pt contsel contjoinsel ));
-DESCR("contains");
-DATA(insert OID = 512 (  "<@"     PGNSP PGUID b f f 600 602    16 755   0 on_ppath - - ));
-DESCR("point within closed path, or point on open path");
-DATA(insert OID = 513 (  "@@"     PGNSP PGUID l f f     0 603 600       0       0 box_center - - ));
-DESCR("center of");
-DATA(insert OID = 514 (  "*"      PGNSP PGUID b f f    23      23      23 514   0 int4mul - - ));
-DESCR("multiply");
-DATA(insert OID = 517 (  "<->"    PGNSP PGUID b f f 600 600 701 517     0 point_distance - - ));
-DESCR("distance between");
-DATA(insert OID = 518 (  "<>"     PGNSP PGUID b f f    23      23      16 518  96 int4ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 519 (  "<>"     PGNSP PGUID b f f    21      21      16 519  94 int2ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 520 (  ">"      PGNSP PGUID b f f    21      21      16      95 522 int2gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 521 (  ">"      PGNSP PGUID b f f    23      23      16      97 523 int4gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 522 (  "<="     PGNSP PGUID b f f    21      21      16 524 520 int2le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 523 (  "<="     PGNSP PGUID b f f    23      23      16 525 521 int4le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 524 (  ">="     PGNSP PGUID b f f    21      21      16 522  95 int2ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 525 (  ">="     PGNSP PGUID b f f    23      23      16 523  97 int4ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 526 (  "*"      PGNSP PGUID b f f    21      21      21 526   0 int2mul - - ));
-DESCR("multiply");
-DATA(insert OID = 527 (  "/"      PGNSP PGUID b f f    21      21      21       0       0 int2div - - ));
-DESCR("divide");
-DATA(insert OID = 528 (  "/"      PGNSP PGUID b f f    23      23      23       0       0 int4div - - ));
-DESCR("divide");
-DATA(insert OID = 529 (  "%"      PGNSP PGUID b f f    21      21      21       0       0 int2mod - - ));
-DESCR("modulus");
-DATA(insert OID = 530 (  "%"      PGNSP PGUID b f f    23      23      23       0       0 int4mod - - ));
-DESCR("modulus");
-DATA(insert OID = 531 (  "<>"     PGNSP PGUID b f f    25      25      16 531  98 textne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 532 (  "="      PGNSP PGUID b t t    21      23      16 533 538 int24eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 533 (  "="      PGNSP PGUID b t t    23      21      16 532 539 int42eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 534 (  "<"      PGNSP PGUID b f f    21      23      16 537 542 int24lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 535 (  "<"      PGNSP PGUID b f f    23      21      16 536 543 int42lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 536 (  ">"      PGNSP PGUID b f f    21      23      16 535 540 int24gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 537 (  ">"      PGNSP PGUID b f f    23      21      16 534 541 int42gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 538 (  "<>"     PGNSP PGUID b f f    21      23      16 539 532 int24ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 539 (  "<>"     PGNSP PGUID b f f    23      21      16 538 533 int42ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 540 (  "<="     PGNSP PGUID b f f    21      23      16 543 536 int24le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 541 (  "<="     PGNSP PGUID b f f    23      21      16 542 537 int42le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 542 (  ">="     PGNSP PGUID b f f    21      23      16 541 534 int24ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 543 (  ">="     PGNSP PGUID b f f    23      21      16 540 535 int42ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 544 (  "*"      PGNSP PGUID b f f    21      23      23 545   0 int24mul - - ));
-DESCR("multiply");
-DATA(insert OID = 545 (  "*"      PGNSP PGUID b f f    23      21      23 544   0 int42mul - - ));
-DESCR("multiply");
-DATA(insert OID = 546 (  "/"      PGNSP PGUID b f f    21      23      23       0       0 int24div - - ));
-DESCR("divide");
-DATA(insert OID = 547 (  "/"      PGNSP PGUID b f f    23      21      23       0       0 int42div - - ));
-DESCR("divide");
-DATA(insert OID = 550 (  "+"      PGNSP PGUID b f f    21      21      21 550   0 int2pl - - ));
-DESCR("add");
-DATA(insert OID = 551 (  "+"      PGNSP PGUID b f f    23      23      23 551   0 int4pl - - ));
-DESCR("add");
-DATA(insert OID = 552 (  "+"      PGNSP PGUID b f f    21      23      23 553   0 int24pl - - ));
-DESCR("add");
-DATA(insert OID = 553 (  "+"      PGNSP PGUID b f f    23      21      23 552   0 int42pl - - ));
-DESCR("add");
-DATA(insert OID = 554 (  "-"      PGNSP PGUID b f f    21      21      21       0       0 int2mi - - ));
-DESCR("subtract");
-DATA(insert OID = 555 (  "-"      PGNSP PGUID b f f    23      23      23       0       0 int4mi - - ));
-DESCR("subtract");
-DATA(insert OID = 556 (  "-"      PGNSP PGUID b f f    21      23      23       0       0 int24mi - - ));
-DESCR("subtract");
-DATA(insert OID = 557 (  "-"      PGNSP PGUID b f f    23      21      23       0       0 int42mi - - ));
-DESCR("subtract");
-DATA(insert OID = 558 (  "-"      PGNSP PGUID l f f     0      23      23       0       0 int4um - - ));
-DESCR("negate");
-DATA(insert OID = 559 (  "-"      PGNSP PGUID l f f     0      21      21       0       0 int2um - - ));
-DESCR("negate");
-DATA(insert OID = 560 (  "="      PGNSP PGUID b t t 702 702    16 560 561 abstimeeq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 561 (  "<>"     PGNSP PGUID b f f 702 702    16 561 560 abstimene neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 562 (  "<"      PGNSP PGUID b f f 702 702    16 563 565 abstimelt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 563 (  ">"      PGNSP PGUID b f f 702 702    16 562 564 abstimegt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 564 (  "<="     PGNSP PGUID b f f 702 702    16 565 563 abstimele scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 565 (  ">="     PGNSP PGUID b f f 702 702    16 564 562 abstimege scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 566 (  "="      PGNSP PGUID b t t 703 703    16 566 567 reltimeeq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 567 (  "<>"     PGNSP PGUID b f f 703 703    16 567 566 reltimene neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 568 (  "<"      PGNSP PGUID b f f 703 703    16 569 571 reltimelt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 569 (  ">"      PGNSP PGUID b f f 703 703    16 568 570 reltimegt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 570 (  "<="     PGNSP PGUID b f f 703 703    16 571 569 reltimele scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 571 (  ">="     PGNSP PGUID b f f 703 703    16 570 568 reltimege scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 572 (  "~="     PGNSP PGUID b f f 704 704    16 572   0 tintervalsame eqsel eqjoinsel ));
-DESCR("same as");
-DATA(insert OID = 573 (  "<<"     PGNSP PGUID b f f 704 704    16       0       0 tintervalct - - ));
-DESCR("contains");
-DATA(insert OID = 574 (  "&&"     PGNSP PGUID b f f 704 704    16 574   0 tintervalov - - ));
-DESCR("overlaps");
-DATA(insert OID = 575 (  "#="     PGNSP PGUID b f f 704 703    16       0 576 tintervalleneq - - ));
-DESCR("equal by length");
-DATA(insert OID = 576 (  "#<>"    PGNSP PGUID b f f 704 703    16       0 575 tintervallenne - - ));
-DESCR("not equal by length");
-DATA(insert OID = 577 (  "#<"     PGNSP PGUID b f f 704 703    16       0 580 tintervallenlt - - ));
-DESCR("less than by length");
-DATA(insert OID = 578 (  "#>"     PGNSP PGUID b f f 704 703    16       0 579 tintervallengt - - ));
-DESCR("greater than by length");
-DATA(insert OID = 579 (  "#<="    PGNSP PGUID b f f 704 703    16       0 578 tintervallenle - - ));
-DESCR("less than or equal by length");
-DATA(insert OID = 580 (  "#>="    PGNSP PGUID b f f 704 703    16       0 577 tintervallenge - - ));
-DESCR("greater than or equal by length");
-DATA(insert OID = 581 (  "+"      PGNSP PGUID b f f 702 703 702         0       0 timepl - - ));
-DESCR("add");
-DATA(insert OID = 582 (  "-"      PGNSP PGUID b f f 702 703 702         0       0 timemi - - ));
-DESCR("subtract");
-DATA(insert OID = 583 (  "<?>"    PGNSP PGUID b f f 702 704    16       0       0 intinterval - - ));
-DESCR("is contained by");
-DATA(insert OID = 584 (  "-"      PGNSP PGUID l f f     0 700 700       0       0 float4um - - ));
-DESCR("negate");
-DATA(insert OID = 585 (  "-"      PGNSP PGUID l f f     0 701 701       0       0 float8um - - ));
-DESCR("negate");
-DATA(insert OID = 586 (  "+"      PGNSP PGUID b f f 700 700 700 586     0 float4pl - - ));
-DESCR("add");
-DATA(insert OID = 587 (  "-"      PGNSP PGUID b f f 700 700 700         0       0 float4mi - - ));
-DESCR("subtract");
-DATA(insert OID = 588 (  "/"      PGNSP PGUID b f f 700 700 700         0       0 float4div - - ));
-DESCR("divide");
-DATA(insert OID = 589 (  "*"      PGNSP PGUID b f f 700 700 700 589     0 float4mul - - ));
-DESCR("multiply");
-DATA(insert OID = 590 (  "@"      PGNSP PGUID l f f     0 700 700       0       0 float4abs - - ));
-DESCR("absolute value");
-DATA(insert OID = 591 (  "+"      PGNSP PGUID b f f 701 701 701 591     0 float8pl - - ));
-DESCR("add");
-DATA(insert OID = 592 (  "-"      PGNSP PGUID b f f 701 701 701         0       0 float8mi - - ));
-DESCR("subtract");
-DATA(insert OID = 593 (  "/"      PGNSP PGUID b f f 701 701 701         0       0 float8div - - ));
-DESCR("divide");
-DATA(insert OID = 594 (  "*"      PGNSP PGUID b f f 701 701 701 594     0 float8mul - - ));
-DESCR("multiply");
-DATA(insert OID = 595 (  "@"      PGNSP PGUID l f f     0 701 701       0       0 float8abs - - ));
-DESCR("absolute value");
-DATA(insert OID = 596 (  "|/"     PGNSP PGUID l f f     0 701 701       0       0 dsqrt - - ));
-DESCR("square root");
-DATA(insert OID = 597 (  "||/"    PGNSP PGUID l f f     0 701 701       0       0 dcbrt - - ));
-DESCR("cube root");
-DATA(insert OID = 1284 (  "|"     PGNSP PGUID l f f     0 704 702       0       0 tintervalstart - - ));
-DESCR("start of interval");
-DATA(insert OID = 606 (  "<#>"    PGNSP PGUID b f f 702 702 704         0       0 mktinterval - - ));
-DESCR("convert to tinterval");
-
-DATA(insert OID = 607 (  "="      PGNSP PGUID b t t    26      26      16 607 608 oideq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 608 (  "<>"     PGNSP PGUID b f f    26      26      16 608 607 oidne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 609 (  "<"      PGNSP PGUID b f f    26      26      16 610 612 oidlt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 610 (  ">"      PGNSP PGUID b f f    26      26      16 609 611 oidgt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 611 (  "<="     PGNSP PGUID b f f    26      26      16 612 610 oidle scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 612 (  ">="     PGNSP PGUID b f f    26      26      16 611 609 oidge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-DATA(insert OID = 644 (  "<>"     PGNSP PGUID b f f    30      30      16 644 649 oidvectorne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 645 (  "<"      PGNSP PGUID b f f    30      30      16 646 648 oidvectorlt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 646 (  ">"      PGNSP PGUID b f f    30      30      16 645 647 oidvectorgt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 647 (  "<="     PGNSP PGUID b f f    30      30      16 648 646 oidvectorle scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 648 (  ">="     PGNSP PGUID b f f    30      30      16 647 645 oidvectorge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 649 (  "="      PGNSP PGUID b t t    30      30      16 649 644 oidvectoreq eqsel eqjoinsel ));
-DESCR("equal");
-
-DATA(insert OID = 613 (  "<->"    PGNSP PGUID b f f 600 628 701         0       0 dist_pl - - ));
-DESCR("distance between");
-DATA(insert OID = 614 (  "<->"    PGNSP PGUID b f f 600 601 701         0       0 dist_ps - - ));
-DESCR("distance between");
-DATA(insert OID = 615 (  "<->"    PGNSP PGUID b f f 600 603 701         0       0 dist_pb - - ));
-DESCR("distance between");
-DATA(insert OID = 616 (  "<->"    PGNSP PGUID b f f 601 628 701         0       0 dist_sl - - ));
-DESCR("distance between");
-DATA(insert OID = 617 (  "<->"    PGNSP PGUID b f f 601 603 701         0       0 dist_sb - - ));
-DESCR("distance between");
-DATA(insert OID = 618 (  "<->"    PGNSP PGUID b f f 600 602 701         0       0 dist_ppath - - ));
-DESCR("distance between");
-
-DATA(insert OID = 620 (  "="      PGNSP PGUID b t t    700  700        16 620 621 float4eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 621 (  "<>"     PGNSP PGUID b f f    700  700        16 621 620 float4ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 622 (  "<"      PGNSP PGUID b f f    700  700        16 623 625 float4lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 623 (  ">"      PGNSP PGUID b f f    700  700        16 622 624 float4gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 624 (  "<="     PGNSP PGUID b f f    700  700        16 625 623 float4le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 625 (  ">="     PGNSP PGUID b f f    700  700        16 624 622 float4ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 630 (  "<>"     PGNSP PGUID b f f    18      18              16 630  92      charne neqsel neqjoinsel ));
-DESCR("not equal");
-
-DATA(insert OID = 631 (  "<"      PGNSP PGUID b f f    18      18      16 633 634 charlt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 632 (  "<="     PGNSP PGUID b f f    18      18      16 634 633 charle scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 633 (  ">"      PGNSP PGUID b f f    18      18      16 631 632 chargt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 634 (  ">="     PGNSP PGUID b f f    18      18      16 632 631 charge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-DATA(insert OID = 639 (  "~"      PGNSP PGUID b f f    19      25      16 0 640 nameregexeq regexeqsel regexeqjoinsel ));
-DESCR("matches regular expression, case-sensitive");
-#define OID_NAME_REGEXEQ_OP            639
-DATA(insert OID = 640 (  "!~"     PGNSP PGUID b f f    19      25      16 0 639 nameregexne regexnesel regexnejoinsel ));
-DESCR("does not match regular expression, case-sensitive");
-DATA(insert OID = 641 (  "~"      PGNSP PGUID b f f    25      25      16 0 642 textregexeq regexeqsel regexeqjoinsel ));
-DESCR("matches regular expression, case-sensitive");
-#define OID_TEXT_REGEXEQ_OP            641
-DATA(insert OID = 642 (  "!~"     PGNSP PGUID b f f    25      25      16 0 641 textregexne regexnesel regexnejoinsel ));
-DESCR("does not match regular expression, case-sensitive");
-DATA(insert OID = 643 (  "<>"     PGNSP PGUID b f f    19      19      16 643 93 namene neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 654 (  "||"     PGNSP PGUID b f f    25      25      25       0 0 textcat - - ));
-DESCR("concatenate");
-
-DATA(insert OID = 660 (  "<"      PGNSP PGUID b f f    19      19      16 662 663 namelt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 661 (  "<="     PGNSP PGUID b f f    19      19      16 663 662 namele scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 662 (  ">"      PGNSP PGUID b f f    19      19      16 660 661 namegt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 663 (  ">="     PGNSP PGUID b f f    19      19      16 661 660 namege scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 664 (  "<"      PGNSP PGUID b f f    25      25      16 666 667 text_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 665 (  "<="     PGNSP PGUID b f f    25      25      16 667 666 text_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 666 (  ">"      PGNSP PGUID b f f    25      25      16 664 665 text_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 667 (  ">="     PGNSP PGUID b f f    25      25      16 665 664 text_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-DATA(insert OID = 670 (  "="      PGNSP PGUID b t t    701  701        16 670 671 float8eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 671 (  "<>"     PGNSP PGUID b f f    701  701        16 671 670 float8ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 672 (  "<"      PGNSP PGUID b f f    701  701        16 674 675 float8lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-#define Float8LessOperator     672
-DATA(insert OID = 673 (  "<="     PGNSP PGUID b f f    701  701        16 675 674 float8le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 674 (  ">"      PGNSP PGUID b f f    701  701        16 672 673 float8gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 675 (  ">="     PGNSP PGUID b f f    701  701        16 673 672 float8ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-DATA(insert OID = 682 (  "@"      PGNSP PGUID l f f     0      21      21       0       0 int2abs - - ));
-DESCR("absolute value");
-DATA(insert OID = 684 (  "+"      PGNSP PGUID b f f    20      20      20 684   0 int8pl - - ));
-DESCR("add");
-DATA(insert OID = 685 (  "-"      PGNSP PGUID b f f    20      20      20       0       0 int8mi - - ));
-DESCR("subtract");
-DATA(insert OID = 686 (  "*"      PGNSP PGUID b f f    20      20      20 686   0 int8mul - - ));
-DESCR("multiply");
-DATA(insert OID = 687 (  "/"      PGNSP PGUID b f f    20      20      20       0       0 int8div - - ));
-DESCR("divide");
-
-DATA(insert OID = 688 (  "+"      PGNSP PGUID b f f    20      23      20 692   0 int84pl - - ));
-DESCR("add");
-DATA(insert OID = 689 (  "-"      PGNSP PGUID b f f    20      23      20       0       0 int84mi - - ));
-DESCR("subtract");
-DATA(insert OID = 690 (  "*"      PGNSP PGUID b f f    20      23      20 694   0 int84mul - - ));
-DESCR("multiply");
-DATA(insert OID = 691 (  "/"      PGNSP PGUID b f f    20      23      20       0       0 int84div - - ));
-DESCR("divide");
-DATA(insert OID = 692 (  "+"      PGNSP PGUID b f f    23      20      20 688   0 int48pl - - ));
-DESCR("add");
-DATA(insert OID = 693 (  "-"      PGNSP PGUID b f f    23      20      20       0       0 int48mi - - ));
-DESCR("subtract");
-DATA(insert OID = 694 (  "*"      PGNSP PGUID b f f    23      20      20 690   0 int48mul - - ));
-DESCR("multiply");
-DATA(insert OID = 695 (  "/"      PGNSP PGUID b f f    23      20      20       0       0 int48div - - ));
-DESCR("divide");
-
-DATA(insert OID = 818 (  "+"      PGNSP PGUID b f f    20      21      20 822   0 int82pl - - ));
-DESCR("add");
-DATA(insert OID = 819 (  "-"      PGNSP PGUID b f f    20      21      20       0       0 int82mi - - ));
-DESCR("subtract");
-DATA(insert OID = 820 (  "*"      PGNSP PGUID b f f    20      21      20 824   0 int82mul - - ));
-DESCR("multiply");
-DATA(insert OID = 821 (  "/"      PGNSP PGUID b f f    20      21      20       0       0 int82div - - ));
-DESCR("divide");
-DATA(insert OID = 822 (  "+"      PGNSP PGUID b f f    21      20      20 818   0 int28pl - - ));
-DESCR("add");
-DATA(insert OID = 823 (  "-"      PGNSP PGUID b f f    21      20      20       0       0 int28mi - - ));
-DESCR("subtract");
-DATA(insert OID = 824 (  "*"      PGNSP PGUID b f f    21      20      20 820   0 int28mul - - ));
-DESCR("multiply");
-DATA(insert OID = 825 (  "/"      PGNSP PGUID b f f    21      20      20       0       0 int28div - - ));
-DESCR("divide");
-
-DATA(insert OID = 706 (  "<->"    PGNSP PGUID b f f 603 603 701 706     0 box_distance - - ));
-DESCR("distance between");
-DATA(insert OID = 707 (  "<->"    PGNSP PGUID b f f 602 602 701 707     0 path_distance - - ));
-DESCR("distance between");
-DATA(insert OID = 708 (  "<->"    PGNSP PGUID b f f 628 628 701 708     0 line_distance - - ));
-DESCR("distance between");
-DATA(insert OID = 709 (  "<->"    PGNSP PGUID b f f 601 601 701 709     0 lseg_distance - - ));
-DESCR("distance between");
-DATA(insert OID = 712 (  "<->"    PGNSP PGUID b f f 604 604 701 712     0 poly_distance - - ));
-DESCR("distance between");
-
-DATA(insert OID = 713 (  "<>"     PGNSP PGUID b f f 600 600    16 713 510 point_ne neqsel neqjoinsel ));
-DESCR("not equal");
-
-/* add translation/rotation/scaling operators for geometric types. - thomas 97/05/10 */
-DATA(insert OID = 731 (  "+"      PGNSP PGUID b f f    600  600        600  731  0 point_add - - ));
-DESCR("add points (translate)");
-DATA(insert OID = 732 (  "-"      PGNSP PGUID b f f    600  600        600    0  0 point_sub - - ));
-DESCR("subtract points (translate)");
-DATA(insert OID = 733 (  "*"      PGNSP PGUID b f f    600  600        600  733  0 point_mul - - ));
-DESCR("multiply points (scale/rotate)");
-DATA(insert OID = 734 (  "/"      PGNSP PGUID b f f    600  600        600    0  0 point_div - - ));
-DESCR("divide points (scale/rotate)");
-DATA(insert OID = 735 (  "+"      PGNSP PGUID b f f    602  602        602  735  0 path_add - - ));
-DESCR("concatenate");
-DATA(insert OID = 736 (  "+"      PGNSP PGUID b f f    602  600        602    0  0 path_add_pt - - ));
-DESCR("add (translate path)");
-DATA(insert OID = 737 (  "-"      PGNSP PGUID b f f    602  600        602    0  0 path_sub_pt - - ));
-DESCR("subtract (translate path)");
-DATA(insert OID = 738 (  "*"      PGNSP PGUID b f f    602  600        602    0  0 path_mul_pt - - ));
-DESCR("multiply (rotate/scale path)");
-DATA(insert OID = 739 (  "/"      PGNSP PGUID b f f    602  600        602    0  0 path_div_pt - - ));
-DESCR("divide (rotate/scale path)");
-DATA(insert OID = 755 (  "@>"     PGNSP PGUID b f f    602  600         16  512  0 path_contain_pt - - ));
-DESCR("contains");
-DATA(insert OID = 756 (  "<@"     PGNSP PGUID b f f    600  604         16  757  0 pt_contained_poly contsel contjoinsel ));
-DESCR("is contained by");
-DATA(insert OID = 757 (  "@>"     PGNSP PGUID b f f    604  600         16  756  0 poly_contain_pt contsel contjoinsel ));
-DESCR("contains");
-DATA(insert OID = 758 (  "<@"     PGNSP PGUID b f f    600  718         16  759  0 pt_contained_circle contsel contjoinsel ));
-DESCR("is contained by");
-DATA(insert OID = 759 (  "@>"     PGNSP PGUID b f f    718  600         16  758  0 circle_contain_pt contsel contjoinsel ));
-DESCR("contains");
-
-DATA(insert OID = 773 (  "@"      PGNSP PGUID l f f     0      23      23       0       0 int4abs - - ));
-DESCR("absolute value");
-
-/* additional operators for geometric types - thomas 1997-07-09 */
-DATA(insert OID =  792 (  "="     PGNSP PGUID b f f    602  602         16  792  0 path_n_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID =  793 (  "<"     PGNSP PGUID b f f    602  602         16  794  0 path_n_lt - - ));
-DESCR("less than");
-DATA(insert OID =  794 (  ">"     PGNSP PGUID b f f    602  602         16  793  0 path_n_gt - - ));
-DESCR("greater than");
-DATA(insert OID =  795 (  "<="    PGNSP PGUID b f f    602  602         16  796  0 path_n_le - - ));
-DESCR("less than or equal");
-DATA(insert OID =  796 (  ">="    PGNSP PGUID b f f    602  602         16  795  0 path_n_ge - - ));
-DESCR("greater than or equal");
-DATA(insert OID =  797 (  "#"     PGNSP PGUID l f f    0        602     23    0  0 path_npoints - - ));
-DESCR("number of points");
-DATA(insert OID =  798 (  "?#"    PGNSP PGUID b f f    602  602         16    0  0 path_inter - - ));
-DESCR("intersect");
-DATA(insert OID =  799 (  "@-@"    PGNSP PGUID l f f   0        602    701    0  0 path_length - - ));
-DESCR("sum of path segment lengths");
-DATA(insert OID =  800 (  ">^"    PGNSP PGUID b f f    603  603         16    0  0 box_above_eq positionsel positionjoinsel ));
-DESCR("is above (allows touching)");
-DATA(insert OID =  801 (  "<^"    PGNSP PGUID b f f    603  603         16    0  0 box_below_eq positionsel positionjoinsel ));
-DESCR("is below (allows touching)");
-DATA(insert OID =  802 (  "?#"    PGNSP PGUID b f f    603  603         16    0  0 box_overlap areasel areajoinsel ));
-DESCR("deprecated, use && instead");
-DATA(insert OID =  803 (  "#"     PGNSP PGUID b f f    603  603        603    0  0 box_intersect - - ));
-DESCR("box intersection");
-DATA(insert OID =  804 (  "+"     PGNSP PGUID b f f    603  600        603    0  0 box_add - - ));
-DESCR("add point to box (translate)");
-DATA(insert OID =  805 (  "-"     PGNSP PGUID b f f    603  600        603    0  0 box_sub - - ));
-DESCR("subtract point from box (translate)");
-DATA(insert OID =  806 (  "*"     PGNSP PGUID b f f    603  600        603    0  0 box_mul - - ));
-DESCR("multiply box by point (scale)");
-DATA(insert OID =  807 (  "/"     PGNSP PGUID b f f    603  600        603    0  0 box_div - - ));
-DESCR("divide box by point (scale)");
-DATA(insert OID =  808 (  "?-"    PGNSP PGUID b f f    600  600         16  808  0 point_horiz - - ));
-DESCR("horizontally aligned");
-DATA(insert OID =  809 (  "?|"    PGNSP PGUID b f f    600  600         16  809  0 point_vert - - ));
-DESCR("vertically aligned");
-
-DATA(insert OID = 811 (  "="      PGNSP PGUID b t f 704 704    16 811 812 tintervaleq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 812 (  "<>"     PGNSP PGUID b f f 704 704    16 812 811 tintervalne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 813 (  "<"      PGNSP PGUID b f f 704 704    16 814 816 tintervallt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 814 (  ">"      PGNSP PGUID b f f 704 704    16 813 815 tintervalgt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 815 (  "<="     PGNSP PGUID b f f 704 704    16 816 814 tintervalle scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 816 (  ">="     PGNSP PGUID b f f 704 704    16 815 813 tintervalge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-DATA(insert OID = 843 (  "*"      PGNSP PGUID b f f    790  700        790 845   0 cash_mul_flt4 - - ));
-DESCR("multiply");
-DATA(insert OID = 844 (  "/"      PGNSP PGUID b f f    790  700        790   0   0 cash_div_flt4 - - ));
-DESCR("divide");
-DATA(insert OID = 845 (  "*"      PGNSP PGUID b f f    700  790        790 843   0 flt4_mul_cash - - ));
-DESCR("multiply");
-
-DATA(insert OID = 900 (  "="      PGNSP PGUID b t f    790  790        16 900 901 cash_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 901 (  "<>"     PGNSP PGUID b f f    790  790        16 901 900 cash_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 902 (  "<"      PGNSP PGUID b f f    790  790        16 903 905 cash_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 903 (  ">"      PGNSP PGUID b f f    790  790        16 902 904 cash_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 904 (  "<="     PGNSP PGUID b f f    790  790        16 905 903 cash_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 905 (  ">="     PGNSP PGUID b f f    790  790        16 904 902 cash_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 906 (  "+"      PGNSP PGUID b f f    790  790        790 906   0 cash_pl - - ));
-DESCR("add");
-DATA(insert OID = 907 (  "-"      PGNSP PGUID b f f    790  790        790   0   0 cash_mi - - ));
-DESCR("subtract");
-DATA(insert OID = 908 (  "*"      PGNSP PGUID b f f    790  701        790 916   0 cash_mul_flt8 - - ));
-DESCR("multiply");
-DATA(insert OID = 909 (  "/"      PGNSP PGUID b f f    790  701        790   0   0 cash_div_flt8 - - ));
-DESCR("divide");
-DATA(insert OID = 3346 (  "*"     PGNSP PGUID b f f    790  20         790 3349  0 cash_mul_int8 - - ));
-DESCR("multiply");
-DATA(insert OID = 3347 (  "/"     PGNSP PGUID b f f    790  20         790   0   0 cash_div_int8 - - ));
-DESCR("divide");
-DATA(insert OID = 912 (  "*"      PGNSP PGUID b f f    790  23         790 917   0 cash_mul_int4 - - ));
-DESCR("multiply");
-DATA(insert OID = 913 (  "/"      PGNSP PGUID b f f    790  23         790   0   0 cash_div_int4 - - ));
-DESCR("divide");
-DATA(insert OID = 914 (  "*"      PGNSP PGUID b f f    790  21         790 918   0 cash_mul_int2 - - ));
-DESCR("multiply");
-DATA(insert OID = 915 (  "/"      PGNSP PGUID b f f    790  21         790   0   0 cash_div_int2 - - ));
-DESCR("divide");
-DATA(insert OID = 916 (  "*"      PGNSP PGUID b f f    701  790        790 908   0 flt8_mul_cash - - ));
-DESCR("multiply");
-DATA(insert OID = 3349 (  "*"     PGNSP PGUID b f f    20      790             790 3346  0 int8_mul_cash - - ));
-DESCR("multiply");
-DATA(insert OID = 917 (  "*"      PGNSP PGUID b f f    23      790             790 912   0 int4_mul_cash - - ));
-DESCR("multiply");
-DATA(insert OID = 918 (  "*"      PGNSP PGUID b f f    21      790             790 914   0 int2_mul_cash - - ));
-DESCR("multiply");
-DATA(insert OID = 3825 ( "/"      PGNSP PGUID b f f    790 790         701   0   0 cash_div_cash - - ));
-DESCR("divide");
-
-DATA(insert OID = 965 (  "^"      PGNSP PGUID b f f    701  701        701 0 0 dpow - - ));
-DESCR("exponentiation");
-DATA(insert OID = 966 (  "+"      PGNSP PGUID b f f 1034 1033 1034 0 0 aclinsert - - ));
-DESCR("add/update ACL item");
-DATA(insert OID = 967 (  "-"      PGNSP PGUID b f f 1034 1033 1034 0 0 aclremove - - ));
-DESCR("remove ACL item");
-DATA(insert OID = 968 (  "@>"     PGNSP PGUID b f f 1034 1033   16 0 0 aclcontains - - ));
-DESCR("contains");
-DATA(insert OID = 974 (  "="      PGNSP PGUID b f t 1033 1033   16 974 0 aclitemeq eqsel eqjoinsel ));
-DESCR("equal");
-
-/* additional geometric operators - thomas 1997-07-09 */
-DATA(insert OID =  969 (  "@@"    PGNSP PGUID l f f    0  601  600    0  0 lseg_center - - ));
-DESCR("center of");
-DATA(insert OID =  970 (  "@@"    PGNSP PGUID l f f    0  602  600    0  0 path_center - - ));
-DESCR("center of");
-DATA(insert OID =  971 (  "@@"    PGNSP PGUID l f f    0  604  600    0  0 poly_center - - ));
-DESCR("center of");
-
-DATA(insert OID = 1054 ( "="      PGNSP PGUID b t t 1042 1042   16 1054 1057 bpchareq eqsel eqjoinsel ));
-DESCR("equal");
-
-DATA(insert OID = 1055 ( "~"      PGNSP PGUID b f f 1042 25     16    0 1056 bpcharregexeq regexeqsel regexeqjoinsel ));
-DESCR("matches regular expression, case-sensitive");
-#define OID_BPCHAR_REGEXEQ_OP          1055
-DATA(insert OID = 1056 ( "!~"     PGNSP PGUID b f f 1042 25     16    0 1055 bpcharregexne regexnesel regexnejoinsel ));
-DESCR("does not match regular expression, case-sensitive");
-DATA(insert OID = 1057 ( "<>"     PGNSP PGUID b f f 1042 1042   16 1057 1054 bpcharne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1058 ( "<"      PGNSP PGUID b f f 1042 1042   16 1060 1061 bpcharlt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 1059 ( "<="     PGNSP PGUID b f f 1042 1042   16 1061 1060 bpcharle scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1060 ( ">"      PGNSP PGUID b f f 1042 1042   16 1058 1059 bpchargt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 1061 ( ">="     PGNSP PGUID b f f 1042 1042   16 1059 1058 bpcharge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-/* generic array comparison operators */
-DATA(insert OID = 1070 (  "="     PGNSP PGUID b t t 2277 2277 16 1070 1071 array_eq eqsel eqjoinsel ));
-DESCR("equal");
-#define ARRAY_EQ_OP 1070
-DATA(insert OID = 1071 (  "<>"    PGNSP PGUID b f f 2277 2277 16 1071 1070 array_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1072 (  "<"     PGNSP PGUID b f f 2277 2277 16 1073 1075 array_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-#define ARRAY_LT_OP 1072
-DATA(insert OID = 1073 (  ">"     PGNSP PGUID b f f 2277 2277 16 1072 1074 array_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-#define ARRAY_GT_OP 1073
-DATA(insert OID = 1074 (  "<="    PGNSP PGUID b f f 2277 2277 16 1075 1073 array_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1075 (  ">="    PGNSP PGUID b f f 2277 2277 16 1074 1072 array_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-/* date operators */
-DATA(insert OID = 1076 ( "+"      PGNSP PGUID b f f    1082    1186 1114 2551 0 date_pl_interval - - ));
-DESCR("add");
-DATA(insert OID = 1077 ( "-"      PGNSP PGUID b f f    1082    1186 1114 0 0 date_mi_interval - - ));
-DESCR("subtract");
-DATA(insert OID = 1093 ( "="      PGNSP PGUID b t t    1082    1082   16 1093 1094 date_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1094 ( "<>"     PGNSP PGUID b f f    1082    1082   16 1094 1093 date_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1095 ( "<"      PGNSP PGUID b f f    1082    1082   16 1097 1098 date_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 1096 ( "<="     PGNSP PGUID b f f    1082    1082   16 1098 1097 date_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1097 ( ">"      PGNSP PGUID b f f    1082    1082   16 1095 1096 date_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 1098 ( ">="     PGNSP PGUID b f f    1082    1082   16 1096 1095 date_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 1099 ( "-"      PGNSP PGUID b f f    1082    1082   23 0 0 date_mi - - ));
-DESCR("subtract");
-DATA(insert OID = 1100 ( "+"      PGNSP PGUID b f f    1082      23 1082 2555 0 date_pli - - ));
-DESCR("add");
-DATA(insert OID = 1101 ( "-"      PGNSP PGUID b f f    1082      23 1082 0 0 date_mii - - ));
-DESCR("subtract");
-
-/* time operators */
-DATA(insert OID = 1108 ( "="      PGNSP PGUID b t t    1083    1083  16 1108 1109 time_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1109 ( "<>"     PGNSP PGUID b f f    1083    1083  16 1109 1108 time_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1110 ( "<"      PGNSP PGUID b f f    1083    1083  16 1112 1113 time_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 1111 ( "<="     PGNSP PGUID b f f    1083    1083  16 1113 1112 time_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1112 ( ">"      PGNSP PGUID b f f    1083    1083  16 1110 1111 time_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 1113 ( ">="     PGNSP PGUID b f f    1083    1083  16 1111 1110 time_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-/* timetz operators */
-DATA(insert OID = 1550 ( "="      PGNSP PGUID b t t    1266 1266       16 1550 1551 timetz_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1551 ( "<>"     PGNSP PGUID b f f    1266 1266       16 1551 1550 timetz_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1552 ( "<"      PGNSP PGUID b f f    1266 1266       16 1554 1555 timetz_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 1553 ( "<="     PGNSP PGUID b f f    1266 1266       16 1555 1554 timetz_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1554 ( ">"      PGNSP PGUID b f f    1266 1266       16 1552 1553 timetz_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 1555 ( ">="     PGNSP PGUID b f f    1266 1266       16 1553 1552 timetz_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-/* float48 operators */
-DATA(insert OID = 1116 (  "+"          PGNSP PGUID b f f 700 701 701 1126       0 float48pl - - ));
-DESCR("add");
-DATA(insert OID = 1117 (  "-"          PGNSP PGUID b f f 700 701 701  0         0 float48mi - - ));
-DESCR("subtract");
-DATA(insert OID = 1118 (  "/"          PGNSP PGUID b f f 700 701 701  0         0 float48div - - ));
-DESCR("divide");
-DATA(insert OID = 1119 (  "*"          PGNSP PGUID b f f 700 701 701 1129       0 float48mul - - ));
-DESCR("multiply");
-DATA(insert OID = 1120 (  "="          PGNSP PGUID b t t  700  701  16 1130 1121 float48eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1121 (  "<>"         PGNSP PGUID b f f  700  701  16 1131 1120 float48ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1122 (  "<"          PGNSP PGUID b f f  700  701  16 1133 1125 float48lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 1123 (  ">"          PGNSP PGUID b f f  700  701  16 1132 1124 float48gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 1124 (  "<="         PGNSP PGUID b f f  700  701  16 1135 1123 float48le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1125 (  ">="         PGNSP PGUID b f f  700  701  16 1134 1122 float48ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
+       /* name of operator */
+       NameData        oprname;
 
-/* float84 operators */
-DATA(insert OID = 1126 (  "+"          PGNSP PGUID b f f 701 700 701 1116       0 float84pl - - ));
-DESCR("add");
-DATA(insert OID = 1127 (  "-"          PGNSP PGUID b f f 701 700 701  0         0 float84mi - - ));
-DESCR("subtract");
-DATA(insert OID = 1128 (  "/"          PGNSP PGUID b f f 701 700 701  0         0 float84div - - ));
-DESCR("divide");
-DATA(insert OID = 1129 (  "*"          PGNSP PGUID b f f 701 700 701 1119       0 float84mul - - ));
-DESCR("multiply");
-DATA(insert OID = 1130 (  "="          PGNSP PGUID b t t  701  700  16 1120 1131 float84eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1131 (  "<>"         PGNSP PGUID b f f  701  700  16 1121 1130 float84ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1132 (  "<"          PGNSP PGUID b f f  701  700  16 1123 1135 float84lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 1133 (  ">"          PGNSP PGUID b f f  701  700  16 1122 1134 float84gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 1134 (  "<="         PGNSP PGUID b f f  701  700  16 1125 1133 float84le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1135 (  ">="         PGNSP PGUID b f f  701  700  16 1124 1132 float84ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
+       /* OID of namespace containing this oper */
+       Oid                     oprnamespace BKI_DEFAULT(PGNSP);
 
+       /* operator owner */
+       Oid                     oprowner BKI_DEFAULT(PGUID);
 
-/* LIKE hacks by Keith Parks. */
-DATA(insert OID = 1207 (  "~~"   PGNSP PGUID b f f  19 25      16 0 1208 namelike likesel likejoinsel ));
-DESCR("matches LIKE expression");
-#define OID_NAME_LIKE_OP               1207
-DATA(insert OID = 1208 (  "!~~"   PGNSP PGUID b f f  19 25     16 0 1207 namenlike nlikesel nlikejoinsel ));
-DESCR("does not match LIKE expression");
-DATA(insert OID = 1209 (  "~~"   PGNSP PGUID b f f  25 25      16 0 1210 textlike likesel likejoinsel ));
-DESCR("matches LIKE expression");
-#define OID_TEXT_LIKE_OP               1209
-DATA(insert OID = 1210 (  "!~~"   PGNSP PGUID b f f  25 25     16 0 1209 textnlike nlikesel nlikejoinsel ));
-DESCR("does not match LIKE expression");
-DATA(insert OID = 1211 (  "~~"   PGNSP PGUID b f f  1042 25    16 0 1212 bpcharlike likesel likejoinsel ));
-DESCR("matches LIKE expression");
-#define OID_BPCHAR_LIKE_OP             1211
-DATA(insert OID = 1212 (  "!~~"   PGNSP PGUID b f f  1042 25   16 0 1211 bpcharnlike nlikesel nlikejoinsel ));
-DESCR("does not match LIKE expression");
+       /* 'l', 'r', or 'b' */
+       char            oprkind BKI_DEFAULT(b);
 
-/* case-insensitive regex hacks */
-DATA(insert OID = 1226 (  "~*"          PGNSP PGUID b f f      19      25      16 0 1227 nameicregexeq icregexeqsel icregexeqjoinsel ));
-DESCR("matches regular expression, case-insensitive");
-#define OID_NAME_ICREGEXEQ_OP          1226
-DATA(insert OID = 1227 (  "!~*"                 PGNSP PGUID b f f      19      25      16 0 1226 nameicregexne icregexnesel icregexnejoinsel ));
-DESCR("does not match regular expression, case-insensitive");
-DATA(insert OID = 1228 (  "~*"          PGNSP PGUID b f f      25      25      16 0 1229 texticregexeq icregexeqsel icregexeqjoinsel ));
-DESCR("matches regular expression, case-insensitive");
-#define OID_TEXT_ICREGEXEQ_OP          1228
-DATA(insert OID = 1229 (  "!~*"                 PGNSP PGUID b f f      25      25      16 0 1228 texticregexne icregexnesel icregexnejoinsel ));
-DESCR("does not match regular expression, case-insensitive");
-DATA(insert OID = 1234 (  "~*"         PGNSP PGUID b f f  1042  25  16 0 1235 bpcharicregexeq icregexeqsel icregexeqjoinsel ));
-DESCR("matches regular expression, case-insensitive");
-#define OID_BPCHAR_ICREGEXEQ_OP                1234
-DATA(insert OID = 1235 ( "!~*"         PGNSP PGUID b f f  1042  25  16 0 1234 bpcharicregexne icregexnesel icregexnejoinsel ));
-DESCR("does not match regular expression, case-insensitive");
+       /* can be used in merge join? */
+       bool            oprcanmerge BKI_DEFAULT(f);
 
-/* timestamptz operators */
-DATA(insert OID = 1320 (  "="     PGNSP PGUID b t t 1184 1184   16 1320 1321 timestamptz_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1321 (  "<>"    PGNSP PGUID b f f 1184 1184   16 1321 1320 timestamptz_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1322 (  "<"     PGNSP PGUID b f f 1184 1184   16 1324 1325 timestamptz_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 1323 (  "<="    PGNSP PGUID b f f 1184 1184   16 1325 1324 timestamptz_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1324 (  ">"     PGNSP PGUID b f f 1184 1184   16 1322 1323 timestamptz_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 1325 (  ">="    PGNSP PGUID b f f 1184 1184   16 1323 1322 timestamptz_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 1327 (  "+"     PGNSP PGUID b f f 1184 1186 1184  2554 0 timestamptz_pl_interval - - ));
-DESCR("add");
-DATA(insert OID = 1328 (  "-"     PGNSP PGUID b f f 1184 1184 1186  0  0 timestamptz_mi - - ));
-DESCR("subtract");
-DATA(insert OID = 1329 (  "-"     PGNSP PGUID b f f 1184 1186 1184  0  0 timestamptz_mi_interval - - ));
-DESCR("subtract");
+       /* can be used in hash join? */
+       bool            oprcanhash BKI_DEFAULT(f);
 
-/* interval operators */
-DATA(insert OID = 1330 (  "="     PGNSP PGUID b t t 1186 1186   16 1330 1331 interval_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1331 (  "<>"    PGNSP PGUID b f f 1186 1186   16 1331 1330 interval_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1332 (  "<"     PGNSP PGUID b f f 1186 1186   16 1334 1335 interval_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 1333 (  "<="    PGNSP PGUID b f f 1186 1186   16 1335 1334 interval_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1334 (  ">"     PGNSP PGUID b f f 1186 1186   16 1332 1333 interval_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 1335 (  ">="    PGNSP PGUID b f f 1186 1186   16 1333 1332 interval_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
+       /* left arg type, or 0 if 'l' oprkind */
+       Oid                     oprleft BKI_LOOKUP(pg_type);
 
-DATA(insert OID = 1336 (  "-"     PGNSP PGUID l f f    0 1186 1186    0        0 interval_um - - ));
-DESCR("negate");
-DATA(insert OID = 1337 (  "+"     PGNSP PGUID b f f 1186 1186 1186 1337        0 interval_pl - - ));
-DESCR("add");
-DATA(insert OID = 1338 (  "-"     PGNSP PGUID b f f 1186 1186 1186    0        0 interval_mi - - ));
-DESCR("subtract");
+       /* right arg type, or 0 if 'r' oprkind */
+       Oid                     oprright BKI_LOOKUP(pg_type);
 
-DATA(insert OID = 1360 (  "+"     PGNSP PGUID b f f 1082 1083 1114 1363 0 datetime_pl - - ));
-DESCR("convert date and time to timestamp");
-DATA(insert OID = 1361 (  "+"     PGNSP PGUID b f f 1082 1266 1184 1366 0 datetimetz_pl - - ));
-DESCR("convert date and time with time zone to timestamp with time zone");
-DATA(insert OID = 1363 (  "+"     PGNSP PGUID b f f 1083 1082 1114 1360 0 timedate_pl - - ));
-DESCR("convert time and date to timestamp");
-DATA(insert OID = 1366 (  "+"     PGNSP PGUID b f f 1266 1082 1184 1361 0 timetzdate_pl - - ));
-DESCR("convert time with time zone and date to timestamp with time zone");
+       /* result datatype */
+       Oid                     oprresult BKI_LOOKUP(pg_type);
 
-DATA(insert OID = 1399 (  "-"     PGNSP PGUID b f f 1083 1083 1186  0  0 time_mi_time - - ));
-DESCR("subtract");
+       /* OID of commutator oper, or 0 if none */
+       Oid                     oprcom BKI_DEFAULT(0) BKI_LOOKUP(pg_operator);
 
-/* additional geometric operators - thomas 97/04/18 */
-DATA(insert OID = 1420 (  "@@"   PGNSP PGUID l f f  0  718 600   0    0 circle_center - - ));
-DESCR("center of");
-DATA(insert OID = 1500 (  "="    PGNSP PGUID b f f  718        718 16 1500 1501 circle_eq eqsel eqjoinsel ));
-DESCR("equal by area");
-DATA(insert OID = 1501 (  "<>"   PGNSP PGUID b f f  718        718 16 1501 1500 circle_ne neqsel neqjoinsel ));
-DESCR("not equal by area");
-DATA(insert OID = 1502 (  "<"    PGNSP PGUID b f f  718        718 16 1503 1505 circle_lt areasel areajoinsel ));
-DESCR("less than by area");
-DATA(insert OID = 1503 (  ">"    PGNSP PGUID b f f  718        718 16 1502 1504 circle_gt areasel areajoinsel ));
-DESCR("greater than by area");
-DATA(insert OID = 1504 (  "<="   PGNSP PGUID b f f  718        718 16 1505 1503 circle_le areasel areajoinsel ));
-DESCR("less than or equal by area");
-DATA(insert OID = 1505 (  ">="   PGNSP PGUID b f f  718        718 16 1504 1502 circle_ge areasel areajoinsel ));
-DESCR("greater than or equal by area");
+       /* OID of negator oper, or 0 if none */
+       Oid                     oprnegate BKI_DEFAULT(0) BKI_LOOKUP(pg_operator);
 
-DATA(insert OID = 1506 (  "<<"   PGNSP PGUID b f f  718        718 16    0    0 circle_left positionsel positionjoinsel ));
-DESCR("is left of");
-DATA(insert OID = 1507 (  "&<"   PGNSP PGUID b f f  718        718 16    0    0 circle_overleft positionsel positionjoinsel ));
-DESCR("overlaps or is left of");
-DATA(insert OID = 1508 (  "&>"   PGNSP PGUID b f f  718        718 16    0    0 circle_overright positionsel positionjoinsel ));
-DESCR("overlaps or is right of");
-DATA(insert OID = 1509 (  ">>"   PGNSP PGUID b f f  718        718 16    0    0 circle_right positionsel positionjoinsel ));
-DESCR("is right of");
-DATA(insert OID = 1510 (  "<@"   PGNSP PGUID b f f  718        718 16 1511    0 circle_contained contsel contjoinsel ));
-DESCR("is contained by");
-DATA(insert OID = 1511 (  "@>"   PGNSP PGUID b f f  718        718 16 1510    0 circle_contain contsel contjoinsel ));
-DESCR("contains");
-DATA(insert OID = 1512 (  "~="   PGNSP PGUID b f f  718        718 16 1512    0 circle_same eqsel eqjoinsel ));
-DESCR("same as");
-DATA(insert OID = 1513 (  "&&"   PGNSP PGUID b f f  718        718 16 1513    0 circle_overlap areasel areajoinsel ));
-DESCR("overlaps");
-DATA(insert OID = 1514 (  "|>>"   PGNSP PGUID b f f  718       718 16    0    0 circle_above positionsel positionjoinsel ));
-DESCR("is above");
-DATA(insert OID = 1515 (  "<<|"   PGNSP PGUID b f f  718       718 16    0    0 circle_below positionsel positionjoinsel ));
-DESCR("is below");
+       /* OID of underlying function */
+       regproc         oprcode BKI_LOOKUP(pg_proc);
 
-DATA(insert OID = 1516 (  "+"    PGNSP PGUID b f f  718        600  718          0    0 circle_add_pt - - ));
-DESCR("add");
-DATA(insert OID = 1517 (  "-"    PGNSP PGUID b f f  718        600  718          0    0 circle_sub_pt - - ));
-DESCR("subtract");
-DATA(insert OID = 1518 (  "*"    PGNSP PGUID b f f  718        600  718          0    0 circle_mul_pt - - ));
-DESCR("multiply");
-DATA(insert OID = 1519 (  "/"    PGNSP PGUID b f f  718        600  718          0    0 circle_div_pt - - ));
-DESCR("divide");
+       /* OID of restriction estimator, or 0 */
+       regproc         oprrest BKI_DEFAULT(-) BKI_LOOKUP(pg_proc);
 
-DATA(insert OID = 1520 (  "<->"   PGNSP PGUID b f f  718       718  701   1520    0 circle_distance - - ));
-DESCR("distance between");
-DATA(insert OID = 1521 (  "#"    PGNSP PGUID l f f  0          604   23          0    0 poly_npoints - - ));
-DESCR("number of points");
-DATA(insert OID = 1522 (  "<->"   PGNSP PGUID b f f  600       718  701   3291    0 dist_pc - - ));
-DESCR("distance between");
-DATA(insert OID = 3291 (  "<->"   PGNSP PGUID b f f  718       600  701   1522    0 dist_cpoint - - ));
-DESCR("distance between");
-DATA(insert OID = 3276 (  "<->"   PGNSP PGUID b f f  600       604  701   3289    0 dist_ppoly - - ));
-DESCR("distance between");
-DATA(insert OID = 3289 (  "<->"   PGNSP PGUID b f f  604       600  701   3276    0 dist_polyp - - ));
-DESCR("distance between");
-DATA(insert OID = 1523 (  "<->"   PGNSP PGUID b f f  718       604  701          0    0 dist_cpoly - - ));
-DESCR("distance between");
-
-/* additional geometric operators - thomas 1997-07-09 */
-DATA(insert OID = 1524 (  "<->"   PGNSP PGUID b f f  628       603  701          0  0 dist_lb - - ));
-DESCR("distance between");
-
-DATA(insert OID = 1525 (  "?#"   PGNSP PGUID b f f  601        601 16 1525  0 lseg_intersect - - ));
-DESCR("intersect");
-DATA(insert OID = 1526 (  "?||"   PGNSP PGUID b f f  601       601 16 1526  0 lseg_parallel - - ));
-DESCR("parallel");
-DATA(insert OID = 1527 (  "?-|"   PGNSP PGUID b f f  601       601 16 1527  0 lseg_perp - - ));
-DESCR("perpendicular");
-DATA(insert OID = 1528 (  "?-"   PGNSP PGUID l f f  0  601 16    0  0 lseg_horizontal - - ));
-DESCR("horizontal");
-DATA(insert OID = 1529 (  "?|"   PGNSP PGUID l f f  0  601 16    0  0 lseg_vertical - - ));
-DESCR("vertical");
-DATA(insert OID = 1535 (  "="    PGNSP PGUID b f f  601        601 16 1535 1586 lseg_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1536 (  "#"    PGNSP PGUID b f f  601        601  600 1536  0 lseg_interpt - - ));
-DESCR("intersection point");
-DATA(insert OID = 1537 (  "?#"   PGNSP PGUID b f f  601        628 16    0  0 inter_sl - - ));
-DESCR("intersect");
-DATA(insert OID = 1538 (  "?#"   PGNSP PGUID b f f  601        603 16    0  0 inter_sb - - ));
-DESCR("intersect");
-DATA(insert OID = 1539 (  "?#"   PGNSP PGUID b f f  628        603 16    0  0 inter_lb - - ));
-DESCR("intersect");
-
-DATA(insert OID = 1546 (  "<@"   PGNSP PGUID b f f  600        628 16    0  0 on_pl - - ));
-DESCR("point on line");
-DATA(insert OID = 1547 (  "<@"   PGNSP PGUID b f f  600        601 16    0  0 on_ps - - ));
-DESCR("is contained by");
-DATA(insert OID = 1548 (  "<@"   PGNSP PGUID b f f  601        628 16    0  0 on_sl - - ));
-DESCR("lseg on line");
-DATA(insert OID = 1549 (  "<@"   PGNSP PGUID b f f  601        603 16    0  0 on_sb - - ));
-DESCR("is contained by");
-
-DATA(insert OID = 1557 (  "##"   PGNSP PGUID b f f  600        628  600          0  0 close_pl - - ));
-DESCR("closest point to A on B");
-DATA(insert OID = 1558 (  "##"   PGNSP PGUID b f f  600        601  600          0  0 close_ps - - ));
-DESCR("closest point to A on B");
-DATA(insert OID = 1559 (  "##"   PGNSP PGUID b f f  600        603  600          0  0 close_pb - - ));
-DESCR("closest point to A on B");
-
-DATA(insert OID = 1566 (  "##"   PGNSP PGUID b f f  601        628  600          0  0 close_sl - - ));
-DESCR("closest point to A on B");
-DATA(insert OID = 1567 (  "##"   PGNSP PGUID b f f  601        603  600          0  0 close_sb - - ));
-DESCR("closest point to A on B");
-DATA(insert OID = 1568 (  "##"   PGNSP PGUID b f f  628        603  600          0  0 close_lb - - ));
-DESCR("closest point to A on B");
-DATA(insert OID = 1577 (  "##"   PGNSP PGUID b f f  628        601  600          0  0 close_ls - - ));
-DESCR("closest point to A on B");
-DATA(insert OID = 1578 (  "##"   PGNSP PGUID b f f  601        601  600          0  0 close_lseg - - ));
-DESCR("closest point to A on B");
-DATA(insert OID = 1583 (  "*"    PGNSP PGUID b f f 1186        701 1186        1584 0 interval_mul - - ));
-DESCR("multiply");
-DATA(insert OID = 1584 (  "*"    PGNSP PGUID b f f  701 1186 1186      1583 0 mul_d_interval - - ));
-DESCR("multiply");
-DATA(insert OID = 1585 (  "/"    PGNSP PGUID b f f 1186        701 1186          0  0 interval_div - - ));
-DESCR("divide");
-
-DATA(insert OID = 1586 (  "<>"   PGNSP PGUID b f f  601        601 16 1586 1535 lseg_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1587 (  "<"    PGNSP PGUID b f f  601        601 16 1589 1590 lseg_lt - - ));
-DESCR("less than by length");
-DATA(insert OID = 1588 (  "<="   PGNSP PGUID b f f  601        601 16 1590 1589 lseg_le - - ));
-DESCR("less than or equal by length");
-DATA(insert OID = 1589 (  ">"    PGNSP PGUID b f f  601        601 16 1587 1588 lseg_gt - - ));
-DESCR("greater than by length");
-DATA(insert OID = 1590 (  ">="   PGNSP PGUID b f f  601        601 16 1588 1587 lseg_ge - - ));
-DESCR("greater than or equal by length");
-
-DATA(insert OID = 1591 (  "@-@"   PGNSP PGUID l f f 0  601     701    0  0 lseg_length - - ));
-DESCR("distance between endpoints");
-
-DATA(insert OID = 1611 (  "?#"   PGNSP PGUID b f f  628        628 16 1611  0 line_intersect - - ));
-DESCR("intersect");
-DATA(insert OID = 1612 (  "?||"   PGNSP PGUID b f f  628       628 16 1612  0 line_parallel - - ));
-DESCR("parallel");
-DATA(insert OID = 1613 (  "?-|"   PGNSP PGUID b f f  628       628 16 1613  0 line_perp - - ));
-DESCR("perpendicular");
-DATA(insert OID = 1614 (  "?-"   PGNSP PGUID l f f  0  628 16    0  0 line_horizontal - - ));
-DESCR("horizontal");
-DATA(insert OID = 1615 (  "?|"   PGNSP PGUID l f f  0  628 16    0  0 line_vertical - - ));
-DESCR("vertical");
-DATA(insert OID = 1616 (  "="    PGNSP PGUID b f f  628        628 16 1616  0 line_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1617 (  "#"    PGNSP PGUID b f f  628        628  600 1617  0 line_interpt - - ));
-DESCR("intersection point");
-
-/* MACADDR type */
-DATA(insert OID = 1220 (  "="     PGNSP PGUID b t t 829 829     16 1220 1221 macaddr_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1221 (  "<>"    PGNSP PGUID b f f 829 829     16 1221 1220 macaddr_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1222 (  "<"     PGNSP PGUID b f f 829 829     16 1224 1225 macaddr_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 1223 (  "<="    PGNSP PGUID b f f 829 829     16 1225 1224 macaddr_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1224 (  ">"     PGNSP PGUID b f f 829 829     16 1222 1223 macaddr_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 1225 (  ">="    PGNSP PGUID b f f 829 829     16 1223 1222 macaddr_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-DATA(insert OID = 3147 (  "~"     PGNSP PGUID l f f      0 829 829 0 0 macaddr_not - - ));
-DESCR("bitwise not");
-DATA(insert OID = 3148 (  "&"     PGNSP PGUID b f f    829 829 829 0 0 macaddr_and - - ));
-DESCR("bitwise and");
-DATA(insert OID = 3149 (  "|"     PGNSP PGUID b f f    829 829 829 0 0 macaddr_or - - ));
-DESCR("bitwise or");
-
-/* MACADDR8 type */
-DATA(insert OID = 3362 (  "="     PGNSP PGUID b t t 774 774     16 3362 3363 macaddr8_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 3363 (  "<>"    PGNSP PGUID b f f 774 774     16 3363 3362 macaddr8_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 3364 (  "<"     PGNSP PGUID b f f 774 774     16 3366 3367 macaddr8_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 3365 (  "<="    PGNSP PGUID b f f 774 774     16 3367 3366 macaddr8_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 3366 (  ">"     PGNSP PGUID b f f 774 774     16 3364 3365 macaddr8_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 3367 (  ">="    PGNSP PGUID b f f 774 774     16 3365 3364 macaddr8_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-DATA(insert OID = 3368 (  "~"     PGNSP PGUID l f f      0 774 774 0 0 macaddr8_not - - ));
-DESCR("bitwise not");
-DATA(insert OID = 3369 (  "&"     PGNSP PGUID b f f    774 774 774 0 0 macaddr8_and - - ));
-DESCR("bitwise and");
-DATA(insert OID = 3370 (  "|"     PGNSP PGUID b f f    774 774 774 0 0 macaddr8_or - - ));
-DESCR("bitwise or");
-
-/* INET type (these also support CIDR via implicit cast) */
-DATA(insert OID = 1201 (  "="     PGNSP PGUID b t t 869 869     16 1201 1202 network_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1202 (  "<>"    PGNSP PGUID b f f 869 869     16 1202 1201 network_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1203 (  "<"     PGNSP PGUID b f f 869 869     16 1205 1206 network_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 1204 (  "<="    PGNSP PGUID b f f 869 869     16 1206 1205 network_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1205 (  ">"     PGNSP PGUID b f f 869 869     16 1203 1204 network_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 1206 (  ">="    PGNSP PGUID b f f 869 869     16 1204 1203 network_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 931  (  "<<"    PGNSP PGUID b f f 869 869     16 933         0 network_sub networksel networkjoinsel ));
-DESCR("is subnet");
-#define OID_INET_SUB_OP                        931
-DATA(insert OID = 932  (  "<<="    PGNSP PGUID b f f 869 869    16 934         0 network_subeq networksel networkjoinsel ));
-DESCR("is subnet or equal");
-#define OID_INET_SUBEQ_OP              932
-DATA(insert OID = 933  (  ">>"    PGNSP PGUID b f f 869 869     16 931         0 network_sup networksel networkjoinsel ));
-DESCR("is supernet");
-#define OID_INET_SUP_OP                        933
-DATA(insert OID = 934  (  ">>="    PGNSP PGUID b f f 869 869    16 932         0 network_supeq networksel networkjoinsel ));
-DESCR("is supernet or equal");
-#define OID_INET_SUPEQ_OP              934
-DATA(insert OID = 3552 (  "&&"    PGNSP PGUID b f f 869 869     16 3552        0 network_overlap networksel networkjoinsel ));
-DESCR("overlaps (is subnet or supernet)");
-#define OID_INET_OVERLAP_OP            3552
-
-DATA(insert OID = 2634 (  "~"     PGNSP PGUID l f f      0 869 869 0 0 inetnot - - ));
-DESCR("bitwise not");
-DATA(insert OID = 2635 (  "&"     PGNSP PGUID b f f    869 869 869 0 0 inetand - - ));
-DESCR("bitwise and");
-DATA(insert OID = 2636 (  "|"     PGNSP PGUID b f f    869 869 869 0 0 inetor - - ));
-DESCR("bitwise or");
-DATA(insert OID = 2637 (  "+"     PGNSP PGUID b f f    869  20 869 2638 0 inetpl - - ));
-DESCR("add");
-DATA(insert OID = 2638 (  "+"     PGNSP PGUID b f f     20 869 869 2637 0 int8pl_inet - - ));
-DESCR("add");
-DATA(insert OID = 2639 (  "-"     PGNSP PGUID b f f    869  20 869 0 0 inetmi_int8 - - ));
-DESCR("subtract");
-DATA(insert OID = 2640 (  "-"     PGNSP PGUID b f f    869 869  20 0 0 inetmi - - ));
-DESCR("subtract");
-
-/* case-insensitive LIKE hacks */
-DATA(insert OID = 1625 (  "~~*"   PGNSP PGUID b f f  19 25     16 0 1626 nameiclike iclikesel iclikejoinsel ));
-DESCR("matches LIKE expression, case-insensitive");
-#define OID_NAME_ICLIKE_OP             1625
-DATA(insert OID = 1626 (  "!~~*"  PGNSP PGUID b f f  19 25     16 0 1625 nameicnlike icnlikesel icnlikejoinsel ));
-DESCR("does not match LIKE expression, case-insensitive");
-DATA(insert OID = 1627 (  "~~*"   PGNSP PGUID b f f  25 25     16 0 1628 texticlike iclikesel iclikejoinsel ));
-DESCR("matches LIKE expression, case-insensitive");
-#define OID_TEXT_ICLIKE_OP             1627
-DATA(insert OID = 1628 (  "!~~*"  PGNSP PGUID b f f  25 25     16 0 1627 texticnlike icnlikesel icnlikejoinsel ));
-DESCR("does not match LIKE expression, case-insensitive");
-DATA(insert OID = 1629 (  "~~*"   PGNSP PGUID b f f  1042 25   16 0 1630 bpchariclike iclikesel iclikejoinsel ));
-DESCR("matches LIKE expression, case-insensitive");
-#define OID_BPCHAR_ICLIKE_OP   1629
-DATA(insert OID = 1630 (  "!~~*"  PGNSP PGUID b f f  1042 25   16 0 1629 bpcharicnlike icnlikesel icnlikejoinsel ));
-DESCR("does not match LIKE expression, case-insensitive");
-
-/* NUMERIC type - OID's 1700-1799 */
-DATA(insert OID = 1751 (  "-"     PGNSP PGUID l f f    0 1700 1700    0        0 numeric_uminus - - ));
-DESCR("negate");
-DATA(insert OID = 1752 (  "="     PGNSP PGUID b t t 1700 1700   16 1752 1753 numeric_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1753 (  "<>"    PGNSP PGUID b f f 1700 1700   16 1753 1752 numeric_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1754 (  "<"     PGNSP PGUID b f f 1700 1700   16 1756 1757 numeric_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 1755 (  "<="    PGNSP PGUID b f f 1700 1700   16 1757 1756 numeric_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1756 (  ">"     PGNSP PGUID b f f 1700 1700   16 1754 1755 numeric_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 1757 (  ">="    PGNSP PGUID b f f 1700 1700   16 1755 1754 numeric_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 1758 (  "+"     PGNSP PGUID b f f 1700 1700 1700 1758        0 numeric_add - - ));
-DESCR("add");
-DATA(insert OID = 1759 (  "-"     PGNSP PGUID b f f 1700 1700 1700    0        0 numeric_sub - - ));
-DESCR("subtract");
-DATA(insert OID = 1760 (  "*"     PGNSP PGUID b f f 1700 1700 1700 1760        0 numeric_mul - - ));
-DESCR("multiply");
-DATA(insert OID = 1761 (  "/"     PGNSP PGUID b f f 1700 1700 1700    0        0 numeric_div - - ));
-DESCR("divide");
-DATA(insert OID = 1762 (  "%"     PGNSP PGUID b f f 1700 1700 1700    0        0 numeric_mod - - ));
-DESCR("modulus");
-DATA(insert OID = 1038 (  "^"     PGNSP PGUID b f f 1700 1700 1700    0        0 numeric_power - - ));
-DESCR("exponentiation");
-DATA(insert OID = 1763 (  "@"     PGNSP PGUID l f f    0 1700 1700    0        0 numeric_abs - - ));
-DESCR("absolute value");
-
-DATA(insert OID = 1784 (  "="    PGNSP PGUID b t f 1560 1560 16 1784 1785 biteq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1785 (  "<>"   PGNSP PGUID b f f 1560 1560 16 1785 1784 bitne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1786 (  "<"    PGNSP PGUID b f f 1560 1560 16 1787 1789 bitlt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 1787 (  ">"    PGNSP PGUID b f f 1560 1560 16 1786 1788 bitgt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 1788 (  "<="   PGNSP PGUID b f f 1560 1560 16 1789 1787 bitle scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1789 (  ">="   PGNSP PGUID b f f 1560 1560 16 1788 1786 bitge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 1791 (  "&"    PGNSP PGUID b f f 1560 1560 1560 1791  0 bitand - - ));
-DESCR("bitwise and");
-DATA(insert OID = 1792 (  "|"    PGNSP PGUID b f f 1560 1560 1560 1792  0 bitor - - ));
-DESCR("bitwise or");
-DATA(insert OID = 1793 (  "#"    PGNSP PGUID b f f 1560 1560 1560 1793  0 bitxor - - ));
-DESCR("bitwise exclusive or");
-DATA(insert OID = 1794 (  "~"    PGNSP PGUID l f f    0 1560 1560        0  0 bitnot - - ));
-DESCR("bitwise not");
-DATA(insert OID = 1795 (  "<<"   PGNSP PGUID b f f 1560   23 1560        0  0 bitshiftleft - - ));
-DESCR("bitwise shift left");
-DATA(insert OID = 1796 (  ">>"   PGNSP PGUID b f f 1560   23 1560        0  0 bitshiftright - - ));
-DESCR("bitwise shift right");
-DATA(insert OID = 1797 (  "||"   PGNSP PGUID b f f 1562 1562 1562        0  0 bitcat - - ));
-DESCR("concatenate");
-
-DATA(insert OID = 1800 (  "+"     PGNSP PGUID b f f 1083 1186 1083  1849 0 time_pl_interval - - ));
-DESCR("add");
-DATA(insert OID = 1801 (  "-"     PGNSP PGUID b f f 1083 1186 1083  0  0 time_mi_interval - - ));
-DESCR("subtract");
-DATA(insert OID = 1802 (  "+"     PGNSP PGUID b f f 1266 1186 1266  2552 0 timetz_pl_interval - - ));
-DESCR("add");
-DATA(insert OID = 1803 (  "-"     PGNSP PGUID b f f 1266 1186 1266  0  0 timetz_mi_interval - - ));
-DESCR("subtract");
-
-DATA(insert OID = 1804 (  "="    PGNSP PGUID b t f 1562 1562 16 1804 1805 varbiteq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1805 (  "<>"   PGNSP PGUID b f f 1562 1562 16 1805 1804 varbitne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1806 (  "<"    PGNSP PGUID b f f 1562 1562 16 1807 1809 varbitlt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 1807 (  ">"    PGNSP PGUID b f f 1562 1562 16 1806 1808 varbitgt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 1808 (  "<="   PGNSP PGUID b f f 1562 1562 16 1809 1807 varbitle scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1809 (  ">="   PGNSP PGUID b f f 1562 1562 16 1808 1806 varbitge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-DATA(insert OID = 1849 (  "+"     PGNSP PGUID b f f 1186 1083 1083  1800 0 interval_pl_time - - ));
-DESCR("add");
-
-DATA(insert OID = 1862 ( "="      PGNSP PGUID b t t    21      20      16 1868  1863 int28eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1863 ( "<>"     PGNSP PGUID b f f    21      20      16 1869  1862 int28ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1864 ( "<"      PGNSP PGUID b f f    21      20      16 1871  1867 int28lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 1865 ( ">"      PGNSP PGUID b f f    21      20      16 1870  1866 int28gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 1866 ( "<="     PGNSP PGUID b f f    21      20      16 1873  1865 int28le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1867 ( ">="     PGNSP PGUID b f f    21      20      16 1872  1864 int28ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-DATA(insert OID = 1868 ( "="      PGNSP PGUID b t t    20      21      16      1862 1869 int82eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1869 ( "<>"     PGNSP PGUID b f f    20      21      16      1863 1868 int82ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1870 ( "<"      PGNSP PGUID b f f    20      21      16      1865 1873 int82lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 1871 ( ">"      PGNSP PGUID b f f    20      21      16      1864 1872 int82gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 1872 ( "<="     PGNSP PGUID b f f    20      21      16      1867 1871 int82le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1873 ( ">="     PGNSP PGUID b f f    20      21      16      1866 1870 int82ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-DATA(insert OID = 1874 ( "&"      PGNSP PGUID b f f    21      21      21      1874  0 int2and - - ));
-DESCR("bitwise and");
-DATA(insert OID = 1875 ( "|"      PGNSP PGUID b f f    21      21      21      1875  0 int2or - - ));
-DESCR("bitwise or");
-DATA(insert OID = 1876 ( "#"      PGNSP PGUID b f f    21      21      21      1876  0 int2xor - - ));
-DESCR("bitwise exclusive or");
-DATA(insert OID = 1877 ( "~"      PGNSP PGUID l f f     0      21      21       0        0 int2not - - ));
-DESCR("bitwise not");
-DATA(insert OID = 1878 ( "<<"     PGNSP PGUID b f f    21      23      21       0        0 int2shl - - ));
-DESCR("bitwise shift left");
-DATA(insert OID = 1879 ( ">>"     PGNSP PGUID b f f    21      23      21       0        0 int2shr - - ));
-DESCR("bitwise shift right");
-
-DATA(insert OID = 1880 ( "&"      PGNSP PGUID b f f    23      23      23      1880  0 int4and - - ));
-DESCR("bitwise and");
-DATA(insert OID = 1881 ( "|"      PGNSP PGUID b f f    23      23      23      1881  0 int4or - - ));
-DESCR("bitwise or");
-DATA(insert OID = 1882 ( "#"      PGNSP PGUID b f f    23      23      23      1882  0 int4xor - - ));
-DESCR("bitwise exclusive or");
-DATA(insert OID = 1883 ( "~"      PGNSP PGUID l f f     0      23      23       0        0 int4not - - ));
-DESCR("bitwise not");
-DATA(insert OID = 1884 ( "<<"     PGNSP PGUID b f f    23      23      23       0        0 int4shl - - ));
-DESCR("bitwise shift left");
-DATA(insert OID = 1885 ( ">>"     PGNSP PGUID b f f    23      23      23       0        0 int4shr - - ));
-DESCR("bitwise shift right");
-
-DATA(insert OID = 1886 ( "&"      PGNSP PGUID b f f    20      20      20      1886  0 int8and - - ));
-DESCR("bitwise and");
-DATA(insert OID = 1887 ( "|"      PGNSP PGUID b f f    20      20      20      1887  0 int8or - - ));
-DESCR("bitwise or");
-DATA(insert OID = 1888 ( "#"      PGNSP PGUID b f f    20      20      20      1888  0 int8xor - - ));
-DESCR("bitwise exclusive or");
-DATA(insert OID = 1889 ( "~"      PGNSP PGUID l f f     0      20      20       0        0 int8not - - ));
-DESCR("bitwise not");
-DATA(insert OID = 1890 ( "<<"     PGNSP PGUID b f f    20      23      20       0        0 int8shl - - ));
-DESCR("bitwise shift left");
-DATA(insert OID = 1891 ( ">>"     PGNSP PGUID b f f    20      23      20       0        0 int8shr - - ));
-DESCR("bitwise shift right");
-
-DATA(insert OID = 1916 (  "+"     PGNSP PGUID l f f     0      20      20      0       0 int8up - - ));
-DESCR("unary plus");
-DATA(insert OID = 1917 (  "+"     PGNSP PGUID l f f     0      21      21      0       0 int2up - - ));
-DESCR("unary plus");
-DATA(insert OID = 1918 (  "+"     PGNSP PGUID l f f     0      23      23      0       0 int4up - - ));
-DESCR("unary plus");
-DATA(insert OID = 1919 (  "+"     PGNSP PGUID l f f     0      700 700 0       0 float4up - - ));
-DESCR("unary plus");
-DATA(insert OID = 1920 (  "+"     PGNSP PGUID l f f     0      701 701 0       0 float8up - - ));
-DESCR("unary plus");
-DATA(insert OID = 1921 (  "+"     PGNSP PGUID l f f     0 1700 1700    0       0 numeric_uplus - - ));
-DESCR("unary plus");
-
-/* bytea operators */
-DATA(insert OID = 1955 ( "="      PGNSP PGUID b t t 17 17      16 1955 1956 byteaeq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 1956 ( "<>"     PGNSP PGUID b f f 17 17      16 1956 1955 byteane neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 1957 ( "<"      PGNSP PGUID b f f 17 17      16 1959 1960 bytealt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 1958 ( "<="     PGNSP PGUID b f f 17 17      16 1960 1959 byteale scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 1959 ( ">"      PGNSP PGUID b f f 17 17      16 1957 1958 byteagt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 1960 ( ">="     PGNSP PGUID b f f 17 17      16 1958 1957 byteage scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-DATA(insert OID = 2016 (  "~~"    PGNSP PGUID b f f 17 17      16 0    2017 bytealike likesel likejoinsel ));
-DESCR("matches LIKE expression");
-#define OID_BYTEA_LIKE_OP              2016
-DATA(insert OID = 2017 (  "!~~"    PGNSP PGUID b f f 17 17     16 0    2016 byteanlike nlikesel nlikejoinsel ));
-DESCR("does not match LIKE expression");
-DATA(insert OID = 2018 (  "||"    PGNSP PGUID b f f 17 17      17 0    0        byteacat - - ));
-DESCR("concatenate");
-
-/* timestamp operators */
-DATA(insert OID = 2060 (  "="     PGNSP PGUID b t t 1114 1114   16 2060 2061 timestamp_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 2061 (  "<>"    PGNSP PGUID b f f 1114 1114   16 2061 2060 timestamp_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 2062 (  "<"     PGNSP PGUID b f f 1114 1114   16 2064 2065 timestamp_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 2063 (  "<="    PGNSP PGUID b f f 1114 1114   16 2065 2064 timestamp_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 2064 (  ">"     PGNSP PGUID b f f 1114 1114   16 2062 2063 timestamp_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 2065 (  ">="    PGNSP PGUID b f f 1114 1114   16 2063 2062 timestamp_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 2066 (  "+"     PGNSP PGUID b f f 1114 1186 1114  2553 0 timestamp_pl_interval - - ));
-DESCR("add");
-DATA(insert OID = 2067 (  "-"     PGNSP PGUID b f f 1114 1114 1186  0  0 timestamp_mi - - ));
-DESCR("subtract");
-DATA(insert OID = 2068 (  "-"     PGNSP PGUID b f f 1114 1186 1114  0  0 timestamp_mi_interval - - ));
-DESCR("subtract");
-
-/* character-by-character (not collation order) comparison operators for character types */
-
-DATA(insert OID = 2314 ( "~<~" PGNSP PGUID b f f 25 25 16 2318 2317 text_pattern_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 2315 ( "~<=~" PGNSP PGUID b f f 25 25 16 2317 2318 text_pattern_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 2317 ( "~>=~" PGNSP PGUID b f f 25 25 16 2315 2314 text_pattern_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 2318 ( "~>~" PGNSP PGUID b f f 25 25 16 2314 2315 text_pattern_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-
-DATA(insert OID = 2326 ( "~<~" PGNSP PGUID b f f 1042 1042 16 2330 2329 bpchar_pattern_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 2327 ( "~<=~" PGNSP PGUID b f f 1042 1042 16 2329 2330 bpchar_pattern_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 2329 ( "~>=~" PGNSP PGUID b f f 1042 1042 16 2327 2326 bpchar_pattern_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 2330 ( "~>~" PGNSP PGUID b f f 1042 1042 16 2326 2327 bpchar_pattern_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-
-/* crosstype operations for date vs. timestamp and timestamptz */
-
-DATA(insert OID = 2345 ( "<"      PGNSP PGUID b f f    1082    1114   16 2375 2348 date_lt_timestamp scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 2346 ( "<="     PGNSP PGUID b f f    1082    1114   16 2374 2349 date_le_timestamp scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 2347 ( "="      PGNSP PGUID b t f    1082    1114   16 2373 2350 date_eq_timestamp eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 2348 ( ">="     PGNSP PGUID b f f    1082    1114   16 2372 2345 date_ge_timestamp scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 2349 ( ">"      PGNSP PGUID b f f    1082    1114   16 2371 2346 date_gt_timestamp scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 2350 ( "<>"     PGNSP PGUID b f f    1082    1114   16 2376 2347 date_ne_timestamp neqsel neqjoinsel ));
-DESCR("not equal");
-
-DATA(insert OID = 2358 ( "<"      PGNSP PGUID b f f    1082    1184   16 2388 2361 date_lt_timestamptz scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 2359 ( "<="     PGNSP PGUID b f f    1082    1184   16 2387 2362 date_le_timestamptz scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 2360 ( "="      PGNSP PGUID b t f    1082    1184   16 2386 2363 date_eq_timestamptz eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 2361 ( ">="     PGNSP PGUID b f f    1082    1184   16 2385 2358 date_ge_timestamptz scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 2362 ( ">"      PGNSP PGUID b f f    1082    1184   16 2384 2359 date_gt_timestamptz scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 2363 ( "<>"     PGNSP PGUID b f f    1082    1184   16 2389 2360 date_ne_timestamptz neqsel neqjoinsel ));
-DESCR("not equal");
-
-DATA(insert OID = 2371 ( "<"      PGNSP PGUID b f f    1114    1082   16 2349 2374 timestamp_lt_date scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 2372 ( "<="     PGNSP PGUID b f f    1114    1082   16 2348 2375 timestamp_le_date scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 2373 ( "="      PGNSP PGUID b t f    1114    1082   16 2347 2376 timestamp_eq_date eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 2374 ( ">="     PGNSP PGUID b f f    1114    1082   16 2346 2371 timestamp_ge_date scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 2375 ( ">"      PGNSP PGUID b f f    1114    1082   16 2345 2372 timestamp_gt_date scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 2376 ( "<>"     PGNSP PGUID b f f    1114    1082   16 2350 2373 timestamp_ne_date neqsel neqjoinsel ));
-DESCR("not equal");
-
-DATA(insert OID = 2384 ( "<"      PGNSP PGUID b f f    1184    1082   16 2362 2387 timestamptz_lt_date scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 2385 ( "<="     PGNSP PGUID b f f    1184    1082   16 2361 2388 timestamptz_le_date scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 2386 ( "="      PGNSP PGUID b t f    1184    1082   16 2360 2389 timestamptz_eq_date eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 2387 ( ">="     PGNSP PGUID b f f    1184    1082   16 2359 2384 timestamptz_ge_date scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 2388 ( ">"      PGNSP PGUID b f f    1184    1082   16 2358 2385 timestamptz_gt_date scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 2389 ( "<>"     PGNSP PGUID b f f    1184    1082   16 2363 2386 timestamptz_ne_date neqsel neqjoinsel ));
-DESCR("not equal");
-
-/* crosstype operations for timestamp vs. timestamptz */
-
-DATA(insert OID = 2534 ( "<"      PGNSP PGUID b f f    1114    1184   16 2544 2537 timestamp_lt_timestamptz scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 2535 ( "<="     PGNSP PGUID b f f    1114    1184   16 2543 2538 timestamp_le_timestamptz scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 2536 ( "="      PGNSP PGUID b t f    1114    1184   16 2542 2539 timestamp_eq_timestamptz eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 2537 ( ">="     PGNSP PGUID b f f    1114    1184   16 2541 2534 timestamp_ge_timestamptz scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 2538 ( ">"      PGNSP PGUID b f f    1114    1184   16 2540 2535 timestamp_gt_timestamptz scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 2539 ( "<>"     PGNSP PGUID b f f    1114    1184   16 2545 2536 timestamp_ne_timestamptz neqsel neqjoinsel ));
-DESCR("not equal");
-
-DATA(insert OID = 2540 ( "<"      PGNSP PGUID b f f    1184    1114   16 2538 2543 timestamptz_lt_timestamp scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 2541 ( "<="     PGNSP PGUID b f f    1184    1114   16 2537 2544 timestamptz_le_timestamp scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 2542 ( "="      PGNSP PGUID b t f    1184    1114   16 2536 2545 timestamptz_eq_timestamp eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 2543 ( ">="     PGNSP PGUID b f f    1184    1114   16 2535 2540 timestamptz_ge_timestamp scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 2544 ( ">"      PGNSP PGUID b f f    1184    1114   16 2534 2541 timestamptz_gt_timestamp scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 2545 ( "<>"     PGNSP PGUID b f f    1184    1114   16 2539 2542 timestamptz_ne_timestamp neqsel neqjoinsel ));
-DESCR("not equal");
-
-/* formerly-missing interval + datetime operators */
-DATA(insert OID = 2551 (  "+"     PGNSP PGUID b f f    1186 1082 1114 1076 0 interval_pl_date - - ));
-DESCR("add");
-DATA(insert OID = 2552 (  "+"     PGNSP PGUID b f f    1186 1266 1266 1802 0 interval_pl_timetz - - ));
-DESCR("add");
-DATA(insert OID = 2553 (  "+"     PGNSP PGUID b f f    1186 1114 1114 2066 0 interval_pl_timestamp - - ));
-DESCR("add");
-DATA(insert OID = 2554 (  "+"     PGNSP PGUID b f f    1186 1184 1184 1327 0 interval_pl_timestamptz - - ));
-DESCR("add");
-DATA(insert OID = 2555 (  "+"     PGNSP PGUID b f f    23       1082 1082 1100 0 integer_pl_date - - ));
-DESCR("add");
-
-/* new operators for Y-direction rtree opfamilies */
-DATA(insert OID = 2570 (  "<<|"    PGNSP PGUID b f f 603 603   16       0       0 box_below positionsel positionjoinsel ));
-DESCR("is below");
-DATA(insert OID = 2571 (  "&<|"    PGNSP PGUID b f f 603 603   16       0       0 box_overbelow positionsel positionjoinsel ));
-DESCR("overlaps or is below");
-DATA(insert OID = 2572 (  "|&>"    PGNSP PGUID b f f 603 603   16       0       0 box_overabove positionsel positionjoinsel ));
-DESCR("overlaps or is above");
-DATA(insert OID = 2573 (  "|>>"    PGNSP PGUID b f f 603 603   16       0       0 box_above positionsel positionjoinsel ));
-DESCR("is above");
-DATA(insert OID = 2574 (  "<<|"    PGNSP PGUID b f f 604 604   16       0       0 poly_below positionsel positionjoinsel ));
-DESCR("is below");
-DATA(insert OID = 2575 (  "&<|"    PGNSP PGUID b f f 604 604   16       0       0 poly_overbelow positionsel positionjoinsel ));
-DESCR("overlaps or is below");
-DATA(insert OID = 2576 (  "|&>"    PGNSP PGUID b f f 604 604   16       0       0 poly_overabove positionsel positionjoinsel ));
-DESCR("overlaps or is above");
-DATA(insert OID = 2577 (  "|>>"    PGNSP PGUID b f f 604 604   16       0       0 poly_above positionsel positionjoinsel ));
-DESCR("is above");
-DATA(insert OID = 2589 (  "&<|"    PGNSP PGUID b f f 718 718   16       0       0 circle_overbelow positionsel positionjoinsel ));
-DESCR("overlaps or is below");
-DATA(insert OID = 2590 (  "|&>"    PGNSP PGUID b f f 718 718   16       0       0 circle_overabove positionsel positionjoinsel ));
-DESCR("overlaps or is above");
-
-/* overlap/contains/contained for arrays */
-DATA(insert OID = 2750 (  "&&"    PGNSP PGUID b f f 2277 2277  16 2750  0 arrayoverlap arraycontsel arraycontjoinsel ));
-DESCR("overlaps");
-#define OID_ARRAY_OVERLAP_OP   2750
-DATA(insert OID = 2751 (  "@>"    PGNSP PGUID b f f 2277 2277  16 2752  0 arraycontains arraycontsel arraycontjoinsel ));
-DESCR("contains");
-#define OID_ARRAY_CONTAINS_OP  2751
-DATA(insert OID = 2752 (  "<@"    PGNSP PGUID b f f 2277 2277  16 2751  0 arraycontained arraycontsel arraycontjoinsel ));
-DESCR("is contained by");
-#define OID_ARRAY_CONTAINED_OP 2752
-
-/* capturing operators to preserve pre-8.3 behavior of text concatenation */
-DATA(insert OID = 2779 (  "||"    PGNSP PGUID b f f 25 2776    25       0 0 textanycat - - ));
-DESCR("concatenate");
-DATA(insert OID = 2780 (  "||"    PGNSP PGUID b f f 2776 25    25       0 0 anytextcat - - ));
-DESCR("concatenate");
-
-/* obsolete names for contains/contained-by operators; remove these someday */
-DATA(insert OID = 2860 (  "@"     PGNSP PGUID b f f 604 604    16 2861  0 poly_contained contsel contjoinsel ));
-DESCR("deprecated, use <@ instead");
-DATA(insert OID = 2861 (  "~"     PGNSP PGUID b f f 604 604    16 2860  0 poly_contain contsel contjoinsel ));
-DESCR("deprecated, use @> instead");
-DATA(insert OID = 2862 (  "@"     PGNSP PGUID b f f 603 603    16 2863  0 box_contained contsel contjoinsel ));
-DESCR("deprecated, use <@ instead");
-DATA(insert OID = 2863 (  "~"     PGNSP PGUID b f f 603 603    16 2862  0 box_contain contsel contjoinsel ));
-DESCR("deprecated, use @> instead");
-DATA(insert OID = 2864 (  "@"     PGNSP PGUID b f f 718 718    16 2865  0 circle_contained contsel contjoinsel ));
-DESCR("deprecated, use <@ instead");
-DATA(insert OID = 2865 (  "~"     PGNSP PGUID b f f 718 718    16 2864  0 circle_contain contsel contjoinsel ));
-DESCR("deprecated, use @> instead");
-DATA(insert OID = 2866 (  "@"     PGNSP PGUID b f f 600 603    16       0       0 on_pb - - ));
-DESCR("deprecated, use <@ instead");
-DATA(insert OID = 2867 (  "@"     PGNSP PGUID b f f 600 602    16 2868  0 on_ppath - - ));
-DESCR("deprecated, use <@ instead");
-DATA(insert OID = 2868 (  "~"     PGNSP PGUID b f f 602 600     16  2867  0 path_contain_pt - - ));
-DESCR("deprecated, use @> instead");
-DATA(insert OID = 2869 (  "@"     PGNSP PGUID b f f 600 604     16  2870  0 pt_contained_poly - - ));
-DESCR("deprecated, use <@ instead");
-DATA(insert OID = 2870 (  "~"     PGNSP PGUID b f f 604 600     16  2869  0 poly_contain_pt - - ));
-DESCR("deprecated, use @> instead");
-DATA(insert OID = 2871 (  "@"     PGNSP PGUID b f f 600 718     16  2872  0 pt_contained_circle - - ));
-DESCR("deprecated, use <@ instead");
-DATA(insert OID = 2872 (  "~"     PGNSP PGUID b f f 718 600     16  2871  0 circle_contain_pt - - ));
-DESCR("deprecated, use @> instead");
-DATA(insert OID = 2873 (  "@"     PGNSP PGUID b f f 600 628 16   0  0 on_pl - - ));
-DESCR("deprecated, use <@ instead");
-DATA(insert OID = 2874 (  "@"     PGNSP PGUID b f f 600 601 16   0  0 on_ps - - ));
-DESCR("deprecated, use <@ instead");
-DATA(insert OID = 2875 (  "@"     PGNSP PGUID b f f 601 628 16   0  0 on_sl - - ));
-DESCR("deprecated, use <@ instead");
-DATA(insert OID = 2876 (  "@"     PGNSP PGUID b f f 601 603 16   0  0 on_sb - - ));
-DESCR("deprecated, use <@ instead");
-DATA(insert OID = 2877 (  "~"     PGNSP PGUID b f f 1034 1033   16 0 0 aclcontains - - ));
-DESCR("deprecated, use @> instead");
-
-/* uuid operators */
-DATA(insert OID = 2972 (  "="     PGNSP PGUID b t t 2950 2950 16 2972 2973 uuid_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 2973 (  "<>"    PGNSP PGUID b f f 2950 2950 16 2973 2972 uuid_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 2974 (  "<"     PGNSP PGUID b f f 2950 2950 16 2975 2977 uuid_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 2975 (  ">"     PGNSP PGUID b f f 2950 2950 16 2974 2976 uuid_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 2976 (  "<="    PGNSP PGUID b f f 2950 2950 16 2977 2975 uuid_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 2977 (  ">="    PGNSP PGUID b f f 2950 2950 16 2976 2974 uuid_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-/* pg_lsn operators */
-DATA(insert OID = 3222 (  "="     PGNSP PGUID b t t 3220 3220 16 3222 3223 pg_lsn_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 3223 (  "<>"    PGNSP PGUID b f f 3220 3220 16 3223 3222 pg_lsn_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 3224 (  "<"     PGNSP PGUID b f f 3220 3220 16 3225 3227 pg_lsn_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 3225 (  ">"     PGNSP PGUID b f f 3220 3220 16 3224 3226 pg_lsn_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 3226 (  "<="    PGNSP PGUID b f f 3220 3220 16 3227 3225 pg_lsn_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 3227 (  ">="    PGNSP PGUID b f f 3220 3220 16 3226 3224 pg_lsn_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 3228 (  "-"     PGNSP PGUID b f f 3220 3220 1700    0        0 pg_lsn_mi - - ));
-DESCR("minus");
-
-/* enum operators */
-DATA(insert OID = 3516 (  "="     PGNSP PGUID b t t 3500 3500 16 3516 3517 enum_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 3517 (  "<>"    PGNSP PGUID b f f 3500 3500 16 3517 3516 enum_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 3518 (  "<"     PGNSP PGUID b f f 3500 3500 16 3519 3521 enum_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 3519 (  ">"     PGNSP PGUID b f f 3500 3500 16 3518 3520 enum_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 3520 (  "<="    PGNSP PGUID b f f 3500 3500 16 3521 3519 enum_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 3521 (  ">="    PGNSP PGUID b f f 3500 3500 16 3520 3518 enum_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
+       /* OID of join estimator, or 0 */
+       regproc         oprjoin BKI_DEFAULT(-) BKI_LOOKUP(pg_proc);
+} FormData_pg_operator;
 
-/*
- * tsearch operations
+/* ----------------
+ *             Form_pg_operator corresponds to a pointer to a tuple with
+ *             the format of pg_operator relation.
+ * ----------------
  */
-DATA(insert OID = 3627 (  "<"     PGNSP PGUID b f f 3614        3614    16 3632 3631    tsvector_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 3628 (  "<="    PGNSP PGUID b f f 3614        3614    16 3631 3632    tsvector_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 3629 (  "="     PGNSP PGUID b t f 3614        3614    16 3629 3630    tsvector_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 3630 (  "<>"    PGNSP PGUID b f f 3614        3614    16 3630 3629    tsvector_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 3631 (  ">="    PGNSP PGUID b f f 3614        3614    16 3628 3627    tsvector_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 3632 (  ">"     PGNSP PGUID b f f 3614        3614    16 3627 3628    tsvector_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 3633 (  "||"    PGNSP PGUID b f f 3614        3614    3614  0        0        tsvector_concat   -    -         ));
-DESCR("concatenate");
-DATA(insert OID = 3636 (  "@@"    PGNSP PGUID b f f 3614        3615    16 3637        0        ts_match_vq   tsmatchsel tsmatchjoinsel ));
-DESCR("text search match");
-DATA(insert OID = 3637 (  "@@"    PGNSP PGUID b f f 3615        3614    16 3636        0        ts_match_qv   tsmatchsel tsmatchjoinsel ));
-DESCR("text search match");
-DATA(insert OID = 3660 (  "@@@"    PGNSP PGUID b f f 3614       3615    16 3661        0        ts_match_vq   tsmatchsel tsmatchjoinsel ));
-DESCR("deprecated, use @@ instead");
-DATA(insert OID = 3661 (  "@@@"    PGNSP PGUID b f f 3615       3614    16 3660        0        ts_match_qv   tsmatchsel tsmatchjoinsel ));
-DESCR("deprecated, use @@ instead");
-DATA(insert OID = 3674 (  "<"     PGNSP PGUID b f f 3615        3615    16 3679 3678    tsquery_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 3675 (  "<="    PGNSP PGUID b f f 3615        3615    16 3678 3679    tsquery_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 3676 (  "="     PGNSP PGUID b t f 3615        3615    16 3676 3677    tsquery_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 3677 (  "<>"    PGNSP PGUID b f f 3615        3615    16 3677 3676    tsquery_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 3678 (  ">="    PGNSP PGUID b f f 3615        3615    16 3675 3674    tsquery_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 3679 (  ">"     PGNSP PGUID b f f 3615        3615    16 3674 3675    tsquery_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 3680 (  "&&"    PGNSP PGUID b f f 3615        3615    3615  0        0        tsquery_and   -        -         ));
-DESCR("AND-concatenate");
-DATA(insert OID = 3681 (  "||"    PGNSP PGUID b f f 3615        3615    3615  0        0        tsquery_or   -         -         ));
-DESCR("OR-concatenate");
-/* <-> operation calls tsquery_phrase, but function is polymorphic. So, point to OID of the tsquery_phrase */
-DATA(insert OID = 5005 (  "<->"    PGNSP PGUID b f f 3615       3615    3615  0        0        5003   -               -         ));
-DESCR("phrase-concatenate");
-DATA(insert OID = 3682 (  "!!"    PGNSP PGUID l f f 0           3615    3615  0        0        tsquery_not   -        -         ));
-DESCR("NOT tsquery");
-DATA(insert OID = 3693 (  "@>"    PGNSP PGUID b f f 3615        3615    16 3694        0        tsq_mcontains  contsel    contjoinsel   ));
-DESCR("contains");
-DATA(insert OID = 3694 (  "<@"    PGNSP PGUID b f f 3615        3615    16 3693        0        tsq_mcontained contsel    contjoinsel   ));
-DESCR("is contained by");
-DATA(insert OID = 3762 (  "@@"    PGNSP PGUID b f f 25          25              16    0        0        ts_match_tt    contsel    contjoinsel   ));
-DESCR("text search match");
-DATA(insert OID = 3763 (  "@@"    PGNSP PGUID b f f 25          3615    16    0        0        ts_match_tq    contsel    contjoinsel   ));
-DESCR("text search match");
-
-/* generic record comparison operators */
-DATA(insert OID = 2988 (  "="     PGNSP PGUID b t f 2249 2249 16 2988 2989 record_eq eqsel eqjoinsel ));
-DESCR("equal");
-#define RECORD_EQ_OP 2988
-DATA(insert OID = 2989 (  "<>"    PGNSP PGUID b f f 2249 2249 16 2989 2988 record_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 2990 (  "<"     PGNSP PGUID b f f 2249 2249 16 2991 2993 record_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-#define RECORD_LT_OP 2990
-DATA(insert OID = 2991 (  ">"     PGNSP PGUID b f f 2249 2249 16 2990 2992 record_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-#define RECORD_GT_OP 2991
-DATA(insert OID = 2992 (  "<="    PGNSP PGUID b f f 2249 2249 16 2993 2991 record_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 2993 (  ">="    PGNSP PGUID b f f 2249 2249 16 2992 2990 record_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-/* byte-oriented tests for identical rows and fast sorting */
-DATA(insert OID = 3188 (  "*="    PGNSP PGUID b t f 2249 2249 16 3188 3189 record_image_eq eqsel eqjoinsel ));
-DESCR("identical");
-DATA(insert OID = 3189 (  "*<>"   PGNSP PGUID b f f 2249 2249 16 3189 3188 record_image_ne neqsel neqjoinsel ));
-DESCR("not identical");
-DATA(insert OID = 3190 (  "*<"    PGNSP PGUID b f f 2249 2249 16 3191 3193 record_image_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 3191 (  "*>"    PGNSP PGUID b f f 2249 2249 16 3190 3192 record_image_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 3192 (  "*<="   PGNSP PGUID b f f 2249 2249 16 3193 3191 record_image_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 3193 (  "*>="   PGNSP PGUID b f f 2249 2249 16 3192 3190 record_image_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-
-/* generic range type operators */
-DATA(insert OID = 3882 (  "="     PGNSP PGUID b t t 3831 3831 16 3882 3883 range_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 3883 (  "<>"    PGNSP PGUID b f f 3831 3831 16 3883 3882 range_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 3884 (  "<"     PGNSP PGUID b f f 3831 3831 16 3887 3886 range_lt rangesel scalarltjoinsel ));
-DESCR("less than");
-#define OID_RANGE_LESS_OP 3884
-DATA(insert OID = 3885 (  "<="    PGNSP PGUID b f f 3831 3831 16 3886 3887 range_le rangesel scalarlejoinsel ));
-DESCR("less than or equal");
-#define OID_RANGE_LESS_EQUAL_OP 3885
-DATA(insert OID = 3886 (  ">="    PGNSP PGUID b f f 3831 3831 16 3885 3884 range_ge rangesel scalargejoinsel ));
-DESCR("greater than or equal");
-#define OID_RANGE_GREATER_EQUAL_OP 3886
-DATA(insert OID = 3887 (  ">"     PGNSP PGUID b f f 3831 3831 16 3884 3885 range_gt rangesel scalargtjoinsel ));
-DESCR("greater than");
-#define OID_RANGE_GREATER_OP 3887
-DATA(insert OID = 3888 (  "&&"    PGNSP PGUID b f f 3831 3831 16 3888 0 range_overlaps rangesel areajoinsel ));
-DESCR("overlaps");
-#define OID_RANGE_OVERLAP_OP 3888
-DATA(insert OID = 3889 (  "@>"    PGNSP PGUID b f f 3831 2283 16 3891 0 range_contains_elem rangesel contjoinsel ));
-DESCR("contains");
-#define OID_RANGE_CONTAINS_ELEM_OP 3889
-DATA(insert OID = 3890 (  "@>"    PGNSP PGUID b f f 3831 3831 16 3892 0 range_contains rangesel contjoinsel ));
-DESCR("contains");
-#define OID_RANGE_CONTAINS_OP 3890
-DATA(insert OID = 3891 (  "<@"    PGNSP PGUID b f f 2283 3831 16 3889 0 elem_contained_by_range rangesel contjoinsel ));
-DESCR("is contained by");
-#define OID_RANGE_ELEM_CONTAINED_OP 3891
-DATA(insert OID = 3892 (  "<@"    PGNSP PGUID b f f 3831 3831 16 3890 0 range_contained_by rangesel contjoinsel ));
-DESCR("is contained by");
-#define OID_RANGE_CONTAINED_OP 3892
-DATA(insert OID = 3893 (  "<<"    PGNSP PGUID b f f 3831 3831 16 3894 0 range_before rangesel scalarltjoinsel ));
-DESCR("is left of");
-#define OID_RANGE_LEFT_OP 3893
-DATA(insert OID = 3894 (  ">>"    PGNSP PGUID b f f 3831 3831 16 3893 0 range_after rangesel scalargtjoinsel ));
-DESCR("is right of");
-#define OID_RANGE_RIGHT_OP 3894
-DATA(insert OID = 3895 (  "&<"    PGNSP PGUID b f f 3831 3831 16 0 0 range_overleft rangesel scalarltjoinsel ));
-DESCR("overlaps or is left of");
-#define OID_RANGE_OVERLAPS_LEFT_OP 3895
-DATA(insert OID = 3896 (  "&>"    PGNSP PGUID b f f 3831 3831 16 0 0 range_overright rangesel scalargtjoinsel ));
-DESCR("overlaps or is right of");
-#define OID_RANGE_OVERLAPS_RIGHT_OP 3896
-DATA(insert OID = 3897 (  "-|-"    PGNSP PGUID b f f 3831 3831 16 3897 0 range_adjacent contsel contjoinsel ));
-DESCR("is adjacent to");
-DATA(insert OID = 3898 (  "+"     PGNSP PGUID b f f 3831 3831 3831 3898 0 range_union - - ));
-DESCR("range union");
-DATA(insert OID = 3899 (  "-"     PGNSP PGUID b f f 3831 3831 3831 0 0 range_minus - - ));
-DESCR("range difference");
-DATA(insert OID = 3900 (  "*"     PGNSP PGUID b f f 3831 3831 3831 3900 0 range_intersect - - ));
-DESCR("range intersection");
-DATA(insert OID = 3962 (  "->"    PGNSP PGUID b f f 114 25 114 0 0 json_object_field - - ));
-DESCR("get json object field");
-DATA(insert OID = 3963 (  "->>"    PGNSP PGUID b f f 114 25 25 0 0 json_object_field_text - - ));
-DESCR("get json object field as text");
-DATA(insert OID = 3964 (  "->"    PGNSP PGUID b f f 114 23 114 0 0 json_array_element - - ));
-DESCR("get json array element");
-DATA(insert OID = 3965 (  "->>"    PGNSP PGUID b f f 114 23 25 0 0 json_array_element_text - - ));
-DESCR("get json array element as text");
-DATA(insert OID = 3966 (  "#>"    PGNSP PGUID b f f 114 1009 114 0 0 json_extract_path - - ));
-DESCR("get value from json with path elements");
-DATA(insert OID = 3967 (  "#>>"    PGNSP PGUID b f f 114 1009 25 0 0 json_extract_path_text - - ));
-DESCR("get value from json as text with path elements");
-DATA(insert OID = 3211 (  "->"    PGNSP PGUID b f f 3802 25 3802 0 0 jsonb_object_field - - ));
-DESCR("get jsonb object field");
-DATA(insert OID = 3477 (  "->>"    PGNSP PGUID b f f 3802 25 25 0 0 jsonb_object_field_text - - ));
-DESCR("get jsonb object field as text");
-DATA(insert OID = 3212 (  "->"    PGNSP PGUID b f f 3802 23 3802 0 0 jsonb_array_element - - ));
-DESCR("get jsonb array element");
-DATA(insert OID = 3481 (  "->>"    PGNSP PGUID b f f 3802 23 25 0 0 jsonb_array_element_text - - ));
-DESCR("get jsonb array element as text");
-DATA(insert OID = 3213 (  "#>"    PGNSP PGUID b f f 3802 1009 3802 0 0 jsonb_extract_path - - ));
-DESCR("get value from jsonb with path elements");
-DATA(insert OID = 3206 (  "#>>"    PGNSP PGUID b f f 3802 1009 25 0 0 jsonb_extract_path_text - - ));
-DESCR("get value from jsonb as text with path elements");
-DATA(insert OID = 3240 (  "="   PGNSP PGUID b t t 3802 3802  16 3240 3241 jsonb_eq eqsel eqjoinsel ));
-DESCR("equal");
-DATA(insert OID = 3241 (  "<>"  PGNSP PGUID b f f 3802 3802  16 3241 3240 jsonb_ne neqsel neqjoinsel ));
-DESCR("not equal");
-DATA(insert OID = 3242 (  "<"          PGNSP PGUID b f f 3802 3802 16 3243 3245 jsonb_lt scalarltsel scalarltjoinsel ));
-DESCR("less than");
-DATA(insert OID = 3243 (  ">"          PGNSP PGUID b f f 3802 3802 16 3242 3244 jsonb_gt scalargtsel scalargtjoinsel ));
-DESCR("greater than");
-DATA(insert OID = 3244 (  "<=" PGNSP PGUID b f f 3802 3802 16 3245 3243 jsonb_le scalarlesel scalarlejoinsel ));
-DESCR("less than or equal");
-DATA(insert OID = 3245 (  ">=" PGNSP PGUID b f f 3802 3802 16 3244 3242 jsonb_ge scalargesel scalargejoinsel ));
-DESCR("greater than or equal");
-DATA(insert OID = 3246 (  "@>"    PGNSP PGUID b f f 3802 3802 16 3250 0 jsonb_contains contsel contjoinsel ));
-DESCR("contains");
-DATA(insert OID = 3247 (  "?"     PGNSP PGUID b f f 3802 25 16 0 0 jsonb_exists contsel contjoinsel ));
-DESCR("key exists");
-DATA(insert OID = 3248 (  "?|"    PGNSP PGUID b f f 3802 1009 16 0 0 jsonb_exists_any contsel contjoinsel ));
-DESCR("any key exists");
-DATA(insert OID = 3249 (  "?&"    PGNSP PGUID b f f 3802 1009 16 0 0 jsonb_exists_all contsel contjoinsel ));
-DESCR("all keys exist");
-DATA(insert OID = 3250 (  "<@"    PGNSP PGUID b f f 3802 3802 16 3246 0 jsonb_contained contsel contjoinsel ));
-DESCR("is contained by");
-DATA(insert OID = 3284 (  "||"    PGNSP PGUID b f f 3802 3802 3802 0 0 jsonb_concat - - ));
-DESCR("concatenate");
-DATA(insert OID = 3285 (  "-"     PGNSP PGUID b f f 3802 25 3802 0 0 3302 - - ));
-DESCR("delete object field");
-DATA(insert OID = 3398 (  "-"     PGNSP PGUID b f f 3802 1009 3802 0 0 3343 - -));
-DESCR("delete object fields");
-DATA(insert OID = 3286 (  "-"     PGNSP PGUID b f f 3802 23 3802 0 0 3303 - - ));
-DESCR("delete array element");
-DATA(insert OID = 3287 (  "#-"    PGNSP PGUID b f f 3802 1009 3802 0 0 jsonb_delete_path - - ));
-DESCR("delete path");
+typedef FormData_pg_operator *Form_pg_operator;
 
 #endif                                                 /* PG_OPERATOR_H */
diff --git a/src/include/catalog/pg_opfamily.dat b/src/include/catalog/pg_opfamily.dat
new file mode 100644 (file)
index 0000000..72d71ee
--- /dev/null
@@ -0,0 +1,248 @@
+#----------------------------------------------------------------------
+#
+# pg_opfamily.dat
+#    Initial contents of the pg_opfamily system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_opfamily.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+{ oid => '421',
+  opfmethod => 'btree', opfname => 'abstime_ops' },
+{ oid => '397',
+  opfmethod => 'btree', opfname => 'array_ops' },
+{ oid => '627',
+  opfmethod => 'hash', opfname => 'array_ops' },
+{ oid => '423',
+  opfmethod => 'btree', opfname => 'bit_ops' },
+{ oid => '424', oid_symbol => 'BOOL_BTREE_FAM_OID',
+  opfmethod => 'btree', opfname => 'bool_ops' },
+{ oid => '426', oid_symbol => 'BPCHAR_BTREE_FAM_OID',
+  opfmethod => 'btree', opfname => 'bpchar_ops' },
+{ oid => '427',
+  opfmethod => 'hash', opfname => 'bpchar_ops' },
+{ oid => '428', oid_symbol => 'BYTEA_BTREE_FAM_OID',
+  opfmethod => 'btree', opfname => 'bytea_ops' },
+{ oid => '429',
+  opfmethod => 'btree', opfname => 'char_ops' },
+{ oid => '431',
+  opfmethod => 'hash', opfname => 'char_ops' },
+{ oid => '434',
+  opfmethod => 'btree', opfname => 'datetime_ops' },
+{ oid => '435',
+  opfmethod => 'hash', opfname => 'date_ops' },
+{ oid => '1970',
+  opfmethod => 'btree', opfname => 'float_ops' },
+{ oid => '1971',
+  opfmethod => 'hash', opfname => 'float_ops' },
+{ oid => '1974', oid_symbol => 'NETWORK_BTREE_FAM_OID',
+  opfmethod => 'btree', opfname => 'network_ops' },
+{ oid => '1975',
+  opfmethod => 'hash', opfname => 'network_ops' },
+{ oid => '3550',
+  opfmethod => 'gist', opfname => 'network_ops' },
+{ oid => '3794',
+  opfmethod => 'spgist', opfname => 'network_ops' },
+{ oid => '1976', oid_symbol => 'INTEGER_BTREE_FAM_OID',
+  opfmethod => 'btree', opfname => 'integer_ops' },
+{ oid => '1977',
+  opfmethod => 'hash', opfname => 'integer_ops' },
+{ oid => '1982',
+  opfmethod => 'btree', opfname => 'interval_ops' },
+{ oid => '1983',
+  opfmethod => 'hash', opfname => 'interval_ops' },
+{ oid => '1984',
+  opfmethod => 'btree', opfname => 'macaddr_ops' },
+{ oid => '1985',
+  opfmethod => 'hash', opfname => 'macaddr_ops' },
+{ oid => '3371',
+  opfmethod => 'btree', opfname => 'macaddr8_ops' },
+{ oid => '3372',
+  opfmethod => 'hash', opfname => 'macaddr8_ops' },
+{ oid => '1986', oid_symbol => 'NAME_BTREE_FAM_OID',
+  opfmethod => 'btree', opfname => 'name_ops' },
+{ oid => '1987',
+  opfmethod => 'hash', opfname => 'name_ops' },
+{ oid => '1988',
+  opfmethod => 'btree', opfname => 'numeric_ops' },
+{ oid => '1998',
+  opfmethod => 'hash', opfname => 'numeric_ops' },
+{ oid => '1989', oid_symbol => 'OID_BTREE_FAM_OID',
+  opfmethod => 'btree', opfname => 'oid_ops' },
+{ oid => '1990',
+  opfmethod => 'hash', opfname => 'oid_ops' },
+{ oid => '1991',
+  opfmethod => 'btree', opfname => 'oidvector_ops' },
+{ oid => '1992',
+  opfmethod => 'hash', opfname => 'oidvector_ops' },
+{ oid => '2994',
+  opfmethod => 'btree', opfname => 'record_ops' },
+{ oid => '3194',
+  opfmethod => 'btree', opfname => 'record_image_ops' },
+{ oid => '1994', oid_symbol => 'TEXT_BTREE_FAM_OID',
+  opfmethod => 'btree', opfname => 'text_ops' },
+{ oid => '1995',
+  opfmethod => 'hash', opfname => 'text_ops' },
+{ oid => '1996',
+  opfmethod => 'btree', opfname => 'time_ops' },
+{ oid => '1997',
+  opfmethod => 'hash', opfname => 'time_ops' },
+{ oid => '1999',
+  opfmethod => 'hash', opfname => 'timestamptz_ops' },
+{ oid => '2000',
+  opfmethod => 'btree', opfname => 'timetz_ops' },
+{ oid => '2001',
+  opfmethod => 'hash', opfname => 'timetz_ops' },
+{ oid => '2002',
+  opfmethod => 'btree', opfname => 'varbit_ops' },
+{ oid => '2040',
+  opfmethod => 'hash', opfname => 'timestamp_ops' },
+{ oid => '2095', oid_symbol => 'TEXT_PATTERN_BTREE_FAM_OID',
+  opfmethod => 'btree', opfname => 'text_pattern_ops' },
+{ oid => '2097', oid_symbol => 'BPCHAR_PATTERN_BTREE_FAM_OID',
+  opfmethod => 'btree', opfname => 'bpchar_pattern_ops' },
+{ oid => '2099',
+  opfmethod => 'btree', opfname => 'money_ops' },
+{ oid => '2222', oid_symbol => 'BOOL_HASH_FAM_OID',
+  opfmethod => 'hash', opfname => 'bool_ops' },
+{ oid => '2223',
+  opfmethod => 'hash', opfname => 'bytea_ops' },
+{ oid => '2789',
+  opfmethod => 'btree', opfname => 'tid_ops' },
+{ oid => '2225',
+  opfmethod => 'hash', opfname => 'xid_ops' },
+{ oid => '2226',
+  opfmethod => 'hash', opfname => 'cid_ops' },
+{ oid => '2227',
+  opfmethod => 'hash', opfname => 'abstime_ops' },
+{ oid => '2228',
+  opfmethod => 'hash', opfname => 'reltime_ops' },
+{ oid => '2229',
+  opfmethod => 'hash', opfname => 'text_pattern_ops' },
+{ oid => '2231',
+  opfmethod => 'hash', opfname => 'bpchar_pattern_ops' },
+{ oid => '2233',
+  opfmethod => 'btree', opfname => 'reltime_ops' },
+{ oid => '2234',
+  opfmethod => 'btree', opfname => 'tinterval_ops' },
+{ oid => '2235',
+  opfmethod => 'hash', opfname => 'aclitem_ops' },
+{ oid => '2593',
+  opfmethod => 'gist', opfname => 'box_ops' },
+{ oid => '2594',
+  opfmethod => 'gist', opfname => 'poly_ops' },
+{ oid => '2595',
+  opfmethod => 'gist', opfname => 'circle_ops' },
+{ oid => '1029',
+  opfmethod => 'gist', opfname => 'point_ops' },
+{ oid => '2745',
+  opfmethod => 'gin', opfname => 'array_ops' },
+{ oid => '2968',
+  opfmethod => 'btree', opfname => 'uuid_ops' },
+{ oid => '2969',
+  opfmethod => 'hash', opfname => 'uuid_ops' },
+{ oid => '3253',
+  opfmethod => 'btree', opfname => 'pg_lsn_ops' },
+{ oid => '3254',
+  opfmethod => 'hash', opfname => 'pg_lsn_ops' },
+{ oid => '3522',
+  opfmethod => 'btree', opfname => 'enum_ops' },
+{ oid => '3523',
+  opfmethod => 'hash', opfname => 'enum_ops' },
+{ oid => '3626',
+  opfmethod => 'btree', opfname => 'tsvector_ops' },
+{ oid => '3655',
+  opfmethod => 'gist', opfname => 'tsvector_ops' },
+{ oid => '3659',
+  opfmethod => 'gin', opfname => 'tsvector_ops' },
+{ oid => '3683',
+  opfmethod => 'btree', opfname => 'tsquery_ops' },
+{ oid => '3702',
+  opfmethod => 'gist', opfname => 'tsquery_ops' },
+{ oid => '3901',
+  opfmethod => 'btree', opfname => 'range_ops' },
+{ oid => '3903',
+  opfmethod => 'hash', opfname => 'range_ops' },
+{ oid => '3919',
+  opfmethod => 'gist', opfname => 'range_ops' },
+{ oid => '3474',
+  opfmethod => 'spgist', opfname => 'range_ops' },
+{ oid => '4015',
+  opfmethod => 'spgist', opfname => 'quad_point_ops' },
+{ oid => '4016',
+  opfmethod => 'spgist', opfname => 'kd_point_ops' },
+{ oid => '4017', oid_symbol => 'TEXT_SPGIST_FAM_OID',
+  opfmethod => 'spgist', opfname => 'text_ops' },
+{ oid => '4033',
+  opfmethod => 'btree', opfname => 'jsonb_ops' },
+{ oid => '4034',
+  opfmethod => 'hash', opfname => 'jsonb_ops' },
+{ oid => '4035',
+  opfmethod => 'gist', opfname => 'jsonb_ops' },
+{ oid => '4036',
+  opfmethod => 'gin', opfname => 'jsonb_ops' },
+{ oid => '4037',
+  opfmethod => 'gin', opfname => 'jsonb_path_ops' },
+{ oid => '4054',
+  opfmethod => 'brin', opfname => 'integer_minmax_ops' },
+{ oid => '4055',
+  opfmethod => 'brin', opfname => 'numeric_minmax_ops' },
+{ oid => '4056',
+  opfmethod => 'brin', opfname => 'text_minmax_ops' },
+{ oid => '4058',
+  opfmethod => 'brin', opfname => 'timetz_minmax_ops' },
+{ oid => '4059',
+  opfmethod => 'brin', opfname => 'datetime_minmax_ops' },
+{ oid => '4062',
+  opfmethod => 'brin', opfname => 'char_minmax_ops' },
+{ oid => '4064',
+  opfmethod => 'brin', opfname => 'bytea_minmax_ops' },
+{ oid => '4065',
+  opfmethod => 'brin', opfname => 'name_minmax_ops' },
+{ oid => '4068',
+  opfmethod => 'brin', opfname => 'oid_minmax_ops' },
+{ oid => '4069',
+  opfmethod => 'brin', opfname => 'tid_minmax_ops' },
+{ oid => '4070',
+  opfmethod => 'brin', opfname => 'float_minmax_ops' },
+{ oid => '4072',
+  opfmethod => 'brin', opfname => 'abstime_minmax_ops' },
+{ oid => '4073',
+  opfmethod => 'brin', opfname => 'reltime_minmax_ops' },
+{ oid => '4074',
+  opfmethod => 'brin', opfname => 'macaddr_minmax_ops' },
+{ oid => '4109',
+  opfmethod => 'brin', opfname => 'macaddr8_minmax_ops' },
+{ oid => '4075',
+  opfmethod => 'brin', opfname => 'network_minmax_ops' },
+{ oid => '4102',
+  opfmethod => 'brin', opfname => 'network_inclusion_ops' },
+{ oid => '4076',
+  opfmethod => 'brin', opfname => 'bpchar_minmax_ops' },
+{ oid => '4077',
+  opfmethod => 'brin', opfname => 'time_minmax_ops' },
+{ oid => '4078',
+  opfmethod => 'brin', opfname => 'interval_minmax_ops' },
+{ oid => '4079',
+  opfmethod => 'brin', opfname => 'bit_minmax_ops' },
+{ oid => '4080',
+  opfmethod => 'brin', opfname => 'varbit_minmax_ops' },
+{ oid => '4081',
+  opfmethod => 'brin', opfname => 'uuid_minmax_ops' },
+{ oid => '4103',
+  opfmethod => 'brin', opfname => 'range_inclusion_ops' },
+{ oid => '4082',
+  opfmethod => 'brin', opfname => 'pg_lsn_minmax_ops' },
+{ oid => '4104',
+  opfmethod => 'brin', opfname => 'box_inclusion_ops' },
+{ oid => '5000',
+  opfmethod => 'spgist', opfname => 'box_ops' },
+{ oid => '5008',
+  opfmethod => 'spgist', opfname => 'poly_ops' },
+
+]
index 5b20dd77a17a2c743f05d7f2f4576ac1c5ef1685..ddb0641228c8d49abaab1765b6c448edf49e851b 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_opfamily.h
  *       definition of the system "opfamily" relation (pg_opfamily)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_opfamily.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_OPFAMILY_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_opfamily_d.h"
 
 /* ----------------
  *             pg_opfamily definition. cpp turns this into
  *             typedef struct FormData_pg_opfamily
  * ----------------
  */
-#define OperatorFamilyRelationId  2753
-
-CATALOG(pg_opfamily,2753)
+CATALOG(pg_opfamily,2753,OperatorFamilyRelationId)
 {
-       Oid                     opfmethod;              /* index access method opfamily is for */
-       NameData        opfname;                /* name of this opfamily */
-       Oid                     opfnamespace;   /* namespace of this opfamily */
-       Oid                     opfowner;               /* opfamily owner */
+       /* index access method opfamily is for */
+       Oid                     opfmethod BKI_LOOKUP(pg_am);
+
+       /* name of this opfamily */
+       NameData        opfname;
+
+       /* namespace of this opfamily */
+       Oid                     opfnamespace BKI_DEFAULT(PGNSP);
+
+       /* opfamily owner */
+       Oid                     opfowner BKI_DEFAULT(PGUID);
 } FormData_pg_opfamily;
 
 /* ----------------
@@ -43,152 +48,11 @@ CATALOG(pg_opfamily,2753)
  */
 typedef FormData_pg_opfamily *Form_pg_opfamily;
 
-/* ----------------
- *             compiler constants for pg_opfamily
- * ----------------
- */
-#define Natts_pg_opfamily                              4
-#define Anum_pg_opfamily_opfmethod             1
-#define Anum_pg_opfamily_opfname               2
-#define Anum_pg_opfamily_opfnamespace  3
-#define Anum_pg_opfamily_opfowner              4
+#ifdef EXPOSE_TO_CLIENT_CODE
 
 #define IsBooleanOpfamily(opfamily) \
        ((opfamily) == BOOL_BTREE_FAM_OID || (opfamily) == BOOL_HASH_FAM_OID)
 
-/* ----------------
- *             initial contents of pg_opfamily
- * ----------------
- */
-
-DATA(insert OID =  421 (       403             abstime_ops             PGNSP PGUID ));
-DATA(insert OID =  397 (       403             array_ops               PGNSP PGUID ));
-DATA(insert OID =  627 (       405             array_ops               PGNSP PGUID ));
-DATA(insert OID =  423 (       403             bit_ops                 PGNSP PGUID ));
-DATA(insert OID =  424 (       403             bool_ops                PGNSP PGUID ));
-#define BOOL_BTREE_FAM_OID 424
-DATA(insert OID =  426 (       403             bpchar_ops              PGNSP PGUID ));
-#define BPCHAR_BTREE_FAM_OID 426
-DATA(insert OID =  427 (       405             bpchar_ops              PGNSP PGUID ));
-DATA(insert OID =  428 (       403             bytea_ops               PGNSP PGUID ));
-#define BYTEA_BTREE_FAM_OID 428
-DATA(insert OID =  429 (       403             char_ops                PGNSP PGUID ));
-DATA(insert OID =  431 (       405             char_ops                PGNSP PGUID ));
-DATA(insert OID =  434 (       403             datetime_ops    PGNSP PGUID ));
-DATA(insert OID =  435 (       405             date_ops                PGNSP PGUID ));
-DATA(insert OID = 1970 (       403             float_ops               PGNSP PGUID ));
-DATA(insert OID = 1971 (       405             float_ops               PGNSP PGUID ));
-DATA(insert OID = 1974 (       403             network_ops             PGNSP PGUID ));
-#define NETWORK_BTREE_FAM_OID 1974
-DATA(insert OID = 1975 (       405             network_ops             PGNSP PGUID ));
-DATA(insert OID = 3550 (       783             network_ops             PGNSP PGUID ));
-DATA(insert OID = 3794 (       4000    network_ops             PGNSP PGUID ));
-DATA(insert OID = 1976 (       403             integer_ops             PGNSP PGUID ));
-#define INTEGER_BTREE_FAM_OID 1976
-DATA(insert OID = 1977 (       405             integer_ops             PGNSP PGUID ));
-DATA(insert OID = 1982 (       403             interval_ops    PGNSP PGUID ));
-DATA(insert OID = 1983 (       405             interval_ops    PGNSP PGUID ));
-DATA(insert OID = 1984 (       403             macaddr_ops             PGNSP PGUID ));
-DATA(insert OID = 1985 (       405             macaddr_ops             PGNSP PGUID ));
-DATA(insert OID = 3371 (       403             macaddr8_ops    PGNSP PGUID ));
-DATA(insert OID = 3372 (       405             macaddr8_ops    PGNSP PGUID ));
-DATA(insert OID = 1986 (       403             name_ops                PGNSP PGUID ));
-#define NAME_BTREE_FAM_OID 1986
-DATA(insert OID = 1987 (       405             name_ops                PGNSP PGUID ));
-DATA(insert OID = 1988 (       403             numeric_ops             PGNSP PGUID ));
-DATA(insert OID = 1998 (       405             numeric_ops             PGNSP PGUID ));
-DATA(insert OID = 1989 (       403             oid_ops                 PGNSP PGUID ));
-#define OID_BTREE_FAM_OID 1989
-DATA(insert OID = 1990 (       405             oid_ops                 PGNSP PGUID ));
-DATA(insert OID = 1991 (       403             oidvector_ops   PGNSP PGUID ));
-DATA(insert OID = 1992 (       405             oidvector_ops   PGNSP PGUID ));
-DATA(insert OID = 2994 (       403             record_ops              PGNSP PGUID ));
-DATA(insert OID = 3194 (       403             record_image_ops        PGNSP PGUID ));
-DATA(insert OID = 1994 (       403             text_ops                PGNSP PGUID ));
-#define TEXT_BTREE_FAM_OID 1994
-DATA(insert OID = 1995 (       405             text_ops                PGNSP PGUID ));
-DATA(insert OID = 1996 (       403             time_ops                PGNSP PGUID ));
-DATA(insert OID = 1997 (       405             time_ops                PGNSP PGUID ));
-DATA(insert OID = 1999 (       405             timestamptz_ops PGNSP PGUID ));
-DATA(insert OID = 2000 (       403             timetz_ops              PGNSP PGUID ));
-DATA(insert OID = 2001 (       405             timetz_ops              PGNSP PGUID ));
-DATA(insert OID = 2002 (       403             varbit_ops              PGNSP PGUID ));
-DATA(insert OID = 2040 (       405             timestamp_ops   PGNSP PGUID ));
-DATA(insert OID = 2095 (       403             text_pattern_ops        PGNSP PGUID ));
-#define TEXT_PATTERN_BTREE_FAM_OID 2095
-DATA(insert OID = 2097 (       403             bpchar_pattern_ops      PGNSP PGUID ));
-#define BPCHAR_PATTERN_BTREE_FAM_OID 2097
-DATA(insert OID = 2099 (       403             money_ops               PGNSP PGUID ));
-DATA(insert OID = 2222 (       405             bool_ops                PGNSP PGUID ));
-#define BOOL_HASH_FAM_OID 2222
-DATA(insert OID = 2223 (       405             bytea_ops               PGNSP PGUID ));
-DATA(insert OID = 2789 (       403             tid_ops                 PGNSP PGUID ));
-DATA(insert OID = 2225 (       405             xid_ops                 PGNSP PGUID ));
-DATA(insert OID = 2226 (       405             cid_ops                 PGNSP PGUID ));
-DATA(insert OID = 2227 (       405             abstime_ops             PGNSP PGUID ));
-DATA(insert OID = 2228 (       405             reltime_ops             PGNSP PGUID ));
-DATA(insert OID = 2229 (       405             text_pattern_ops        PGNSP PGUID ));
-DATA(insert OID = 2231 (       405             bpchar_pattern_ops      PGNSP PGUID ));
-DATA(insert OID = 2233 (       403             reltime_ops             PGNSP PGUID ));
-DATA(insert OID = 2234 (       403             tinterval_ops   PGNSP PGUID ));
-DATA(insert OID = 2235 (       405             aclitem_ops             PGNSP PGUID ));
-DATA(insert OID = 2593 (       783             box_ops                 PGNSP PGUID ));
-DATA(insert OID = 2594 (       783             poly_ops                PGNSP PGUID ));
-DATA(insert OID = 2595 (       783             circle_ops              PGNSP PGUID ));
-DATA(insert OID = 1029 (       783             point_ops               PGNSP PGUID ));
-DATA(insert OID = 2745 (       2742    array_ops               PGNSP PGUID ));
-DATA(insert OID = 2968 (       403             uuid_ops                PGNSP PGUID ));
-DATA(insert OID = 2969 (       405             uuid_ops                PGNSP PGUID ));
-DATA(insert OID = 3253 (       403             pg_lsn_ops              PGNSP PGUID ));
-DATA(insert OID = 3254 (       405             pg_lsn_ops              PGNSP PGUID ));
-DATA(insert OID = 3522 (       403             enum_ops                PGNSP PGUID ));
-DATA(insert OID = 3523 (       405             enum_ops                PGNSP PGUID ));
-DATA(insert OID = 3626 (       403             tsvector_ops    PGNSP PGUID ));
-DATA(insert OID = 3655 (       783             tsvector_ops    PGNSP PGUID ));
-DATA(insert OID = 3659 (       2742    tsvector_ops    PGNSP PGUID ));
-DATA(insert OID = 3683 (       403             tsquery_ops             PGNSP PGUID ));
-DATA(insert OID = 3702 (       783             tsquery_ops             PGNSP PGUID ));
-DATA(insert OID = 3901 (       403             range_ops               PGNSP PGUID ));
-DATA(insert OID = 3903 (       405             range_ops               PGNSP PGUID ));
-DATA(insert OID = 3919 (       783             range_ops               PGNSP PGUID ));
-DATA(insert OID = 3474 (       4000    range_ops               PGNSP PGUID ));
-DATA(insert OID = 4015 (       4000    quad_point_ops  PGNSP PGUID ));
-DATA(insert OID = 4016 (       4000    kd_point_ops    PGNSP PGUID ));
-DATA(insert OID = 4017 (       4000    text_ops                PGNSP PGUID ));
-#define TEXT_SPGIST_FAM_OID 4017
-DATA(insert OID = 4033 (       403             jsonb_ops               PGNSP PGUID ));
-DATA(insert OID = 4034 (       405             jsonb_ops               PGNSP PGUID ));
-DATA(insert OID = 4035 (       783             jsonb_ops               PGNSP PGUID ));
-DATA(insert OID = 4036 (       2742    jsonb_ops               PGNSP PGUID ));
-DATA(insert OID = 4037 (       2742    jsonb_path_ops  PGNSP PGUID ));
-
-DATA(insert OID = 4054 (       3580    integer_minmax_ops              PGNSP PGUID ));
-DATA(insert OID = 4055 (       3580    numeric_minmax_ops              PGNSP PGUID ));
-DATA(insert OID = 4056 (       3580    text_minmax_ops                 PGNSP PGUID ));
-DATA(insert OID = 4058 (       3580    timetz_minmax_ops               PGNSP PGUID ));
-DATA(insert OID = 4059 (       3580    datetime_minmax_ops             PGNSP PGUID ));
-DATA(insert OID = 4062 (       3580    char_minmax_ops                 PGNSP PGUID ));
-DATA(insert OID = 4064 (       3580    bytea_minmax_ops                PGNSP PGUID ));
-DATA(insert OID = 4065 (       3580    name_minmax_ops                 PGNSP PGUID ));
-DATA(insert OID = 4068 (       3580    oid_minmax_ops                  PGNSP PGUID ));
-DATA(insert OID = 4069 (       3580    tid_minmax_ops                  PGNSP PGUID ));
-DATA(insert OID = 4070 (       3580    float_minmax_ops                PGNSP PGUID ));
-DATA(insert OID = 4072 (       3580    abstime_minmax_ops              PGNSP PGUID ));
-DATA(insert OID = 4073 (       3580    reltime_minmax_ops              PGNSP PGUID ));
-DATA(insert OID = 4074 (       3580    macaddr_minmax_ops              PGNSP PGUID ));
-DATA(insert OID = 4109 (       3580    macaddr8_minmax_ops             PGNSP PGUID ));
-DATA(insert OID = 4075 (       3580    network_minmax_ops              PGNSP PGUID ));
-DATA(insert OID = 4102 (       3580    network_inclusion_ops   PGNSP PGUID ));
-DATA(insert OID = 4076 (       3580    bpchar_minmax_ops               PGNSP PGUID ));
-DATA(insert OID = 4077 (       3580    time_minmax_ops                 PGNSP PGUID ));
-DATA(insert OID = 4078 (       3580    interval_minmax_ops             PGNSP PGUID ));
-DATA(insert OID = 4079 (       3580    bit_minmax_ops                  PGNSP PGUID ));
-DATA(insert OID = 4080 (       3580    varbit_minmax_ops               PGNSP PGUID ));
-DATA(insert OID = 4081 (       3580    uuid_minmax_ops                 PGNSP PGUID ));
-DATA(insert OID = 4103 (       3580    range_inclusion_ops             PGNSP PGUID ));
-DATA(insert OID = 4082 (       3580    pg_lsn_minmax_ops               PGNSP PGUID ));
-DATA(insert OID = 4104 (       3580    box_inclusion_ops               PGNSP PGUID ));
-DATA(insert OID = 5000 (       4000    box_ops         PGNSP PGUID ));
-DATA(insert OID = 5008 (       4000    poly_ops                                PGNSP PGUID ));
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
 
 #endif                                                 /* PG_OPFAMILY_H */
index 9dc66f4954fd8ad76f0eb2b7e82b3796321d7bf3..676532ae3f126d0026f6841de6554e529a451437 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_partitioned_table.h
  *       definition of the system "partitioned table" relation
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -10,8 +9,8 @@
  * src/include/catalog/pg_partitioned_table.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_PARTITIONED_TABLE_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_partitioned_table_d.h"
 
 /* ----------------
  *             pg_partitioned_table definition.  cpp turns this into
  *             typedef struct FormData_pg_partitioned_table
  * ----------------
  */
-#define PartitionedRelationId 3350
-
-CATALOG(pg_partitioned_table,3350) BKI_WITHOUT_OIDS
+CATALOG(pg_partitioned_table,3350,PartitionedRelationId) BKI_WITHOUT_OIDS
 {
        Oid                     partrelid;              /* partitioned table oid */
        char            partstrat;              /* partitioning strategy */
@@ -60,18 +58,4 @@ CATALOG(pg_partitioned_table,3350) BKI_WITHOUT_OIDS
  */
 typedef FormData_pg_partitioned_table *Form_pg_partitioned_table;
 
-/* ----------------
- *             compiler constants for pg_partitioned_table
- * ----------------
- */
-#define Natts_pg_partitioned_table                             8
-#define Anum_pg_partitioned_table_partrelid            1
-#define Anum_pg_partitioned_table_partstrat            2
-#define Anum_pg_partitioned_table_partnatts            3
-#define Anum_pg_partitioned_table_partdefid            4
-#define Anum_pg_partitioned_table_partattrs            5
-#define Anum_pg_partitioned_table_partclass            6
-#define Anum_pg_partitioned_table_partcollation 7
-#define Anum_pg_partitioned_table_partexprs            8
-
 #endif                                                 /* PG_PARTITIONED_TABLE_H */
diff --git a/src/include/catalog/pg_pltemplate.dat b/src/include/catalog/pg_pltemplate.dat
new file mode 100644 (file)
index 0000000..2d8bfab
--- /dev/null
@@ -0,0 +1,51 @@
+#----------------------------------------------------------------------
+#
+# pg_pltemplate.dat
+#    Initial contents of the pg_pltemplate system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_pltemplate.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+{ tmplname => 'plpgsql', tmpltrusted => 't', tmpldbacreate => 't',
+  tmplhandler => 'plpgsql_call_handler', tmplinline => 'plpgsql_inline_handler',
+  tmplvalidator => 'plpgsql_validator', tmpllibrary => '$libdir/plpgsql',
+  tmplacl => '_null_' },
+{ tmplname => 'pltcl', tmpltrusted => 't', tmpldbacreate => 't',
+  tmplhandler => 'pltcl_call_handler', tmplinline => '_null_',
+  tmplvalidator => '_null_', tmpllibrary => '$libdir/pltcl',
+  tmplacl => '_null_' },
+{ tmplname => 'pltclu', tmpltrusted => 'f', tmpldbacreate => 'f',
+  tmplhandler => 'pltclu_call_handler', tmplinline => '_null_',
+  tmplvalidator => '_null_', tmpllibrary => '$libdir/pltcl',
+  tmplacl => '_null_' },
+{ tmplname => 'plperl', tmpltrusted => 't', tmpldbacreate => 't',
+  tmplhandler => 'plperl_call_handler', tmplinline => 'plperl_inline_handler',
+  tmplvalidator => 'plperl_validator', tmpllibrary => '$libdir/plperl',
+  tmplacl => '_null_' },
+{ tmplname => 'plperlu', tmpltrusted => 'f', tmpldbacreate => 'f',
+  tmplhandler => 'plperlu_call_handler', tmplinline => 'plperlu_inline_handler',
+  tmplvalidator => 'plperlu_validator', tmpllibrary => '$libdir/plperl',
+  tmplacl => '_null_' },
+{ tmplname => 'plpythonu', tmpltrusted => 'f', tmpldbacreate => 'f',
+  tmplhandler => 'plpython_call_handler',
+  tmplinline => 'plpython_inline_handler',
+  tmplvalidator => 'plpython_validator', tmpllibrary => '$libdir/plpython2',
+  tmplacl => '_null_' },
+{ tmplname => 'plpython2u', tmpltrusted => 'f', tmpldbacreate => 'f',
+  tmplhandler => 'plpython2_call_handler',
+  tmplinline => 'plpython2_inline_handler',
+  tmplvalidator => 'plpython2_validator', tmpllibrary => '$libdir/plpython2',
+  tmplacl => '_null_' },
+{ tmplname => 'plpython3u', tmpltrusted => 'f', tmpldbacreate => 'f',
+  tmplhandler => 'plpython3_call_handler',
+  tmplinline => 'plpython3_inline_handler',
+  tmplvalidator => 'plpython3_validator', tmpllibrary => '$libdir/plpython3',
+  tmplacl => '_null_' },
+
+]
index d28d1883f6577f3fa1fb94810de6944ddefe597d..d84c86b08d2ab56219359f806f3980345a1d66f4 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_pltemplate.h
  *       definition of the system "PL template" relation (pg_pltemplate)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_pltemplate.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_PLTEMPLATE_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_pltemplate_d.h"
 
 /* ----------------
  *             pg_pltemplate definition.  cpp turns this into
  *             typedef struct FormData_pg_pltemplate
  * ----------------
  */
-#define PLTemplateRelationId   1136
-
-CATALOG(pg_pltemplate,1136) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
+CATALOG(pg_pltemplate,1136,PLTemplateRelationId) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
 {
        NameData        tmplname;               /* name of PL */
        bool            tmpltrusted;    /* PL is trusted? */
@@ -51,33 +49,4 @@ CATALOG(pg_pltemplate,1136) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
  */
 typedef FormData_pg_pltemplate *Form_pg_pltemplate;
 
-/* ----------------
- *             compiler constants for pg_pltemplate
- * ----------------
- */
-#define Natts_pg_pltemplate                                    8
-#define Anum_pg_pltemplate_tmplname                    1
-#define Anum_pg_pltemplate_tmpltrusted         2
-#define Anum_pg_pltemplate_tmpldbacreate       3
-#define Anum_pg_pltemplate_tmplhandler         4
-#define Anum_pg_pltemplate_tmplinline          5
-#define Anum_pg_pltemplate_tmplvalidator       6
-#define Anum_pg_pltemplate_tmpllibrary         7
-#define Anum_pg_pltemplate_tmplacl                     8
-
-
-/* ----------------
- *             initial contents of pg_pltemplate
- * ----------------
- */
-
-DATA(insert ( plpgsql          t t plpgsql_call_handler plpgsql_inline_handler plpgsql_validator "$libdir/plpgsql" _null_ ));
-DATA(insert ( pltcl            t t pltcl_call_handler _null_ _null_ "$libdir/pltcl" _null_ ));
-DATA(insert ( pltclu           f f pltclu_call_handler _null_ _null_ "$libdir/pltcl" _null_ ));
-DATA(insert ( plperl           t t plperl_call_handler plperl_inline_handler plperl_validator "$libdir/plperl" _null_ ));
-DATA(insert ( plperlu          f f plperlu_call_handler plperlu_inline_handler plperlu_validator "$libdir/plperl" _null_ ));
-DATA(insert ( plpythonu        f f plpython_call_handler plpython_inline_handler plpython_validator "$libdir/plpython2" _null_ ));
-DATA(insert ( plpython2u       f f plpython2_call_handler plpython2_inline_handler plpython2_validator "$libdir/plpython2" _null_ ));
-DATA(insert ( plpython3u       f f plpython3_call_handler plpython3_inline_handler plpython3_validator "$libdir/plpython3" _null_ ));
-
 #endif                                                 /* PG_PLTEMPLATE_H */
index 0d94f1ad72b3c0fc985e10dc89ef625bcdcb1079..45fdc285f791cd4f54f2835d26f228d62458d2f9 100644 (file)
@@ -1,24 +1,32 @@
-/*
+/*-------------------------------------------------------------------------
+ *
  * pg_policy.h
  *      definition of the system "policy" relation (pg_policy)
  *
+ *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
+ * src/include/catalog/pg_policy.h
+ *
+ * NOTES
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
+ *
+ *-------------------------------------------------------------------------
  */
 #ifndef PG_POLICY_H
 #define PG_POLICY_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_policy_d.h"
 
 /* ----------------
  *             pg_policy definition. cpp turns this into
  *             typedef struct FormData_pg_policy
  * ----------------
  */
-#define PolicyRelationId       3256
-
-CATALOG(pg_policy,3256)
+CATALOG(pg_policy,3256,PolicyRelationId)
 {
        NameData        polname;                /* Policy name. */
        Oid                     polrelid;               /* Oid of the relation with policy. */
@@ -39,17 +47,4 @@ CATALOG(pg_policy,3256)
  */
 typedef FormData_pg_policy *Form_pg_policy;
 
-/* ----------------
- *             compiler constants for pg_policy
- * ----------------
- */
-#define Natts_pg_policy                                        7
-#define Anum_pg_policy_polname                 1
-#define Anum_pg_policy_polrelid                        2
-#define Anum_pg_policy_polcmd                  3
-#define Anum_pg_policy_polpermissive   4
-#define Anum_pg_policy_polroles                        5
-#define Anum_pg_policy_polqual                 6
-#define Anum_pg_policy_polwithcheck            7
-
 #endif                                                 /* PG_POLICY_H */
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
new file mode 100644 (file)
index 0000000..ad685f7
--- /dev/null
@@ -0,0 +1,10210 @@
+#----------------------------------------------------------------------
+#
+# pg_proc.dat
+#    Initial contents of the pg_proc system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_proc.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# Note: every entry in pg_proc.dat is expected to have a 'descr' comment,
+# except for functions that implement pg_operator.dat operators and don't
+# have a good reason to be called directly rather than via the operator.
+# (If you do expect such a function to be used directly, you should
+# duplicate the operator's comment.)  initdb will supply suitable default
+# comments for functions referenced by pg_operator.
+
+# Try to follow the style of existing functions' comments.
+# Some recommended conventions:
+
+# "I/O" for typinput, typoutput, typreceive, typsend functions
+# "I/O typmod" for typmodin, typmodout functions
+# "aggregate transition function" for aggtransfn functions, unless
+# they are reasonably useful in their own right
+# "aggregate final function" for aggfinalfn functions (likewise)
+# "convert srctypename to desttypename" for cast functions
+# "less-equal-greater" for B-tree comparison functions
+
+# Once upon a time these entries were ordered by OID.  Lately it's often
+# been the custom to insert new entries adjacent to related older entries.
+# Try to do one or the other though, don't just insert entries at random.
+
+# OIDS 1 - 99
+
+{ oid => '1242', descr => 'I/O',
+  proname => 'boolin', prorettype => 'bool', proargtypes => 'cstring',
+  prosrc => 'boolin' },
+{ oid => '1243', descr => 'I/O',
+  proname => 'boolout', prorettype => 'cstring', proargtypes => 'bool',
+  prosrc => 'boolout' },
+{ oid => '1244', descr => 'I/O',
+  proname => 'byteain', prorettype => 'bytea', proargtypes => 'cstring',
+  prosrc => 'byteain' },
+{ oid => '31', descr => 'I/O',
+  proname => 'byteaout', prorettype => 'cstring', proargtypes => 'bytea',
+  prosrc => 'byteaout' },
+{ oid => '1245', descr => 'I/O',
+  proname => 'charin', prorettype => 'char', proargtypes => 'cstring',
+  prosrc => 'charin' },
+{ oid => '33', descr => 'I/O',
+  proname => 'charout', prorettype => 'cstring', proargtypes => 'char',
+  prosrc => 'charout' },
+{ oid => '34', descr => 'I/O',
+  proname => 'namein', prorettype => 'name', proargtypes => 'cstring',
+  prosrc => 'namein' },
+{ oid => '35', descr => 'I/O',
+  proname => 'nameout', prorettype => 'cstring', proargtypes => 'name',
+  prosrc => 'nameout' },
+{ oid => '38', descr => 'I/O',
+  proname => 'int2in', prorettype => 'int2', proargtypes => 'cstring',
+  prosrc => 'int2in' },
+{ oid => '39', descr => 'I/O',
+  proname => 'int2out', prorettype => 'cstring', proargtypes => 'int2',
+  prosrc => 'int2out' },
+{ oid => '40', descr => 'I/O',
+  proname => 'int2vectorin', prorettype => 'int2vector',
+  proargtypes => 'cstring', prosrc => 'int2vectorin' },
+{ oid => '41', descr => 'I/O',
+  proname => 'int2vectorout', prorettype => 'cstring',
+  proargtypes => 'int2vector', prosrc => 'int2vectorout' },
+{ oid => '42', descr => 'I/O',
+  proname => 'int4in', prorettype => 'int4', proargtypes => 'cstring',
+  prosrc => 'int4in' },
+{ oid => '43', descr => 'I/O',
+  proname => 'int4out', prorettype => 'cstring', proargtypes => 'int4',
+  prosrc => 'int4out' },
+{ oid => '44', descr => 'I/O',
+  proname => 'regprocin', provolatile => 's', prorettype => 'regproc',
+  proargtypes => 'cstring', prosrc => 'regprocin' },
+{ oid => '45', descr => 'I/O',
+  proname => 'regprocout', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'regproc', prosrc => 'regprocout' },
+{ oid => '3494', descr => 'convert proname to regproc',
+  proname => 'to_regproc', provolatile => 's', prorettype => 'regproc',
+  proargtypes => 'text', prosrc => 'to_regproc' },
+{ oid => '3479', descr => 'convert proname to regprocedure',
+  proname => 'to_regprocedure', provolatile => 's',
+  prorettype => 'regprocedure', proargtypes => 'text',
+  prosrc => 'to_regprocedure' },
+{ oid => '46', descr => 'I/O',
+  proname => 'textin', prorettype => 'text', proargtypes => 'cstring',
+  prosrc => 'textin' },
+{ oid => '47', descr => 'I/O',
+  proname => 'textout', prorettype => 'cstring', proargtypes => 'text',
+  prosrc => 'textout' },
+{ oid => '48', descr => 'I/O',
+  proname => 'tidin', prorettype => 'tid', proargtypes => 'cstring',
+  prosrc => 'tidin' },
+{ oid => '49', descr => 'I/O',
+  proname => 'tidout', prorettype => 'cstring', proargtypes => 'tid',
+  prosrc => 'tidout' },
+{ oid => '50', descr => 'I/O',
+  proname => 'xidin', prorettype => 'xid', proargtypes => 'cstring',
+  prosrc => 'xidin' },
+{ oid => '51', descr => 'I/O',
+  proname => 'xidout', prorettype => 'cstring', proargtypes => 'xid',
+  prosrc => 'xidout' },
+{ oid => '52', descr => 'I/O',
+  proname => 'cidin', prorettype => 'cid', proargtypes => 'cstring',
+  prosrc => 'cidin' },
+{ oid => '53', descr => 'I/O',
+  proname => 'cidout', prorettype => 'cstring', proargtypes => 'cid',
+  prosrc => 'cidout' },
+{ oid => '54', descr => 'I/O',
+  proname => 'oidvectorin', prorettype => 'oidvector', proargtypes => 'cstring',
+  prosrc => 'oidvectorin' },
+{ oid => '55', descr => 'I/O',
+  proname => 'oidvectorout', prorettype => 'cstring',
+  proargtypes => 'oidvector', prosrc => 'oidvectorout' },
+{ oid => '56',
+  proname => 'boollt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bool bool', prosrc => 'boollt' },
+{ oid => '57',
+  proname => 'boolgt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bool bool', prosrc => 'boolgt' },
+{ oid => '60',
+  proname => 'booleq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bool bool', prosrc => 'booleq' },
+{ oid => '61',
+  proname => 'chareq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'char char', prosrc => 'chareq' },
+{ oid => '62',
+  proname => 'nameeq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'name name', prosrc => 'nameeq' },
+{ oid => '63',
+  proname => 'int2eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int2', prosrc => 'int2eq' },
+{ oid => '64',
+  proname => 'int2lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int2', prosrc => 'int2lt' },
+{ oid => '65',
+  proname => 'int4eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int4', prosrc => 'int4eq' },
+{ oid => '66',
+  proname => 'int4lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int4', prosrc => 'int4lt' },
+{ oid => '67',
+  proname => 'texteq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'text text', prosrc => 'texteq' },
+{ oid => '3696',
+  proname => 'starts_with', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'text text', prosrc => 'text_starts_with' },
+{ oid => '68',
+  proname => 'xideq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'xid xid', prosrc => 'xideq' },
+{ oid => '3308',
+  proname => 'xidneq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'xid xid', prosrc => 'xidneq' },
+{ oid => '69',
+  proname => 'cideq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'cid cid', prosrc => 'cideq' },
+{ oid => '70',
+  proname => 'charne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'char char', prosrc => 'charne' },
+{ oid => '1246',
+  proname => 'charlt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'char char', prosrc => 'charlt' },
+{ oid => '72',
+  proname => 'charle', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'char char', prosrc => 'charle' },
+{ oid => '73',
+  proname => 'chargt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'char char', prosrc => 'chargt' },
+{ oid => '74',
+  proname => 'charge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'char char', prosrc => 'charge' },
+{ oid => '77', descr => 'convert char to int4',
+  proname => 'int4', prorettype => 'int4', proargtypes => 'char',
+  prosrc => 'chartoi4' },
+{ oid => '78', descr => 'convert int4 to char',
+  proname => 'char', prorettype => 'char', proargtypes => 'int4',
+  prosrc => 'i4tochar' },
+
+{ oid => '79',
+  proname => 'nameregexeq', prorettype => 'bool', proargtypes => 'name text',
+  prosrc => 'nameregexeq' },
+{ oid => '1252',
+  proname => 'nameregexne', prorettype => 'bool', proargtypes => 'name text',
+  prosrc => 'nameregexne' },
+{ oid => '1254',
+  proname => 'textregexeq', prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'textregexeq' },
+{ oid => '1256',
+  proname => 'textregexne', prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'textregexne' },
+{ oid => '1257', descr => 'length',
+  proname => 'textlen', prorettype => 'int4', proargtypes => 'text',
+  prosrc => 'textlen' },
+{ oid => '1258',
+  proname => 'textcat', prorettype => 'text', proargtypes => 'text text',
+  prosrc => 'textcat' },
+
+{ oid => '84',
+  proname => 'boolne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bool bool', prosrc => 'boolne' },
+{ oid => '89', descr => 'PostgreSQL version string',
+  proname => 'version', provolatile => 's', prorettype => 'text',
+  proargtypes => '', prosrc => 'pgsql_version' },
+
+{ oid => '86', descr => 'I/O',
+  proname => 'pg_ddl_command_in', prorettype => 'pg_ddl_command',
+  proargtypes => 'cstring', prosrc => 'pg_ddl_command_in' },
+{ oid => '87', descr => 'I/O',
+  proname => 'pg_ddl_command_out', prorettype => 'cstring',
+  proargtypes => 'pg_ddl_command', prosrc => 'pg_ddl_command_out' },
+{ oid => '88', descr => 'I/O',
+  proname => 'pg_ddl_command_recv', prorettype => 'pg_ddl_command',
+  proargtypes => 'internal', prosrc => 'pg_ddl_command_recv' },
+{ oid => '90', descr => 'I/O',
+  proname => 'pg_ddl_command_send', prorettype => 'bytea',
+  proargtypes => 'pg_ddl_command', prosrc => 'pg_ddl_command_send' },
+
+# OIDS 100 - 199
+
+{ oid => '101', descr => 'restriction selectivity of = and related operators',
+  proname => 'eqsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'eqsel' },
+{ oid => '102',
+  descr => 'restriction selectivity of <> and related operators',
+  proname => 'neqsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'neqsel' },
+{ oid => '103',
+  descr => 'restriction selectivity of < and related operators on scalar datatypes',
+  proname => 'scalarltsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'scalarltsel' },
+{ oid => '104',
+  descr => 'restriction selectivity of > and related operators on scalar datatypes',
+  proname => 'scalargtsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'scalargtsel' },
+{ oid => '105', descr => 'join selectivity of = and related operators',
+  proname => 'eqjoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal', prosrc => 'eqjoinsel' },
+{ oid => '106', descr => 'join selectivity of <> and related operators',
+  proname => 'neqjoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'neqjoinsel' },
+{ oid => '107',
+  descr => 'join selectivity of < and related operators on scalar datatypes',
+  proname => 'scalarltjoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'scalarltjoinsel' },
+{ oid => '108',
+  descr => 'join selectivity of > and related operators on scalar datatypes',
+  proname => 'scalargtjoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'scalargtjoinsel' },
+
+{ oid => '336',
+  descr => 'restriction selectivity of <= and related operators on scalar datatypes',
+  proname => 'scalarlesel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'scalarlesel' },
+{ oid => '337',
+  descr => 'restriction selectivity of >= and related operators on scalar datatypes',
+  proname => 'scalargesel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'scalargesel' },
+{ oid => '386',
+  descr => 'join selectivity of <= and related operators on scalar datatypes',
+  proname => 'scalarlejoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'scalarlejoinsel' },
+{ oid => '398',
+  descr => 'join selectivity of >= and related operators on scalar datatypes',
+  proname => 'scalargejoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'scalargejoinsel' },
+
+{ oid => '109', descr => 'I/O',
+  proname => 'unknownin', prorettype => 'unknown', proargtypes => 'cstring',
+  prosrc => 'unknownin' },
+{ oid => '110', descr => 'I/O',
+  proname => 'unknownout', prorettype => 'cstring', proargtypes => 'unknown',
+  prosrc => 'unknownout' },
+{ oid => '111',
+  proname => 'numeric_fac', prorettype => 'numeric', proargtypes => 'int8',
+  prosrc => 'numeric_fac' },
+
+{ oid => '115',
+  proname => 'box_above_eq', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_above_eq' },
+{ oid => '116',
+  proname => 'box_below_eq', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_below_eq' },
+
+{ oid => '117', descr => 'I/O',
+  proname => 'point_in', prorettype => 'point', proargtypes => 'cstring',
+  prosrc => 'point_in' },
+{ oid => '118', descr => 'I/O',
+  proname => 'point_out', prorettype => 'cstring', proargtypes => 'point',
+  prosrc => 'point_out' },
+{ oid => '119', descr => 'I/O',
+  proname => 'lseg_in', prorettype => 'lseg', proargtypes => 'cstring',
+  prosrc => 'lseg_in' },
+{ oid => '120', descr => 'I/O',
+  proname => 'lseg_out', prorettype => 'cstring', proargtypes => 'lseg',
+  prosrc => 'lseg_out' },
+{ oid => '121', descr => 'I/O',
+  proname => 'path_in', prorettype => 'path', proargtypes => 'cstring',
+  prosrc => 'path_in' },
+{ oid => '122', descr => 'I/O',
+  proname => 'path_out', prorettype => 'cstring', proargtypes => 'path',
+  prosrc => 'path_out' },
+{ oid => '123', descr => 'I/O',
+  proname => 'box_in', prorettype => 'box', proargtypes => 'cstring',
+  prosrc => 'box_in' },
+{ oid => '124', descr => 'I/O',
+  proname => 'box_out', prorettype => 'cstring', proargtypes => 'box',
+  prosrc => 'box_out' },
+{ oid => '125',
+  proname => 'box_overlap', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_overlap' },
+{ oid => '126',
+  proname => 'box_ge', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_ge' },
+{ oid => '127',
+  proname => 'box_gt', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_gt' },
+{ oid => '128',
+  proname => 'box_eq', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_eq' },
+{ oid => '129',
+  proname => 'box_lt', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_lt' },
+{ oid => '130',
+  proname => 'box_le', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_le' },
+{ oid => '131',
+  proname => 'point_above', prorettype => 'bool', proargtypes => 'point point',
+  prosrc => 'point_above' },
+{ oid => '132',
+  proname => 'point_left', prorettype => 'bool', proargtypes => 'point point',
+  prosrc => 'point_left' },
+{ oid => '133',
+  proname => 'point_right', prorettype => 'bool', proargtypes => 'point point',
+  prosrc => 'point_right' },
+{ oid => '134',
+  proname => 'point_below', prorettype => 'bool', proargtypes => 'point point',
+  prosrc => 'point_below' },
+{ oid => '135',
+  proname => 'point_eq', prorettype => 'bool', proargtypes => 'point point',
+  prosrc => 'point_eq' },
+{ oid => '136',
+  proname => 'on_pb', prorettype => 'bool', proargtypes => 'point box',
+  prosrc => 'on_pb' },
+{ oid => '137',
+  proname => 'on_ppath', prorettype => 'bool', proargtypes => 'point path',
+  prosrc => 'on_ppath' },
+{ oid => '138',
+  proname => 'box_center', prorettype => 'point', proargtypes => 'box',
+  prosrc => 'box_center' },
+{ oid => '139',
+  descr => 'restriction selectivity for area-comparison operators',
+  proname => 'areasel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'areasel' },
+{ oid => '140', descr => 'join selectivity for area-comparison operators',
+  proname => 'areajoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'areajoinsel' },
+{ oid => '141',
+  proname => 'int4mul', prorettype => 'int4', proargtypes => 'int4 int4',
+  prosrc => 'int4mul' },
+{ oid => '144',
+  proname => 'int4ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int4', prosrc => 'int4ne' },
+{ oid => '145',
+  proname => 'int2ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int2', prosrc => 'int2ne' },
+{ oid => '146',
+  proname => 'int2gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int2', prosrc => 'int2gt' },
+{ oid => '147',
+  proname => 'int4gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int4', prosrc => 'int4gt' },
+{ oid => '148',
+  proname => 'int2le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int2', prosrc => 'int2le' },
+{ oid => '149',
+  proname => 'int4le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int4', prosrc => 'int4le' },
+{ oid => '150',
+  proname => 'int4ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int4', prosrc => 'int4ge' },
+{ oid => '151',
+  proname => 'int2ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int2', prosrc => 'int2ge' },
+{ oid => '152',
+  proname => 'int2mul', prorettype => 'int2', proargtypes => 'int2 int2',
+  prosrc => 'int2mul' },
+{ oid => '153',
+  proname => 'int2div', prorettype => 'int2', proargtypes => 'int2 int2',
+  prosrc => 'int2div' },
+{ oid => '154',
+  proname => 'int4div', prorettype => 'int4', proargtypes => 'int4 int4',
+  prosrc => 'int4div' },
+{ oid => '155',
+  proname => 'int2mod', prorettype => 'int2', proargtypes => 'int2 int2',
+  prosrc => 'int2mod' },
+{ oid => '156',
+  proname => 'int4mod', prorettype => 'int4', proargtypes => 'int4 int4',
+  prosrc => 'int4mod' },
+{ oid => '157',
+  proname => 'textne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'text text', prosrc => 'textne' },
+{ oid => '158',
+  proname => 'int24eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int4', prosrc => 'int24eq' },
+{ oid => '159',
+  proname => 'int42eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int2', prosrc => 'int42eq' },
+{ oid => '160',
+  proname => 'int24lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int4', prosrc => 'int24lt' },
+{ oid => '161',
+  proname => 'int42lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int2', prosrc => 'int42lt' },
+{ oid => '162',
+  proname => 'int24gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int4', prosrc => 'int24gt' },
+{ oid => '163',
+  proname => 'int42gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int2', prosrc => 'int42gt' },
+{ oid => '164',
+  proname => 'int24ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int4', prosrc => 'int24ne' },
+{ oid => '165',
+  proname => 'int42ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int2', prosrc => 'int42ne' },
+{ oid => '166',
+  proname => 'int24le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int4', prosrc => 'int24le' },
+{ oid => '167',
+  proname => 'int42le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int2', prosrc => 'int42le' },
+{ oid => '168',
+  proname => 'int24ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int4', prosrc => 'int24ge' },
+{ oid => '169',
+  proname => 'int42ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int2', prosrc => 'int42ge' },
+{ oid => '170',
+  proname => 'int24mul', prorettype => 'int4', proargtypes => 'int2 int4',
+  prosrc => 'int24mul' },
+{ oid => '171',
+  proname => 'int42mul', prorettype => 'int4', proargtypes => 'int4 int2',
+  prosrc => 'int42mul' },
+{ oid => '172',
+  proname => 'int24div', prorettype => 'int4', proargtypes => 'int2 int4',
+  prosrc => 'int24div' },
+{ oid => '173',
+  proname => 'int42div', prorettype => 'int4', proargtypes => 'int4 int2',
+  prosrc => 'int42div' },
+{ oid => '176',
+  proname => 'int2pl', prorettype => 'int2', proargtypes => 'int2 int2',
+  prosrc => 'int2pl' },
+{ oid => '177',
+  proname => 'int4pl', prorettype => 'int4', proargtypes => 'int4 int4',
+  prosrc => 'int4pl' },
+{ oid => '178',
+  proname => 'int24pl', prorettype => 'int4', proargtypes => 'int2 int4',
+  prosrc => 'int24pl' },
+{ oid => '179',
+  proname => 'int42pl', prorettype => 'int4', proargtypes => 'int4 int2',
+  prosrc => 'int42pl' },
+{ oid => '180',
+  proname => 'int2mi', prorettype => 'int2', proargtypes => 'int2 int2',
+  prosrc => 'int2mi' },
+{ oid => '181',
+  proname => 'int4mi', prorettype => 'int4', proargtypes => 'int4 int4',
+  prosrc => 'int4mi' },
+{ oid => '182',
+  proname => 'int24mi', prorettype => 'int4', proargtypes => 'int2 int4',
+  prosrc => 'int24mi' },
+{ oid => '183',
+  proname => 'int42mi', prorettype => 'int4', proargtypes => 'int4 int2',
+  prosrc => 'int42mi' },
+{ oid => '184',
+  proname => 'oideq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'oid oid', prosrc => 'oideq' },
+{ oid => '185',
+  proname => 'oidne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'oid oid', prosrc => 'oidne' },
+{ oid => '186',
+  proname => 'box_same', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_same' },
+{ oid => '187',
+  proname => 'box_contain', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_contain' },
+{ oid => '188',
+  proname => 'box_left', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_left' },
+{ oid => '189',
+  proname => 'box_overleft', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_overleft' },
+{ oid => '190',
+  proname => 'box_overright', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_overright' },
+{ oid => '191',
+  proname => 'box_right', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_right' },
+{ oid => '192',
+  proname => 'box_contained', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_contained' },
+{ oid => '193',
+  proname => 'box_contain_pt', prorettype => 'bool', proargtypes => 'box point',
+  prosrc => 'box_contain_pt' },
+
+{ oid => '195', descr => 'I/O',
+  proname => 'pg_node_tree_in', prorettype => 'pg_node_tree',
+  proargtypes => 'cstring', prosrc => 'pg_node_tree_in' },
+{ oid => '196', descr => 'I/O',
+  proname => 'pg_node_tree_out', prorettype => 'cstring',
+  proargtypes => 'pg_node_tree', prosrc => 'pg_node_tree_out' },
+{ oid => '197', descr => 'I/O',
+  proname => 'pg_node_tree_recv', provolatile => 's',
+  prorettype => 'pg_node_tree', proargtypes => 'internal',
+  prosrc => 'pg_node_tree_recv' },
+{ oid => '198', descr => 'I/O',
+  proname => 'pg_node_tree_send', provolatile => 's', prorettype => 'bytea',
+  proargtypes => 'pg_node_tree', prosrc => 'pg_node_tree_send' },
+
+# OIDS 200 - 299
+
+{ oid => '200', descr => 'I/O',
+  proname => 'float4in', prorettype => 'float4', proargtypes => 'cstring',
+  prosrc => 'float4in' },
+{ oid => '201', descr => 'I/O',
+  proname => 'float4out', prorettype => 'cstring', proargtypes => 'float4',
+  prosrc => 'float4out' },
+{ oid => '202',
+  proname => 'float4mul', prorettype => 'float4',
+  proargtypes => 'float4 float4', prosrc => 'float4mul' },
+{ oid => '203',
+  proname => 'float4div', prorettype => 'float4',
+  proargtypes => 'float4 float4', prosrc => 'float4div' },
+{ oid => '204',
+  proname => 'float4pl', prorettype => 'float4', proargtypes => 'float4 float4',
+  prosrc => 'float4pl' },
+{ oid => '205',
+  proname => 'float4mi', prorettype => 'float4', proargtypes => 'float4 float4',
+  prosrc => 'float4mi' },
+{ oid => '206',
+  proname => 'float4um', prorettype => 'float4', proargtypes => 'float4',
+  prosrc => 'float4um' },
+{ oid => '207',
+  proname => 'float4abs', prorettype => 'float4', proargtypes => 'float4',
+  prosrc => 'float4abs' },
+{ oid => '208', descr => 'aggregate transition function',
+  proname => 'float4_accum', prorettype => '_float8',
+  proargtypes => '_float8 float4', prosrc => 'float4_accum' },
+{ oid => '209', descr => 'larger of two',
+  proname => 'float4larger', prorettype => 'float4',
+  proargtypes => 'float4 float4', prosrc => 'float4larger' },
+{ oid => '211', descr => 'smaller of two',
+  proname => 'float4smaller', prorettype => 'float4',
+  proargtypes => 'float4 float4', prosrc => 'float4smaller' },
+
+{ oid => '212',
+  proname => 'int4um', prorettype => 'int4', proargtypes => 'int4',
+  prosrc => 'int4um' },
+{ oid => '213',
+  proname => 'int2um', prorettype => 'int2', proargtypes => 'int2',
+  prosrc => 'int2um' },
+
+{ oid => '214', descr => 'I/O',
+  proname => 'float8in', prorettype => 'float8', proargtypes => 'cstring',
+  prosrc => 'float8in' },
+{ oid => '215', descr => 'I/O',
+  proname => 'float8out', prorettype => 'cstring', proargtypes => 'float8',
+  prosrc => 'float8out' },
+{ oid => '216',
+  proname => 'float8mul', prorettype => 'float8',
+  proargtypes => 'float8 float8', prosrc => 'float8mul' },
+{ oid => '217',
+  proname => 'float8div', prorettype => 'float8',
+  proargtypes => 'float8 float8', prosrc => 'float8div' },
+{ oid => '218',
+  proname => 'float8pl', prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'float8pl' },
+{ oid => '219',
+  proname => 'float8mi', prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'float8mi' },
+{ oid => '220',
+  proname => 'float8um', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'float8um' },
+{ oid => '221',
+  proname => 'float8abs', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'float8abs' },
+{ oid => '222', descr => 'aggregate transition function',
+  proname => 'float8_accum', prorettype => '_float8',
+  proargtypes => '_float8 float8', prosrc => 'float8_accum' },
+{ oid => '276', descr => 'aggregate combine function',
+  proname => 'float8_combine', prorettype => '_float8',
+  proargtypes => '_float8 _float8', prosrc => 'float8_combine' },
+{ oid => '223', descr => 'larger of two',
+  proname => 'float8larger', prorettype => 'float8',
+  proargtypes => 'float8 float8', prosrc => 'float8larger' },
+{ oid => '224', descr => 'smaller of two',
+  proname => 'float8smaller', prorettype => 'float8',
+  proargtypes => 'float8 float8', prosrc => 'float8smaller' },
+
+{ oid => '225',
+  proname => 'lseg_center', prorettype => 'point', proargtypes => 'lseg',
+  prosrc => 'lseg_center' },
+{ oid => '226',
+  proname => 'path_center', prorettype => 'point', proargtypes => 'path',
+  prosrc => 'path_center' },
+{ oid => '227',
+  proname => 'poly_center', prorettype => 'point', proargtypes => 'polygon',
+  prosrc => 'poly_center' },
+
+{ oid => '228', descr => 'round to nearest integer',
+  proname => 'dround', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dround' },
+{ oid => '229', descr => 'truncate to integer',
+  proname => 'dtrunc', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dtrunc' },
+{ oid => '2308', descr => 'nearest integer >= value',
+  proname => 'ceil', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dceil' },
+{ oid => '2320', descr => 'nearest integer >= value',
+  proname => 'ceiling', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dceil' },
+{ oid => '2309', descr => 'nearest integer <= value',
+  proname => 'floor', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dfloor' },
+{ oid => '2310', descr => 'sign of value',
+  proname => 'sign', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dsign' },
+{ oid => '230',
+  proname => 'dsqrt', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dsqrt' },
+{ oid => '231',
+  proname => 'dcbrt', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dcbrt' },
+{ oid => '232',
+  proname => 'dpow', prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'dpow' },
+{ oid => '233', descr => 'natural exponential (e^x)',
+  proname => 'dexp', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dexp' },
+{ oid => '234', descr => 'natural logarithm',
+  proname => 'dlog1', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dlog1' },
+{ oid => '235', descr => 'convert int2 to float8',
+  proname => 'float8', prorettype => 'float8', proargtypes => 'int2',
+  prosrc => 'i2tod' },
+{ oid => '236', descr => 'convert int2 to float4',
+  proname => 'float4', prorettype => 'float4', proargtypes => 'int2',
+  prosrc => 'i2tof' },
+{ oid => '237', descr => 'convert float8 to int2',
+  proname => 'int2', prorettype => 'int2', proargtypes => 'float8',
+  prosrc => 'dtoi2' },
+{ oid => '238', descr => 'convert float4 to int2',
+  proname => 'int2', prorettype => 'int2', proargtypes => 'float4',
+  prosrc => 'ftoi2' },
+{ oid => '239',
+  proname => 'line_distance', prorettype => 'float8',
+  proargtypes => 'line line', prosrc => 'line_distance' },
+
+{ oid => '240', descr => 'I/O',
+  proname => 'abstimein', provolatile => 's', prorettype => 'abstime',
+  proargtypes => 'cstring', prosrc => 'abstimein' },
+{ oid => '241', descr => 'I/O',
+  proname => 'abstimeout', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'abstime', prosrc => 'abstimeout' },
+{ oid => '242', descr => 'I/O',
+  proname => 'reltimein', provolatile => 's', prorettype => 'reltime',
+  proargtypes => 'cstring', prosrc => 'reltimein' },
+{ oid => '243', descr => 'I/O',
+  proname => 'reltimeout', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'reltime', prosrc => 'reltimeout' },
+{ oid => '244',
+  proname => 'timepl', prorettype => 'abstime',
+  proargtypes => 'abstime reltime', prosrc => 'timepl' },
+{ oid => '245',
+  proname => 'timemi', prorettype => 'abstime',
+  proargtypes => 'abstime reltime', prosrc => 'timemi' },
+{ oid => '246', descr => 'I/O',
+  proname => 'tintervalin', provolatile => 's', prorettype => 'tinterval',
+  proargtypes => 'cstring', prosrc => 'tintervalin' },
+{ oid => '247', descr => 'I/O',
+  proname => 'tintervalout', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'tinterval', prosrc => 'tintervalout' },
+{ oid => '248',
+  proname => 'intinterval', prorettype => 'bool',
+  proargtypes => 'abstime tinterval', prosrc => 'intinterval' },
+{ oid => '249', descr => 'tinterval to reltime',
+  proname => 'tintervalrel', prorettype => 'reltime',
+  proargtypes => 'tinterval', prosrc => 'tintervalrel' },
+{ oid => '250', descr => 'current date and time (abstime)',
+  proname => 'timenow', provolatile => 's', prorettype => 'abstime',
+  proargtypes => '', prosrc => 'timenow' },
+{ oid => '251',
+  proname => 'abstimeeq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'abstime abstime', prosrc => 'abstimeeq' },
+{ oid => '252',
+  proname => 'abstimene', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'abstime abstime', prosrc => 'abstimene' },
+{ oid => '253',
+  proname => 'abstimelt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'abstime abstime', prosrc => 'abstimelt' },
+{ oid => '254',
+  proname => 'abstimegt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'abstime abstime', prosrc => 'abstimegt' },
+{ oid => '255',
+  proname => 'abstimele', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'abstime abstime', prosrc => 'abstimele' },
+{ oid => '256',
+  proname => 'abstimege', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'abstime abstime', prosrc => 'abstimege' },
+{ oid => '257',
+  proname => 'reltimeeq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'reltime reltime', prosrc => 'reltimeeq' },
+{ oid => '258',
+  proname => 'reltimene', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'reltime reltime', prosrc => 'reltimene' },
+{ oid => '259',
+  proname => 'reltimelt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'reltime reltime', prosrc => 'reltimelt' },
+{ oid => '260',
+  proname => 'reltimegt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'reltime reltime', prosrc => 'reltimegt' },
+{ oid => '261',
+  proname => 'reltimele', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'reltime reltime', prosrc => 'reltimele' },
+{ oid => '262',
+  proname => 'reltimege', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'reltime reltime', prosrc => 'reltimege' },
+{ oid => '263',
+  proname => 'tintervalsame', prorettype => 'bool',
+  proargtypes => 'tinterval tinterval', prosrc => 'tintervalsame' },
+{ oid => '264',
+  proname => 'tintervalct', prorettype => 'bool',
+  proargtypes => 'tinterval tinterval', prosrc => 'tintervalct' },
+{ oid => '265',
+  proname => 'tintervalov', prorettype => 'bool',
+  proargtypes => 'tinterval tinterval', prosrc => 'tintervalov' },
+{ oid => '266',
+  proname => 'tintervalleneq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tinterval reltime', prosrc => 'tintervalleneq' },
+{ oid => '267',
+  proname => 'tintervallenne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tinterval reltime', prosrc => 'tintervallenne' },
+{ oid => '268',
+  proname => 'tintervallenlt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tinterval reltime', prosrc => 'tintervallenlt' },
+{ oid => '269',
+  proname => 'tintervallengt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tinterval reltime', prosrc => 'tintervallengt' },
+{ oid => '270',
+  proname => 'tintervallenle', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tinterval reltime', prosrc => 'tintervallenle' },
+{ oid => '271',
+  proname => 'tintervallenge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tinterval reltime', prosrc => 'tintervallenge' },
+{ oid => '272',
+  proname => 'tintervalstart', prorettype => 'abstime',
+  proargtypes => 'tinterval', prosrc => 'tintervalstart' },
+{ oid => '273', descr => 'end of interval',
+  proname => 'tintervalend', prorettype => 'abstime',
+  proargtypes => 'tinterval', prosrc => 'tintervalend' },
+{ oid => '274',
+  descr => 'current date and time - increments during transactions',
+  proname => 'timeofday', provolatile => 'v', prorettype => 'text',
+  proargtypes => '', prosrc => 'timeofday' },
+{ oid => '275', descr => 'finite abstime?',
+  proname => 'isfinite', prorettype => 'bool', proargtypes => 'abstime',
+  prosrc => 'abstime_finite' },
+
+{ oid => '277',
+  proname => 'inter_sl', prorettype => 'bool', proargtypes => 'lseg line',
+  prosrc => 'inter_sl' },
+{ oid => '278',
+  proname => 'inter_lb', prorettype => 'bool', proargtypes => 'line box',
+  prosrc => 'inter_lb' },
+
+{ oid => '279',
+  proname => 'float48mul', prorettype => 'float8',
+  proargtypes => 'float4 float8', prosrc => 'float48mul' },
+{ oid => '280',
+  proname => 'float48div', prorettype => 'float8',
+  proargtypes => 'float4 float8', prosrc => 'float48div' },
+{ oid => '281',
+  proname => 'float48pl', prorettype => 'float8',
+  proargtypes => 'float4 float8', prosrc => 'float48pl' },
+{ oid => '282',
+  proname => 'float48mi', prorettype => 'float8',
+  proargtypes => 'float4 float8', prosrc => 'float48mi' },
+{ oid => '283',
+  proname => 'float84mul', prorettype => 'float8',
+  proargtypes => 'float8 float4', prosrc => 'float84mul' },
+{ oid => '284',
+  proname => 'float84div', prorettype => 'float8',
+  proargtypes => 'float8 float4', prosrc => 'float84div' },
+{ oid => '285',
+  proname => 'float84pl', prorettype => 'float8',
+  proargtypes => 'float8 float4', prosrc => 'float84pl' },
+{ oid => '286',
+  proname => 'float84mi', prorettype => 'float8',
+  proargtypes => 'float8 float4', prosrc => 'float84mi' },
+
+{ oid => '287',
+  proname => 'float4eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float4 float4', prosrc => 'float4eq' },
+{ oid => '288',
+  proname => 'float4ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float4 float4', prosrc => 'float4ne' },
+{ oid => '289',
+  proname => 'float4lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float4 float4', prosrc => 'float4lt' },
+{ oid => '290',
+  proname => 'float4le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float4 float4', prosrc => 'float4le' },
+{ oid => '291',
+  proname => 'float4gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float4 float4', prosrc => 'float4gt' },
+{ oid => '292',
+  proname => 'float4ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float4 float4', prosrc => 'float4ge' },
+
+{ oid => '293',
+  proname => 'float8eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float8 float8', prosrc => 'float8eq' },
+{ oid => '294',
+  proname => 'float8ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float8 float8', prosrc => 'float8ne' },
+{ oid => '295',
+  proname => 'float8lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float8 float8', prosrc => 'float8lt' },
+{ oid => '296',
+  proname => 'float8le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float8 float8', prosrc => 'float8le' },
+{ oid => '297',
+  proname => 'float8gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float8 float8', prosrc => 'float8gt' },
+{ oid => '298',
+  proname => 'float8ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float8 float8', prosrc => 'float8ge' },
+
+{ oid => '299',
+  proname => 'float48eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float4 float8', prosrc => 'float48eq' },
+
+# OIDS 300 - 399
+
+{ oid => '300',
+  proname => 'float48ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float4 float8', prosrc => 'float48ne' },
+{ oid => '301',
+  proname => 'float48lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float4 float8', prosrc => 'float48lt' },
+{ oid => '302',
+  proname => 'float48le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float4 float8', prosrc => 'float48le' },
+{ oid => '303',
+  proname => 'float48gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float4 float8', prosrc => 'float48gt' },
+{ oid => '304',
+  proname => 'float48ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float4 float8', prosrc => 'float48ge' },
+{ oid => '305',
+  proname => 'float84eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float8 float4', prosrc => 'float84eq' },
+{ oid => '306',
+  proname => 'float84ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float8 float4', prosrc => 'float84ne' },
+{ oid => '307',
+  proname => 'float84lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float8 float4', prosrc => 'float84lt' },
+{ oid => '308',
+  proname => 'float84le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float8 float4', prosrc => 'float84le' },
+{ oid => '309',
+  proname => 'float84gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float8 float4', prosrc => 'float84gt' },
+{ oid => '310',
+  proname => 'float84ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'float8 float4', prosrc => 'float84ge' },
+{ oid => '320', descr => 'bucket number of operand in equal-width histogram',
+  proname => 'width_bucket', prorettype => 'int4',
+  proargtypes => 'float8 float8 float8 int4', prosrc => 'width_bucket_float8' },
+
+{ oid => '311', descr => 'convert float4 to float8',
+  proname => 'float8', prorettype => 'float8', proargtypes => 'float4',
+  prosrc => 'ftod' },
+{ oid => '312', descr => 'convert float8 to float4',
+  proname => 'float4', prorettype => 'float4', proargtypes => 'float8',
+  prosrc => 'dtof' },
+{ oid => '313', descr => 'convert int2 to int4',
+  proname => 'int4', prorettype => 'int4', proargtypes => 'int2',
+  prosrc => 'i2toi4' },
+{ oid => '314', descr => 'convert int4 to int2',
+  proname => 'int2', prorettype => 'int2', proargtypes => 'int4',
+  prosrc => 'i4toi2' },
+{ oid => '316', descr => 'convert int4 to float8',
+  proname => 'float8', prorettype => 'float8', proargtypes => 'int4',
+  prosrc => 'i4tod' },
+{ oid => '317', descr => 'convert float8 to int4',
+  proname => 'int4', prorettype => 'int4', proargtypes => 'float8',
+  prosrc => 'dtoi4' },
+{ oid => '318', descr => 'convert int4 to float4',
+  proname => 'float4', prorettype => 'float4', proargtypes => 'int4',
+  prosrc => 'i4tof' },
+{ oid => '319', descr => 'convert float4 to int4',
+  proname => 'int4', prorettype => 'int4', proargtypes => 'float4',
+  prosrc => 'ftoi4' },
+
+# Index access method handlers
+{ oid => '330', descr => 'btree index access method handler',
+  proname => 'bthandler', provolatile => 'v', prorettype => 'index_am_handler',
+  proargtypes => 'internal', prosrc => 'bthandler' },
+{ oid => '331', descr => 'hash index access method handler',
+  proname => 'hashhandler', provolatile => 'v',
+  prorettype => 'index_am_handler', proargtypes => 'internal',
+  prosrc => 'hashhandler' },
+{ oid => '332', descr => 'gist index access method handler',
+  proname => 'gisthandler', provolatile => 'v',
+  prorettype => 'index_am_handler', proargtypes => 'internal',
+  prosrc => 'gisthandler' },
+{ oid => '333', descr => 'gin index access method handler',
+  proname => 'ginhandler', provolatile => 'v', prorettype => 'index_am_handler',
+  proargtypes => 'internal', prosrc => 'ginhandler' },
+{ oid => '334', descr => 'spgist index access method handler',
+  proname => 'spghandler', provolatile => 'v', prorettype => 'index_am_handler',
+  proargtypes => 'internal', prosrc => 'spghandler' },
+{ oid => '335', descr => 'brin index access method handler',
+  proname => 'brinhandler', provolatile => 'v',
+  prorettype => 'index_am_handler', proargtypes => 'internal',
+  prosrc => 'brinhandler' },
+{ oid => '3952', descr => 'brin: standalone scan new table pages',
+  proname => 'brin_summarize_new_values', provolatile => 'v',
+  proparallel => 'u', prorettype => 'int4', proargtypes => 'regclass',
+  prosrc => 'brin_summarize_new_values' },
+{ oid => '3999', descr => 'brin: standalone scan new table pages',
+  proname => 'brin_summarize_range', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int4', proargtypes => 'regclass int8',
+  prosrc => 'brin_summarize_range' },
+{ oid => '4014', descr => 'brin: desummarize page range',
+  proname => 'brin_desummarize_range', provolatile => 'v', proparallel => 'u',
+  prorettype => 'void', proargtypes => 'regclass int8',
+  prosrc => 'brin_desummarize_range' },
+
+{ oid => '338', descr => 'validate an operator class',
+  proname => 'amvalidate', provolatile => 'v', prorettype => 'bool',
+  proargtypes => 'oid', prosrc => 'amvalidate' },
+
+{ oid => '636', descr => 'test property of an index access method',
+  proname => 'pg_indexam_has_property', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid text',
+  prosrc => 'pg_indexam_has_property' },
+{ oid => '637', descr => 'test property of an index',
+  proname => 'pg_index_has_property', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'regclass text', prosrc => 'pg_index_has_property' },
+{ oid => '638', descr => 'test property of an index column',
+  proname => 'pg_index_column_has_property', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'regclass int4 text',
+  prosrc => 'pg_index_column_has_property' },
+
+{ oid => '339',
+  proname => 'poly_same', prorettype => 'bool',
+  proargtypes => 'polygon polygon', prosrc => 'poly_same' },
+{ oid => '340',
+  proname => 'poly_contain', prorettype => 'bool',
+  proargtypes => 'polygon polygon', prosrc => 'poly_contain' },
+{ oid => '341',
+  proname => 'poly_left', prorettype => 'bool',
+  proargtypes => 'polygon polygon', prosrc => 'poly_left' },
+{ oid => '342',
+  proname => 'poly_overleft', prorettype => 'bool',
+  proargtypes => 'polygon polygon', prosrc => 'poly_overleft' },
+{ oid => '343',
+  proname => 'poly_overright', prorettype => 'bool',
+  proargtypes => 'polygon polygon', prosrc => 'poly_overright' },
+{ oid => '344',
+  proname => 'poly_right', prorettype => 'bool',
+  proargtypes => 'polygon polygon', prosrc => 'poly_right' },
+{ oid => '345',
+  proname => 'poly_contained', prorettype => 'bool',
+  proargtypes => 'polygon polygon', prosrc => 'poly_contained' },
+{ oid => '346',
+  proname => 'poly_overlap', prorettype => 'bool',
+  proargtypes => 'polygon polygon', prosrc => 'poly_overlap' },
+{ oid => '347', descr => 'I/O',
+  proname => 'poly_in', prorettype => 'polygon', proargtypes => 'cstring',
+  prosrc => 'poly_in' },
+{ oid => '348', descr => 'I/O',
+  proname => 'poly_out', prorettype => 'cstring', proargtypes => 'polygon',
+  prosrc => 'poly_out' },
+
+{ oid => '350', descr => 'less-equal-greater',
+  proname => 'btint2cmp', prorettype => 'int4', proargtypes => 'int2 int2',
+  prosrc => 'btint2cmp' },
+{ oid => '3129', descr => 'sort support',
+  proname => 'btint2sortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'btint2sortsupport' },
+{ oid => '351', descr => 'less-equal-greater',
+  proname => 'btint4cmp', prorettype => 'int4', proargtypes => 'int4 int4',
+  prosrc => 'btint4cmp' },
+{ oid => '3130', descr => 'sort support',
+  proname => 'btint4sortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'btint4sortsupport' },
+{ oid => '842', descr => 'less-equal-greater',
+  proname => 'btint8cmp', prorettype => 'int4', proargtypes => 'int8 int8',
+  prosrc => 'btint8cmp' },
+{ oid => '3131', descr => 'sort support',
+  proname => 'btint8sortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'btint8sortsupport' },
+{ oid => '354', descr => 'less-equal-greater',
+  proname => 'btfloat4cmp', prorettype => 'int4',
+  proargtypes => 'float4 float4', prosrc => 'btfloat4cmp' },
+{ oid => '3132', descr => 'sort support',
+  proname => 'btfloat4sortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'btfloat4sortsupport' },
+{ oid => '355', descr => 'less-equal-greater',
+  proname => 'btfloat8cmp', prorettype => 'int4',
+  proargtypes => 'float8 float8', prosrc => 'btfloat8cmp' },
+{ oid => '3133', descr => 'sort support',
+  proname => 'btfloat8sortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'btfloat8sortsupport' },
+{ oid => '356', descr => 'less-equal-greater',
+  proname => 'btoidcmp', prorettype => 'int4', proargtypes => 'oid oid',
+  prosrc => 'btoidcmp' },
+{ oid => '3134', descr => 'sort support',
+  proname => 'btoidsortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'btoidsortsupport' },
+{ oid => '404', descr => 'less-equal-greater',
+  proname => 'btoidvectorcmp', prorettype => 'int4',
+  proargtypes => 'oidvector oidvector', prosrc => 'btoidvectorcmp' },
+{ oid => '357', descr => 'less-equal-greater',
+  proname => 'btabstimecmp', prorettype => 'int4',
+  proargtypes => 'abstime abstime', prosrc => 'btabstimecmp' },
+{ oid => '358', descr => 'less-equal-greater',
+  proname => 'btcharcmp', prorettype => 'int4', proargtypes => 'char char',
+  prosrc => 'btcharcmp' },
+{ oid => '359', descr => 'less-equal-greater',
+  proname => 'btnamecmp', prorettype => 'int4', proargtypes => 'name name',
+  prosrc => 'btnamecmp' },
+{ oid => '3135', descr => 'sort support',
+  proname => 'btnamesortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'btnamesortsupport' },
+{ oid => '360', descr => 'less-equal-greater',
+  proname => 'bttextcmp', prorettype => 'int4', proargtypes => 'text text',
+  prosrc => 'bttextcmp' },
+{ oid => '3255', descr => 'sort support',
+  proname => 'bttextsortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'bttextsortsupport' },
+{ oid => '377', descr => 'less-equal-greater',
+  proname => 'cash_cmp', prorettype => 'int4', proargtypes => 'money money',
+  prosrc => 'cash_cmp' },
+{ oid => '380', descr => 'less-equal-greater',
+  proname => 'btreltimecmp', prorettype => 'int4',
+  proargtypes => 'reltime reltime', prosrc => 'btreltimecmp' },
+{ oid => '381', descr => 'less-equal-greater',
+  proname => 'bttintervalcmp', prorettype => 'int4',
+  proargtypes => 'tinterval tinterval', prosrc => 'bttintervalcmp' },
+{ oid => '382', descr => 'less-equal-greater',
+  proname => 'btarraycmp', prorettype => 'int4',
+  proargtypes => 'anyarray anyarray', prosrc => 'btarraycmp' },
+{ oid => '4126', descr => 'window RANGE support',
+  proname => 'in_range', prorettype => 'bool',
+  proargtypes => 'int8 int8 int8 bool bool', prosrc => 'in_range_int8_int8' },
+{ oid => '4127', descr => 'window RANGE support',
+  proname => 'in_range', prorettype => 'bool',
+  proargtypes => 'int4 int4 int8 bool bool', prosrc => 'in_range_int4_int8' },
+{ oid => '4128', descr => 'window RANGE support',
+  proname => 'in_range', prorettype => 'bool',
+  proargtypes => 'int4 int4 int4 bool bool', prosrc => 'in_range_int4_int4' },
+{ oid => '4129', descr => 'window RANGE support',
+  proname => 'in_range', prorettype => 'bool',
+  proargtypes => 'int4 int4 int2 bool bool', prosrc => 'in_range_int4_int2' },
+{ oid => '4130', descr => 'window RANGE support',
+  proname => 'in_range', prorettype => 'bool',
+  proargtypes => 'int2 int2 int8 bool bool', prosrc => 'in_range_int2_int8' },
+{ oid => '4131', descr => 'window RANGE support',
+  proname => 'in_range', prorettype => 'bool',
+  proargtypes => 'int2 int2 int4 bool bool', prosrc => 'in_range_int2_int4' },
+{ oid => '4132', descr => 'window RANGE support',
+  proname => 'in_range', prorettype => 'bool',
+  proargtypes => 'int2 int2 int2 bool bool', prosrc => 'in_range_int2_int2' },
+{ oid => '4139', descr => 'window RANGE support',
+  proname => 'in_range', prorettype => 'bool',
+  proargtypes => 'float8 float8 float8 bool bool',
+  prosrc => 'in_range_float8_float8' },
+{ oid => '4140', descr => 'window RANGE support',
+  proname => 'in_range', prorettype => 'bool',
+  proargtypes => 'float4 float4 float8 bool bool',
+  prosrc => 'in_range_float4_float8' },
+{ oid => '4141', descr => 'window RANGE support',
+  proname => 'in_range', prorettype => 'bool',
+  proargtypes => 'numeric numeric numeric bool bool',
+  prosrc => 'in_range_numeric_numeric' },
+
+{ oid => '361',
+  proname => 'lseg_distance', prorettype => 'float8',
+  proargtypes => 'lseg lseg', prosrc => 'lseg_distance' },
+{ oid => '362',
+  proname => 'lseg_interpt', prorettype => 'point', proargtypes => 'lseg lseg',
+  prosrc => 'lseg_interpt' },
+{ oid => '363',
+  proname => 'dist_ps', prorettype => 'float8', proargtypes => 'point lseg',
+  prosrc => 'dist_ps' },
+{ oid => '364',
+  proname => 'dist_pb', prorettype => 'float8', proargtypes => 'point box',
+  prosrc => 'dist_pb' },
+{ oid => '365',
+  proname => 'dist_sb', prorettype => 'float8', proargtypes => 'lseg box',
+  prosrc => 'dist_sb' },
+{ oid => '366',
+  proname => 'close_ps', prorettype => 'point', proargtypes => 'point lseg',
+  prosrc => 'close_ps' },
+{ oid => '367',
+  proname => 'close_pb', prorettype => 'point', proargtypes => 'point box',
+  prosrc => 'close_pb' },
+{ oid => '368',
+  proname => 'close_sb', prorettype => 'point', proargtypes => 'lseg box',
+  prosrc => 'close_sb' },
+{ oid => '369',
+  proname => 'on_ps', prorettype => 'bool', proargtypes => 'point lseg',
+  prosrc => 'on_ps' },
+{ oid => '370',
+  proname => 'path_distance', prorettype => 'float8',
+  proargtypes => 'path path', prosrc => 'path_distance' },
+{ oid => '371',
+  proname => 'dist_ppath', prorettype => 'float8', proargtypes => 'point path',
+  prosrc => 'dist_ppath' },
+{ oid => '372',
+  proname => 'on_sb', prorettype => 'bool', proargtypes => 'lseg box',
+  prosrc => 'on_sb' },
+{ oid => '373',
+  proname => 'inter_sb', prorettype => 'bool', proargtypes => 'lseg box',
+  prosrc => 'inter_sb' },
+
+# OIDS 400 - 499
+
+{ oid => '401', descr => 'convert char(n) to text',
+  proname => 'text', prorettype => 'text', proargtypes => 'bpchar',
+  prosrc => 'rtrim1' },
+{ oid => '406', descr => 'convert name to text',
+  proname => 'text', prorettype => 'text', proargtypes => 'name',
+  prosrc => 'name_text' },
+{ oid => '407', descr => 'convert text to name',
+  proname => 'name', prorettype => 'name', proargtypes => 'text',
+  prosrc => 'text_name' },
+{ oid => '408', descr => 'convert name to char(n)',
+  proname => 'bpchar', prorettype => 'bpchar', proargtypes => 'name',
+  prosrc => 'name_bpchar' },
+{ oid => '409', descr => 'convert char(n) to name',
+  proname => 'name', prorettype => 'name', proargtypes => 'bpchar',
+  prosrc => 'bpchar_name' },
+
+{ oid => '449', descr => 'hash',
+  proname => 'hashint2', prorettype => 'int4', proargtypes => 'int2',
+  prosrc => 'hashint2' },
+{ oid => '441', descr => 'hash',
+  proname => 'hashint2extended', prorettype => 'int8',
+  proargtypes => 'int2 int8', prosrc => 'hashint2extended' },
+{ oid => '450', descr => 'hash',
+  proname => 'hashint4', prorettype => 'int4', proargtypes => 'int4',
+  prosrc => 'hashint4' },
+{ oid => '425', descr => 'hash',
+  proname => 'hashint4extended', prorettype => 'int8',
+  proargtypes => 'int4 int8', prosrc => 'hashint4extended' },
+{ oid => '949', descr => 'hash',
+  proname => 'hashint8', prorettype => 'int4', proargtypes => 'int8',
+  prosrc => 'hashint8' },
+{ oid => '442', descr => 'hash',
+  proname => 'hashint8extended', prorettype => 'int8',
+  proargtypes => 'int8 int8', prosrc => 'hashint8extended' },
+{ oid => '451', descr => 'hash',
+  proname => 'hashfloat4', prorettype => 'int4', proargtypes => 'float4',
+  prosrc => 'hashfloat4' },
+{ oid => '443', descr => 'hash',
+  proname => 'hashfloat4extended', prorettype => 'int8',
+  proargtypes => 'float4 int8', prosrc => 'hashfloat4extended' },
+{ oid => '452', descr => 'hash',
+  proname => 'hashfloat8', prorettype => 'int4', proargtypes => 'float8',
+  prosrc => 'hashfloat8' },
+{ oid => '444', descr => 'hash',
+  proname => 'hashfloat8extended', prorettype => 'int8',
+  proargtypes => 'float8 int8', prosrc => 'hashfloat8extended' },
+{ oid => '453', descr => 'hash',
+  proname => 'hashoid', prorettype => 'int4', proargtypes => 'oid',
+  prosrc => 'hashoid' },
+{ oid => '445', descr => 'hash',
+  proname => 'hashoidextended', prorettype => 'int8', proargtypes => 'oid int8',
+  prosrc => 'hashoidextended' },
+{ oid => '454', descr => 'hash',
+  proname => 'hashchar', prorettype => 'int4', proargtypes => 'char',
+  prosrc => 'hashchar' },
+{ oid => '446', descr => 'hash',
+  proname => 'hashcharextended', prorettype => 'int8',
+  proargtypes => 'char int8', prosrc => 'hashcharextended' },
+{ oid => '455', descr => 'hash',
+  proname => 'hashname', prorettype => 'int4', proargtypes => 'name',
+  prosrc => 'hashname' },
+{ oid => '447', descr => 'hash',
+  proname => 'hashnameextended', prorettype => 'int8',
+  proargtypes => 'name int8', prosrc => 'hashnameextended' },
+{ oid => '400', descr => 'hash',
+  proname => 'hashtext', prorettype => 'int4', proargtypes => 'text',
+  prosrc => 'hashtext' },
+{ oid => '448', descr => 'hash',
+  proname => 'hashtextextended', prorettype => 'int8',
+  proargtypes => 'text int8', prosrc => 'hashtextextended' },
+{ oid => '456', descr => 'hash',
+  proname => 'hashvarlena', prorettype => 'int4', proargtypes => 'internal',
+  prosrc => 'hashvarlena' },
+{ oid => '772', descr => 'hash',
+  proname => 'hashvarlenaextended', prorettype => 'int8',
+  proargtypes => 'internal int8', prosrc => 'hashvarlenaextended' },
+{ oid => '457', descr => 'hash',
+  proname => 'hashoidvector', prorettype => 'int4', proargtypes => 'oidvector',
+  prosrc => 'hashoidvector' },
+{ oid => '776', descr => 'hash',
+  proname => 'hashoidvectorextended', prorettype => 'int8',
+  proargtypes => 'oidvector int8', prosrc => 'hashoidvectorextended' },
+{ oid => '329', descr => 'hash',
+  proname => 'hash_aclitem', prorettype => 'int4', proargtypes => 'aclitem',
+  prosrc => 'hash_aclitem' },
+{ oid => '777', descr => 'hash',
+  proname => 'hash_aclitem_extended', prorettype => 'int8',
+  proargtypes => 'aclitem int8', prosrc => 'hash_aclitem_extended' },
+{ oid => '399', descr => 'hash',
+  proname => 'hashmacaddr', prorettype => 'int4', proargtypes => 'macaddr',
+  prosrc => 'hashmacaddr' },
+{ oid => '778', descr => 'hash',
+  proname => 'hashmacaddrextended', prorettype => 'int8',
+  proargtypes => 'macaddr int8', prosrc => 'hashmacaddrextended' },
+{ oid => '422', descr => 'hash',
+  proname => 'hashinet', prorettype => 'int4', proargtypes => 'inet',
+  prosrc => 'hashinet' },
+{ oid => '779', descr => 'hash',
+  proname => 'hashinetextended', prorettype => 'int8',
+  proargtypes => 'inet int8', prosrc => 'hashinetextended' },
+{ oid => '432', descr => 'hash',
+  proname => 'hash_numeric', prorettype => 'int4', proargtypes => 'numeric',
+  prosrc => 'hash_numeric' },
+{ oid => '780', descr => 'hash',
+  proname => 'hash_numeric_extended', prorettype => 'int8',
+  proargtypes => 'numeric int8', prosrc => 'hash_numeric_extended' },
+{ oid => '328', descr => 'hash',
+  proname => 'hashmacaddr8', prorettype => 'int4', proargtypes => 'macaddr8',
+  prosrc => 'hashmacaddr8' },
+{ oid => '781', descr => 'hash',
+  proname => 'hashmacaddr8extended', prorettype => 'int8',
+  proargtypes => 'macaddr8 int8', prosrc => 'hashmacaddr8extended' },
+
+{ oid => '438', descr => 'count the number of NULL arguments',
+  proname => 'num_nulls', provariadic => 'any', proisstrict => 'f',
+  prorettype => 'int4', proargtypes => 'any', proallargtypes => '{any}',
+  proargmodes => '{v}', prosrc => 'pg_num_nulls' },
+{ oid => '440', descr => 'count the number of non-NULL arguments',
+  proname => 'num_nonnulls', provariadic => 'any', proisstrict => 'f',
+  prorettype => 'int4', proargtypes => 'any', proallargtypes => '{any}',
+  proargmodes => '{v}', prosrc => 'pg_num_nonnulls' },
+
+{ oid => '458', descr => 'larger of two',
+  proname => 'text_larger', prorettype => 'text', proargtypes => 'text text',
+  prosrc => 'text_larger' },
+{ oid => '459', descr => 'smaller of two',
+  proname => 'text_smaller', prorettype => 'text', proargtypes => 'text text',
+  prosrc => 'text_smaller' },
+
+{ oid => '460', descr => 'I/O',
+  proname => 'int8in', prorettype => 'int8', proargtypes => 'cstring',
+  prosrc => 'int8in' },
+{ oid => '461', descr => 'I/O',
+  proname => 'int8out', prorettype => 'cstring', proargtypes => 'int8',
+  prosrc => 'int8out' },
+{ oid => '462',
+  proname => 'int8um', prorettype => 'int8', proargtypes => 'int8',
+  prosrc => 'int8um' },
+{ oid => '463',
+  proname => 'int8pl', prorettype => 'int8', proargtypes => 'int8 int8',
+  prosrc => 'int8pl' },
+{ oid => '464',
+  proname => 'int8mi', prorettype => 'int8', proargtypes => 'int8 int8',
+  prosrc => 'int8mi' },
+{ oid => '465',
+  proname => 'int8mul', prorettype => 'int8', proargtypes => 'int8 int8',
+  prosrc => 'int8mul' },
+{ oid => '466',
+  proname => 'int8div', prorettype => 'int8', proargtypes => 'int8 int8',
+  prosrc => 'int8div' },
+{ oid => '467',
+  proname => 'int8eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int8', prosrc => 'int8eq' },
+{ oid => '468',
+  proname => 'int8ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int8', prosrc => 'int8ne' },
+{ oid => '469',
+  proname => 'int8lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int8', prosrc => 'int8lt' },
+{ oid => '470',
+  proname => 'int8gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int8', prosrc => 'int8gt' },
+{ oid => '471',
+  proname => 'int8le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int8', prosrc => 'int8le' },
+{ oid => '472',
+  proname => 'int8ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int8', prosrc => 'int8ge' },
+
+{ oid => '474',
+  proname => 'int84eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int4', prosrc => 'int84eq' },
+{ oid => '475',
+  proname => 'int84ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int4', prosrc => 'int84ne' },
+{ oid => '476',
+  proname => 'int84lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int4', prosrc => 'int84lt' },
+{ oid => '477',
+  proname => 'int84gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int4', prosrc => 'int84gt' },
+{ oid => '478',
+  proname => 'int84le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int4', prosrc => 'int84le' },
+{ oid => '479',
+  proname => 'int84ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int4', prosrc => 'int84ge' },
+
+{ oid => '480', descr => 'convert int8 to int4',
+  proname => 'int4', prorettype => 'int4', proargtypes => 'int8',
+  prosrc => 'int84' },
+{ oid => '481', descr => 'convert int4 to int8',
+  proname => 'int8', prorettype => 'int8', proargtypes => 'int4',
+  prosrc => 'int48' },
+{ oid => '482', descr => 'convert int8 to float8',
+  proname => 'float8', prorettype => 'float8', proargtypes => 'int8',
+  prosrc => 'i8tod' },
+{ oid => '483', descr => 'convert float8 to int8',
+  proname => 'int8', prorettype => 'int8', proargtypes => 'float8',
+  prosrc => 'dtoi8' },
+
+# OIDS 500 - 599
+
+# OIDS 600 - 699
+
+{ oid => '626', descr => 'hash',
+  proname => 'hash_array', prorettype => 'int4', proargtypes => 'anyarray',
+  prosrc => 'hash_array' },
+{ oid => '782', descr => 'hash',
+  proname => 'hash_array_extended', prorettype => 'int8',
+  proargtypes => 'anyarray int8', prosrc => 'hash_array_extended' },
+
+{ oid => '652', descr => 'convert int8 to float4',
+  proname => 'float4', prorettype => 'float4', proargtypes => 'int8',
+  prosrc => 'i8tof' },
+{ oid => '653', descr => 'convert float4 to int8',
+  proname => 'int8', prorettype => 'int8', proargtypes => 'float4',
+  prosrc => 'ftoi8' },
+
+{ oid => '714', descr => 'convert int8 to int2',
+  proname => 'int2', prorettype => 'int2', proargtypes => 'int8',
+  prosrc => 'int82' },
+{ oid => '754', descr => 'convert int2 to int8',
+  proname => 'int8', prorettype => 'int8', proargtypes => 'int2',
+  prosrc => 'int28' },
+
+{ oid => '655',
+  proname => 'namelt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'name name', prosrc => 'namelt' },
+{ oid => '656',
+  proname => 'namele', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'name name', prosrc => 'namele' },
+{ oid => '657',
+  proname => 'namegt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'name name', prosrc => 'namegt' },
+{ oid => '658',
+  proname => 'namege', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'name name', prosrc => 'namege' },
+{ oid => '659',
+  proname => 'namene', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'name name', prosrc => 'namene' },
+
+{ oid => '668', descr => 'adjust char() to typmod length',
+  proname => 'bpchar', prorettype => 'bpchar',
+  proargtypes => 'bpchar int4 bool', prosrc => 'bpchar' },
+{ oid => '3097', descr => 'transform a varchar length coercion',
+  proname => 'varchar_transform', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'varchar_transform' },
+{ oid => '669', descr => 'adjust varchar() to typmod length',
+  proname => 'varchar', protransform => 'varchar_transform',
+  prorettype => 'varchar', proargtypes => 'varchar int4 bool',
+  prosrc => 'varchar' },
+
+{ oid => '676',
+  proname => 'mktinterval', prorettype => 'tinterval',
+  proargtypes => 'abstime abstime', prosrc => 'mktinterval' },
+
+{ oid => '619',
+  proname => 'oidvectorne', prorettype => 'bool',
+  proargtypes => 'oidvector oidvector', prosrc => 'oidvectorne' },
+{ oid => '677',
+  proname => 'oidvectorlt', prorettype => 'bool',
+  proargtypes => 'oidvector oidvector', prosrc => 'oidvectorlt' },
+{ oid => '678',
+  proname => 'oidvectorle', prorettype => 'bool',
+  proargtypes => 'oidvector oidvector', prosrc => 'oidvectorle' },
+{ oid => '679',
+  proname => 'oidvectoreq', prorettype => 'bool',
+  proargtypes => 'oidvector oidvector', prosrc => 'oidvectoreq' },
+{ oid => '680',
+  proname => 'oidvectorge', prorettype => 'bool',
+  proargtypes => 'oidvector oidvector', prosrc => 'oidvectorge' },
+{ oid => '681',
+  proname => 'oidvectorgt', prorettype => 'bool',
+  proargtypes => 'oidvector oidvector', prosrc => 'oidvectorgt' },
+
+# OIDS 700 - 799
+{ oid => '710', descr => 'deprecated, use current_user instead',
+  proname => 'getpgusername', provolatile => 's', prorettype => 'name',
+  proargtypes => '', prosrc => 'current_user' },
+{ oid => '716',
+  proname => 'oidlt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'oid oid', prosrc => 'oidlt' },
+{ oid => '717',
+  proname => 'oidle', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'oid oid', prosrc => 'oidle' },
+
+{ oid => '720', descr => 'octet length',
+  proname => 'octet_length', prorettype => 'int4', proargtypes => 'bytea',
+  prosrc => 'byteaoctetlen' },
+{ oid => '721', descr => 'get byte',
+  proname => 'get_byte', prorettype => 'int4', proargtypes => 'bytea int4',
+  prosrc => 'byteaGetByte' },
+{ oid => '722', descr => 'set byte',
+  proname => 'set_byte', prorettype => 'bytea',
+  proargtypes => 'bytea int4 int4', prosrc => 'byteaSetByte' },
+{ oid => '723', descr => 'get bit',
+  proname => 'get_bit', prorettype => 'int4', proargtypes => 'bytea int4',
+  prosrc => 'byteaGetBit' },
+{ oid => '724', descr => 'set bit',
+  proname => 'set_bit', prorettype => 'bytea', proargtypes => 'bytea int4 int4',
+  prosrc => 'byteaSetBit' },
+{ oid => '749', descr => 'substitute portion of string',
+  proname => 'overlay', prorettype => 'bytea',
+  proargtypes => 'bytea bytea int4 int4', prosrc => 'byteaoverlay' },
+{ oid => '752', descr => 'substitute portion of string',
+  proname => 'overlay', prorettype => 'bytea',
+  proargtypes => 'bytea bytea int4', prosrc => 'byteaoverlay_no_len' },
+
+{ oid => '725',
+  proname => 'dist_pl', prorettype => 'float8', proargtypes => 'point line',
+  prosrc => 'dist_pl' },
+{ oid => '726',
+  proname => 'dist_lb', prorettype => 'float8', proargtypes => 'line box',
+  prosrc => 'dist_lb' },
+{ oid => '727',
+  proname => 'dist_sl', prorettype => 'float8', proargtypes => 'lseg line',
+  prosrc => 'dist_sl' },
+{ oid => '728',
+  proname => 'dist_cpoly', prorettype => 'float8',
+  proargtypes => 'circle polygon', prosrc => 'dist_cpoly' },
+{ oid => '729',
+  proname => 'poly_distance', prorettype => 'float8',
+  proargtypes => 'polygon polygon', prosrc => 'poly_distance' },
+{ oid => '3275',
+  proname => 'dist_ppoly', prorettype => 'float8',
+  proargtypes => 'point polygon', prosrc => 'dist_ppoly' },
+{ oid => '3292',
+  proname => 'dist_polyp', prorettype => 'float8',
+  proargtypes => 'polygon point', prosrc => 'dist_polyp' },
+{ oid => '3290',
+  proname => 'dist_cpoint', prorettype => 'float8',
+  proargtypes => 'circle point', prosrc => 'dist_cpoint' },
+
+{ oid => '740',
+  proname => 'text_lt', prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'text_lt' },
+{ oid => '741',
+  proname => 'text_le', prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'text_le' },
+{ oid => '742',
+  proname => 'text_gt', prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'text_gt' },
+{ oid => '743',
+  proname => 'text_ge', prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'text_ge' },
+
+{ oid => '745', descr => 'current user name',
+  proname => 'current_user', provolatile => 's', prorettype => 'name',
+  proargtypes => '', prosrc => 'current_user' },
+{ oid => '746', descr => 'session user name',
+  proname => 'session_user', provolatile => 's', prorettype => 'name',
+  proargtypes => '', prosrc => 'session_user' },
+
+{ oid => '744',
+  proname => 'array_eq', prorettype => 'bool',
+  proargtypes => 'anyarray anyarray', prosrc => 'array_eq' },
+{ oid => '390',
+  proname => 'array_ne', prorettype => 'bool',
+  proargtypes => 'anyarray anyarray', prosrc => 'array_ne' },
+{ oid => '391',
+  proname => 'array_lt', prorettype => 'bool',
+  proargtypes => 'anyarray anyarray', prosrc => 'array_lt' },
+{ oid => '392',
+  proname => 'array_gt', prorettype => 'bool',
+  proargtypes => 'anyarray anyarray', prosrc => 'array_gt' },
+{ oid => '393',
+  proname => 'array_le', prorettype => 'bool',
+  proargtypes => 'anyarray anyarray', prosrc => 'array_le' },
+{ oid => '396',
+  proname => 'array_ge', prorettype => 'bool',
+  proargtypes => 'anyarray anyarray', prosrc => 'array_ge' },
+{ oid => '747', descr => 'array dimensions',
+  proname => 'array_dims', prorettype => 'text', proargtypes => 'anyarray',
+  prosrc => 'array_dims' },
+{ oid => '748', descr => 'number of array dimensions',
+  proname => 'array_ndims', prorettype => 'int4', proargtypes => 'anyarray',
+  prosrc => 'array_ndims' },
+{ oid => '750', descr => 'I/O',
+  proname => 'array_in', provolatile => 's', prorettype => 'anyarray',
+  proargtypes => 'cstring oid int4', prosrc => 'array_in' },
+{ oid => '751', descr => 'I/O',
+  proname => 'array_out', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'anyarray', prosrc => 'array_out' },
+{ oid => '2091', descr => 'array lower dimension',
+  proname => 'array_lower', prorettype => 'int4',
+  proargtypes => 'anyarray int4', prosrc => 'array_lower' },
+{ oid => '2092', descr => 'array upper dimension',
+  proname => 'array_upper', prorettype => 'int4',
+  proargtypes => 'anyarray int4', prosrc => 'array_upper' },
+{ oid => '2176', descr => 'array length',
+  proname => 'array_length', prorettype => 'int4',
+  proargtypes => 'anyarray int4', prosrc => 'array_length' },
+{ oid => '3179', descr => 'array cardinality',
+  proname => 'cardinality', prorettype => 'int4', proargtypes => 'anyarray',
+  prosrc => 'array_cardinality' },
+{ oid => '378', descr => 'append element onto end of array',
+  proname => 'array_append', proisstrict => 'f', prorettype => 'anyarray',
+  proargtypes => 'anyarray anyelement', prosrc => 'array_append' },
+{ oid => '379', descr => 'prepend element onto front of array',
+  proname => 'array_prepend', proisstrict => 'f', prorettype => 'anyarray',
+  proargtypes => 'anyelement anyarray', prosrc => 'array_prepend' },
+{ oid => '383',
+  proname => 'array_cat', proisstrict => 'f', prorettype => 'anyarray',
+  proargtypes => 'anyarray anyarray', prosrc => 'array_cat' },
+{ oid => '394', descr => 'split delimited text into text[]',
+  proname => 'string_to_array', proisstrict => 'f', prorettype => '_text',
+  proargtypes => 'text text', prosrc => 'text_to_array' },
+{ oid => '395',
+  descr => 'concatenate array elements, using delimiter, into text',
+  proname => 'array_to_string', provolatile => 's', prorettype => 'text',
+  proargtypes => 'anyarray text', prosrc => 'array_to_text' },
+{ oid => '376', descr => 'split delimited text into text[], with null string',
+  proname => 'string_to_array', proisstrict => 'f', prorettype => '_text',
+  proargtypes => 'text text text', prosrc => 'text_to_array_null' },
+{ oid => '384',
+  descr => 'concatenate array elements, using delimiter and null string, into text',
+  proname => 'array_to_string', proisstrict => 'f', provolatile => 's',
+  prorettype => 'text', proargtypes => 'anyarray text text',
+  prosrc => 'array_to_text_null' },
+{ oid => '515', descr => 'larger of two',
+  proname => 'array_larger', prorettype => 'anyarray',
+  proargtypes => 'anyarray anyarray', prosrc => 'array_larger' },
+{ oid => '516', descr => 'smaller of two',
+  proname => 'array_smaller', prorettype => 'anyarray',
+  proargtypes => 'anyarray anyarray', prosrc => 'array_smaller' },
+{ oid => '3277', descr => 'returns an offset of value in array',
+  proname => 'array_position', proisstrict => 'f', prorettype => 'int4',
+  proargtypes => 'anyarray anyelement', prosrc => 'array_position' },
+{ oid => '3278',
+  descr => 'returns an offset of value in array with start index',
+  proname => 'array_position', proisstrict => 'f', prorettype => 'int4',
+  proargtypes => 'anyarray anyelement int4', prosrc => 'array_position_start' },
+{ oid => '3279',
+  descr => 'returns an array of offsets of some value in array',
+  proname => 'array_positions', proisstrict => 'f', prorettype => '_int4',
+  proargtypes => 'anyarray anyelement', prosrc => 'array_positions' },
+{ oid => '1191', descr => 'array subscripts generator',
+  proname => 'generate_subscripts', prorows => '1000', proretset => 't',
+  prorettype => 'int4', proargtypes => 'anyarray int4 bool',
+  prosrc => 'generate_subscripts' },
+{ oid => '1192', descr => 'array subscripts generator',
+  proname => 'generate_subscripts', prorows => '1000', proretset => 't',
+  prorettype => 'int4', proargtypes => 'anyarray int4',
+  prosrc => 'generate_subscripts_nodir' },
+{ oid => '1193', descr => 'array constructor with value',
+  proname => 'array_fill', proisstrict => 'f', prorettype => 'anyarray',
+  proargtypes => 'anyelement _int4', prosrc => 'array_fill' },
+{ oid => '1286', descr => 'array constructor with value',
+  proname => 'array_fill', proisstrict => 'f', prorettype => 'anyarray',
+  proargtypes => 'anyelement _int4 _int4',
+  prosrc => 'array_fill_with_lower_bounds' },
+{ oid => '2331', descr => 'expand array to set of rows',
+  proname => 'unnest', prorows => '100', proretset => 't',
+  prorettype => 'anyelement', proargtypes => 'anyarray',
+  prosrc => 'array_unnest' },
+{ oid => '3167',
+  descr => 'remove any occurrences of an element from an array',
+  proname => 'array_remove', proisstrict => 'f', prorettype => 'anyarray',
+  proargtypes => 'anyarray anyelement', prosrc => 'array_remove' },
+{ oid => '3168', descr => 'replace any occurrences of an element in an array',
+  proname => 'array_replace', proisstrict => 'f', prorettype => 'anyarray',
+  proargtypes => 'anyarray anyelement anyelement', prosrc => 'array_replace' },
+{ oid => '2333', descr => 'aggregate transition function',
+  proname => 'array_agg_transfn', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal anynonarray', prosrc => 'array_agg_transfn' },
+{ oid => '2334', descr => 'aggregate final function',
+  proname => 'array_agg_finalfn', proisstrict => 'f', prorettype => 'anyarray',
+  proargtypes => 'internal anynonarray', prosrc => 'array_agg_finalfn' },
+{ oid => '2335', descr => 'concatenate aggregate input into an array',
+  proname => 'array_agg', prokind => 'a', proisstrict => 'f',
+  prorettype => 'anyarray', proargtypes => 'anynonarray',
+  prosrc => 'aggregate_dummy' },
+{ oid => '4051', descr => 'aggregate transition function',
+  proname => 'array_agg_array_transfn', proisstrict => 'f',
+  prorettype => 'internal', proargtypes => 'internal anyarray',
+  prosrc => 'array_agg_array_transfn' },
+{ oid => '4052', descr => 'aggregate final function',
+  proname => 'array_agg_array_finalfn', proisstrict => 'f',
+  prorettype => 'anyarray', proargtypes => 'internal anyarray',
+  prosrc => 'array_agg_array_finalfn' },
+{ oid => '4053', descr => 'concatenate aggregate input into an array',
+  proname => 'array_agg', prokind => 'a', proisstrict => 'f',
+  prorettype => 'anyarray', proargtypes => 'anyarray',
+  prosrc => 'aggregate_dummy' },
+{ oid => '3218',
+  descr => 'bucket number of operand given a sorted array of bucket lower bounds',
+  proname => 'width_bucket', prorettype => 'int4',
+  proargtypes => 'anyelement anyarray', prosrc => 'width_bucket_array' },
+{ oid => '3816', descr => 'array typanalyze',
+  proname => 'array_typanalyze', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'internal', prosrc => 'array_typanalyze' },
+{ oid => '3817',
+  descr => 'restriction selectivity for array-containment operators',
+  proname => 'arraycontsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'arraycontsel' },
+{ oid => '3818', descr => 'join selectivity for array-containment operators',
+  proname => 'arraycontjoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'arraycontjoinsel' },
+
+{ oid => '760', descr => 'I/O',
+  proname => 'smgrin', provolatile => 's', prorettype => 'smgr',
+  proargtypes => 'cstring', prosrc => 'smgrin' },
+{ oid => '761', descr => 'I/O',
+  proname => 'smgrout', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'smgr', prosrc => 'smgrout' },
+{ oid => '762', descr => 'storage manager',
+  proname => 'smgreq', prorettype => 'bool', proargtypes => 'smgr smgr',
+  prosrc => 'smgreq' },
+{ oid => '763', descr => 'storage manager',
+  proname => 'smgrne', prorettype => 'bool', proargtypes => 'smgr smgr',
+  prosrc => 'smgrne' },
+
+{ oid => '764', descr => 'large object import',
+  proname => 'lo_import', provolatile => 'v', proparallel => 'u',
+  prorettype => 'oid', proargtypes => 'text', prosrc => 'be_lo_import' },
+{ oid => '767', descr => 'large object import',
+  proname => 'lo_import', provolatile => 'v', proparallel => 'u',
+  prorettype => 'oid', proargtypes => 'text oid',
+  prosrc => 'be_lo_import_with_oid' },
+{ oid => '765', descr => 'large object export',
+  proname => 'lo_export', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int4', proargtypes => 'oid text', prosrc => 'be_lo_export' },
+
+{ oid => '766', descr => 'increment',
+  proname => 'int4inc', prorettype => 'int4', proargtypes => 'int4',
+  prosrc => 'int4inc' },
+{ oid => '768', descr => 'larger of two',
+  proname => 'int4larger', prorettype => 'int4', proargtypes => 'int4 int4',
+  prosrc => 'int4larger' },
+{ oid => '769', descr => 'smaller of two',
+  proname => 'int4smaller', prorettype => 'int4', proargtypes => 'int4 int4',
+  prosrc => 'int4smaller' },
+{ oid => '770', descr => 'larger of two',
+  proname => 'int2larger', prorettype => 'int2', proargtypes => 'int2 int2',
+  prosrc => 'int2larger' },
+{ oid => '771', descr => 'smaller of two',
+  proname => 'int2smaller', prorettype => 'int2', proargtypes => 'int2 int2',
+  prosrc => 'int2smaller' },
+
+{ oid => '784',
+  proname => 'tintervaleq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tinterval tinterval', prosrc => 'tintervaleq' },
+{ oid => '785',
+  proname => 'tintervalne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tinterval tinterval', prosrc => 'tintervalne' },
+{ oid => '786',
+  proname => 'tintervallt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tinterval tinterval', prosrc => 'tintervallt' },
+{ oid => '787',
+  proname => 'tintervalgt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tinterval tinterval', prosrc => 'tintervalgt' },
+{ oid => '788',
+  proname => 'tintervalle', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tinterval tinterval', prosrc => 'tintervalle' },
+{ oid => '789',
+  proname => 'tintervalge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tinterval tinterval', prosrc => 'tintervalge' },
+
+# OIDS 800 - 899
+
+{ oid => '846',
+  proname => 'cash_mul_flt4', prorettype => 'money',
+  proargtypes => 'money float4', prosrc => 'cash_mul_flt4' },
+{ oid => '847',
+  proname => 'cash_div_flt4', prorettype => 'money',
+  proargtypes => 'money float4', prosrc => 'cash_div_flt4' },
+{ oid => '848',
+  proname => 'flt4_mul_cash', prorettype => 'money',
+  proargtypes => 'float4 money', prosrc => 'flt4_mul_cash' },
+
+{ oid => '849', descr => 'position of substring',
+  proname => 'position', prorettype => 'int4', proargtypes => 'text text',
+  prosrc => 'textpos' },
+{ oid => '850',
+  proname => 'textlike', prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'textlike' },
+{ oid => '851',
+  proname => 'textnlike', prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'textnlike' },
+
+{ oid => '852',
+  proname => 'int48eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int8', prosrc => 'int48eq' },
+{ oid => '853',
+  proname => 'int48ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int8', prosrc => 'int48ne' },
+{ oid => '854',
+  proname => 'int48lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int8', prosrc => 'int48lt' },
+{ oid => '855',
+  proname => 'int48gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int8', prosrc => 'int48gt' },
+{ oid => '856',
+  proname => 'int48le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int8', prosrc => 'int48le' },
+{ oid => '857',
+  proname => 'int48ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int4 int8', prosrc => 'int48ge' },
+
+{ oid => '858',
+  proname => 'namelike', prorettype => 'bool', proargtypes => 'name text',
+  prosrc => 'namelike' },
+{ oid => '859',
+  proname => 'namenlike', prorettype => 'bool', proargtypes => 'name text',
+  prosrc => 'namenlike' },
+
+{ oid => '860', descr => 'convert char to char(n)',
+  proname => 'bpchar', prorettype => 'bpchar', proargtypes => 'char',
+  prosrc => 'char_bpchar' },
+
+{ oid => '861', descr => 'name of the current database',
+  proname => 'current_database', provolatile => 's', prorettype => 'name',
+  proargtypes => '', prosrc => 'current_database' },
+{ oid => '817', descr => 'get the currently executing query',
+  proname => 'current_query', proisstrict => 'f', provolatile => 'v',
+  proparallel => 'r', prorettype => 'text', proargtypes => '',
+  prosrc => 'current_query' },
+
+{ oid => '3399',
+  proname => 'int8_mul_cash', prorettype => 'money',
+  proargtypes => 'int8 money', prosrc => 'int8_mul_cash' },
+{ oid => '862',
+  proname => 'int4_mul_cash', prorettype => 'money',
+  proargtypes => 'int4 money', prosrc => 'int4_mul_cash' },
+{ oid => '863',
+  proname => 'int2_mul_cash', prorettype => 'money',
+  proargtypes => 'int2 money', prosrc => 'int2_mul_cash' },
+{ oid => '3344',
+  proname => 'cash_mul_int8', prorettype => 'money',
+  proargtypes => 'money int8', prosrc => 'cash_mul_int8' },
+{ oid => '3345',
+  proname => 'cash_div_int8', prorettype => 'money',
+  proargtypes => 'money int8', prosrc => 'cash_div_int8' },
+{ oid => '864',
+  proname => 'cash_mul_int4', prorettype => 'money',
+  proargtypes => 'money int4', prosrc => 'cash_mul_int4' },
+{ oid => '865',
+  proname => 'cash_div_int4', prorettype => 'money',
+  proargtypes => 'money int4', prosrc => 'cash_div_int4' },
+{ oid => '866',
+  proname => 'cash_mul_int2', prorettype => 'money',
+  proargtypes => 'money int2', prosrc => 'cash_mul_int2' },
+{ oid => '867',
+  proname => 'cash_div_int2', prorettype => 'money',
+  proargtypes => 'money int2', prosrc => 'cash_div_int2' },
+
+{ oid => '886', descr => 'I/O',
+  proname => 'cash_in', provolatile => 's', prorettype => 'money',
+  proargtypes => 'cstring', prosrc => 'cash_in' },
+{ oid => '887', descr => 'I/O',
+  proname => 'cash_out', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'money', prosrc => 'cash_out' },
+{ oid => '888',
+  proname => 'cash_eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'money money', prosrc => 'cash_eq' },
+{ oid => '889',
+  proname => 'cash_ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'money money', prosrc => 'cash_ne' },
+{ oid => '890',
+  proname => 'cash_lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'money money', prosrc => 'cash_lt' },
+{ oid => '891',
+  proname => 'cash_le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'money money', prosrc => 'cash_le' },
+{ oid => '892',
+  proname => 'cash_gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'money money', prosrc => 'cash_gt' },
+{ oid => '893',
+  proname => 'cash_ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'money money', prosrc => 'cash_ge' },
+{ oid => '894',
+  proname => 'cash_pl', prorettype => 'money', proargtypes => 'money money',
+  prosrc => 'cash_pl' },
+{ oid => '895',
+  proname => 'cash_mi', prorettype => 'money', proargtypes => 'money money',
+  prosrc => 'cash_mi' },
+{ oid => '896',
+  proname => 'cash_mul_flt8', prorettype => 'money',
+  proargtypes => 'money float8', prosrc => 'cash_mul_flt8' },
+{ oid => '897',
+  proname => 'cash_div_flt8', prorettype => 'money',
+  proargtypes => 'money float8', prosrc => 'cash_div_flt8' },
+{ oid => '898', descr => 'larger of two',
+  proname => 'cashlarger', prorettype => 'money', proargtypes => 'money money',
+  prosrc => 'cashlarger' },
+{ oid => '899', descr => 'smaller of two',
+  proname => 'cashsmaller', prorettype => 'money', proargtypes => 'money money',
+  prosrc => 'cashsmaller' },
+{ oid => '919',
+  proname => 'flt8_mul_cash', prorettype => 'money',
+  proargtypes => 'float8 money', prosrc => 'flt8_mul_cash' },
+{ oid => '935', descr => 'output money amount as words',
+  proname => 'cash_words', prorettype => 'text', proargtypes => 'money',
+  prosrc => 'cash_words' },
+{ oid => '3822',
+  proname => 'cash_div_cash', prorettype => 'float8',
+  proargtypes => 'money money', prosrc => 'cash_div_cash' },
+{ oid => '3823', descr => 'convert money to numeric',
+  proname => 'numeric', provolatile => 's', prorettype => 'numeric',
+  proargtypes => 'money', prosrc => 'cash_numeric' },
+{ oid => '3824', descr => 'convert numeric to money',
+  proname => 'money', provolatile => 's', prorettype => 'money',
+  proargtypes => 'numeric', prosrc => 'numeric_cash' },
+{ oid => '3811', descr => 'convert int4 to money',
+  proname => 'money', provolatile => 's', prorettype => 'money',
+  proargtypes => 'int4', prosrc => 'int4_cash' },
+{ oid => '3812', descr => 'convert int8 to money',
+  proname => 'money', provolatile => 's', prorettype => 'money',
+  proargtypes => 'int8', prosrc => 'int8_cash' },
+
+# OIDS 900 - 999
+
+{ oid => '940', descr => 'modulus',
+  proname => 'mod', prorettype => 'int2', proargtypes => 'int2 int2',
+  prosrc => 'int2mod' },
+{ oid => '941', descr => 'modulus',
+  proname => 'mod', prorettype => 'int4', proargtypes => 'int4 int4',
+  prosrc => 'int4mod' },
+
+{ oid => '945',
+  proname => 'int8mod', prorettype => 'int8', proargtypes => 'int8 int8',
+  prosrc => 'int8mod' },
+{ oid => '947', descr => 'modulus',
+  proname => 'mod', prorettype => 'int8', proargtypes => 'int8 int8',
+  prosrc => 'int8mod' },
+
+{ oid => '944', descr => 'convert text to char',
+  proname => 'char', prorettype => 'char', proargtypes => 'text',
+  prosrc => 'text_char' },
+{ oid => '946', descr => 'convert char to text',
+  proname => 'text', prorettype => 'text', proargtypes => 'char',
+  prosrc => 'char_text' },
+
+{ oid => '952', descr => 'large object open',
+  proname => 'lo_open', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int4', proargtypes => 'oid int4', prosrc => 'be_lo_open' },
+{ oid => '953', descr => 'large object close',
+  proname => 'lo_close', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int4', proargtypes => 'int4', prosrc => 'be_lo_close' },
+{ oid => '954', descr => 'large object read',
+  proname => 'loread', provolatile => 'v', proparallel => 'u',
+  prorettype => 'bytea', proargtypes => 'int4 int4', prosrc => 'be_loread' },
+{ oid => '955', descr => 'large object write',
+  proname => 'lowrite', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int4', proargtypes => 'int4 bytea', prosrc => 'be_lowrite' },
+{ oid => '956', descr => 'large object seek',
+  proname => 'lo_lseek', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int4', proargtypes => 'int4 int4 int4',
+  prosrc => 'be_lo_lseek' },
+{ oid => '3170', descr => 'large object seek (64 bit)',
+  proname => 'lo_lseek64', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int8', proargtypes => 'int4 int8 int4',
+  prosrc => 'be_lo_lseek64' },
+{ oid => '957', descr => 'large object create',
+  proname => 'lo_creat', provolatile => 'v', proparallel => 'u',
+  prorettype => 'oid', proargtypes => 'int4', prosrc => 'be_lo_creat' },
+{ oid => '715', descr => 'large object create',
+  proname => 'lo_create', provolatile => 'v', proparallel => 'u',
+  prorettype => 'oid', proargtypes => 'oid', prosrc => 'be_lo_create' },
+{ oid => '958', descr => 'large object position',
+  proname => 'lo_tell', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int4', proargtypes => 'int4', prosrc => 'be_lo_tell' },
+{ oid => '3171', descr => 'large object position (64 bit)',
+  proname => 'lo_tell64', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int8', proargtypes => 'int4', prosrc => 'be_lo_tell64' },
+{ oid => '1004', descr => 'truncate large object',
+  proname => 'lo_truncate', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int4', proargtypes => 'int4 int4',
+  prosrc => 'be_lo_truncate' },
+{ oid => '3172', descr => 'truncate large object (64 bit)',
+  proname => 'lo_truncate64', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int4', proargtypes => 'int4 int8',
+  prosrc => 'be_lo_truncate64' },
+
+{ oid => '3457', descr => 'create new large object with given content',
+  proname => 'lo_from_bytea', provolatile => 'v', proparallel => 'u',
+  prorettype => 'oid', proargtypes => 'oid bytea',
+  prosrc => 'be_lo_from_bytea' },
+{ oid => '3458', descr => 'read entire large object',
+  proname => 'lo_get', provolatile => 'v', proparallel => 'u',
+  prorettype => 'bytea', proargtypes => 'oid', prosrc => 'be_lo_get' },
+{ oid => '3459', descr => 'read large object from offset for length',
+  proname => 'lo_get', provolatile => 'v', proparallel => 'u',
+  prorettype => 'bytea', proargtypes => 'oid int8 int4',
+  prosrc => 'be_lo_get_fragment' },
+{ oid => '3460', descr => 'write data at offset',
+  proname => 'lo_put', provolatile => 'v', proparallel => 'u',
+  prorettype => 'void', proargtypes => 'oid int8 bytea',
+  prosrc => 'be_lo_put' },
+
+{ oid => '959',
+  proname => 'on_pl', prorettype => 'bool', proargtypes => 'point line',
+  prosrc => 'on_pl' },
+{ oid => '960',
+  proname => 'on_sl', prorettype => 'bool', proargtypes => 'lseg line',
+  prosrc => 'on_sl' },
+{ oid => '961',
+  proname => 'close_pl', prorettype => 'point', proargtypes => 'point line',
+  prosrc => 'close_pl' },
+{ oid => '962',
+  proname => 'close_sl', prorettype => 'point', proargtypes => 'lseg line',
+  prosrc => 'close_sl' },
+{ oid => '963',
+  proname => 'close_lb', prorettype => 'point', proargtypes => 'line box',
+  prosrc => 'close_lb' },
+
+{ oid => '964', descr => 'large object unlink (delete)',
+  proname => 'lo_unlink', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int4', proargtypes => 'oid', prosrc => 'be_lo_unlink' },
+
+{ oid => '973',
+  proname => 'path_inter', prorettype => 'bool', proargtypes => 'path path',
+  prosrc => 'path_inter' },
+{ oid => '975', descr => 'box area',
+  proname => 'area', prorettype => 'float8', proargtypes => 'box',
+  prosrc => 'box_area' },
+{ oid => '976', descr => 'box width',
+  proname => 'width', prorettype => 'float8', proargtypes => 'box',
+  prosrc => 'box_width' },
+{ oid => '977', descr => 'box height',
+  proname => 'height', prorettype => 'float8', proargtypes => 'box',
+  prosrc => 'box_height' },
+{ oid => '978',
+  proname => 'box_distance', prorettype => 'float8', proargtypes => 'box box',
+  prosrc => 'box_distance' },
+{ oid => '979', descr => 'area of a closed path',
+  proname => 'area', prorettype => 'float8', proargtypes => 'path',
+  prosrc => 'path_area' },
+{ oid => '980',
+  proname => 'box_intersect', prorettype => 'box', proargtypes => 'box box',
+  prosrc => 'box_intersect' },
+{ oid => '4067', descr => 'bounding box of two boxes',
+  proname => 'bound_box', prorettype => 'box', proargtypes => 'box box',
+  prosrc => 'boxes_bound_box' },
+{ oid => '981', descr => 'box diagonal',
+  proname => 'diagonal', prorettype => 'lseg', proargtypes => 'box',
+  prosrc => 'box_diagonal' },
+{ oid => '982',
+  proname => 'path_n_lt', prorettype => 'bool', proargtypes => 'path path',
+  prosrc => 'path_n_lt' },
+{ oid => '983',
+  proname => 'path_n_gt', prorettype => 'bool', proargtypes => 'path path',
+  prosrc => 'path_n_gt' },
+{ oid => '984',
+  proname => 'path_n_eq', prorettype => 'bool', proargtypes => 'path path',
+  prosrc => 'path_n_eq' },
+{ oid => '985',
+  proname => 'path_n_le', prorettype => 'bool', proargtypes => 'path path',
+  prosrc => 'path_n_le' },
+{ oid => '986',
+  proname => 'path_n_ge', prorettype => 'bool', proargtypes => 'path path',
+  prosrc => 'path_n_ge' },
+{ oid => '987',
+  proname => 'path_length', prorettype => 'float8', proargtypes => 'path',
+  prosrc => 'path_length' },
+{ oid => '988',
+  proname => 'point_ne', prorettype => 'bool', proargtypes => 'point point',
+  prosrc => 'point_ne' },
+{ oid => '989',
+  proname => 'point_vert', prorettype => 'bool', proargtypes => 'point point',
+  prosrc => 'point_vert' },
+{ oid => '990',
+  proname => 'point_horiz', prorettype => 'bool', proargtypes => 'point point',
+  prosrc => 'point_horiz' },
+{ oid => '991',
+  proname => 'point_distance', prorettype => 'float8',
+  proargtypes => 'point point', prosrc => 'point_distance' },
+{ oid => '992', descr => 'slope between points',
+  proname => 'slope', prorettype => 'float8', proargtypes => 'point point',
+  prosrc => 'point_slope' },
+{ oid => '993', descr => 'convert points to line segment',
+  proname => 'lseg', prorettype => 'lseg', proargtypes => 'point point',
+  prosrc => 'lseg_construct' },
+{ oid => '994',
+  proname => 'lseg_intersect', prorettype => 'bool', proargtypes => 'lseg lseg',
+  prosrc => 'lseg_intersect' },
+{ oid => '995',
+  proname => 'lseg_parallel', prorettype => 'bool', proargtypes => 'lseg lseg',
+  prosrc => 'lseg_parallel' },
+{ oid => '996',
+  proname => 'lseg_perp', prorettype => 'bool', proargtypes => 'lseg lseg',
+  prosrc => 'lseg_perp' },
+{ oid => '997',
+  proname => 'lseg_vertical', prorettype => 'bool', proargtypes => 'lseg',
+  prosrc => 'lseg_vertical' },
+{ oid => '998',
+  proname => 'lseg_horizontal', prorettype => 'bool', proargtypes => 'lseg',
+  prosrc => 'lseg_horizontal' },
+{ oid => '999',
+  proname => 'lseg_eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'lseg lseg', prosrc => 'lseg_eq' },
+
+# OIDS 1000 - 1999
+
+{ oid => '3994', descr => 'transform a time zone adjustment',
+  proname => 'timestamp_izone_transform', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'timestamp_izone_transform' },
+{ oid => '1026', descr => 'adjust timestamp to new time zone',
+  proname => 'timezone', protransform => 'timestamp_izone_transform',
+  prorettype => 'timestamp', proargtypes => 'interval timestamptz',
+  prosrc => 'timestamptz_izone' },
+
+{ oid => '1031', descr => 'I/O',
+  proname => 'aclitemin', provolatile => 's', prorettype => 'aclitem',
+  proargtypes => 'cstring', prosrc => 'aclitemin' },
+{ oid => '1032', descr => 'I/O',
+  proname => 'aclitemout', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'aclitem', prosrc => 'aclitemout' },
+{ oid => '1035', descr => 'add/update ACL item',
+  proname => 'aclinsert', prorettype => '_aclitem',
+  proargtypes => '_aclitem aclitem', prosrc => 'aclinsert' },
+{ oid => '1036', descr => 'remove ACL item',
+  proname => 'aclremove', prorettype => '_aclitem',
+  proargtypes => '_aclitem aclitem', prosrc => 'aclremove' },
+{ oid => '1037', descr => 'contains',
+  proname => 'aclcontains', prorettype => 'bool',
+  proargtypes => '_aclitem aclitem', prosrc => 'aclcontains' },
+{ oid => '1062',
+  proname => 'aclitemeq', prorettype => 'bool',
+  proargtypes => 'aclitem aclitem', prosrc => 'aclitem_eq' },
+{ oid => '1365', descr => 'make ACL item',
+  proname => 'makeaclitem', prorettype => 'aclitem',
+  proargtypes => 'oid oid text bool', prosrc => 'makeaclitem' },
+{ oid => '3943', descr => 'TODO',
+  proname => 'acldefault', prorettype => '_aclitem', proargtypes => 'char oid',
+  prosrc => 'acldefault_sql' },
+{ oid => '1689',
+  descr => 'convert ACL item array to table, for use by information schema',
+  proname => 'aclexplode', prorows => '10', proretset => 't',
+  provolatile => 's', prorettype => 'record', proargtypes => '_aclitem',
+  proallargtypes => '{_aclitem,oid,oid,text,bool}',
+  proargmodes => '{i,o,o,o,o}',
+  proargnames => '{acl,grantor,grantee,privilege_type,is_grantable}',
+  prosrc => 'aclexplode' },
+{ oid => '1044', descr => 'I/O',
+  proname => 'bpcharin', prorettype => 'bpchar',
+  proargtypes => 'cstring oid int4', prosrc => 'bpcharin' },
+{ oid => '1045', descr => 'I/O',
+  proname => 'bpcharout', prorettype => 'cstring', proargtypes => 'bpchar',
+  prosrc => 'bpcharout' },
+{ oid => '2913', descr => 'I/O typmod',
+  proname => 'bpchartypmodin', prorettype => 'int4', proargtypes => '_cstring',
+  prosrc => 'bpchartypmodin' },
+{ oid => '2914', descr => 'I/O typmod',
+  proname => 'bpchartypmodout', prorettype => 'cstring', proargtypes => 'int4',
+  prosrc => 'bpchartypmodout' },
+{ oid => '1046', descr => 'I/O',
+  proname => 'varcharin', prorettype => 'varchar',
+  proargtypes => 'cstring oid int4', prosrc => 'varcharin' },
+{ oid => '1047', descr => 'I/O',
+  proname => 'varcharout', prorettype => 'cstring', proargtypes => 'varchar',
+  prosrc => 'varcharout' },
+{ oid => '2915', descr => 'I/O typmod',
+  proname => 'varchartypmodin', prorettype => 'int4', proargtypes => '_cstring',
+  prosrc => 'varchartypmodin' },
+{ oid => '2916', descr => 'I/O typmod',
+  proname => 'varchartypmodout', prorettype => 'cstring', proargtypes => 'int4',
+  prosrc => 'varchartypmodout' },
+{ oid => '1048',
+  proname => 'bpchareq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bpchar bpchar', prosrc => 'bpchareq' },
+{ oid => '1049',
+  proname => 'bpcharlt', prorettype => 'bool', proargtypes => 'bpchar bpchar',
+  prosrc => 'bpcharlt' },
+{ oid => '1050',
+  proname => 'bpcharle', prorettype => 'bool', proargtypes => 'bpchar bpchar',
+  prosrc => 'bpcharle' },
+{ oid => '1051',
+  proname => 'bpchargt', prorettype => 'bool', proargtypes => 'bpchar bpchar',
+  prosrc => 'bpchargt' },
+{ oid => '1052',
+  proname => 'bpcharge', prorettype => 'bool', proargtypes => 'bpchar bpchar',
+  prosrc => 'bpcharge' },
+{ oid => '1053',
+  proname => 'bpcharne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bpchar bpchar', prosrc => 'bpcharne' },
+{ oid => '1063', descr => 'larger of two',
+  proname => 'bpchar_larger', prorettype => 'bpchar',
+  proargtypes => 'bpchar bpchar', prosrc => 'bpchar_larger' },
+{ oid => '1064', descr => 'smaller of two',
+  proname => 'bpchar_smaller', prorettype => 'bpchar',
+  proargtypes => 'bpchar bpchar', prosrc => 'bpchar_smaller' },
+{ oid => '1078', descr => 'less-equal-greater',
+  proname => 'bpcharcmp', prorettype => 'int4', proargtypes => 'bpchar bpchar',
+  prosrc => 'bpcharcmp' },
+{ oid => '3328', descr => 'sort support',
+  proname => 'bpchar_sortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'bpchar_sortsupport' },
+{ oid => '1080', descr => 'hash',
+  proname => 'hashbpchar', prorettype => 'int4', proargtypes => 'bpchar',
+  prosrc => 'hashbpchar' },
+{ oid => '972', descr => 'hash',
+  proname => 'hashbpcharextended', prorettype => 'int8',
+  proargtypes => 'bpchar int8', prosrc => 'hashbpcharextended' },
+{ oid => '1081', descr => 'format a type oid and atttypmod to canonical SQL',
+  proname => 'format_type', proisstrict => 'f', provolatile => 's',
+  prorettype => 'text', proargtypes => 'oid int4', prosrc => 'format_type' },
+{ oid => '1084', descr => 'I/O',
+  proname => 'date_in', provolatile => 's', prorettype => 'date',
+  proargtypes => 'cstring', prosrc => 'date_in' },
+{ oid => '1085', descr => 'I/O',
+  proname => 'date_out', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'date', prosrc => 'date_out' },
+{ oid => '1086',
+  proname => 'date_eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'date date', prosrc => 'date_eq' },
+{ oid => '1087',
+  proname => 'date_lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'date date', prosrc => 'date_lt' },
+{ oid => '1088',
+  proname => 'date_le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'date date', prosrc => 'date_le' },
+{ oid => '1089',
+  proname => 'date_gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'date date', prosrc => 'date_gt' },
+{ oid => '1090',
+  proname => 'date_ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'date date', prosrc => 'date_ge' },
+{ oid => '1091',
+  proname => 'date_ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'date date', prosrc => 'date_ne' },
+{ oid => '1092', descr => 'less-equal-greater',
+  proname => 'date_cmp', prorettype => 'int4', proargtypes => 'date date',
+  prosrc => 'date_cmp' },
+{ oid => '3136', descr => 'sort support',
+  proname => 'date_sortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'date_sortsupport' },
+{ oid => '4133', descr => 'window RANGE support',
+  proname => 'in_range', prorettype => 'bool',
+  proargtypes => 'date date interval bool bool',
+  prosrc => 'in_range_date_interval' },
+
+# OIDS 1100 - 1199
+
+{ oid => '1102',
+  proname => 'time_lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'time time', prosrc => 'time_lt' },
+{ oid => '1103',
+  proname => 'time_le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'time time', prosrc => 'time_le' },
+{ oid => '1104',
+  proname => 'time_gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'time time', prosrc => 'time_gt' },
+{ oid => '1105',
+  proname => 'time_ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'time time', prosrc => 'time_ge' },
+{ oid => '1106',
+  proname => 'time_ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'time time', prosrc => 'time_ne' },
+{ oid => '1107', descr => 'less-equal-greater',
+  proname => 'time_cmp', prorettype => 'int4', proargtypes => 'time time',
+  prosrc => 'time_cmp' },
+{ oid => '1138', descr => 'larger of two',
+  proname => 'date_larger', prorettype => 'date', proargtypes => 'date date',
+  prosrc => 'date_larger' },
+{ oid => '1139', descr => 'smaller of two',
+  proname => 'date_smaller', prorettype => 'date', proargtypes => 'date date',
+  prosrc => 'date_smaller' },
+{ oid => '1140',
+  proname => 'date_mi', prorettype => 'int4', proargtypes => 'date date',
+  prosrc => 'date_mi' },
+{ oid => '1141',
+  proname => 'date_pli', prorettype => 'date', proargtypes => 'date int4',
+  prosrc => 'date_pli' },
+{ oid => '1142',
+  proname => 'date_mii', prorettype => 'date', proargtypes => 'date int4',
+  prosrc => 'date_mii' },
+{ oid => '1143', descr => 'I/O',
+  proname => 'time_in', provolatile => 's', prorettype => 'time',
+  proargtypes => 'cstring oid int4', prosrc => 'time_in' },
+{ oid => '1144', descr => 'I/O',
+  proname => 'time_out', prorettype => 'cstring', proargtypes => 'time',
+  prosrc => 'time_out' },
+{ oid => '2909', descr => 'I/O typmod',
+  proname => 'timetypmodin', prorettype => 'int4', proargtypes => '_cstring',
+  prosrc => 'timetypmodin' },
+{ oid => '2910', descr => 'I/O typmod',
+  proname => 'timetypmodout', prorettype => 'cstring', proargtypes => 'int4',
+  prosrc => 'timetypmodout' },
+{ oid => '1145',
+  proname => 'time_eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'time time', prosrc => 'time_eq' },
+
+{ oid => '1146',
+  proname => 'circle_add_pt', prorettype => 'circle',
+  proargtypes => 'circle point', prosrc => 'circle_add_pt' },
+{ oid => '1147',
+  proname => 'circle_sub_pt', prorettype => 'circle',
+  proargtypes => 'circle point', prosrc => 'circle_sub_pt' },
+{ oid => '1148',
+  proname => 'circle_mul_pt', prorettype => 'circle',
+  proargtypes => 'circle point', prosrc => 'circle_mul_pt' },
+{ oid => '1149',
+  proname => 'circle_div_pt', prorettype => 'circle',
+  proargtypes => 'circle point', prosrc => 'circle_div_pt' },
+
+{ oid => '1150', descr => 'I/O',
+  proname => 'timestamptz_in', provolatile => 's', prorettype => 'timestamptz',
+  proargtypes => 'cstring oid int4', prosrc => 'timestamptz_in' },
+{ oid => '1151', descr => 'I/O',
+  proname => 'timestamptz_out', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'timestamptz', prosrc => 'timestamptz_out' },
+{ oid => '2907', descr => 'I/O typmod',
+  proname => 'timestamptztypmodin', prorettype => 'int4',
+  proargtypes => '_cstring', prosrc => 'timestamptztypmodin' },
+{ oid => '2908', descr => 'I/O typmod',
+  proname => 'timestamptztypmodout', prorettype => 'cstring',
+  proargtypes => 'int4', prosrc => 'timestamptztypmodout' },
+{ oid => '1152',
+  proname => 'timestamptz_eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timestamptz timestamptz', prosrc => 'timestamp_eq' },
+{ oid => '1153',
+  proname => 'timestamptz_ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timestamptz timestamptz', prosrc => 'timestamp_ne' },
+{ oid => '1154',
+  proname => 'timestamptz_lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timestamptz timestamptz', prosrc => 'timestamp_lt' },
+{ oid => '1155',
+  proname => 'timestamptz_le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timestamptz timestamptz', prosrc => 'timestamp_le' },
+{ oid => '1156',
+  proname => 'timestamptz_ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timestamptz timestamptz', prosrc => 'timestamp_ge' },
+{ oid => '1157',
+  proname => 'timestamptz_gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timestamptz timestamptz', prosrc => 'timestamp_gt' },
+{ oid => '1158', descr => 'convert UNIX epoch to timestamptz',
+  proname => 'to_timestamp', prorettype => 'timestamptz',
+  proargtypes => 'float8', prosrc => 'float8_timestamptz' },
+{ oid => '3995', descr => 'transform a time zone adjustment',
+  proname => 'timestamp_zone_transform', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'timestamp_zone_transform' },
+{ oid => '1159', descr => 'adjust timestamp to new time zone',
+  proname => 'timezone', protransform => 'timestamp_zone_transform',
+  prorettype => 'timestamp', proargtypes => 'text timestamptz',
+  prosrc => 'timestamptz_zone' },
+
+{ oid => '1160', descr => 'I/O',
+  proname => 'interval_in', provolatile => 's', prorettype => 'interval',
+  proargtypes => 'cstring oid int4', prosrc => 'interval_in' },
+{ oid => '1161', descr => 'I/O',
+  proname => 'interval_out', prorettype => 'cstring', proargtypes => 'interval',
+  prosrc => 'interval_out' },
+{ oid => '2903', descr => 'I/O typmod',
+  proname => 'intervaltypmodin', prorettype => 'int4',
+  proargtypes => '_cstring', prosrc => 'intervaltypmodin' },
+{ oid => '2904', descr => 'I/O typmod',
+  proname => 'intervaltypmodout', prorettype => 'cstring',
+  proargtypes => 'int4', prosrc => 'intervaltypmodout' },
+{ oid => '1162',
+  proname => 'interval_eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'interval interval', prosrc => 'interval_eq' },
+{ oid => '1163',
+  proname => 'interval_ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'interval interval', prosrc => 'interval_ne' },
+{ oid => '1164',
+  proname => 'interval_lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'interval interval', prosrc => 'interval_lt' },
+{ oid => '1165',
+  proname => 'interval_le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'interval interval', prosrc => 'interval_le' },
+{ oid => '1166',
+  proname => 'interval_ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'interval interval', prosrc => 'interval_ge' },
+{ oid => '1167',
+  proname => 'interval_gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'interval interval', prosrc => 'interval_gt' },
+{ oid => '1168',
+  proname => 'interval_um', prorettype => 'interval', proargtypes => 'interval',
+  prosrc => 'interval_um' },
+{ oid => '1169',
+  proname => 'interval_pl', prorettype => 'interval',
+  proargtypes => 'interval interval', prosrc => 'interval_pl' },
+{ oid => '1170',
+  proname => 'interval_mi', prorettype => 'interval',
+  proargtypes => 'interval interval', prosrc => 'interval_mi' },
+{ oid => '1171', descr => 'extract field from timestamp with time zone',
+  proname => 'date_part', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'text timestamptz', prosrc => 'timestamptz_part' },
+{ oid => '1172', descr => 'extract field from interval',
+  proname => 'date_part', prorettype => 'float8',
+  proargtypes => 'text interval', prosrc => 'interval_part' },
+{ oid => '1173', descr => 'convert abstime to timestamp with time zone',
+  proname => 'timestamptz', prorettype => 'timestamptz',
+  proargtypes => 'abstime', prosrc => 'abstime_timestamptz' },
+{ oid => '1174', descr => 'convert date to timestamp with time zone',
+  proname => 'timestamptz', provolatile => 's', prorettype => 'timestamptz',
+  proargtypes => 'date', prosrc => 'date_timestamptz' },
+{ oid => '2711',
+  descr => 'promote groups of 24 hours to numbers of days and promote groups of 30 days to numbers of months',
+  proname => 'justify_interval', prorettype => 'interval',
+  proargtypes => 'interval', prosrc => 'interval_justify_interval' },
+{ oid => '1175', descr => 'promote groups of 24 hours to numbers of days',
+  proname => 'justify_hours', prorettype => 'interval',
+  proargtypes => 'interval', prosrc => 'interval_justify_hours' },
+{ oid => '1295', descr => 'promote groups of 30 days to numbers of months',
+  proname => 'justify_days', prorettype => 'interval',
+  proargtypes => 'interval', prosrc => 'interval_justify_days' },
+{ oid => '1176', descr => 'convert date and time to timestamp with time zone',
+  proname => 'timestamptz', prolang => '14', provolatile => 's',
+  prorettype => 'timestamptz', proargtypes => 'date time',
+  prosrc => 'select cast(($1 + $2) as timestamp with time zone)' },
+{ oid => '1177', descr => 'convert reltime to interval',
+  proname => 'interval', prorettype => 'interval', proargtypes => 'reltime',
+  prosrc => 'reltime_interval' },
+{ oid => '1178', descr => 'convert timestamp with time zone to date',
+  proname => 'date', provolatile => 's', prorettype => 'date',
+  proargtypes => 'timestamptz', prosrc => 'timestamptz_date' },
+{ oid => '1179', descr => 'convert abstime to date',
+  proname => 'date', provolatile => 's', prorettype => 'date',
+  proargtypes => 'abstime', prosrc => 'abstime_date' },
+{ oid => '1180', descr => 'convert timestamp with time zone to abstime',
+  proname => 'abstime', prorettype => 'abstime', proargtypes => 'timestamptz',
+  prosrc => 'timestamptz_abstime' },
+{ oid => '1181',
+  descr => 'age of a transaction ID, in transactions before current transaction',
+  proname => 'age', provolatile => 's', proparallel => 'r',
+  prorettype => 'int4', proargtypes => 'xid', prosrc => 'xid_age' },
+{ oid => '3939',
+  descr => 'age of a multi-transaction ID, in multi-transactions before current multi-transaction',
+  proname => 'mxid_age', provolatile => 's', prorettype => 'int4',
+  proargtypes => 'xid', prosrc => 'mxid_age' },
+
+{ oid => '1188',
+  proname => 'timestamptz_mi', prorettype => 'interval',
+  proargtypes => 'timestamptz timestamptz', prosrc => 'timestamp_mi' },
+{ oid => '1189',
+  proname => 'timestamptz_pl_interval', provolatile => 's',
+  prorettype => 'timestamptz', proargtypes => 'timestamptz interval',
+  prosrc => 'timestamptz_pl_interval' },
+{ oid => '1190',
+  proname => 'timestamptz_mi_interval', provolatile => 's',
+  prorettype => 'timestamptz', proargtypes => 'timestamptz interval',
+  prosrc => 'timestamptz_mi_interval' },
+{ oid => '1194', descr => 'convert interval to reltime',
+  proname => 'reltime', prorettype => 'reltime', proargtypes => 'interval',
+  prosrc => 'interval_reltime' },
+{ oid => '1195', descr => 'smaller of two',
+  proname => 'timestamptz_smaller', prorettype => 'timestamptz',
+  proargtypes => 'timestamptz timestamptz', prosrc => 'timestamp_smaller' },
+{ oid => '1196', descr => 'larger of two',
+  proname => 'timestamptz_larger', prorettype => 'timestamptz',
+  proargtypes => 'timestamptz timestamptz', prosrc => 'timestamp_larger' },
+{ oid => '1197', descr => 'smaller of two',
+  proname => 'interval_smaller', prorettype => 'interval',
+  proargtypes => 'interval interval', prosrc => 'interval_smaller' },
+{ oid => '1198', descr => 'larger of two',
+  proname => 'interval_larger', prorettype => 'interval',
+  proargtypes => 'interval interval', prosrc => 'interval_larger' },
+{ oid => '1199', descr => 'date difference preserving months and years',
+  proname => 'age', prorettype => 'interval',
+  proargtypes => 'timestamptz timestamptz', prosrc => 'timestamptz_age' },
+
+# OIDS 1200 - 1299
+
+{ oid => '3918', descr => 'transform an interval length coercion',
+  proname => 'interval_transform', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'interval_transform' },
+{ oid => '1200', descr => 'adjust interval precision',
+  proname => 'interval', protransform => 'interval_transform',
+  prorettype => 'interval', proargtypes => 'interval int4',
+  prosrc => 'interval_scale' },
+
+{ oid => '1215', descr => 'get description for object id and catalog name',
+  proname => 'obj_description', prolang => '14', procost => '100',
+  provolatile => 's', prorettype => 'text', proargtypes => 'oid name',
+  prosrc => 'select description from pg_catalog.pg_description where objoid = $1 and classoid = (select oid from pg_catalog.pg_class where relname = $2 and relnamespace = PGNSP) and objsubid = 0' },
+{ oid => '1216', descr => 'get description for table column',
+  proname => 'col_description', prolang => '14', procost => '100',
+  provolatile => 's', prorettype => 'text', proargtypes => 'oid int4',
+  prosrc => 'select description from pg_catalog.pg_description where objoid = $1 and classoid = \'\'pg_catalog.pg_class\'\'::pg_catalog.regclass and objsubid = $2' },
+{ oid => '1993',
+  descr => 'get description for object id and shared catalog name',
+  proname => 'shobj_description', prolang => '14', procost => '100',
+  provolatile => 's', prorettype => 'text', proargtypes => 'oid name',
+  prosrc => 'select description from pg_catalog.pg_shdescription where objoid = $1 and classoid = (select oid from pg_catalog.pg_class where relname = $2 and relnamespace = PGNSP)' },
+
+{ oid => '1217',
+  descr => 'truncate timestamp with time zone to specified units',
+  proname => 'date_trunc', provolatile => 's', prorettype => 'timestamptz',
+  proargtypes => 'text timestamptz', prosrc => 'timestamptz_trunc' },
+{ oid => '1218', descr => 'truncate interval to specified units',
+  proname => 'date_trunc', prorettype => 'interval',
+  proargtypes => 'text interval', prosrc => 'interval_trunc' },
+
+{ oid => '1219', descr => 'increment',
+  proname => 'int8inc', prorettype => 'int8', proargtypes => 'int8',
+  prosrc => 'int8inc' },
+{ oid => '3546', descr => 'decrement',
+  proname => 'int8dec', prorettype => 'int8', proargtypes => 'int8',
+  prosrc => 'int8dec' },
+{ oid => '2804', descr => 'increment, ignores second argument',
+  proname => 'int8inc_any', prorettype => 'int8', proargtypes => 'int8 any',
+  prosrc => 'int8inc_any' },
+{ oid => '3547', descr => 'decrement, ignores second argument',
+  proname => 'int8dec_any', prorettype => 'int8', proargtypes => 'int8 any',
+  prosrc => 'int8dec_any' },
+{ oid => '1230',
+  proname => 'int8abs', prorettype => 'int8', proargtypes => 'int8',
+  prosrc => 'int8abs' },
+
+{ oid => '1236', descr => 'larger of two',
+  proname => 'int8larger', prorettype => 'int8', proargtypes => 'int8 int8',
+  prosrc => 'int8larger' },
+{ oid => '1237', descr => 'smaller of two',
+  proname => 'int8smaller', prorettype => 'int8', proargtypes => 'int8 int8',
+  prosrc => 'int8smaller' },
+
+{ oid => '1238',
+  proname => 'texticregexeq', prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'texticregexeq' },
+{ oid => '1239',
+  proname => 'texticregexne', prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'texticregexne' },
+{ oid => '1240',
+  proname => 'nameicregexeq', prorettype => 'bool', proargtypes => 'name text',
+  prosrc => 'nameicregexeq' },
+{ oid => '1241',
+  proname => 'nameicregexne', prorettype => 'bool', proargtypes => 'name text',
+  prosrc => 'nameicregexne' },
+
+{ oid => '1251',
+  proname => 'int4abs', prorettype => 'int4', proargtypes => 'int4',
+  prosrc => 'int4abs' },
+{ oid => '1253',
+  proname => 'int2abs', prorettype => 'int2', proargtypes => 'int2',
+  prosrc => 'int2abs' },
+
+{ oid => '1271', descr => 'intervals overlap?',
+  proname => 'overlaps', proisstrict => 'f', prorettype => 'bool',
+  proargtypes => 'timetz timetz timetz timetz', prosrc => 'overlaps_timetz' },
+{ oid => '1272',
+  proname => 'datetime_pl', prorettype => 'timestamp',
+  proargtypes => 'date time', prosrc => 'datetime_timestamp' },
+{ oid => '1273', descr => 'extract field from time with time zone',
+  proname => 'date_part', prorettype => 'float8', proargtypes => 'text timetz',
+  prosrc => 'timetz_part' },
+{ oid => '1274',
+  proname => 'int84pl', prorettype => 'int8', proargtypes => 'int8 int4',
+  prosrc => 'int84pl' },
+{ oid => '1275',
+  proname => 'int84mi', prorettype => 'int8', proargtypes => 'int8 int4',
+  prosrc => 'int84mi' },
+{ oid => '1276',
+  proname => 'int84mul', prorettype => 'int8', proargtypes => 'int8 int4',
+  prosrc => 'int84mul' },
+{ oid => '1277',
+  proname => 'int84div', prorettype => 'int8', proargtypes => 'int8 int4',
+  prosrc => 'int84div' },
+{ oid => '1278',
+  proname => 'int48pl', prorettype => 'int8', proargtypes => 'int4 int8',
+  prosrc => 'int48pl' },
+{ oid => '1279',
+  proname => 'int48mi', prorettype => 'int8', proargtypes => 'int4 int8',
+  prosrc => 'int48mi' },
+{ oid => '1280',
+  proname => 'int48mul', prorettype => 'int8', proargtypes => 'int4 int8',
+  prosrc => 'int48mul' },
+{ oid => '1281',
+  proname => 'int48div', prorettype => 'int8', proargtypes => 'int4 int8',
+  prosrc => 'int48div' },
+
+{ oid => '837',
+  proname => 'int82pl', prorettype => 'int8', proargtypes => 'int8 int2',
+  prosrc => 'int82pl' },
+{ oid => '838',
+  proname => 'int82mi', prorettype => 'int8', proargtypes => 'int8 int2',
+  prosrc => 'int82mi' },
+{ oid => '839',
+  proname => 'int82mul', prorettype => 'int8', proargtypes => 'int8 int2',
+  prosrc => 'int82mul' },
+{ oid => '840',
+  proname => 'int82div', prorettype => 'int8', proargtypes => 'int8 int2',
+  prosrc => 'int82div' },
+{ oid => '841',
+  proname => 'int28pl', prorettype => 'int8', proargtypes => 'int2 int8',
+  prosrc => 'int28pl' },
+{ oid => '942',
+  proname => 'int28mi', prorettype => 'int8', proargtypes => 'int2 int8',
+  prosrc => 'int28mi' },
+{ oid => '943',
+  proname => 'int28mul', prorettype => 'int8', proargtypes => 'int2 int8',
+  prosrc => 'int28mul' },
+{ oid => '948',
+  proname => 'int28div', prorettype => 'int8', proargtypes => 'int2 int8',
+  prosrc => 'int28div' },
+
+{ oid => '1287', descr => 'convert int8 to oid',
+  proname => 'oid', prorettype => 'oid', proargtypes => 'int8',
+  prosrc => 'i8tooid' },
+{ oid => '1288', descr => 'convert oid to int8',
+  proname => 'int8', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'oidtoi8' },
+
+{ oid => '1291',
+  descr => 'trigger to suppress updates when new and old records match',
+  proname => 'suppress_redundant_updates_trigger', provolatile => 'v',
+  prorettype => 'trigger', proargtypes => '',
+  prosrc => 'suppress_redundant_updates_trigger' },
+
+{ oid => '1292',
+  proname => 'tideq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tid tid', prosrc => 'tideq' },
+{ oid => '1293', descr => 'latest tid of a tuple',
+  proname => 'currtid', provolatile => 'v', proparallel => 'u',
+  prorettype => 'tid', proargtypes => 'oid tid', prosrc => 'currtid_byreloid' },
+{ oid => '1294', descr => 'latest tid of a tuple',
+  proname => 'currtid2', provolatile => 'v', proparallel => 'u',
+  prorettype => 'tid', proargtypes => 'text tid',
+  prosrc => 'currtid_byrelname' },
+{ oid => '1265',
+  proname => 'tidne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tid tid', prosrc => 'tidne' },
+{ oid => '2790',
+  proname => 'tidgt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tid tid', prosrc => 'tidgt' },
+{ oid => '2791',
+  proname => 'tidlt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tid tid', prosrc => 'tidlt' },
+{ oid => '2792',
+  proname => 'tidge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tid tid', prosrc => 'tidge' },
+{ oid => '2793',
+  proname => 'tidle', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'tid tid', prosrc => 'tidle' },
+{ oid => '2794', descr => 'less-equal-greater',
+  proname => 'bttidcmp', prorettype => 'int4', proargtypes => 'tid tid',
+  prosrc => 'bttidcmp' },
+{ oid => '2795', descr => 'larger of two',
+  proname => 'tidlarger', prorettype => 'tid', proargtypes => 'tid tid',
+  prosrc => 'tidlarger' },
+{ oid => '2796', descr => 'smaller of two',
+  proname => 'tidsmaller', prorettype => 'tid', proargtypes => 'tid tid',
+  prosrc => 'tidsmaller' },
+
+{ oid => '1296',
+  proname => 'timedate_pl', prolang => '14', prorettype => 'timestamp',
+  proargtypes => 'time date', prosrc => 'select ($2 + $1)' },
+{ oid => '1297',
+  proname => 'datetimetz_pl', prorettype => 'timestamptz',
+  proargtypes => 'date timetz', prosrc => 'datetimetz_timestamptz' },
+{ oid => '1298',
+  proname => 'timetzdate_pl', prolang => '14', prorettype => 'timestamptz',
+  proargtypes => 'timetz date', prosrc => 'select ($2 + $1)' },
+{ oid => '1299', descr => 'current transaction time',
+  proname => 'now', provolatile => 's', proparallel => 'r',
+  prorettype => 'timestamptz', proargtypes => '', prosrc => 'now' },
+{ oid => '2647', descr => 'current transaction time',
+  proname => 'transaction_timestamp', provolatile => 's',
+  prorettype => 'timestamptz', proargtypes => '', prosrc => 'now' },
+{ oid => '2648', descr => 'current statement time',
+  proname => 'statement_timestamp', provolatile => 's', proparallel => 'r',
+  prorettype => 'timestamptz', proargtypes => '',
+  prosrc => 'statement_timestamp' },
+{ oid => '2649', descr => 'current clock time',
+  proname => 'clock_timestamp', provolatile => 'v', prorettype => 'timestamptz',
+  proargtypes => '', prosrc => 'clock_timestamp' },
+
+# OIDS 1300 - 1399
+
+{ oid => '1300',
+  descr => 'restriction selectivity for position-comparison operators',
+  proname => 'positionsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'positionsel' },
+{ oid => '1301',
+  descr => 'join selectivity for position-comparison operators',
+  proname => 'positionjoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'positionjoinsel' },
+{ oid => '1302',
+  descr => 'restriction selectivity for containment comparison operators',
+  proname => 'contsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'contsel' },
+{ oid => '1303',
+  descr => 'join selectivity for containment comparison operators',
+  proname => 'contjoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'contjoinsel' },
+
+{ oid => '1304', descr => 'intervals overlap?',
+  proname => 'overlaps', proisstrict => 'f', prorettype => 'bool',
+  proargtypes => 'timestamptz timestamptz timestamptz timestamptz',
+  prosrc => 'overlaps_timestamp' },
+{ oid => '1305', descr => 'intervals overlap?',
+  proname => 'overlaps', prolang => '14', proisstrict => 'f',
+  provolatile => 's', prorettype => 'bool',
+  proargtypes => 'timestamptz interval timestamptz interval',
+  prosrc => 'select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))' },
+{ oid => '1306', descr => 'intervals overlap?',
+  proname => 'overlaps', prolang => '14', proisstrict => 'f',
+  provolatile => 's', prorettype => 'bool',
+  proargtypes => 'timestamptz timestamptz timestamptz interval',
+  prosrc => 'select ($1, $2) overlaps ($3, ($3 + $4))' },
+{ oid => '1307', descr => 'intervals overlap?',
+  proname => 'overlaps', prolang => '14', proisstrict => 'f',
+  provolatile => 's', prorettype => 'bool',
+  proargtypes => 'timestamptz interval timestamptz timestamptz',
+  prosrc => 'select ($1, ($1 + $2)) overlaps ($3, $4)' },
+
+{ oid => '1308', descr => 'intervals overlap?',
+  proname => 'overlaps', proisstrict => 'f', prorettype => 'bool',
+  proargtypes => 'time time time time', prosrc => 'overlaps_time' },
+{ oid => '1309', descr => 'intervals overlap?',
+  proname => 'overlaps', prolang => '14', proisstrict => 'f',
+  prorettype => 'bool', proargtypes => 'time interval time interval',
+  prosrc => 'select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))' },
+{ oid => '1310', descr => 'intervals overlap?',
+  proname => 'overlaps', prolang => '14', proisstrict => 'f',
+  prorettype => 'bool', proargtypes => 'time time time interval',
+  prosrc => 'select ($1, $2) overlaps ($3, ($3 + $4))' },
+{ oid => '1311', descr => 'intervals overlap?',
+  proname => 'overlaps', prolang => '14', proisstrict => 'f',
+  prorettype => 'bool', proargtypes => 'time interval time time',
+  prosrc => 'select ($1, ($1 + $2)) overlaps ($3, $4)' },
+
+{ oid => '1312', descr => 'I/O',
+  proname => 'timestamp_in', provolatile => 's', prorettype => 'timestamp',
+  proargtypes => 'cstring oid int4', prosrc => 'timestamp_in' },
+{ oid => '1313', descr => 'I/O',
+  proname => 'timestamp_out', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'timestamp', prosrc => 'timestamp_out' },
+{ oid => '2905', descr => 'I/O typmod',
+  proname => 'timestamptypmodin', prorettype => 'int4',
+  proargtypes => '_cstring', prosrc => 'timestamptypmodin' },
+{ oid => '2906', descr => 'I/O typmod',
+  proname => 'timestamptypmodout', prorettype => 'cstring',
+  proargtypes => 'int4', prosrc => 'timestamptypmodout' },
+{ oid => '1314', descr => 'less-equal-greater',
+  proname => 'timestamptz_cmp', prorettype => 'int4',
+  proargtypes => 'timestamptz timestamptz', prosrc => 'timestamp_cmp' },
+{ oid => '1315', descr => 'less-equal-greater',
+  proname => 'interval_cmp', prorettype => 'int4',
+  proargtypes => 'interval interval', prosrc => 'interval_cmp' },
+{ oid => '1316', descr => 'convert timestamp to time',
+  proname => 'time', prorettype => 'time', proargtypes => 'timestamp',
+  prosrc => 'timestamp_time' },
+
+{ oid => '1317', descr => 'length',
+  proname => 'length', prorettype => 'int4', proargtypes => 'text',
+  prosrc => 'textlen' },
+{ oid => '1318', descr => 'character length',
+  proname => 'length', prorettype => 'int4', proargtypes => 'bpchar',
+  prosrc => 'bpcharlen' },
+
+{ oid => '1319',
+  proname => 'xideqint4', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'xid int4', prosrc => 'xideq' },
+{ oid => '3309',
+  proname => 'xidneqint4', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'xid int4', prosrc => 'xidneq' },
+
+{ oid => '1326',
+  proname => 'interval_div', prorettype => 'interval',
+  proargtypes => 'interval float8', prosrc => 'interval_div' },
+
+{ oid => '1339', descr => 'base 10 logarithm',
+  proname => 'dlog10', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dlog10' },
+{ oid => '1340', descr => 'base 10 logarithm',
+  proname => 'log', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dlog10' },
+{ oid => '1341', descr => 'natural logarithm',
+  proname => 'ln', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dlog1' },
+{ oid => '1342', descr => 'round to nearest integer',
+  proname => 'round', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dround' },
+{ oid => '1343', descr => 'truncate to integer',
+  proname => 'trunc', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dtrunc' },
+{ oid => '1344', descr => 'square root',
+  proname => 'sqrt', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dsqrt' },
+{ oid => '1345', descr => 'cube root',
+  proname => 'cbrt', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dcbrt' },
+{ oid => '1346', descr => 'exponentiation',
+  proname => 'pow', prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'dpow' },
+{ oid => '1368', descr => 'exponentiation',
+  proname => 'power', prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'dpow' },
+{ oid => '1347', descr => 'natural exponential (e^x)',
+  proname => 'exp', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dexp' },
+
+# This form of obj_description is now deprecated, since it will fail if
+# OIDs are not unique across system catalogs.  Use the other form instead.
+{ oid => '1348', descr => 'deprecated, use two-argument form instead',
+  proname => 'obj_description', prolang => '14', procost => '100',
+  provolatile => 's', prorettype => 'text', proargtypes => 'oid',
+  prosrc => 'select description from pg_catalog.pg_description where objoid = $1 and objsubid = 0' },
+
+{ oid => '1349', descr => 'print type names of oidvector field',
+  proname => 'oidvectortypes', provolatile => 's', prorettype => 'text',
+  proargtypes => 'oidvector', prosrc => 'oidvectortypes' },
+
+{ oid => '1350', descr => 'I/O',
+  proname => 'timetz_in', provolatile => 's', prorettype => 'timetz',
+  proargtypes => 'cstring oid int4', prosrc => 'timetz_in' },
+{ oid => '1351', descr => 'I/O',
+  proname => 'timetz_out', prorettype => 'cstring', proargtypes => 'timetz',
+  prosrc => 'timetz_out' },
+{ oid => '2911', descr => 'I/O typmod',
+  proname => 'timetztypmodin', prorettype => 'int4', proargtypes => '_cstring',
+  prosrc => 'timetztypmodin' },
+{ oid => '2912', descr => 'I/O typmod',
+  proname => 'timetztypmodout', prorettype => 'cstring', proargtypes => 'int4',
+  prosrc => 'timetztypmodout' },
+{ oid => '1352',
+  proname => 'timetz_eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timetz timetz', prosrc => 'timetz_eq' },
+{ oid => '1353',
+  proname => 'timetz_ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timetz timetz', prosrc => 'timetz_ne' },
+{ oid => '1354',
+  proname => 'timetz_lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timetz timetz', prosrc => 'timetz_lt' },
+{ oid => '1355',
+  proname => 'timetz_le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timetz timetz', prosrc => 'timetz_le' },
+{ oid => '1356',
+  proname => 'timetz_ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timetz timetz', prosrc => 'timetz_ge' },
+{ oid => '1357',
+  proname => 'timetz_gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timetz timetz', prosrc => 'timetz_gt' },
+{ oid => '1358', descr => 'less-equal-greater',
+  proname => 'timetz_cmp', prorettype => 'int4', proargtypes => 'timetz timetz',
+  prosrc => 'timetz_cmp' },
+{ oid => '1359',
+  descr => 'convert date and time with time zone to timestamp with time zone',
+  proname => 'timestamptz', prorettype => 'timestamptz',
+  proargtypes => 'date timetz', prosrc => 'datetimetz_timestamptz' },
+
+{ oid => '1364', descr => 'convert abstime to time',
+  proname => 'time', prolang => '14', provolatile => 's', prorettype => 'time',
+  proargtypes => 'abstime',
+  prosrc => 'select cast(cast($1 as timestamp without time zone) as pg_catalog.time)' },
+
+{ oid => '1367', descr => 'character length',
+  proname => 'character_length', prorettype => 'int4', proargtypes => 'bpchar',
+  prosrc => 'bpcharlen' },
+{ oid => '1369', descr => 'character length',
+  proname => 'character_length', prorettype => 'int4', proargtypes => 'text',
+  prosrc => 'textlen' },
+
+{ oid => '1370', descr => 'convert time to interval',
+  proname => 'interval', prorettype => 'interval', proargtypes => 'time',
+  prosrc => 'time_interval' },
+{ oid => '1372', descr => 'character length',
+  proname => 'char_length', prorettype => 'int4', proargtypes => 'bpchar',
+  prosrc => 'bpcharlen' },
+{ oid => '1374', descr => 'octet length',
+  proname => 'octet_length', prorettype => 'int4', proargtypes => 'text',
+  prosrc => 'textoctetlen' },
+{ oid => '1375', descr => 'octet length',
+  proname => 'octet_length', prorettype => 'int4', proargtypes => 'bpchar',
+  prosrc => 'bpcharoctetlen' },
+
+{ oid => '1377', descr => 'larger of two',
+  proname => 'time_larger', prorettype => 'time', proargtypes => 'time time',
+  prosrc => 'time_larger' },
+{ oid => '1378', descr => 'smaller of two',
+  proname => 'time_smaller', prorettype => 'time', proargtypes => 'time time',
+  prosrc => 'time_smaller' },
+{ oid => '1379', descr => 'larger of two',
+  proname => 'timetz_larger', prorettype => 'timetz',
+  proargtypes => 'timetz timetz', prosrc => 'timetz_larger' },
+{ oid => '1380', descr => 'smaller of two',
+  proname => 'timetz_smaller', prorettype => 'timetz',
+  proargtypes => 'timetz timetz', prosrc => 'timetz_smaller' },
+
+{ oid => '1381', descr => 'character length',
+  proname => 'char_length', prorettype => 'int4', proargtypes => 'text',
+  prosrc => 'textlen' },
+
+{ oid => '1382', descr => 'extract field from abstime',
+  proname => 'date_part', prolang => '14', provolatile => 's',
+  prorettype => 'float8', proargtypes => 'text abstime',
+  prosrc => 'select pg_catalog.date_part($1, cast($2 as timestamp with time zone))' },
+{ oid => '1383', descr => 'extract field from reltime',
+  proname => 'date_part', prolang => '14', provolatile => 's',
+  prorettype => 'float8', proargtypes => 'text reltime',
+  prosrc => 'select pg_catalog.date_part($1, cast($2 as pg_catalog.interval))' },
+{ oid => '1384', descr => 'extract field from date',
+  proname => 'date_part', prolang => '14', prorettype => 'float8',
+  proargtypes => 'text date',
+  prosrc => 'select pg_catalog.date_part($1, cast($2 as timestamp without time zone))' },
+{ oid => '1385', descr => 'extract field from time',
+  proname => 'date_part', prorettype => 'float8', proargtypes => 'text time',
+  prosrc => 'time_part' },
+{ oid => '1386',
+  descr => 'date difference from today preserving months and years',
+  proname => 'age', prolang => '14', provolatile => 's',
+  prorettype => 'interval', proargtypes => 'timestamptz',
+  prosrc => 'select pg_catalog.age(cast(current_date as timestamp with time zone), $1)' },
+
+{ oid => '1388',
+  descr => 'convert timestamp with time zone to time with time zone',
+  proname => 'timetz', provolatile => 's', prorettype => 'timetz',
+  proargtypes => 'timestamptz', prosrc => 'timestamptz_timetz' },
+
+{ oid => '1373', descr => 'finite date?',
+  proname => 'isfinite', prorettype => 'bool', proargtypes => 'date',
+  prosrc => 'date_finite' },
+{ oid => '1389', descr => 'finite timestamp?',
+  proname => 'isfinite', prorettype => 'bool', proargtypes => 'timestamptz',
+  prosrc => 'timestamp_finite' },
+{ oid => '1390', descr => 'finite interval?',
+  proname => 'isfinite', prorettype => 'bool', proargtypes => 'interval',
+  prosrc => 'interval_finite' },
+
+{ oid => '1376', descr => 'factorial',
+  proname => 'factorial', prorettype => 'numeric', proargtypes => 'int8',
+  prosrc => 'numeric_fac' },
+{ oid => '1394', descr => 'absolute value',
+  proname => 'abs', prorettype => 'float4', proargtypes => 'float4',
+  prosrc => 'float4abs' },
+{ oid => '1395', descr => 'absolute value',
+  proname => 'abs', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'float8abs' },
+{ oid => '1396', descr => 'absolute value',
+  proname => 'abs', prorettype => 'int8', proargtypes => 'int8',
+  prosrc => 'int8abs' },
+{ oid => '1397', descr => 'absolute value',
+  proname => 'abs', prorettype => 'int4', proargtypes => 'int4',
+  prosrc => 'int4abs' },
+{ oid => '1398', descr => 'absolute value',
+  proname => 'abs', prorettype => 'int2', proargtypes => 'int2',
+  prosrc => 'int2abs' },
+
+# OIDS 1400 - 1499
+
+{ oid => '1400', descr => 'convert varchar to name',
+  proname => 'name', prorettype => 'name', proargtypes => 'varchar',
+  prosrc => 'text_name' },
+{ oid => '1401', descr => 'convert name to varchar',
+  proname => 'varchar', prorettype => 'varchar', proargtypes => 'name',
+  prosrc => 'name_text' },
+
+{ oid => '1402', descr => 'current schema name',
+  proname => 'current_schema', provolatile => 's', prorettype => 'name',
+  proargtypes => '', prosrc => 'current_schema' },
+{ oid => '1403', descr => 'current schema search list',
+  proname => 'current_schemas', provolatile => 's', prorettype => '_name',
+  proargtypes => 'bool', prosrc => 'current_schemas' },
+
+{ oid => '1404', descr => 'substitute portion of string',
+  proname => 'overlay', prorettype => 'text',
+  proargtypes => 'text text int4 int4', prosrc => 'textoverlay' },
+{ oid => '1405', descr => 'substitute portion of string',
+  proname => 'overlay', prorettype => 'text', proargtypes => 'text text int4',
+  prosrc => 'textoverlay_no_len' },
+
+{ oid => '1406', descr => 'vertically aligned',
+  proname => 'isvertical', prorettype => 'bool', proargtypes => 'point point',
+  prosrc => 'point_vert' },
+{ oid => '1407', descr => 'horizontally aligned',
+  proname => 'ishorizontal', prorettype => 'bool', proargtypes => 'point point',
+  prosrc => 'point_horiz' },
+{ oid => '1408', descr => 'parallel',
+  proname => 'isparallel', prorettype => 'bool', proargtypes => 'lseg lseg',
+  prosrc => 'lseg_parallel' },
+{ oid => '1409', descr => 'perpendicular',
+  proname => 'isperp', prorettype => 'bool', proargtypes => 'lseg lseg',
+  prosrc => 'lseg_perp' },
+{ oid => '1410', descr => 'vertical',
+  proname => 'isvertical', prorettype => 'bool', proargtypes => 'lseg',
+  prosrc => 'lseg_vertical' },
+{ oid => '1411', descr => 'horizontal',
+  proname => 'ishorizontal', prorettype => 'bool', proargtypes => 'lseg',
+  prosrc => 'lseg_horizontal' },
+{ oid => '1412', descr => 'parallel',
+  proname => 'isparallel', prorettype => 'bool', proargtypes => 'line line',
+  prosrc => 'line_parallel' },
+{ oid => '1413', descr => 'perpendicular',
+  proname => 'isperp', prorettype => 'bool', proargtypes => 'line line',
+  prosrc => 'line_perp' },
+{ oid => '1414', descr => 'vertical',
+  proname => 'isvertical', prorettype => 'bool', proargtypes => 'line',
+  prosrc => 'line_vertical' },
+{ oid => '1415', descr => 'horizontal',
+  proname => 'ishorizontal', prorettype => 'bool', proargtypes => 'line',
+  prosrc => 'line_horizontal' },
+{ oid => '1416', descr => 'center of',
+  proname => 'point', prorettype => 'point', proargtypes => 'circle',
+  prosrc => 'circle_center' },
+
+{ oid => '1419', descr => 'convert interval to time',
+  proname => 'time', prorettype => 'time', proargtypes => 'interval',
+  prosrc => 'interval_time' },
+
+{ oid => '1421', descr => 'convert points to box',
+  proname => 'box', prorettype => 'box', proargtypes => 'point point',
+  prosrc => 'points_box' },
+{ oid => '1422',
+  proname => 'box_add', prorettype => 'box', proargtypes => 'box point',
+  prosrc => 'box_add' },
+{ oid => '1423',
+  proname => 'box_sub', prorettype => 'box', proargtypes => 'box point',
+  prosrc => 'box_sub' },
+{ oid => '1424',
+  proname => 'box_mul', prorettype => 'box', proargtypes => 'box point',
+  prosrc => 'box_mul' },
+{ oid => '1425',
+  proname => 'box_div', prorettype => 'box', proargtypes => 'box point',
+  prosrc => 'box_div' },
+{ oid => '1426',
+  proname => 'path_contain_pt', prolang => '14', prorettype => 'bool',
+  proargtypes => 'path point', prosrc => 'select pg_catalog.on_ppath($2, $1)' },
+{ oid => '1428',
+  proname => 'poly_contain_pt', prorettype => 'bool',
+  proargtypes => 'polygon point', prosrc => 'poly_contain_pt' },
+{ oid => '1429',
+  proname => 'pt_contained_poly', prorettype => 'bool',
+  proargtypes => 'point polygon', prosrc => 'pt_contained_poly' },
+
+{ oid => '1430', descr => 'path closed?',
+  proname => 'isclosed', prorettype => 'bool', proargtypes => 'path',
+  prosrc => 'path_isclosed' },
+{ oid => '1431', descr => 'path open?',
+  proname => 'isopen', prorettype => 'bool', proargtypes => 'path',
+  prosrc => 'path_isopen' },
+{ oid => '1432',
+  proname => 'path_npoints', prorettype => 'int4', proargtypes => 'path',
+  prosrc => 'path_npoints' },
+
+# pclose and popen might better be named close and open, but that crashes initdb.
+# - thomas 97/04/20
+{ oid => '1433', descr => 'close path',
+  proname => 'pclose', prorettype => 'path', proargtypes => 'path',
+  prosrc => 'path_close' },
+{ oid => '1434', descr => 'open path',
+  proname => 'popen', prorettype => 'path', proargtypes => 'path',
+  prosrc => 'path_open' },
+
+{ oid => '1435',
+  proname => 'path_add', prorettype => 'path', proargtypes => 'path path',
+  prosrc => 'path_add' },
+{ oid => '1436',
+  proname => 'path_add_pt', prorettype => 'path', proargtypes => 'path point',
+  prosrc => 'path_add_pt' },
+{ oid => '1437',
+  proname => 'path_sub_pt', prorettype => 'path', proargtypes => 'path point',
+  prosrc => 'path_sub_pt' },
+{ oid => '1438',
+  proname => 'path_mul_pt', prorettype => 'path', proargtypes => 'path point',
+  prosrc => 'path_mul_pt' },
+{ oid => '1439',
+  proname => 'path_div_pt', prorettype => 'path', proargtypes => 'path point',
+  prosrc => 'path_div_pt' },
+
+{ oid => '1440', descr => 'convert x, y to point',
+  proname => 'point', prorettype => 'point', proargtypes => 'float8 float8',
+  prosrc => 'construct_point' },
+{ oid => '1441',
+  proname => 'point_add', prorettype => 'point', proargtypes => 'point point',
+  prosrc => 'point_add' },
+{ oid => '1442',
+  proname => 'point_sub', prorettype => 'point', proargtypes => 'point point',
+  prosrc => 'point_sub' },
+{ oid => '1443',
+  proname => 'point_mul', prorettype => 'point', proargtypes => 'point point',
+  prosrc => 'point_mul' },
+{ oid => '1444',
+  proname => 'point_div', prorettype => 'point', proargtypes => 'point point',
+  prosrc => 'point_div' },
+
+{ oid => '1445',
+  proname => 'poly_npoints', prorettype => 'int4', proargtypes => 'polygon',
+  prosrc => 'poly_npoints' },
+{ oid => '1446', descr => 'convert polygon to bounding box',
+  proname => 'box', prorettype => 'box', proargtypes => 'polygon',
+  prosrc => 'poly_box' },
+{ oid => '1447', descr => 'convert polygon to path',
+  proname => 'path', prorettype => 'path', proargtypes => 'polygon',
+  prosrc => 'poly_path' },
+{ oid => '1448', descr => 'convert box to polygon',
+  proname => 'polygon', prorettype => 'polygon', proargtypes => 'box',
+  prosrc => 'box_poly' },
+{ oid => '1449', descr => 'convert path to polygon',
+  proname => 'polygon', prorettype => 'polygon', proargtypes => 'path',
+  prosrc => 'path_poly' },
+
+{ oid => '1450', descr => 'I/O',
+  proname => 'circle_in', prorettype => 'circle', proargtypes => 'cstring',
+  prosrc => 'circle_in' },
+{ oid => '1451', descr => 'I/O',
+  proname => 'circle_out', prorettype => 'cstring', proargtypes => 'circle',
+  prosrc => 'circle_out' },
+{ oid => '1452',
+  proname => 'circle_same', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_same' },
+{ oid => '1453',
+  proname => 'circle_contain', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_contain' },
+{ oid => '1454',
+  proname => 'circle_left', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_left' },
+{ oid => '1455',
+  proname => 'circle_overleft', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_overleft' },
+{ oid => '1456',
+  proname => 'circle_overright', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_overright' },
+{ oid => '1457',
+  proname => 'circle_right', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_right' },
+{ oid => '1458',
+  proname => 'circle_contained', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_contained' },
+{ oid => '1459',
+  proname => 'circle_overlap', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_overlap' },
+{ oid => '1460',
+  proname => 'circle_below', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_below' },
+{ oid => '1461',
+  proname => 'circle_above', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_above' },
+{ oid => '1462',
+  proname => 'circle_eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_eq' },
+{ oid => '1463',
+  proname => 'circle_ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_ne' },
+{ oid => '1464',
+  proname => 'circle_lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_lt' },
+{ oid => '1465',
+  proname => 'circle_gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_gt' },
+{ oid => '1466',
+  proname => 'circle_le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_le' },
+{ oid => '1467',
+  proname => 'circle_ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_ge' },
+{ oid => '1468', descr => 'area of circle',
+  proname => 'area', prorettype => 'float8', proargtypes => 'circle',
+  prosrc => 'circle_area' },
+{ oid => '1469', descr => 'diameter of circle',
+  proname => 'diameter', prorettype => 'float8', proargtypes => 'circle',
+  prosrc => 'circle_diameter' },
+{ oid => '1470', descr => 'radius of circle',
+  proname => 'radius', prorettype => 'float8', proargtypes => 'circle',
+  prosrc => 'circle_radius' },
+{ oid => '1471',
+  proname => 'circle_distance', prorettype => 'float8',
+  proargtypes => 'circle circle', prosrc => 'circle_distance' },
+{ oid => '1472',
+  proname => 'circle_center', prorettype => 'point', proargtypes => 'circle',
+  prosrc => 'circle_center' },
+{ oid => '1473', descr => 'convert point and radius to circle',
+  proname => 'circle', prorettype => 'circle', proargtypes => 'point float8',
+  prosrc => 'cr_circle' },
+{ oid => '1474', descr => 'convert polygon to circle',
+  proname => 'circle', prorettype => 'circle', proargtypes => 'polygon',
+  prosrc => 'poly_circle' },
+{ oid => '1475', descr => 'convert vertex count and circle to polygon',
+  proname => 'polygon', prorettype => 'polygon', proargtypes => 'int4 circle',
+  prosrc => 'circle_poly' },
+{ oid => '1476',
+  proname => 'dist_pc', prorettype => 'float8', proargtypes => 'point circle',
+  prosrc => 'dist_pc' },
+{ oid => '1477',
+  proname => 'circle_contain_pt', prorettype => 'bool',
+  proargtypes => 'circle point', prosrc => 'circle_contain_pt' },
+{ oid => '1478',
+  proname => 'pt_contained_circle', prorettype => 'bool',
+  proargtypes => 'point circle', prosrc => 'pt_contained_circle' },
+{ oid => '4091', descr => 'convert point to empty box',
+  proname => 'box', prorettype => 'box', proargtypes => 'point',
+  prosrc => 'point_box' },
+{ oid => '1479', descr => 'convert box to circle',
+  proname => 'circle', prorettype => 'circle', proargtypes => 'box',
+  prosrc => 'box_circle' },
+{ oid => '1480', descr => 'convert circle to box',
+  proname => 'box', prorettype => 'box', proargtypes => 'circle',
+  prosrc => 'circle_box' },
+{ oid => '1481', descr => 'convert to tinterval',
+  proname => 'tinterval', prorettype => 'tinterval',
+  proargtypes => 'abstime abstime', prosrc => 'mktinterval' },
+
+{ oid => '1482',
+  proname => 'lseg_ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'lseg lseg', prosrc => 'lseg_ne' },
+{ oid => '1483',
+  proname => 'lseg_lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'lseg lseg', prosrc => 'lseg_lt' },
+{ oid => '1484',
+  proname => 'lseg_le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'lseg lseg', prosrc => 'lseg_le' },
+{ oid => '1485',
+  proname => 'lseg_gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'lseg lseg', prosrc => 'lseg_gt' },
+{ oid => '1486',
+  proname => 'lseg_ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'lseg lseg', prosrc => 'lseg_ge' },
+{ oid => '1487',
+  proname => 'lseg_length', prorettype => 'float8', proargtypes => 'lseg',
+  prosrc => 'lseg_length' },
+{ oid => '1488',
+  proname => 'close_ls', prorettype => 'point', proargtypes => 'line lseg',
+  prosrc => 'close_ls' },
+{ oid => '1489',
+  proname => 'close_lseg', prorettype => 'point', proargtypes => 'lseg lseg',
+  prosrc => 'close_lseg' },
+
+{ oid => '1490', descr => 'I/O',
+  proname => 'line_in', prorettype => 'line', proargtypes => 'cstring',
+  prosrc => 'line_in' },
+{ oid => '1491', descr => 'I/O',
+  proname => 'line_out', prorettype => 'cstring', proargtypes => 'line',
+  prosrc => 'line_out' },
+{ oid => '1492',
+  proname => 'line_eq', prorettype => 'bool', proargtypes => 'line line',
+  prosrc => 'line_eq' },
+{ oid => '1493', descr => 'construct line from points',
+  proname => 'line', prorettype => 'line', proargtypes => 'point point',
+  prosrc => 'line_construct_pp' },
+{ oid => '1494',
+  proname => 'line_interpt', prorettype => 'point', proargtypes => 'line line',
+  prosrc => 'line_interpt' },
+{ oid => '1495',
+  proname => 'line_intersect', prorettype => 'bool', proargtypes => 'line line',
+  prosrc => 'line_intersect' },
+{ oid => '1496',
+  proname => 'line_parallel', prorettype => 'bool', proargtypes => 'line line',
+  prosrc => 'line_parallel' },
+{ oid => '1497',
+  proname => 'line_perp', prorettype => 'bool', proargtypes => 'line line',
+  prosrc => 'line_perp' },
+{ oid => '1498',
+  proname => 'line_vertical', prorettype => 'bool', proargtypes => 'line',
+  prosrc => 'line_vertical' },
+{ oid => '1499',
+  proname => 'line_horizontal', prorettype => 'bool', proargtypes => 'line',
+  prosrc => 'line_horizontal' },
+
+# OIDS 1500 - 1599
+
+{ oid => '1530', descr => 'distance between endpoints',
+  proname => 'length', prorettype => 'float8', proargtypes => 'lseg',
+  prosrc => 'lseg_length' },
+{ oid => '1531', descr => 'sum of path segments',
+  proname => 'length', prorettype => 'float8', proargtypes => 'path',
+  prosrc => 'path_length' },
+
+{ oid => '1532', descr => 'center of',
+  proname => 'point', prorettype => 'point', proargtypes => 'lseg',
+  prosrc => 'lseg_center' },
+{ oid => '1533', descr => 'center of',
+  proname => 'point', prorettype => 'point', proargtypes => 'path',
+  prosrc => 'path_center' },
+{ oid => '1534', descr => 'center of',
+  proname => 'point', prorettype => 'point', proargtypes => 'box',
+  prosrc => 'box_center' },
+{ oid => '1540', descr => 'center of',
+  proname => 'point', prorettype => 'point', proargtypes => 'polygon',
+  prosrc => 'poly_center' },
+{ oid => '1541', descr => 'diagonal of',
+  proname => 'lseg', prorettype => 'lseg', proargtypes => 'box',
+  prosrc => 'box_diagonal' },
+{ oid => '1542', descr => 'center of',
+  proname => 'center', prorettype => 'point', proargtypes => 'box',
+  prosrc => 'box_center' },
+{ oid => '1543', descr => 'center of',
+  proname => 'center', prorettype => 'point', proargtypes => 'circle',
+  prosrc => 'circle_center' },
+{ oid => '1544', descr => 'convert circle to 12-vertex polygon',
+  proname => 'polygon', prolang => '14', prorettype => 'polygon',
+  proargtypes => 'circle', prosrc => 'select pg_catalog.polygon(12, $1)' },
+{ oid => '1545', descr => 'number of points',
+  proname => 'npoints', prorettype => 'int4', proargtypes => 'path',
+  prosrc => 'path_npoints' },
+{ oid => '1556', descr => 'number of points',
+  proname => 'npoints', prorettype => 'int4', proargtypes => 'polygon',
+  prosrc => 'poly_npoints' },
+
+{ oid => '1564', descr => 'I/O',
+  proname => 'bit_in', prorettype => 'bit', proargtypes => 'cstring oid int4',
+  prosrc => 'bit_in' },
+{ oid => '1565', descr => 'I/O',
+  proname => 'bit_out', prorettype => 'cstring', proargtypes => 'bit',
+  prosrc => 'bit_out' },
+{ oid => '2919', descr => 'I/O typmod',
+  proname => 'bittypmodin', prorettype => 'int4', proargtypes => '_cstring',
+  prosrc => 'bittypmodin' },
+{ oid => '2920', descr => 'I/O typmod',
+  proname => 'bittypmodout', prorettype => 'cstring', proargtypes => 'int4',
+  prosrc => 'bittypmodout' },
+
+{ oid => '1569', descr => 'matches LIKE expression',
+  proname => 'like', prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'textlike' },
+{ oid => '1570', descr => 'does not match LIKE expression',
+  proname => 'notlike', prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'textnlike' },
+{ oid => '1571', descr => 'matches LIKE expression',
+  proname => 'like', prorettype => 'bool', proargtypes => 'name text',
+  prosrc => 'namelike' },
+{ oid => '1572', descr => 'does not match LIKE expression',
+  proname => 'notlike', prorettype => 'bool', proargtypes => 'name text',
+  prosrc => 'namenlike' },
+
+# SEQUENCE functions
+{ oid => '1574', descr => 'sequence next value',
+  proname => 'nextval', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int8', proargtypes => 'regclass', prosrc => 'nextval_oid' },
+{ oid => '1575', descr => 'sequence current value',
+  proname => 'currval', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int8', proargtypes => 'regclass', prosrc => 'currval_oid' },
+{ oid => '1576', descr => 'set sequence value',
+  proname => 'setval', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int8', proargtypes => 'regclass int8',
+  prosrc => 'setval_oid' },
+{ oid => '1765', descr => 'set sequence value and is_called status',
+  proname => 'setval', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int8', proargtypes => 'regclass int8 bool',
+  prosrc => 'setval3_oid' },
+{ oid => '3078',
+  descr => 'sequence parameters, for use by information schema',
+  proname => 'pg_sequence_parameters', provolatile => 's',
+  prorettype => 'record', proargtypes => 'oid',
+  proallargtypes => '{oid,int8,int8,int8,int8,bool,int8,oid}',
+  proargmodes => '{i,o,o,o,o,o,o,o}',
+  proargnames => '{sequence_oid,start_value,minimum_value,maximum_value,increment,cycle_option,cache_size,data_type}',
+  prosrc => 'pg_sequence_parameters' },
+{ oid => '4032', descr => 'sequence last value',
+  proname => 'pg_sequence_last_value', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int8', proargtypes => 'regclass',
+  prosrc => 'pg_sequence_last_value' },
+
+{ oid => '1579', descr => 'I/O',
+  proname => 'varbit_in', prorettype => 'varbit',
+  proargtypes => 'cstring oid int4', prosrc => 'varbit_in' },
+{ oid => '1580', descr => 'I/O',
+  proname => 'varbit_out', prorettype => 'cstring', proargtypes => 'varbit',
+  prosrc => 'varbit_out' },
+{ oid => '2902', descr => 'I/O typmod',
+  proname => 'varbittypmodin', prorettype => 'int4', proargtypes => '_cstring',
+  prosrc => 'varbittypmodin' },
+{ oid => '2921', descr => 'I/O typmod',
+  proname => 'varbittypmodout', prorettype => 'cstring', proargtypes => 'int4',
+  prosrc => 'varbittypmodout' },
+
+{ oid => '1581',
+  proname => 'biteq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bit bit', prosrc => 'biteq' },
+{ oid => '1582',
+  proname => 'bitne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bit bit', prosrc => 'bitne' },
+{ oid => '1592',
+  proname => 'bitge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bit bit', prosrc => 'bitge' },
+{ oid => '1593',
+  proname => 'bitgt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bit bit', prosrc => 'bitgt' },
+{ oid => '1594',
+  proname => 'bitle', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bit bit', prosrc => 'bitle' },
+{ oid => '1595',
+  proname => 'bitlt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bit bit', prosrc => 'bitlt' },
+{ oid => '1596', descr => 'less-equal-greater',
+  proname => 'bitcmp', prorettype => 'int4', proargtypes => 'bit bit',
+  prosrc => 'bitcmp' },
+
+{ oid => '1598', descr => 'random value',
+  proname => 'random', provolatile => 'v', proparallel => 'r',
+  prorettype => 'float8', proargtypes => '', prosrc => 'drandom' },
+{ oid => '1599', descr => 'set random seed',
+  proname => 'setseed', provolatile => 'v', proparallel => 'r',
+  prorettype => 'void', proargtypes => 'float8', prosrc => 'setseed' },
+
+# OIDS 1600 - 1699
+
+{ oid => '1600', descr => 'arcsine',
+  proname => 'asin', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dasin' },
+{ oid => '1601', descr => 'arccosine',
+  proname => 'acos', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dacos' },
+{ oid => '1602', descr => 'arctangent',
+  proname => 'atan', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'datan' },
+{ oid => '1603', descr => 'arctangent, two arguments',
+  proname => 'atan2', prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'datan2' },
+{ oid => '1604', descr => 'sine',
+  proname => 'sin', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dsin' },
+{ oid => '1605', descr => 'cosine',
+  proname => 'cos', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dcos' },
+{ oid => '1606', descr => 'tangent',
+  proname => 'tan', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dtan' },
+{ oid => '1607', descr => 'cotangent',
+  proname => 'cot', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dcot' },
+
+{ oid => '2731', descr => 'arcsine, degrees',
+  proname => 'asind', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dasind' },
+{ oid => '2732', descr => 'arccosine, degrees',
+  proname => 'acosd', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dacosd' },
+{ oid => '2733', descr => 'arctangent, degrees',
+  proname => 'atand', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'datand' },
+{ oid => '2734', descr => 'arctangent, two arguments, degrees',
+  proname => 'atan2d', prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'datan2d' },
+{ oid => '2735', descr => 'sine, degrees',
+  proname => 'sind', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dsind' },
+{ oid => '2736', descr => 'cosine, degrees',
+  proname => 'cosd', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dcosd' },
+{ oid => '2737', descr => 'tangent, degrees',
+  proname => 'tand', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dtand' },
+{ oid => '2738', descr => 'cotangent, degrees',
+  proname => 'cotd', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'dcotd' },
+
+{ oid => '1608', descr => 'radians to degrees',
+  proname => 'degrees', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'degrees' },
+{ oid => '1609', descr => 'degrees to radians',
+  proname => 'radians', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'radians' },
+{ oid => '1610', descr => 'PI',
+  proname => 'pi', prorettype => 'float8', proargtypes => '', prosrc => 'dpi' },
+
+{ oid => '1618',
+  proname => 'interval_mul', prorettype => 'interval',
+  proargtypes => 'interval float8', prosrc => 'interval_mul' },
+
+{ oid => '1620', descr => 'convert first char to int4',
+  proname => 'ascii', prorettype => 'int4', proargtypes => 'text',
+  prosrc => 'ascii' },
+{ oid => '1621', descr => 'convert int4 to char',
+  proname => 'chr', prorettype => 'text', proargtypes => 'int4',
+  prosrc => 'chr' },
+{ oid => '1622', descr => 'replicate string n times',
+  proname => 'repeat', prorettype => 'text', proargtypes => 'text int4',
+  prosrc => 'repeat' },
+
+{ oid => '1623', descr => 'convert SQL99 regexp pattern to POSIX style',
+  proname => 'similar_escape', proisstrict => 'f', prorettype => 'text',
+  proargtypes => 'text text', prosrc => 'similar_escape' },
+
+{ oid => '1624',
+  proname => 'mul_d_interval', prorettype => 'interval',
+  proargtypes => 'float8 interval', prosrc => 'mul_d_interval' },
+
+{ oid => '1631',
+  proname => 'bpcharlike', prorettype => 'bool', proargtypes => 'bpchar text',
+  prosrc => 'textlike' },
+{ oid => '1632',
+  proname => 'bpcharnlike', prorettype => 'bool', proargtypes => 'bpchar text',
+  prosrc => 'textnlike' },
+
+{ oid => '1633',
+  proname => 'texticlike', prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'texticlike' },
+{ oid => '1634',
+  proname => 'texticnlike', prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'texticnlike' },
+{ oid => '1635',
+  proname => 'nameiclike', prorettype => 'bool', proargtypes => 'name text',
+  prosrc => 'nameiclike' },
+{ oid => '1636',
+  proname => 'nameicnlike', prorettype => 'bool', proargtypes => 'name text',
+  prosrc => 'nameicnlike' },
+{ oid => '1637', descr => 'convert LIKE pattern to use backslash escapes',
+  proname => 'like_escape', prorettype => 'text', proargtypes => 'text text',
+  prosrc => 'like_escape' },
+
+{ oid => '1656',
+  proname => 'bpcharicregexeq', prorettype => 'bool',
+  proargtypes => 'bpchar text', prosrc => 'texticregexeq' },
+{ oid => '1657',
+  proname => 'bpcharicregexne', prorettype => 'bool',
+  proargtypes => 'bpchar text', prosrc => 'texticregexne' },
+{ oid => '1658',
+  proname => 'bpcharregexeq', prorettype => 'bool',
+  proargtypes => 'bpchar text', prosrc => 'textregexeq' },
+{ oid => '1659',
+  proname => 'bpcharregexne', prorettype => 'bool',
+  proargtypes => 'bpchar text', prosrc => 'textregexne' },
+{ oid => '1660',
+  proname => 'bpchariclike', prorettype => 'bool', proargtypes => 'bpchar text',
+  prosrc => 'texticlike' },
+{ oid => '1661',
+  proname => 'bpcharicnlike', prorettype => 'bool',
+  proargtypes => 'bpchar text', prosrc => 'texticnlike' },
+
+# Oracle Compatibility Related Functions - By Edmund Mergl <E.Mergl@bawue.de>
+{ oid => '868', descr => 'position of substring',
+  proname => 'strpos', prorettype => 'int4', proargtypes => 'text text',
+  prosrc => 'textpos' },
+{ oid => '870', descr => 'lowercase',
+  proname => 'lower', prorettype => 'text', proargtypes => 'text',
+  prosrc => 'lower' },
+{ oid => '871', descr => 'uppercase',
+  proname => 'upper', prorettype => 'text', proargtypes => 'text',
+  prosrc => 'upper' },
+{ oid => '872', descr => 'capitalize each word',
+  proname => 'initcap', prorettype => 'text', proargtypes => 'text',
+  prosrc => 'initcap' },
+{ oid => '873', descr => 'left-pad string to length',
+  proname => 'lpad', prorettype => 'text', proargtypes => 'text int4 text',
+  prosrc => 'lpad' },
+{ oid => '874', descr => 'right-pad string to length',
+  proname => 'rpad', prorettype => 'text', proargtypes => 'text int4 text',
+  prosrc => 'rpad' },
+{ oid => '875', descr => 'trim selected characters from left end of string',
+  proname => 'ltrim', prorettype => 'text', proargtypes => 'text text',
+  prosrc => 'ltrim' },
+{ oid => '876', descr => 'trim selected characters from right end of string',
+  proname => 'rtrim', prorettype => 'text', proargtypes => 'text text',
+  prosrc => 'rtrim' },
+{ oid => '877', descr => 'extract portion of string',
+  proname => 'substr', prorettype => 'text', proargtypes => 'text int4 int4',
+  prosrc => 'text_substr' },
+{ oid => '878', descr => 'map a set of characters appearing in string',
+  proname => 'translate', prorettype => 'text', proargtypes => 'text text text',
+  prosrc => 'translate' },
+{ oid => '879', descr => 'left-pad string to length',
+  proname => 'lpad', prolang => '14', prorettype => 'text',
+  proargtypes => 'text int4',
+  prosrc => 'select pg_catalog.lpad($1, $2, \'\' \'\')' },
+{ oid => '880', descr => 'right-pad string to length',
+  proname => 'rpad', prolang => '14', prorettype => 'text',
+  proargtypes => 'text int4',
+  prosrc => 'select pg_catalog.rpad($1, $2, \'\' \'\')' },
+{ oid => '881', descr => 'trim spaces from left end of string',
+  proname => 'ltrim', prorettype => 'text', proargtypes => 'text',
+  prosrc => 'ltrim1' },
+{ oid => '882', descr => 'trim spaces from right end of string',
+  proname => 'rtrim', prorettype => 'text', proargtypes => 'text',
+  prosrc => 'rtrim1' },
+{ oid => '883', descr => 'extract portion of string',
+  proname => 'substr', prorettype => 'text', proargtypes => 'text int4',
+  prosrc => 'text_substr_no_len' },
+{ oid => '884', descr => 'trim selected characters from both ends of string',
+  proname => 'btrim', prorettype => 'text', proargtypes => 'text text',
+  prosrc => 'btrim' },
+{ oid => '885', descr => 'trim spaces from both ends of string',
+  proname => 'btrim', prorettype => 'text', proargtypes => 'text',
+  prosrc => 'btrim1' },
+
+{ oid => '936', descr => 'extract portion of string',
+  proname => 'substring', prorettype => 'text', proargtypes => 'text int4 int4',
+  prosrc => 'text_substr' },
+{ oid => '937', descr => 'extract portion of string',
+  proname => 'substring', prorettype => 'text', proargtypes => 'text int4',
+  prosrc => 'text_substr_no_len' },
+{ oid => '2087',
+  descr => 'replace all occurrences in string of old_substr with new_substr',
+  proname => 'replace', prorettype => 'text', proargtypes => 'text text text',
+  prosrc => 'replace_text' },
+{ oid => '2284', descr => 'replace text using regexp',
+  proname => 'regexp_replace', prorettype => 'text',
+  proargtypes => 'text text text', prosrc => 'textregexreplace_noopt' },
+{ oid => '2285', descr => 'replace text using regexp',
+  proname => 'regexp_replace', prorettype => 'text',
+  proargtypes => 'text text text text', prosrc => 'textregexreplace' },
+{ oid => '3396', descr => 'find first match for regexp',
+  proname => 'regexp_match', prorettype => '_text', proargtypes => 'text text',
+  prosrc => 'regexp_match_no_flags' },
+{ oid => '3397', descr => 'find first match for regexp',
+  proname => 'regexp_match', prorettype => '_text',
+  proargtypes => 'text text text', prosrc => 'regexp_match' },
+{ oid => '2763', descr => 'find match(es) for regexp',
+  proname => 'regexp_matches', prorows => '1', proretset => 't',
+  prorettype => '_text', proargtypes => 'text text',
+  prosrc => 'regexp_matches_no_flags' },
+{ oid => '2764', descr => 'find match(es) for regexp',
+  proname => 'regexp_matches', prorows => '10', proretset => 't',
+  prorettype => '_text', proargtypes => 'text text text',
+  prosrc => 'regexp_matches' },
+{ oid => '2088', descr => 'split string by field_sep and return field_num',
+  proname => 'split_part', prorettype => 'text',
+  proargtypes => 'text text int4', prosrc => 'split_text' },
+{ oid => '2765', descr => 'split string by pattern',
+  proname => 'regexp_split_to_table', prorows => '1000', proretset => 't',
+  prorettype => 'text', proargtypes => 'text text',
+  prosrc => 'regexp_split_to_table_no_flags' },
+{ oid => '2766', descr => 'split string by pattern',
+  proname => 'regexp_split_to_table', prorows => '1000', proretset => 't',
+  prorettype => 'text', proargtypes => 'text text text',
+  prosrc => 'regexp_split_to_table' },
+{ oid => '2767', descr => 'split string by pattern',
+  proname => 'regexp_split_to_array', prorettype => '_text',
+  proargtypes => 'text text', prosrc => 'regexp_split_to_array_no_flags' },
+{ oid => '2768', descr => 'split string by pattern',
+  proname => 'regexp_split_to_array', prorettype => '_text',
+  proargtypes => 'text text text', prosrc => 'regexp_split_to_array' },
+{ oid => '2089', descr => 'convert int4 number to hex',
+  proname => 'to_hex', prorettype => 'text', proargtypes => 'int4',
+  prosrc => 'to_hex32' },
+{ oid => '2090', descr => 'convert int8 number to hex',
+  proname => 'to_hex', prorettype => 'text', proargtypes => 'int8',
+  prosrc => 'to_hex64' },
+
+# for character set encoding support
+
+# return database encoding name
+{ oid => '1039', descr => 'encoding name of current database',
+  proname => 'getdatabaseencoding', provolatile => 's', prorettype => 'name',
+  proargtypes => '', prosrc => 'getdatabaseencoding' },
+
+# return client encoding name i.e. session encoding
+{ oid => '810', descr => 'encoding name of current database',
+  proname => 'pg_client_encoding', provolatile => 's', prorettype => 'name',
+  proargtypes => '', prosrc => 'pg_client_encoding' },
+
+{ oid => '1713', descr => 'length of string in specified encoding',
+  proname => 'length', provolatile => 's', prorettype => 'int4',
+  proargtypes => 'bytea name', prosrc => 'length_in_encoding' },
+
+{ oid => '1714',
+  descr => 'convert string with specified source encoding name',
+  proname => 'convert_from', provolatile => 's', prorettype => 'text',
+  proargtypes => 'bytea name', prosrc => 'pg_convert_from' },
+
+{ oid => '1717',
+  descr => 'convert string with specified destination encoding name',
+  proname => 'convert_to', provolatile => 's', prorettype => 'bytea',
+  proargtypes => 'text name', prosrc => 'pg_convert_to' },
+
+{ oid => '1813', descr => 'convert string with specified encoding names',
+  proname => 'convert', provolatile => 's', prorettype => 'bytea',
+  proargtypes => 'bytea name name', prosrc => 'pg_convert' },
+
+{ oid => '1264', descr => 'convert encoding name to encoding id',
+  proname => 'pg_char_to_encoding', provolatile => 's', prorettype => 'int4',
+  proargtypes => 'name', prosrc => 'PG_char_to_encoding' },
+
+{ oid => '1597', descr => 'convert encoding id to encoding name',
+  proname => 'pg_encoding_to_char', provolatile => 's', prorettype => 'name',
+  proargtypes => 'int4', prosrc => 'PG_encoding_to_char' },
+
+{ oid => '2319',
+  descr => 'maximum octet length of a character in given encoding',
+  proname => 'pg_encoding_max_length', prorettype => 'int4',
+  proargtypes => 'int4', prosrc => 'pg_encoding_max_length_sql' },
+
+{ oid => '1638',
+  proname => 'oidgt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'oid oid', prosrc => 'oidgt' },
+{ oid => '1639',
+  proname => 'oidge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'oid oid', prosrc => 'oidge' },
+
+# System-view support functions
+{ oid => '1573', descr => 'source text of a rule',
+  proname => 'pg_get_ruledef', provolatile => 's', prorettype => 'text',
+  proargtypes => 'oid', prosrc => 'pg_get_ruledef' },
+{ oid => '1640', descr => 'select statement of a view',
+  proname => 'pg_get_viewdef', provolatile => 's', proparallel => 'r',
+  prorettype => 'text', proargtypes => 'text',
+  prosrc => 'pg_get_viewdef_name' },
+{ oid => '1641', descr => 'select statement of a view',
+  proname => 'pg_get_viewdef', provolatile => 's', proparallel => 'r',
+  prorettype => 'text', proargtypes => 'oid', prosrc => 'pg_get_viewdef' },
+{ oid => '1642', descr => 'role name by OID (with fallback)',
+  proname => 'pg_get_userbyid', provolatile => 's', prorettype => 'name',
+  proargtypes => 'oid', prosrc => 'pg_get_userbyid' },
+{ oid => '1643', descr => 'index description',
+  proname => 'pg_get_indexdef', provolatile => 's', prorettype => 'text',
+  proargtypes => 'oid', prosrc => 'pg_get_indexdef' },
+{ oid => '3415', descr => 'extended statistics object description',
+  proname => 'pg_get_statisticsobjdef', provolatile => 's',
+  prorettype => 'text', proargtypes => 'oid',
+  prosrc => 'pg_get_statisticsobjdef' },
+{ oid => '3352', descr => 'partition key description',
+  proname => 'pg_get_partkeydef', provolatile => 's', prorettype => 'text',
+  proargtypes => 'oid', prosrc => 'pg_get_partkeydef' },
+{ oid => '3408', descr => 'partition constraint description',
+  proname => 'pg_get_partition_constraintdef', provolatile => 's',
+  prorettype => 'text', proargtypes => 'oid',
+  prosrc => 'pg_get_partition_constraintdef' },
+{ oid => '1662', descr => 'trigger description',
+  proname => 'pg_get_triggerdef', provolatile => 's', prorettype => 'text',
+  proargtypes => 'oid', prosrc => 'pg_get_triggerdef' },
+{ oid => '1387', descr => 'constraint description',
+  proname => 'pg_get_constraintdef', provolatile => 's', prorettype => 'text',
+  proargtypes => 'oid', prosrc => 'pg_get_constraintdef' },
+{ oid => '1716', descr => 'deparse an encoded expression',
+  proname => 'pg_get_expr', provolatile => 's', prorettype => 'text',
+  proargtypes => 'pg_node_tree oid', prosrc => 'pg_get_expr' },
+{ oid => '1665', descr => 'name of sequence for a serial column',
+  proname => 'pg_get_serial_sequence', provolatile => 's', prorettype => 'text',
+  proargtypes => 'text text', prosrc => 'pg_get_serial_sequence' },
+{ oid => '2098', descr => 'definition of a function',
+  proname => 'pg_get_functiondef', provolatile => 's', prorettype => 'text',
+  proargtypes => 'oid', prosrc => 'pg_get_functiondef' },
+{ oid => '2162', descr => 'argument list of a function',
+  proname => 'pg_get_function_arguments', provolatile => 's',
+  prorettype => 'text', proargtypes => 'oid',
+  prosrc => 'pg_get_function_arguments' },
+{ oid => '2232', descr => 'identity argument list of a function',
+  proname => 'pg_get_function_identity_arguments', provolatile => 's',
+  prorettype => 'text', proargtypes => 'oid',
+  prosrc => 'pg_get_function_identity_arguments' },
+{ oid => '2165', descr => 'result type of a function',
+  proname => 'pg_get_function_result', provolatile => 's', prorettype => 'text',
+  proargtypes => 'oid', prosrc => 'pg_get_function_result' },
+{ oid => '3808', descr => 'function argument default',
+  proname => 'pg_get_function_arg_default', provolatile => 's',
+  prorettype => 'text', proargtypes => 'oid int4',
+  prosrc => 'pg_get_function_arg_default' },
+
+{ oid => '1686', descr => 'list of SQL keywords',
+  proname => 'pg_get_keywords', procost => '10', prorows => '400',
+  proretset => 't', provolatile => 's', prorettype => 'record',
+  proargtypes => '', proallargtypes => '{text,char,text}',
+  proargmodes => '{o,o,o}', proargnames => '{word,catcode,catdesc}',
+  prosrc => 'pg_get_keywords' },
+
+{ oid => '2289', descr => 'convert generic options array to name/value table',
+  proname => 'pg_options_to_table', prorows => '3', proretset => 't',
+  provolatile => 's', prorettype => 'record', proargtypes => '_text',
+  proallargtypes => '{_text,text,text}', proargmodes => '{i,o,o}',
+  proargnames => '{options_array,option_name,option_value}',
+  prosrc => 'pg_options_to_table' },
+
+{ oid => '1619', descr => 'type of the argument',
+  proname => 'pg_typeof', proisstrict => 'f', provolatile => 's',
+  prorettype => 'regtype', proargtypes => 'any', prosrc => 'pg_typeof' },
+{ oid => '3162',
+  descr => 'collation of the argument; implementation of the COLLATION FOR expression',
+  proname => 'pg_collation_for', proisstrict => 'f', provolatile => 's',
+  prorettype => 'text', proargtypes => 'any', prosrc => 'pg_collation_for' },
+
+{ oid => '3842', descr => 'is a relation insertable/updatable/deletable',
+  proname => 'pg_relation_is_updatable', procost => '10', provolatile => 's',
+  prorettype => 'int4', proargtypes => 'regclass bool',
+  prosrc => 'pg_relation_is_updatable' },
+{ oid => '3843', descr => 'is a column updatable',
+  proname => 'pg_column_is_updatable', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'regclass int2 bool',
+  prosrc => 'pg_column_is_updatable' },
+
+{ oid => '6120', descr => 'oid of replica identity index if any',
+  proname => 'pg_get_replica_identity_index', procost => '10',
+  provolatile => 's', prorettype => 'regclass', proargtypes => 'regclass',
+  prosrc => 'pg_get_replica_identity_index' },
+
+# Deferrable unique constraint trigger
+{ oid => '1250', descr => 'deferred UNIQUE constraint check',
+  proname => 'unique_key_recheck', provolatile => 'v', prorettype => 'trigger',
+  proargtypes => '', prosrc => 'unique_key_recheck' },
+
+# Generic referential integrity constraint triggers
+{ oid => '1644', descr => 'referential integrity FOREIGN KEY ... REFERENCES',
+  proname => 'RI_FKey_check_ins', provolatile => 'v', prorettype => 'trigger',
+  proargtypes => '', prosrc => 'RI_FKey_check_ins' },
+{ oid => '1645', descr => 'referential integrity FOREIGN KEY ... REFERENCES',
+  proname => 'RI_FKey_check_upd', provolatile => 'v', prorettype => 'trigger',
+  proargtypes => '', prosrc => 'RI_FKey_check_upd' },
+{ oid => '1646', descr => 'referential integrity ON DELETE CASCADE',
+  proname => 'RI_FKey_cascade_del', provolatile => 'v', prorettype => 'trigger',
+  proargtypes => '', prosrc => 'RI_FKey_cascade_del' },
+{ oid => '1647', descr => 'referential integrity ON UPDATE CASCADE',
+  proname => 'RI_FKey_cascade_upd', provolatile => 'v', prorettype => 'trigger',
+  proargtypes => '', prosrc => 'RI_FKey_cascade_upd' },
+{ oid => '1648', descr => 'referential integrity ON DELETE RESTRICT',
+  proname => 'RI_FKey_restrict_del', provolatile => 'v',
+  prorettype => 'trigger', proargtypes => '',
+  prosrc => 'RI_FKey_restrict_del' },
+{ oid => '1649', descr => 'referential integrity ON UPDATE RESTRICT',
+  proname => 'RI_FKey_restrict_upd', provolatile => 'v',
+  prorettype => 'trigger', proargtypes => '',
+  prosrc => 'RI_FKey_restrict_upd' },
+{ oid => '1650', descr => 'referential integrity ON DELETE SET NULL',
+  proname => 'RI_FKey_setnull_del', provolatile => 'v', prorettype => 'trigger',
+  proargtypes => '', prosrc => 'RI_FKey_setnull_del' },
+{ oid => '1651', descr => 'referential integrity ON UPDATE SET NULL',
+  proname => 'RI_FKey_setnull_upd', provolatile => 'v', prorettype => 'trigger',
+  proargtypes => '', prosrc => 'RI_FKey_setnull_upd' },
+{ oid => '1652', descr => 'referential integrity ON DELETE SET DEFAULT',
+  proname => 'RI_FKey_setdefault_del', provolatile => 'v',
+  prorettype => 'trigger', proargtypes => '',
+  prosrc => 'RI_FKey_setdefault_del' },
+{ oid => '1653', descr => 'referential integrity ON UPDATE SET DEFAULT',
+  proname => 'RI_FKey_setdefault_upd', provolatile => 'v',
+  prorettype => 'trigger', proargtypes => '',
+  prosrc => 'RI_FKey_setdefault_upd' },
+{ oid => '1654', descr => 'referential integrity ON DELETE NO ACTION',
+  proname => 'RI_FKey_noaction_del', provolatile => 'v',
+  prorettype => 'trigger', proargtypes => '',
+  prosrc => 'RI_FKey_noaction_del' },
+{ oid => '1655', descr => 'referential integrity ON UPDATE NO ACTION',
+  proname => 'RI_FKey_noaction_upd', provolatile => 'v',
+  prorettype => 'trigger', proargtypes => '',
+  prosrc => 'RI_FKey_noaction_upd' },
+
+{ oid => '1666',
+  proname => 'varbiteq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'varbit varbit', prosrc => 'biteq' },
+{ oid => '1667',
+  proname => 'varbitne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'varbit varbit', prosrc => 'bitne' },
+{ oid => '1668',
+  proname => 'varbitge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'varbit varbit', prosrc => 'bitge' },
+{ oid => '1669',
+  proname => 'varbitgt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'varbit varbit', prosrc => 'bitgt' },
+{ oid => '1670',
+  proname => 'varbitle', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'varbit varbit', prosrc => 'bitle' },
+{ oid => '1671',
+  proname => 'varbitlt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'varbit varbit', prosrc => 'bitlt' },
+{ oid => '1672', descr => 'less-equal-greater',
+  proname => 'varbitcmp', prorettype => 'int4', proargtypes => 'varbit varbit',
+  prosrc => 'bitcmp' },
+
+# avoid the C names bitand and bitor, since they are C++ keywords
+{ oid => '1673',
+  proname => 'bitand', prorettype => 'bit', proargtypes => 'bit bit',
+  prosrc => 'bit_and' },
+{ oid => '1674',
+  proname => 'bitor', prorettype => 'bit', proargtypes => 'bit bit',
+  prosrc => 'bit_or' },
+{ oid => '1675',
+  proname => 'bitxor', prorettype => 'bit', proargtypes => 'bit bit',
+  prosrc => 'bitxor' },
+{ oid => '1676',
+  proname => 'bitnot', prorettype => 'bit', proargtypes => 'bit',
+  prosrc => 'bitnot' },
+{ oid => '1677',
+  proname => 'bitshiftleft', prorettype => 'bit', proargtypes => 'bit int4',
+  prosrc => 'bitshiftleft' },
+{ oid => '1678',
+  proname => 'bitshiftright', prorettype => 'bit', proargtypes => 'bit int4',
+  prosrc => 'bitshiftright' },
+{ oid => '1679',
+  proname => 'bitcat', prorettype => 'varbit', proargtypes => 'varbit varbit',
+  prosrc => 'bitcat' },
+{ oid => '1680', descr => 'extract portion of bitstring',
+  proname => 'substring', prorettype => 'bit', proargtypes => 'bit int4 int4',
+  prosrc => 'bitsubstr' },
+{ oid => '1681', descr => 'bitstring length',
+  proname => 'length', prorettype => 'int4', proargtypes => 'bit',
+  prosrc => 'bitlength' },
+{ oid => '1682', descr => 'octet length',
+  proname => 'octet_length', prorettype => 'int4', proargtypes => 'bit',
+  prosrc => 'bitoctetlength' },
+{ oid => '1683', descr => 'convert int4 to bitstring',
+  proname => 'bit', prorettype => 'bit', proargtypes => 'int4 int4',
+  prosrc => 'bitfromint4' },
+{ oid => '1684', descr => 'convert bitstring to int4',
+  proname => 'int4', prorettype => 'int4', proargtypes => 'bit',
+  prosrc => 'bittoint4' },
+
+{ oid => '1685', descr => 'adjust bit() to typmod length',
+  proname => 'bit', prorettype => 'bit', proargtypes => 'bit int4 bool',
+  prosrc => 'bit' },
+{ oid => '3158', descr => 'transform a varbit length coercion',
+  proname => 'varbit_transform', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'varbit_transform' },
+{ oid => '1687', descr => 'adjust varbit() to typmod length',
+  proname => 'varbit', protransform => 'varbit_transform',
+  prorettype => 'varbit', proargtypes => 'varbit int4 bool',
+  prosrc => 'varbit' },
+
+{ oid => '1698', descr => 'position of sub-bitstring',
+  proname => 'position', prorettype => 'int4', proargtypes => 'bit bit',
+  prosrc => 'bitposition' },
+{ oid => '1699', descr => 'extract portion of bitstring',
+  proname => 'substring', prorettype => 'bit', proargtypes => 'bit int4',
+  prosrc => 'bitsubstr_no_len' },
+
+{ oid => '3030', descr => 'substitute portion of bitstring',
+  proname => 'overlay', prorettype => 'bit', proargtypes => 'bit bit int4 int4',
+  prosrc => 'bitoverlay' },
+{ oid => '3031', descr => 'substitute portion of bitstring',
+  proname => 'overlay', prorettype => 'bit', proargtypes => 'bit bit int4',
+  prosrc => 'bitoverlay_no_len' },
+{ oid => '3032', descr => 'get bit',
+  proname => 'get_bit', prorettype => 'int4', proargtypes => 'bit int4',
+  prosrc => 'bitgetbit' },
+{ oid => '3033', descr => 'set bit',
+  proname => 'set_bit', prorettype => 'bit', proargtypes => 'bit int4 int4',
+  prosrc => 'bitsetbit' },
+
+# for macaddr type support
+{ oid => '436', descr => 'I/O',
+  proname => 'macaddr_in', prorettype => 'macaddr', proargtypes => 'cstring',
+  prosrc => 'macaddr_in' },
+{ oid => '437', descr => 'I/O',
+  proname => 'macaddr_out', prorettype => 'cstring', proargtypes => 'macaddr',
+  prosrc => 'macaddr_out' },
+
+{ oid => '753', descr => 'MACADDR manufacturer fields',
+  proname => 'trunc', prorettype => 'macaddr', proargtypes => 'macaddr',
+  prosrc => 'macaddr_trunc' },
+
+{ oid => '830',
+  proname => 'macaddr_eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'macaddr macaddr', prosrc => 'macaddr_eq' },
+{ oid => '831',
+  proname => 'macaddr_lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'macaddr macaddr', prosrc => 'macaddr_lt' },
+{ oid => '832',
+  proname => 'macaddr_le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'macaddr macaddr', prosrc => 'macaddr_le' },
+{ oid => '833',
+  proname => 'macaddr_gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'macaddr macaddr', prosrc => 'macaddr_gt' },
+{ oid => '834',
+  proname => 'macaddr_ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'macaddr macaddr', prosrc => 'macaddr_ge' },
+{ oid => '835',
+  proname => 'macaddr_ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'macaddr macaddr', prosrc => 'macaddr_ne' },
+{ oid => '836', descr => 'less-equal-greater',
+  proname => 'macaddr_cmp', prorettype => 'int4',
+  proargtypes => 'macaddr macaddr', prosrc => 'macaddr_cmp' },
+{ oid => '3144',
+  proname => 'macaddr_not', prorettype => 'macaddr', proargtypes => 'macaddr',
+  prosrc => 'macaddr_not' },
+{ oid => '3145',
+  proname => 'macaddr_and', prorettype => 'macaddr',
+  proargtypes => 'macaddr macaddr', prosrc => 'macaddr_and' },
+{ oid => '3146',
+  proname => 'macaddr_or', prorettype => 'macaddr',
+  proargtypes => 'macaddr macaddr', prosrc => 'macaddr_or' },
+{ oid => '3359', descr => 'sort support',
+  proname => 'macaddr_sortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'macaddr_sortsupport' },
+
+# for macaddr8 type support
+{ oid => '4110', descr => 'I/O',
+  proname => 'macaddr8_in', prorettype => 'macaddr8', proargtypes => 'cstring',
+  prosrc => 'macaddr8_in' },
+{ oid => '4111', descr => 'I/O',
+  proname => 'macaddr8_out', prorettype => 'cstring', proargtypes => 'macaddr8',
+  prosrc => 'macaddr8_out' },
+
+{ oid => '4112', descr => 'MACADDR8 manufacturer fields',
+  proname => 'trunc', prorettype => 'macaddr8', proargtypes => 'macaddr8',
+  prosrc => 'macaddr8_trunc' },
+
+{ oid => '4113',
+  proname => 'macaddr8_eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'macaddr8 macaddr8', prosrc => 'macaddr8_eq' },
+{ oid => '4114',
+  proname => 'macaddr8_lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'macaddr8 macaddr8', prosrc => 'macaddr8_lt' },
+{ oid => '4115',
+  proname => 'macaddr8_le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'macaddr8 macaddr8', prosrc => 'macaddr8_le' },
+{ oid => '4116',
+  proname => 'macaddr8_gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'macaddr8 macaddr8', prosrc => 'macaddr8_gt' },
+{ oid => '4117',
+  proname => 'macaddr8_ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'macaddr8 macaddr8', prosrc => 'macaddr8_ge' },
+{ oid => '4118',
+  proname => 'macaddr8_ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'macaddr8 macaddr8', prosrc => 'macaddr8_ne' },
+{ oid => '4119', descr => 'less-equal-greater',
+  proname => 'macaddr8_cmp', prorettype => 'int4',
+  proargtypes => 'macaddr8 macaddr8', prosrc => 'macaddr8_cmp' },
+{ oid => '4120',
+  proname => 'macaddr8_not', prorettype => 'macaddr8',
+  proargtypes => 'macaddr8', prosrc => 'macaddr8_not' },
+{ oid => '4121',
+  proname => 'macaddr8_and', prorettype => 'macaddr8',
+  proargtypes => 'macaddr8 macaddr8', prosrc => 'macaddr8_and' },
+{ oid => '4122',
+  proname => 'macaddr8_or', prorettype => 'macaddr8',
+  proargtypes => 'macaddr8 macaddr8', prosrc => 'macaddr8_or' },
+{ oid => '4123', descr => 'convert macaddr to macaddr8',
+  proname => 'macaddr8', prorettype => 'macaddr8', proargtypes => 'macaddr',
+  prosrc => 'macaddrtomacaddr8' },
+{ oid => '4124', descr => 'convert macaddr8 to macaddr',
+  proname => 'macaddr', prorettype => 'macaddr', proargtypes => 'macaddr8',
+  prosrc => 'macaddr8tomacaddr' },
+{ oid => '4125', descr => 'set 7th bit in macaddr8',
+  proname => 'macaddr8_set7bit', prorettype => 'macaddr8',
+  proargtypes => 'macaddr8', prosrc => 'macaddr8_set7bit' },
+
+# for inet type support
+{ oid => '910', descr => 'I/O',
+  proname => 'inet_in', prorettype => 'inet', proargtypes => 'cstring',
+  prosrc => 'inet_in' },
+{ oid => '911', descr => 'I/O',
+  proname => 'inet_out', prorettype => 'cstring', proargtypes => 'inet',
+  prosrc => 'inet_out' },
+
+# for cidr type support
+{ oid => '1267', descr => 'I/O',
+  proname => 'cidr_in', prorettype => 'cidr', proargtypes => 'cstring',
+  prosrc => 'cidr_in' },
+{ oid => '1427', descr => 'I/O',
+  proname => 'cidr_out', prorettype => 'cstring', proargtypes => 'cidr',
+  prosrc => 'cidr_out' },
+
+# these are used for both inet and cidr
+{ oid => '920',
+  proname => 'network_eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'inet inet', prosrc => 'network_eq' },
+{ oid => '921',
+  proname => 'network_lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'inet inet', prosrc => 'network_lt' },
+{ oid => '922',
+  proname => 'network_le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'inet inet', prosrc => 'network_le' },
+{ oid => '923',
+  proname => 'network_gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'inet inet', prosrc => 'network_gt' },
+{ oid => '924',
+  proname => 'network_ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'inet inet', prosrc => 'network_ge' },
+{ oid => '925',
+  proname => 'network_ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'inet inet', prosrc => 'network_ne' },
+{ oid => '3562', descr => 'larger of two',
+  proname => 'network_larger', prorettype => 'inet', proargtypes => 'inet inet',
+  prosrc => 'network_larger' },
+{ oid => '3563', descr => 'smaller of two',
+  proname => 'network_smaller', prorettype => 'inet',
+  proargtypes => 'inet inet', prosrc => 'network_smaller' },
+{ oid => '926', descr => 'less-equal-greater',
+  proname => 'network_cmp', prorettype => 'int4', proargtypes => 'inet inet',
+  prosrc => 'network_cmp' },
+{ oid => '927',
+  proname => 'network_sub', prorettype => 'bool', proargtypes => 'inet inet',
+  prosrc => 'network_sub' },
+{ oid => '928',
+  proname => 'network_subeq', prorettype => 'bool', proargtypes => 'inet inet',
+  prosrc => 'network_subeq' },
+{ oid => '929',
+  proname => 'network_sup', prorettype => 'bool', proargtypes => 'inet inet',
+  prosrc => 'network_sup' },
+{ oid => '930',
+  proname => 'network_supeq', prorettype => 'bool', proargtypes => 'inet inet',
+  prosrc => 'network_supeq' },
+{ oid => '3551',
+  proname => 'network_overlap', prorettype => 'bool',
+  proargtypes => 'inet inet', prosrc => 'network_overlap' },
+
+# inet/cidr functions
+{ oid => '598', descr => 'abbreviated display of inet value',
+  proname => 'abbrev', prorettype => 'text', proargtypes => 'inet',
+  prosrc => 'inet_abbrev' },
+{ oid => '599', descr => 'abbreviated display of cidr value',
+  proname => 'abbrev', prorettype => 'text', proargtypes => 'cidr',
+  prosrc => 'cidr_abbrev' },
+{ oid => '605', descr => 'change netmask of inet',
+  proname => 'set_masklen', prorettype => 'inet', proargtypes => 'inet int4',
+  prosrc => 'inet_set_masklen' },
+{ oid => '635', descr => 'change netmask of cidr',
+  proname => 'set_masklen', prorettype => 'cidr', proargtypes => 'cidr int4',
+  prosrc => 'cidr_set_masklen' },
+{ oid => '711', descr => 'address family (4 for IPv4, 6 for IPv6)',
+  proname => 'family', prorettype => 'int4', proargtypes => 'inet',
+  prosrc => 'network_family' },
+{ oid => '683', descr => 'network part of address',
+  proname => 'network', prorettype => 'cidr', proargtypes => 'inet',
+  prosrc => 'network_network' },
+{ oid => '696', descr => 'netmask of address',
+  proname => 'netmask', prorettype => 'inet', proargtypes => 'inet',
+  prosrc => 'network_netmask' },
+{ oid => '697', descr => 'netmask length',
+  proname => 'masklen', prorettype => 'int4', proargtypes => 'inet',
+  prosrc => 'network_masklen' },
+{ oid => '698', descr => 'broadcast address of network',
+  proname => 'broadcast', prorettype => 'inet', proargtypes => 'inet',
+  prosrc => 'network_broadcast' },
+{ oid => '699', descr => 'show address octets only',
+  proname => 'host', prorettype => 'text', proargtypes => 'inet',
+  prosrc => 'network_host' },
+{ oid => '730', descr => 'show all parts of inet/cidr value',
+  proname => 'text', prorettype => 'text', proargtypes => 'inet',
+  prosrc => 'network_show' },
+{ oid => '1362', descr => 'hostmask of address',
+  proname => 'hostmask', prorettype => 'inet', proargtypes => 'inet',
+  prosrc => 'network_hostmask' },
+{ oid => '1715', descr => 'convert inet to cidr',
+  proname => 'cidr', prorettype => 'cidr', proargtypes => 'inet',
+  prosrc => 'inet_to_cidr' },
+
+{ oid => '2196', descr => 'inet address of the client',
+  proname => 'inet_client_addr', proisstrict => 'f', provolatile => 's',
+  proparallel => 'r', prorettype => 'inet', proargtypes => '',
+  prosrc => 'inet_client_addr' },
+{ oid => '2197', descr => 'client\'s port number for this connection',
+  proname => 'inet_client_port', proisstrict => 'f', provolatile => 's',
+  proparallel => 'r', prorettype => 'int4', proargtypes => '',
+  prosrc => 'inet_client_port' },
+{ oid => '2198', descr => 'inet address of the server',
+  proname => 'inet_server_addr', proisstrict => 'f', provolatile => 's',
+  prorettype => 'inet', proargtypes => '', prosrc => 'inet_server_addr' },
+{ oid => '2199', descr => 'server\'s port number for this connection',
+  proname => 'inet_server_port', proisstrict => 'f', provolatile => 's',
+  prorettype => 'int4', proargtypes => '', prosrc => 'inet_server_port' },
+
+{ oid => '2627',
+  proname => 'inetnot', prorettype => 'inet', proargtypes => 'inet',
+  prosrc => 'inetnot' },
+{ oid => '2628',
+  proname => 'inetand', prorettype => 'inet', proargtypes => 'inet inet',
+  prosrc => 'inetand' },
+{ oid => '2629',
+  proname => 'inetor', prorettype => 'inet', proargtypes => 'inet inet',
+  prosrc => 'inetor' },
+{ oid => '2630',
+  proname => 'inetpl', prorettype => 'inet', proargtypes => 'inet int8',
+  prosrc => 'inetpl' },
+{ oid => '2631',
+  proname => 'int8pl_inet', prolang => '14', prorettype => 'inet',
+  proargtypes => 'int8 inet', prosrc => 'select $2 + $1' },
+{ oid => '2632',
+  proname => 'inetmi_int8', prorettype => 'inet', proargtypes => 'inet int8',
+  prosrc => 'inetmi_int8' },
+{ oid => '2633',
+  proname => 'inetmi', prorettype => 'int8', proargtypes => 'inet inet',
+  prosrc => 'inetmi' },
+{ oid => '4071', descr => 'are the addresses from the same family?',
+  proname => 'inet_same_family', prorettype => 'bool',
+  proargtypes => 'inet inet', prosrc => 'inet_same_family' },
+{ oid => '4063',
+  descr => 'the smallest network which includes both of the given networks',
+  proname => 'inet_merge', prorettype => 'cidr', proargtypes => 'inet inet',
+  prosrc => 'inet_merge' },
+
+# GiST support for inet and cidr
+{ oid => '3553', descr => 'GiST support',
+  proname => 'inet_gist_consistent', prorettype => 'bool',
+  proargtypes => 'internal inet int2 oid internal',
+  prosrc => 'inet_gist_consistent' },
+{ oid => '3554', descr => 'GiST support',
+  proname => 'inet_gist_union', prorettype => 'inet',
+  proargtypes => 'internal internal', prosrc => 'inet_gist_union' },
+{ oid => '3555', descr => 'GiST support',
+  proname => 'inet_gist_compress', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'inet_gist_compress' },
+{ oid => '3573', descr => 'GiST support',
+  proname => 'inet_gist_fetch', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'inet_gist_fetch' },
+{ oid => '3557', descr => 'GiST support',
+  proname => 'inet_gist_penalty', prorettype => 'internal',
+  proargtypes => 'internal internal internal', prosrc => 'inet_gist_penalty' },
+{ oid => '3558', descr => 'GiST support',
+  proname => 'inet_gist_picksplit', prorettype => 'internal',
+  proargtypes => 'internal internal', prosrc => 'inet_gist_picksplit' },
+{ oid => '3559', descr => 'GiST support',
+  proname => 'inet_gist_same', prorettype => 'internal',
+  proargtypes => 'inet inet internal', prosrc => 'inet_gist_same' },
+
+# SP-GiST support for inet and cidr
+{ oid => '3795', descr => 'SP-GiST support',
+  proname => 'inet_spg_config', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'inet_spg_config' },
+{ oid => '3796', descr => 'SP-GiST support',
+  proname => 'inet_spg_choose', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'inet_spg_choose' },
+{ oid => '3797', descr => 'SP-GiST support',
+  proname => 'inet_spg_picksplit', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'inet_spg_picksplit' },
+{ oid => '3798', descr => 'SP-GiST support',
+  proname => 'inet_spg_inner_consistent', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'inet_spg_inner_consistent' },
+{ oid => '3799', descr => 'SP-GiST support',
+  proname => 'inet_spg_leaf_consistent', prorettype => 'bool',
+  proargtypes => 'internal internal', prosrc => 'inet_spg_leaf_consistent' },
+
+# Selectivity estimation for inet and cidr
+{ oid => '3560', descr => 'restriction selectivity for network operators',
+  proname => 'networksel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'networksel' },
+{ oid => '3561', descr => 'join selectivity for network operators',
+  proname => 'networkjoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'networkjoinsel' },
+
+{ oid => '1690',
+  proname => 'time_mi_time', prorettype => 'interval',
+  proargtypes => 'time time', prosrc => 'time_mi_time' },
+
+{ oid => '1691',
+  proname => 'boolle', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bool bool', prosrc => 'boolle' },
+{ oid => '1692',
+  proname => 'boolge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bool bool', prosrc => 'boolge' },
+{ oid => '1693', descr => 'less-equal-greater',
+  proname => 'btboolcmp', prorettype => 'int4', proargtypes => 'bool bool',
+  prosrc => 'btboolcmp' },
+
+{ oid => '1688', descr => 'hash',
+  proname => 'time_hash', prorettype => 'int4', proargtypes => 'time',
+  prosrc => 'time_hash' },
+{ oid => '3409', descr => 'hash',
+  proname => 'time_hash_extended', prorettype => 'int8',
+  proargtypes => 'time int8', prosrc => 'time_hash_extended' },
+{ oid => '1696', descr => 'hash',
+  proname => 'timetz_hash', prorettype => 'int4', proargtypes => 'timetz',
+  prosrc => 'timetz_hash' },
+{ oid => '3410', descr => 'hash',
+  proname => 'timetz_hash_extended', prorettype => 'int8',
+  proargtypes => 'timetz int8', prosrc => 'timetz_hash_extended' },
+{ oid => '1697', descr => 'hash',
+  proname => 'interval_hash', prorettype => 'int4', proargtypes => 'interval',
+  prosrc => 'interval_hash' },
+{ oid => '3418', descr => 'hash',
+  proname => 'interval_hash_extended', prorettype => 'int8',
+  proargtypes => 'interval int8', prosrc => 'interval_hash_extended' },
+
+# OID's 1700 - 1799 NUMERIC data type
+
+{ oid => '1701', descr => 'I/O',
+  proname => 'numeric_in', prorettype => 'numeric',
+  proargtypes => 'cstring oid int4', prosrc => 'numeric_in' },
+{ oid => '1702', descr => 'I/O',
+  proname => 'numeric_out', prorettype => 'cstring', proargtypes => 'numeric',
+  prosrc => 'numeric_out' },
+{ oid => '2917', descr => 'I/O typmod',
+  proname => 'numerictypmodin', prorettype => 'int4', proargtypes => '_cstring',
+  prosrc => 'numerictypmodin' },
+{ oid => '2918', descr => 'I/O typmod',
+  proname => 'numerictypmodout', prorettype => 'cstring', proargtypes => 'int4',
+  prosrc => 'numerictypmodout' },
+{ oid => '3157', descr => 'transform a numeric length coercion',
+  proname => 'numeric_transform', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'numeric_transform' },
+{ oid => '1703', descr => 'adjust numeric to typmod precision/scale',
+  proname => 'numeric', protransform => 'numeric_transform',
+  prorettype => 'numeric', proargtypes => 'numeric int4', prosrc => 'numeric' },
+{ oid => '1704',
+  proname => 'numeric_abs', prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'numeric_abs' },
+{ oid => '1705', descr => 'absolute value',
+  proname => 'abs', prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'numeric_abs' },
+{ oid => '1706', descr => 'sign of value',
+  proname => 'sign', prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'numeric_sign' },
+{ oid => '1707', descr => 'value rounded to \'scale\'',
+  proname => 'round', prorettype => 'numeric', proargtypes => 'numeric int4',
+  prosrc => 'numeric_round' },
+{ oid => '1708', descr => 'value rounded to \'scale\' of zero',
+  proname => 'round', prolang => '14', prorettype => 'numeric',
+  proargtypes => 'numeric', prosrc => 'select pg_catalog.round($1,0)' },
+{ oid => '1709', descr => 'value truncated to \'scale\'',
+  proname => 'trunc', prorettype => 'numeric', proargtypes => 'numeric int4',
+  prosrc => 'numeric_trunc' },
+{ oid => '1710', descr => 'value truncated to \'scale\' of zero',
+  proname => 'trunc', prolang => '14', prorettype => 'numeric',
+  proargtypes => 'numeric', prosrc => 'select pg_catalog.trunc($1,0)' },
+{ oid => '1711', descr => 'nearest integer >= value',
+  proname => 'ceil', prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'numeric_ceil' },
+{ oid => '2167', descr => 'nearest integer >= value',
+  proname => 'ceiling', prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'numeric_ceil' },
+{ oid => '1712', descr => 'nearest integer <= value',
+  proname => 'floor', prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'numeric_floor' },
+{ oid => '1718',
+  proname => 'numeric_eq', prorettype => 'bool',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_eq' },
+{ oid => '1719',
+  proname => 'numeric_ne', prorettype => 'bool',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_ne' },
+{ oid => '1720',
+  proname => 'numeric_gt', prorettype => 'bool',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_gt' },
+{ oid => '1721',
+  proname => 'numeric_ge', prorettype => 'bool',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_ge' },
+{ oid => '1722',
+  proname => 'numeric_lt', prorettype => 'bool',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_lt' },
+{ oid => '1723',
+  proname => 'numeric_le', prorettype => 'bool',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_le' },
+{ oid => '1724',
+  proname => 'numeric_add', prorettype => 'numeric',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_add' },
+{ oid => '1725',
+  proname => 'numeric_sub', prorettype => 'numeric',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_sub' },
+{ oid => '1726',
+  proname => 'numeric_mul', prorettype => 'numeric',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_mul' },
+{ oid => '1727',
+  proname => 'numeric_div', prorettype => 'numeric',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_div' },
+{ oid => '1728', descr => 'modulus',
+  proname => 'mod', prorettype => 'numeric', proargtypes => 'numeric numeric',
+  prosrc => 'numeric_mod' },
+{ oid => '1729',
+  proname => 'numeric_mod', prorettype => 'numeric',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_mod' },
+{ oid => '1730', descr => 'square root',
+  proname => 'sqrt', prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'numeric_sqrt' },
+{ oid => '1731', descr => 'square root',
+  proname => 'numeric_sqrt', prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'numeric_sqrt' },
+{ oid => '1732', descr => 'natural exponential (e^x)',
+  proname => 'exp', prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'numeric_exp' },
+{ oid => '1733', descr => 'natural exponential (e^x)',
+  proname => 'numeric_exp', prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'numeric_exp' },
+{ oid => '1734', descr => 'natural logarithm',
+  proname => 'ln', prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'numeric_ln' },
+{ oid => '1735', descr => 'natural logarithm',
+  proname => 'numeric_ln', prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'numeric_ln' },
+{ oid => '1736', descr => 'logarithm base m of n',
+  proname => 'log', prorettype => 'numeric', proargtypes => 'numeric numeric',
+  prosrc => 'numeric_log' },
+{ oid => '1737', descr => 'logarithm base m of n',
+  proname => 'numeric_log', prorettype => 'numeric',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_log' },
+{ oid => '1738', descr => 'exponentiation',
+  proname => 'pow', prorettype => 'numeric', proargtypes => 'numeric numeric',
+  prosrc => 'numeric_power' },
+{ oid => '2169', descr => 'exponentiation',
+  proname => 'power', prorettype => 'numeric', proargtypes => 'numeric numeric',
+  prosrc => 'numeric_power' },
+{ oid => '1739',
+  proname => 'numeric_power', prorettype => 'numeric',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_power' },
+{ oid => '3281', descr => 'number of decimal digits in the fractional part',
+  proname => 'scale', prorettype => 'int4', proargtypes => 'numeric',
+  prosrc => 'numeric_scale' },
+{ oid => '1740', descr => 'convert int4 to numeric',
+  proname => 'numeric', prorettype => 'numeric', proargtypes => 'int4',
+  prosrc => 'int4_numeric' },
+{ oid => '1741', descr => 'base 10 logarithm',
+  proname => 'log', prolang => '14', prorettype => 'numeric',
+  proargtypes => 'numeric', prosrc => 'select pg_catalog.log(10, $1)' },
+{ oid => '1742', descr => 'convert float4 to numeric',
+  proname => 'numeric', prorettype => 'numeric', proargtypes => 'float4',
+  prosrc => 'float4_numeric' },
+{ oid => '1743', descr => 'convert float8 to numeric',
+  proname => 'numeric', prorettype => 'numeric', proargtypes => 'float8',
+  prosrc => 'float8_numeric' },
+{ oid => '1744', descr => 'convert numeric to int4',
+  proname => 'int4', prorettype => 'int4', proargtypes => 'numeric',
+  prosrc => 'numeric_int4' },
+{ oid => '1745', descr => 'convert numeric to float4',
+  proname => 'float4', prorettype => 'float4', proargtypes => 'numeric',
+  prosrc => 'numeric_float4' },
+{ oid => '1746', descr => 'convert numeric to float8',
+  proname => 'float8', prorettype => 'float8', proargtypes => 'numeric',
+  prosrc => 'numeric_float8' },
+{ oid => '1973', descr => 'trunc(x/y)',
+  proname => 'div', prorettype => 'numeric', proargtypes => 'numeric numeric',
+  prosrc => 'numeric_div_trunc' },
+{ oid => '1980', descr => 'trunc(x/y)',
+  proname => 'numeric_div_trunc', prorettype => 'numeric',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_div_trunc' },
+{ oid => '2170', descr => 'bucket number of operand in equal-width histogram',
+  proname => 'width_bucket', prorettype => 'int4',
+  proargtypes => 'numeric numeric numeric int4',
+  prosrc => 'width_bucket_numeric' },
+
+{ oid => '1747',
+  proname => 'time_pl_interval', prorettype => 'time',
+  proargtypes => 'time interval', prosrc => 'time_pl_interval' },
+{ oid => '1748',
+  proname => 'time_mi_interval', prorettype => 'time',
+  proargtypes => 'time interval', prosrc => 'time_mi_interval' },
+{ oid => '1749',
+  proname => 'timetz_pl_interval', prorettype => 'timetz',
+  proargtypes => 'timetz interval', prosrc => 'timetz_pl_interval' },
+{ oid => '1750',
+  proname => 'timetz_mi_interval', prorettype => 'timetz',
+  proargtypes => 'timetz interval', prosrc => 'timetz_mi_interval' },
+
+{ oid => '1764', descr => 'increment by one',
+  proname => 'numeric_inc', prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'numeric_inc' },
+{ oid => '1766', descr => 'smaller of two',
+  proname => 'numeric_smaller', prorettype => 'numeric',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_smaller' },
+{ oid => '1767', descr => 'larger of two',
+  proname => 'numeric_larger', prorettype => 'numeric',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_larger' },
+{ oid => '1769', descr => 'less-equal-greater',
+  proname => 'numeric_cmp', prorettype => 'int4',
+  proargtypes => 'numeric numeric', prosrc => 'numeric_cmp' },
+{ oid => '3283', descr => 'sort support',
+  proname => 'numeric_sortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'numeric_sortsupport' },
+{ oid => '1771',
+  proname => 'numeric_uminus', prorettype => 'numeric',
+  proargtypes => 'numeric', prosrc => 'numeric_uminus' },
+{ oid => '1779', descr => 'convert numeric to int8',
+  proname => 'int8', prorettype => 'int8', proargtypes => 'numeric',
+  prosrc => 'numeric_int8' },
+{ oid => '1781', descr => 'convert int8 to numeric',
+  proname => 'numeric', prorettype => 'numeric', proargtypes => 'int8',
+  prosrc => 'int8_numeric' },
+{ oid => '1782', descr => 'convert int2 to numeric',
+  proname => 'numeric', prorettype => 'numeric', proargtypes => 'int2',
+  prosrc => 'int2_numeric' },
+{ oid => '1783', descr => 'convert numeric to int2',
+  proname => 'int2', prorettype => 'int2', proargtypes => 'numeric',
+  prosrc => 'numeric_int2' },
+
+{ oid => '3556', descr => 'convert jsonb to boolean',
+  proname => 'bool', prorettype => 'bool', proargtypes => 'jsonb',
+  prosrc => 'jsonb_bool' },
+{ oid => '3449', descr => 'convert jsonb to numeric',
+  proname => 'numeric', prorettype => 'numeric', proargtypes => 'jsonb',
+  prosrc => 'jsonb_numeric' },
+{ oid => '3450', descr => 'convert jsonb to int2',
+  proname => 'int2', prorettype => 'int2', proargtypes => 'jsonb',
+  prosrc => 'jsonb_int2' },
+{ oid => '3451', descr => 'convert jsonb to int4',
+  proname => 'int4', prorettype => 'int4', proargtypes => 'jsonb',
+  prosrc => 'jsonb_int4' },
+{ oid => '3452', descr => 'convert jsonb to int8',
+  proname => 'int8', prorettype => 'int8', proargtypes => 'jsonb',
+  prosrc => 'jsonb_int8' },
+{ oid => '3453', descr => 'convert jsonb to float4',
+  proname => 'float4', prorettype => 'float4', proargtypes => 'jsonb',
+  prosrc => 'jsonb_float4' },
+{ oid => '2580', descr => 'convert jsonb to float8',
+  proname => 'float8', prorettype => 'float8', proargtypes => 'jsonb',
+  prosrc => 'jsonb_float8' },
+
+# formatting
+{ oid => '1770', descr => 'format timestamp with time zone to text',
+  proname => 'to_char', provolatile => 's', prorettype => 'text',
+  proargtypes => 'timestamptz text', prosrc => 'timestamptz_to_char' },
+{ oid => '1772', descr => 'format numeric to text',
+  proname => 'to_char', provolatile => 's', prorettype => 'text',
+  proargtypes => 'numeric text', prosrc => 'numeric_to_char' },
+{ oid => '1773', descr => 'format int4 to text',
+  proname => 'to_char', provolatile => 's', prorettype => 'text',
+  proargtypes => 'int4 text', prosrc => 'int4_to_char' },
+{ oid => '1774', descr => 'format int8 to text',
+  proname => 'to_char', provolatile => 's', prorettype => 'text',
+  proargtypes => 'int8 text', prosrc => 'int8_to_char' },
+{ oid => '1775', descr => 'format float4 to text',
+  proname => 'to_char', provolatile => 's', prorettype => 'text',
+  proargtypes => 'float4 text', prosrc => 'float4_to_char' },
+{ oid => '1776', descr => 'format float8 to text',
+  proname => 'to_char', provolatile => 's', prorettype => 'text',
+  proargtypes => 'float8 text', prosrc => 'float8_to_char' },
+{ oid => '1777', descr => 'convert text to numeric',
+  proname => 'to_number', provolatile => 's', prorettype => 'numeric',
+  proargtypes => 'text text', prosrc => 'numeric_to_number' },
+{ oid => '1778', descr => 'convert text to timestamp with time zone',
+  proname => 'to_timestamp', provolatile => 's', prorettype => 'timestamptz',
+  proargtypes => 'text text', prosrc => 'to_timestamp' },
+{ oid => '1780', descr => 'convert text to date',
+  proname => 'to_date', provolatile => 's', prorettype => 'date',
+  proargtypes => 'text text', prosrc => 'to_date' },
+{ oid => '1768', descr => 'format interval to text',
+  proname => 'to_char', provolatile => 's', prorettype => 'text',
+  proargtypes => 'interval text', prosrc => 'interval_to_char' },
+
+{ oid => '1282', descr => 'quote an identifier for usage in a querystring',
+  proname => 'quote_ident', prorettype => 'text', proargtypes => 'text',
+  prosrc => 'quote_ident' },
+{ oid => '1283', descr => 'quote a literal for usage in a querystring',
+  proname => 'quote_literal', prorettype => 'text', proargtypes => 'text',
+  prosrc => 'quote_literal' },
+{ oid => '1285', descr => 'quote a data value for usage in a querystring',
+  proname => 'quote_literal', prolang => '14', provolatile => 's',
+  prorettype => 'text', proargtypes => 'anyelement',
+  prosrc => 'select pg_catalog.quote_literal($1::pg_catalog.text)' },
+{ oid => '1289',
+  descr => 'quote a possibly-null literal for usage in a querystring',
+  proname => 'quote_nullable', proisstrict => 'f', prorettype => 'text',
+  proargtypes => 'text', prosrc => 'quote_nullable' },
+{ oid => '1290',
+  descr => 'quote a possibly-null data value for usage in a querystring',
+  proname => 'quote_nullable', prolang => '14', proisstrict => 'f',
+  provolatile => 's', prorettype => 'text', proargtypes => 'anyelement',
+  prosrc => 'select pg_catalog.quote_nullable($1::pg_catalog.text)' },
+
+{ oid => '1798', descr => 'I/O',
+  proname => 'oidin', prorettype => 'oid', proargtypes => 'cstring',
+  prosrc => 'oidin' },
+{ oid => '1799', descr => 'I/O',
+  proname => 'oidout', prorettype => 'cstring', proargtypes => 'oid',
+  prosrc => 'oidout' },
+
+{ oid => '3058', descr => 'concatenate values',
+  proname => 'concat', provariadic => 'any', proisstrict => 'f',
+  provolatile => 's', prorettype => 'text', proargtypes => 'any',
+  proallargtypes => '{any}', proargmodes => '{v}', prosrc => 'text_concat' },
+{ oid => '3059', descr => 'concatenate values with separators',
+  proname => 'concat_ws', provariadic => 'any', proisstrict => 'f',
+  provolatile => 's', prorettype => 'text', proargtypes => 'text any',
+  proallargtypes => '{text,any}', proargmodes => '{i,v}',
+  prosrc => 'text_concat_ws' },
+{ oid => '3060', descr => 'extract the first n characters',
+  proname => 'left', prorettype => 'text', proargtypes => 'text int4',
+  prosrc => 'text_left' },
+{ oid => '3061', descr => 'extract the last n characters',
+  proname => 'right', prorettype => 'text', proargtypes => 'text int4',
+  prosrc => 'text_right' },
+{ oid => '3062', descr => 'reverse text',
+  proname => 'reverse', prorettype => 'text', proargtypes => 'text',
+  prosrc => 'text_reverse' },
+{ oid => '3539', descr => 'format text message',
+  proname => 'format', provariadic => 'any', proisstrict => 'f',
+  provolatile => 's', prorettype => 'text', proargtypes => 'text any',
+  proallargtypes => '{text,any}', proargmodes => '{i,v}',
+  prosrc => 'text_format' },
+{ oid => '3540', descr => 'format text message',
+  proname => 'format', proisstrict => 'f', provolatile => 's',
+  prorettype => 'text', proargtypes => 'text', prosrc => 'text_format_nv' },
+
+{ oid => '1810', descr => 'length in bits',
+  proname => 'bit_length', prolang => '14', prorettype => 'int4',
+  proargtypes => 'bytea', prosrc => 'select pg_catalog.octet_length($1) * 8' },
+{ oid => '1811', descr => 'length in bits',
+  proname => 'bit_length', prolang => '14', prorettype => 'int4',
+  proargtypes => 'text', prosrc => 'select pg_catalog.octet_length($1) * 8' },
+{ oid => '1812', descr => 'length in bits',
+  proname => 'bit_length', prolang => '14', prorettype => 'int4',
+  proargtypes => 'bit', prosrc => 'select pg_catalog.length($1)' },
+
+# Selectivity estimators for LIKE and related operators
+{ oid => '1814', descr => 'restriction selectivity of ILIKE',
+  proname => 'iclikesel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'iclikesel' },
+{ oid => '1815', descr => 'restriction selectivity of NOT ILIKE',
+  proname => 'icnlikesel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'icnlikesel' },
+{ oid => '1816', descr => 'join selectivity of ILIKE',
+  proname => 'iclikejoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'iclikejoinsel' },
+{ oid => '1817', descr => 'join selectivity of NOT ILIKE',
+  proname => 'icnlikejoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'icnlikejoinsel' },
+{ oid => '1818', descr => 'restriction selectivity of regex match',
+  proname => 'regexeqsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'regexeqsel' },
+{ oid => '1819', descr => 'restriction selectivity of LIKE',
+  proname => 'likesel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'likesel' },
+{ oid => '1820',
+  descr => 'restriction selectivity of case-insensitive regex match',
+  proname => 'icregexeqsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'icregexeqsel' },
+{ oid => '1821', descr => 'restriction selectivity of regex non-match',
+  proname => 'regexnesel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'regexnesel' },
+{ oid => '1822', descr => 'restriction selectivity of NOT LIKE',
+  proname => 'nlikesel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'nlikesel' },
+{ oid => '1823',
+  descr => 'restriction selectivity of case-insensitive regex non-match',
+  proname => 'icregexnesel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'icregexnesel' },
+{ oid => '1824', descr => 'join selectivity of regex match',
+  proname => 'regexeqjoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'regexeqjoinsel' },
+{ oid => '1825', descr => 'join selectivity of LIKE',
+  proname => 'likejoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'likejoinsel' },
+{ oid => '1826', descr => 'join selectivity of case-insensitive regex match',
+  proname => 'icregexeqjoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'icregexeqjoinsel' },
+{ oid => '1827', descr => 'join selectivity of regex non-match',
+  proname => 'regexnejoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'regexnejoinsel' },
+{ oid => '1828', descr => 'join selectivity of NOT LIKE',
+  proname => 'nlikejoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'nlikejoinsel' },
+{ oid => '1829',
+  descr => 'join selectivity of case-insensitive regex non-match',
+  proname => 'icregexnejoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'icregexnejoinsel' },
+{ oid => '3437', descr => 'restriction selectivity of exact prefix',
+  proname => 'prefixsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'prefixsel' },
+{ oid => '3438', descr => 'join selectivity of exact prefix',
+  proname => 'prefixjoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'prefixjoinsel' },
+
+# Aggregate-related functions
+{ oid => '1830', descr => 'aggregate final function',
+  proname => 'float8_avg', prorettype => 'float8', proargtypes => '_float8',
+  prosrc => 'float8_avg' },
+{ oid => '2512', descr => 'aggregate final function',
+  proname => 'float8_var_pop', prorettype => 'float8', proargtypes => '_float8',
+  prosrc => 'float8_var_pop' },
+{ oid => '1831', descr => 'aggregate final function',
+  proname => 'float8_var_samp', prorettype => 'float8',
+  proargtypes => '_float8', prosrc => 'float8_var_samp' },
+{ oid => '2513', descr => 'aggregate final function',
+  proname => 'float8_stddev_pop', prorettype => 'float8',
+  proargtypes => '_float8', prosrc => 'float8_stddev_pop' },
+{ oid => '1832', descr => 'aggregate final function',
+  proname => 'float8_stddev_samp', prorettype => 'float8',
+  proargtypes => '_float8', prosrc => 'float8_stddev_samp' },
+{ oid => '1833', descr => 'aggregate transition function',
+  proname => 'numeric_accum', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal numeric', prosrc => 'numeric_accum' },
+{ oid => '3341', descr => 'aggregate combine function',
+  proname => 'numeric_combine', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal internal', prosrc => 'numeric_combine' },
+{ oid => '2858', descr => 'aggregate transition function',
+  proname => 'numeric_avg_accum', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal numeric', prosrc => 'numeric_avg_accum' },
+{ oid => '3337', descr => 'aggregate combine function',
+  proname => 'numeric_avg_combine', proisstrict => 'f',
+  prorettype => 'internal', proargtypes => 'internal internal',
+  prosrc => 'numeric_avg_combine' },
+{ oid => '2740', descr => 'aggregate serial function',
+  proname => 'numeric_avg_serialize', prorettype => 'bytea',
+  proargtypes => 'internal', prosrc => 'numeric_avg_serialize' },
+{ oid => '2741', descr => 'aggregate deserial function',
+  proname => 'numeric_avg_deserialize', prorettype => 'internal',
+  proargtypes => 'bytea internal', prosrc => 'numeric_avg_deserialize' },
+{ oid => '3335', descr => 'aggregate serial function',
+  proname => 'numeric_serialize', prorettype => 'bytea',
+  proargtypes => 'internal', prosrc => 'numeric_serialize' },
+{ oid => '3336', descr => 'aggregate deserial function',
+  proname => 'numeric_deserialize', prorettype => 'internal',
+  proargtypes => 'bytea internal', prosrc => 'numeric_deserialize' },
+{ oid => '3548', descr => 'aggregate transition function',
+  proname => 'numeric_accum_inv', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal numeric', prosrc => 'numeric_accum_inv' },
+{ oid => '1834', descr => 'aggregate transition function',
+  proname => 'int2_accum', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal int2', prosrc => 'int2_accum' },
+{ oid => '1835', descr => 'aggregate transition function',
+  proname => 'int4_accum', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal int4', prosrc => 'int4_accum' },
+{ oid => '1836', descr => 'aggregate transition function',
+  proname => 'int8_accum', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal int8', prosrc => 'int8_accum' },
+{ oid => '3338', descr => 'aggregate combine function',
+  proname => 'numeric_poly_combine', proisstrict => 'f',
+  prorettype => 'internal', proargtypes => 'internal internal',
+  prosrc => 'numeric_poly_combine' },
+{ oid => '3339', descr => 'aggregate serial function',
+  proname => 'numeric_poly_serialize', prorettype => 'bytea',
+  proargtypes => 'internal', prosrc => 'numeric_poly_serialize' },
+{ oid => '3340', descr => 'aggregate deserial function',
+  proname => 'numeric_poly_deserialize', prorettype => 'internal',
+  proargtypes => 'bytea internal', prosrc => 'numeric_poly_deserialize' },
+{ oid => '2746', descr => 'aggregate transition function',
+  proname => 'int8_avg_accum', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal int8', prosrc => 'int8_avg_accum' },
+{ oid => '3567', descr => 'aggregate transition function',
+  proname => 'int2_accum_inv', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal int2', prosrc => 'int2_accum_inv' },
+{ oid => '3568', descr => 'aggregate transition function',
+  proname => 'int4_accum_inv', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal int4', prosrc => 'int4_accum_inv' },
+{ oid => '3569', descr => 'aggregate transition function',
+  proname => 'int8_accum_inv', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal int8', prosrc => 'int8_accum_inv' },
+{ oid => '3387', descr => 'aggregate transition function',
+  proname => 'int8_avg_accum_inv', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal int8', prosrc => 'int8_avg_accum_inv' },
+{ oid => '2785', descr => 'aggregate combine function',
+  proname => 'int8_avg_combine', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal internal', prosrc => 'int8_avg_combine' },
+{ oid => '2786', descr => 'aggregate serial function',
+  proname => 'int8_avg_serialize', prorettype => 'bytea',
+  proargtypes => 'internal', prosrc => 'int8_avg_serialize' },
+{ oid => '2787', descr => 'aggregate deserial function',
+  proname => 'int8_avg_deserialize', prorettype => 'internal',
+  proargtypes => 'bytea internal', prosrc => 'int8_avg_deserialize' },
+{ oid => '3324', descr => 'aggregate combine function',
+  proname => 'int4_avg_combine', prorettype => '_int8',
+  proargtypes => '_int8 _int8', prosrc => 'int4_avg_combine' },
+{ oid => '3178', descr => 'aggregate final function',
+  proname => 'numeric_sum', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'internal', prosrc => 'numeric_sum' },
+{ oid => '1837', descr => 'aggregate final function',
+  proname => 'numeric_avg', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'internal', prosrc => 'numeric_avg' },
+{ oid => '2514', descr => 'aggregate final function',
+  proname => 'numeric_var_pop', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'internal', prosrc => 'numeric_var_pop' },
+{ oid => '1838', descr => 'aggregate final function',
+  proname => 'numeric_var_samp', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'internal', prosrc => 'numeric_var_samp' },
+{ oid => '2596', descr => 'aggregate final function',
+  proname => 'numeric_stddev_pop', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'internal', prosrc => 'numeric_stddev_pop' },
+{ oid => '1839', descr => 'aggregate final function',
+  proname => 'numeric_stddev_samp', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'internal', prosrc => 'numeric_stddev_samp' },
+{ oid => '1840', descr => 'aggregate transition function',
+  proname => 'int2_sum', proisstrict => 'f', prorettype => 'int8',
+  proargtypes => 'int8 int2', prosrc => 'int2_sum' },
+{ oid => '1841', descr => 'aggregate transition function',
+  proname => 'int4_sum', proisstrict => 'f', prorettype => 'int8',
+  proargtypes => 'int8 int4', prosrc => 'int4_sum' },
+{ oid => '1842', descr => 'aggregate transition function',
+  proname => 'int8_sum', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'numeric int8', prosrc => 'int8_sum' },
+{ oid => '3388', descr => 'aggregate final function',
+  proname => 'numeric_poly_sum', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'internal', prosrc => 'numeric_poly_sum' },
+{ oid => '3389', descr => 'aggregate final function',
+  proname => 'numeric_poly_avg', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'internal', prosrc => 'numeric_poly_avg' },
+{ oid => '3390', descr => 'aggregate final function',
+  proname => 'numeric_poly_var_pop', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'internal',
+  prosrc => 'numeric_poly_var_pop' },
+{ oid => '3391', descr => 'aggregate final function',
+  proname => 'numeric_poly_var_samp', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'internal',
+  prosrc => 'numeric_poly_var_samp' },
+{ oid => '3392', descr => 'aggregate final function',
+  proname => 'numeric_poly_stddev_pop', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'internal',
+  prosrc => 'numeric_poly_stddev_pop' },
+{ oid => '3393', descr => 'aggregate final function',
+  proname => 'numeric_poly_stddev_samp', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'internal',
+  prosrc => 'numeric_poly_stddev_samp' },
+
+{ oid => '1843', descr => 'aggregate transition function',
+  proname => 'interval_accum', prorettype => '_interval',
+  proargtypes => '_interval interval', prosrc => 'interval_accum' },
+{ oid => '3325', descr => 'aggregate combine function',
+  proname => 'interval_combine', prorettype => '_interval',
+  proargtypes => '_interval _interval', prosrc => 'interval_combine' },
+{ oid => '3549', descr => 'aggregate transition function',
+  proname => 'interval_accum_inv', prorettype => '_interval',
+  proargtypes => '_interval interval', prosrc => 'interval_accum_inv' },
+{ oid => '1844', descr => 'aggregate final function',
+  proname => 'interval_avg', prorettype => 'interval',
+  proargtypes => '_interval', prosrc => 'interval_avg' },
+{ oid => '1962', descr => 'aggregate transition function',
+  proname => 'int2_avg_accum', prorettype => '_int8',
+  proargtypes => '_int8 int2', prosrc => 'int2_avg_accum' },
+{ oid => '1963', descr => 'aggregate transition function',
+  proname => 'int4_avg_accum', prorettype => '_int8',
+  proargtypes => '_int8 int4', prosrc => 'int4_avg_accum' },
+{ oid => '3570', descr => 'aggregate transition function',
+  proname => 'int2_avg_accum_inv', prorettype => '_int8',
+  proargtypes => '_int8 int2', prosrc => 'int2_avg_accum_inv' },
+{ oid => '3571', descr => 'aggregate transition function',
+  proname => 'int4_avg_accum_inv', prorettype => '_int8',
+  proargtypes => '_int8 int4', prosrc => 'int4_avg_accum_inv' },
+{ oid => '1964', descr => 'aggregate final function',
+  proname => 'int8_avg', prorettype => 'numeric', proargtypes => '_int8',
+  prosrc => 'int8_avg' },
+{ oid => '3572', descr => 'aggregate final function',
+  proname => 'int2int4_sum', prorettype => 'int8', proargtypes => '_int8',
+  prosrc => 'int2int4_sum' },
+{ oid => '2805', descr => 'aggregate transition function',
+  proname => 'int8inc_float8_float8', prorettype => 'int8',
+  proargtypes => 'int8 float8 float8', prosrc => 'int8inc_float8_float8' },
+{ oid => '2806', descr => 'aggregate transition function',
+  proname => 'float8_regr_accum', prorettype => '_float8',
+  proargtypes => '_float8 float8 float8', prosrc => 'float8_regr_accum' },
+{ oid => '3342', descr => 'aggregate combine function',
+  proname => 'float8_regr_combine', prorettype => '_float8',
+  proargtypes => '_float8 _float8', prosrc => 'float8_regr_combine' },
+{ oid => '2807', descr => 'aggregate final function',
+  proname => 'float8_regr_sxx', prorettype => 'float8',
+  proargtypes => '_float8', prosrc => 'float8_regr_sxx' },
+{ oid => '2808', descr => 'aggregate final function',
+  proname => 'float8_regr_syy', prorettype => 'float8',
+  proargtypes => '_float8', prosrc => 'float8_regr_syy' },
+{ oid => '2809', descr => 'aggregate final function',
+  proname => 'float8_regr_sxy', prorettype => 'float8',
+  proargtypes => '_float8', prosrc => 'float8_regr_sxy' },
+{ oid => '2810', descr => 'aggregate final function',
+  proname => 'float8_regr_avgx', prorettype => 'float8',
+  proargtypes => '_float8', prosrc => 'float8_regr_avgx' },
+{ oid => '2811', descr => 'aggregate final function',
+  proname => 'float8_regr_avgy', prorettype => 'float8',
+  proargtypes => '_float8', prosrc => 'float8_regr_avgy' },
+{ oid => '2812', descr => 'aggregate final function',
+  proname => 'float8_regr_r2', prorettype => 'float8', proargtypes => '_float8',
+  prosrc => 'float8_regr_r2' },
+{ oid => '2813', descr => 'aggregate final function',
+  proname => 'float8_regr_slope', prorettype => 'float8',
+  proargtypes => '_float8', prosrc => 'float8_regr_slope' },
+{ oid => '2814', descr => 'aggregate final function',
+  proname => 'float8_regr_intercept', prorettype => 'float8',
+  proargtypes => '_float8', prosrc => 'float8_regr_intercept' },
+{ oid => '2815', descr => 'aggregate final function',
+  proname => 'float8_covar_pop', prorettype => 'float8',
+  proargtypes => '_float8', prosrc => 'float8_covar_pop' },
+{ oid => '2816', descr => 'aggregate final function',
+  proname => 'float8_covar_samp', prorettype => 'float8',
+  proargtypes => '_float8', prosrc => 'float8_covar_samp' },
+{ oid => '2817', descr => 'aggregate final function',
+  proname => 'float8_corr', prorettype => 'float8', proargtypes => '_float8',
+  prosrc => 'float8_corr' },
+
+{ oid => '3535', descr => 'aggregate transition function',
+  proname => 'string_agg_transfn', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal text text', prosrc => 'string_agg_transfn' },
+{ oid => '3536', descr => 'aggregate final function',
+  proname => 'string_agg_finalfn', proisstrict => 'f', prorettype => 'text',
+  proargtypes => 'internal', prosrc => 'string_agg_finalfn' },
+{ oid => '3538', descr => 'concatenate aggregate input into a string',
+  proname => 'string_agg', prokind => 'a', proisstrict => 'f',
+  prorettype => 'text', proargtypes => 'text text',
+  prosrc => 'aggregate_dummy' },
+{ oid => '3543', descr => 'aggregate transition function',
+  proname => 'bytea_string_agg_transfn', proisstrict => 'f',
+  prorettype => 'internal', proargtypes => 'internal bytea bytea',
+  prosrc => 'bytea_string_agg_transfn' },
+{ oid => '3544', descr => 'aggregate final function',
+  proname => 'bytea_string_agg_finalfn', proisstrict => 'f',
+  prorettype => 'bytea', proargtypes => 'internal',
+  prosrc => 'bytea_string_agg_finalfn' },
+{ oid => '3545', descr => 'concatenate aggregate input into a bytea',
+  proname => 'string_agg', prokind => 'a', proisstrict => 'f',
+  prorettype => 'bytea', proargtypes => 'bytea bytea',
+  prosrc => 'aggregate_dummy' },
+
+# To ASCII conversion
+{ oid => '1845', descr => 'encode text from DB encoding to ASCII text',
+  proname => 'to_ascii', prorettype => 'text', proargtypes => 'text',
+  prosrc => 'to_ascii_default' },
+{ oid => '1846', descr => 'encode text from encoding to ASCII text',
+  proname => 'to_ascii', prorettype => 'text', proargtypes => 'text int4',
+  prosrc => 'to_ascii_enc' },
+{ oid => '1847', descr => 'encode text from encoding to ASCII text',
+  proname => 'to_ascii', prorettype => 'text', proargtypes => 'text name',
+  prosrc => 'to_ascii_encname' },
+
+{ oid => '1848',
+  proname => 'interval_pl_time', prolang => '14', prorettype => 'time',
+  proargtypes => 'interval time', prosrc => 'select $2 + $1' },
+
+{ oid => '1850',
+  proname => 'int28eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int8', prosrc => 'int28eq' },
+{ oid => '1851',
+  proname => 'int28ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int8', prosrc => 'int28ne' },
+{ oid => '1852',
+  proname => 'int28lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int8', prosrc => 'int28lt' },
+{ oid => '1853',
+  proname => 'int28gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int8', prosrc => 'int28gt' },
+{ oid => '1854',
+  proname => 'int28le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int8', prosrc => 'int28le' },
+{ oid => '1855',
+  proname => 'int28ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int2 int8', prosrc => 'int28ge' },
+
+{ oid => '1856',
+  proname => 'int82eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int2', prosrc => 'int82eq' },
+{ oid => '1857',
+  proname => 'int82ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int2', prosrc => 'int82ne' },
+{ oid => '1858',
+  proname => 'int82lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int2', prosrc => 'int82lt' },
+{ oid => '1859',
+  proname => 'int82gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int2', prosrc => 'int82gt' },
+{ oid => '1860',
+  proname => 'int82le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int2', prosrc => 'int82le' },
+{ oid => '1861',
+  proname => 'int82ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'int8 int2', prosrc => 'int82ge' },
+
+{ oid => '1892',
+  proname => 'int2and', prorettype => 'int2', proargtypes => 'int2 int2',
+  prosrc => 'int2and' },
+{ oid => '1893',
+  proname => 'int2or', prorettype => 'int2', proargtypes => 'int2 int2',
+  prosrc => 'int2or' },
+{ oid => '1894',
+  proname => 'int2xor', prorettype => 'int2', proargtypes => 'int2 int2',
+  prosrc => 'int2xor' },
+{ oid => '1895',
+  proname => 'int2not', prorettype => 'int2', proargtypes => 'int2',
+  prosrc => 'int2not' },
+{ oid => '1896',
+  proname => 'int2shl', prorettype => 'int2', proargtypes => 'int2 int4',
+  prosrc => 'int2shl' },
+{ oid => '1897',
+  proname => 'int2shr', prorettype => 'int2', proargtypes => 'int2 int4',
+  prosrc => 'int2shr' },
+
+{ oid => '1898',
+  proname => 'int4and', prorettype => 'int4', proargtypes => 'int4 int4',
+  prosrc => 'int4and' },
+{ oid => '1899',
+  proname => 'int4or', prorettype => 'int4', proargtypes => 'int4 int4',
+  prosrc => 'int4or' },
+{ oid => '1900',
+  proname => 'int4xor', prorettype => 'int4', proargtypes => 'int4 int4',
+  prosrc => 'int4xor' },
+{ oid => '1901',
+  proname => 'int4not', prorettype => 'int4', proargtypes => 'int4',
+  prosrc => 'int4not' },
+{ oid => '1902',
+  proname => 'int4shl', prorettype => 'int4', proargtypes => 'int4 int4',
+  prosrc => 'int4shl' },
+{ oid => '1903',
+  proname => 'int4shr', prorettype => 'int4', proargtypes => 'int4 int4',
+  prosrc => 'int4shr' },
+
+{ oid => '1904',
+  proname => 'int8and', prorettype => 'int8', proargtypes => 'int8 int8',
+  prosrc => 'int8and' },
+{ oid => '1905',
+  proname => 'int8or', prorettype => 'int8', proargtypes => 'int8 int8',
+  prosrc => 'int8or' },
+{ oid => '1906',
+  proname => 'int8xor', prorettype => 'int8', proargtypes => 'int8 int8',
+  prosrc => 'int8xor' },
+{ oid => '1907',
+  proname => 'int8not', prorettype => 'int8', proargtypes => 'int8',
+  prosrc => 'int8not' },
+{ oid => '1908',
+  proname => 'int8shl', prorettype => 'int8', proargtypes => 'int8 int4',
+  prosrc => 'int8shl' },
+{ oid => '1909',
+  proname => 'int8shr', prorettype => 'int8', proargtypes => 'int8 int4',
+  prosrc => 'int8shr' },
+
+{ oid => '1910',
+  proname => 'int8up', prorettype => 'int8', proargtypes => 'int8',
+  prosrc => 'int8up' },
+{ oid => '1911',
+  proname => 'int2up', prorettype => 'int2', proargtypes => 'int2',
+  prosrc => 'int2up' },
+{ oid => '1912',
+  proname => 'int4up', prorettype => 'int4', proargtypes => 'int4',
+  prosrc => 'int4up' },
+{ oid => '1913',
+  proname => 'float4up', prorettype => 'float4', proargtypes => 'float4',
+  prosrc => 'float4up' },
+{ oid => '1914',
+  proname => 'float8up', prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'float8up' },
+{ oid => '1915',
+  proname => 'numeric_uplus', prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'numeric_uplus' },
+
+{ oid => '1922', descr => 'user privilege on relation by username, rel name',
+  proname => 'has_table_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name text text', prosrc => 'has_table_privilege_name_name' },
+{ oid => '1923', descr => 'user privilege on relation by username, rel oid',
+  proname => 'has_table_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name oid text', prosrc => 'has_table_privilege_name_id' },
+{ oid => '1924', descr => 'user privilege on relation by user oid, rel name',
+  proname => 'has_table_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text text', prosrc => 'has_table_privilege_id_name' },
+{ oid => '1925', descr => 'user privilege on relation by user oid, rel oid',
+  proname => 'has_table_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid oid text', prosrc => 'has_table_privilege_id_id' },
+{ oid => '1926', descr => 'current user privilege on relation by rel name',
+  proname => 'has_table_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'text text', prosrc => 'has_table_privilege_name' },
+{ oid => '1927', descr => 'current user privilege on relation by rel oid',
+  proname => 'has_table_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text', prosrc => 'has_table_privilege_id' },
+
+{ oid => '2181', descr => 'user privilege on sequence by username, seq name',
+  proname => 'has_sequence_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name text text',
+  prosrc => 'has_sequence_privilege_name_name' },
+{ oid => '2182', descr => 'user privilege on sequence by username, seq oid',
+  proname => 'has_sequence_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name oid text', prosrc => 'has_sequence_privilege_name_id' },
+{ oid => '2183', descr => 'user privilege on sequence by user oid, seq name',
+  proname => 'has_sequence_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text text', prosrc => 'has_sequence_privilege_id_name' },
+{ oid => '2184', descr => 'user privilege on sequence by user oid, seq oid',
+  proname => 'has_sequence_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid oid text', prosrc => 'has_sequence_privilege_id_id' },
+{ oid => '2185', descr => 'current user privilege on sequence by seq name',
+  proname => 'has_sequence_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'text text', prosrc => 'has_sequence_privilege_name' },
+{ oid => '2186', descr => 'current user privilege on sequence by seq oid',
+  proname => 'has_sequence_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text', prosrc => 'has_sequence_privilege_id' },
+
+{ oid => '3012',
+  descr => 'user privilege on column by username, rel name, col name',
+  proname => 'has_column_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name text text text',
+  prosrc => 'has_column_privilege_name_name_name' },
+{ oid => '3013',
+  descr => 'user privilege on column by username, rel name, col attnum',
+  proname => 'has_column_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name text int2 text',
+  prosrc => 'has_column_privilege_name_name_attnum' },
+{ oid => '3014',
+  descr => 'user privilege on column by username, rel oid, col name',
+  proname => 'has_column_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name oid text text',
+  prosrc => 'has_column_privilege_name_id_name' },
+{ oid => '3015',
+  descr => 'user privilege on column by username, rel oid, col attnum',
+  proname => 'has_column_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name oid int2 text',
+  prosrc => 'has_column_privilege_name_id_attnum' },
+{ oid => '3016',
+  descr => 'user privilege on column by user oid, rel name, col name',
+  proname => 'has_column_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text text text',
+  prosrc => 'has_column_privilege_id_name_name' },
+{ oid => '3017',
+  descr => 'user privilege on column by user oid, rel name, col attnum',
+  proname => 'has_column_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text int2 text',
+  prosrc => 'has_column_privilege_id_name_attnum' },
+{ oid => '3018',
+  descr => 'user privilege on column by user oid, rel oid, col name',
+  proname => 'has_column_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid oid text text',
+  prosrc => 'has_column_privilege_id_id_name' },
+{ oid => '3019',
+  descr => 'user privilege on column by user oid, rel oid, col attnum',
+  proname => 'has_column_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid oid int2 text',
+  prosrc => 'has_column_privilege_id_id_attnum' },
+{ oid => '3020',
+  descr => 'current user privilege on column by rel name, col name',
+  proname => 'has_column_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'text text text', prosrc => 'has_column_privilege_name_name' },
+{ oid => '3021',
+  descr => 'current user privilege on column by rel name, col attnum',
+  proname => 'has_column_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'text int2 text',
+  prosrc => 'has_column_privilege_name_attnum' },
+{ oid => '3022',
+  descr => 'current user privilege on column by rel oid, col name',
+  proname => 'has_column_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text text', prosrc => 'has_column_privilege_id_name' },
+{ oid => '3023',
+  descr => 'current user privilege on column by rel oid, col attnum',
+  proname => 'has_column_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid int2 text', prosrc => 'has_column_privilege_id_attnum' },
+
+{ oid => '3024',
+  descr => 'user privilege on any column by username, rel name',
+  proname => 'has_any_column_privilege', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'name text text',
+  prosrc => 'has_any_column_privilege_name_name' },
+{ oid => '3025', descr => 'user privilege on any column by username, rel oid',
+  proname => 'has_any_column_privilege', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'name oid text',
+  prosrc => 'has_any_column_privilege_name_id' },
+{ oid => '3026',
+  descr => 'user privilege on any column by user oid, rel name',
+  proname => 'has_any_column_privilege', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid text text',
+  prosrc => 'has_any_column_privilege_id_name' },
+{ oid => '3027', descr => 'user privilege on any column by user oid, rel oid',
+  proname => 'has_any_column_privilege', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid oid text',
+  prosrc => 'has_any_column_privilege_id_id' },
+{ oid => '3028', descr => 'current user privilege on any column by rel name',
+  proname => 'has_any_column_privilege', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'has_any_column_privilege_name' },
+{ oid => '3029', descr => 'current user privilege on any column by rel oid',
+  proname => 'has_any_column_privilege', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid text',
+  prosrc => 'has_any_column_privilege_id' },
+
+{ oid => '3355', descr => 'I/O',
+  proname => 'pg_ndistinct_in', prorettype => 'pg_ndistinct',
+  proargtypes => 'cstring', prosrc => 'pg_ndistinct_in' },
+{ oid => '3356', descr => 'I/O',
+  proname => 'pg_ndistinct_out', prorettype => 'cstring',
+  proargtypes => 'pg_ndistinct', prosrc => 'pg_ndistinct_out' },
+{ oid => '3357', descr => 'I/O',
+  proname => 'pg_ndistinct_recv', provolatile => 's',
+  prorettype => 'pg_ndistinct', proargtypes => 'internal',
+  prosrc => 'pg_ndistinct_recv' },
+{ oid => '3358', descr => 'I/O',
+  proname => 'pg_ndistinct_send', provolatile => 's', prorettype => 'bytea',
+  proargtypes => 'pg_ndistinct', prosrc => 'pg_ndistinct_send' },
+
+{ oid => '3404', descr => 'I/O',
+  proname => 'pg_dependencies_in', prorettype => 'pg_dependencies',
+  proargtypes => 'cstring', prosrc => 'pg_dependencies_in' },
+{ oid => '3405', descr => 'I/O',
+  proname => 'pg_dependencies_out', prorettype => 'cstring',
+  proargtypes => 'pg_dependencies', prosrc => 'pg_dependencies_out' },
+{ oid => '3406', descr => 'I/O',
+  proname => 'pg_dependencies_recv', provolatile => 's',
+  prorettype => 'pg_dependencies', proargtypes => 'internal',
+  prosrc => 'pg_dependencies_recv' },
+{ oid => '3407', descr => 'I/O',
+  proname => 'pg_dependencies_send', provolatile => 's', prorettype => 'bytea',
+  proargtypes => 'pg_dependencies', prosrc => 'pg_dependencies_send' },
+
+{ oid => '1928', descr => 'statistics: number of scans done for table/index',
+  proname => 'pg_stat_get_numscans', provolatile => 's', proparallel => 'r',
+  prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_numscans' },
+{ oid => '1929', descr => 'statistics: number of tuples read by seqscan',
+  proname => 'pg_stat_get_tuples_returned', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_tuples_returned' },
+{ oid => '1930', descr => 'statistics: number of tuples fetched by idxscan',
+  proname => 'pg_stat_get_tuples_fetched', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_tuples_fetched' },
+{ oid => '1931', descr => 'statistics: number of tuples inserted',
+  proname => 'pg_stat_get_tuples_inserted', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_tuples_inserted' },
+{ oid => '1932', descr => 'statistics: number of tuples updated',
+  proname => 'pg_stat_get_tuples_updated', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_tuples_updated' },
+{ oid => '1933', descr => 'statistics: number of tuples deleted',
+  proname => 'pg_stat_get_tuples_deleted', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_tuples_deleted' },
+{ oid => '1972', descr => 'statistics: number of tuples hot updated',
+  proname => 'pg_stat_get_tuples_hot_updated', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_tuples_hot_updated' },
+{ oid => '2878', descr => 'statistics: number of live tuples',
+  proname => 'pg_stat_get_live_tuples', provolatile => 's', proparallel => 'r',
+  prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_live_tuples' },
+{ oid => '2879', descr => 'statistics: number of dead tuples',
+  proname => 'pg_stat_get_dead_tuples', provolatile => 's', proparallel => 'r',
+  prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_dead_tuples' },
+{ oid => '3177',
+  descr => 'statistics: number of tuples changed since last analyze',
+  proname => 'pg_stat_get_mod_since_analyze', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_mod_since_analyze' },
+{ oid => '1934', descr => 'statistics: number of blocks fetched',
+  proname => 'pg_stat_get_blocks_fetched', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_blocks_fetched' },
+{ oid => '1935', descr => 'statistics: number of blocks found in cache',
+  proname => 'pg_stat_get_blocks_hit', provolatile => 's', proparallel => 'r',
+  prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_blocks_hit' },
+{ oid => '2781', descr => 'statistics: last manual vacuum time for a table',
+  proname => 'pg_stat_get_last_vacuum_time', provolatile => 's',
+  proparallel => 'r', prorettype => 'timestamptz', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_last_vacuum_time' },
+{ oid => '2782', descr => 'statistics: last auto vacuum time for a table',
+  proname => 'pg_stat_get_last_autovacuum_time', provolatile => 's',
+  proparallel => 'r', prorettype => 'timestamptz', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_last_autovacuum_time' },
+{ oid => '2783', descr => 'statistics: last manual analyze time for a table',
+  proname => 'pg_stat_get_last_analyze_time', provolatile => 's',
+  proparallel => 'r', prorettype => 'timestamptz', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_last_analyze_time' },
+{ oid => '2784', descr => 'statistics: last auto analyze time for a table',
+  proname => 'pg_stat_get_last_autoanalyze_time', provolatile => 's',
+  proparallel => 'r', prorettype => 'timestamptz', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_last_autoanalyze_time' },
+{ oid => '3054', descr => 'statistics: number of manual vacuums for a table',
+  proname => 'pg_stat_get_vacuum_count', provolatile => 's', proparallel => 'r',
+  prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_vacuum_count' },
+{ oid => '3055', descr => 'statistics: number of auto vacuums for a table',
+  proname => 'pg_stat_get_autovacuum_count', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_autovacuum_count' },
+{ oid => '3056', descr => 'statistics: number of manual analyzes for a table',
+  proname => 'pg_stat_get_analyze_count', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_analyze_count' },
+{ oid => '3057', descr => 'statistics: number of auto analyzes for a table',
+  proname => 'pg_stat_get_autoanalyze_count', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_autoanalyze_count' },
+{ oid => '1936', descr => 'statistics: currently active backend IDs',
+  proname => 'pg_stat_get_backend_idset', prorows => '100', proretset => 't',
+  provolatile => 's', proparallel => 'r', prorettype => 'int4',
+  proargtypes => '', prosrc => 'pg_stat_get_backend_idset' },
+{ oid => '2022',
+  descr => 'statistics: information about currently active backends',
+  proname => 'pg_stat_get_activity', prorows => '100', proisstrict => 'f',
+  proretset => 't', provolatile => 's', proparallel => 'r',
+  prorettype => 'record', proargtypes => 'int4',
+  proallargtypes => '{int4,oid,int4,oid,text,text,text,text,text,timestamptz,timestamptz,timestamptz,timestamptz,inet,text,int4,xid,xid,text,bool,text,text,int4,bool,text}',
+  proargmodes => '{i,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}',
+  proargnames => '{pid,datid,pid,usesysid,application_name,state,query,wait_event_type,wait_event,xact_start,query_start,backend_start,state_change,client_addr,client_hostname,client_port,backend_xid,backend_xmin,backend_type,ssl,sslversion,sslcipher,sslbits,sslcompression,sslclientdn}',
+  prosrc => 'pg_stat_get_activity' },
+{ oid => '3318',
+  descr => 'statistics: information about progress of backends running maintenance command',
+  proname => 'pg_stat_get_progress_info', prorows => '100', proretset => 't',
+  provolatile => 's', proparallel => 'r', prorettype => 'record',
+  proargtypes => 'text',
+  proallargtypes => '{text,int4,oid,oid,int8,int8,int8,int8,int8,int8,int8,int8,int8,int8}',
+  proargmodes => '{i,o,o,o,o,o,o,o,o,o,o,o,o,o}',
+  proargnames => '{cmdtype,pid,datid,relid,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10}',
+  prosrc => 'pg_stat_get_progress_info' },
+{ oid => '3099',
+  descr => 'statistics: information about currently active replication',
+  proname => 'pg_stat_get_wal_senders', prorows => '10', proisstrict => 'f',
+  proretset => 't', provolatile => 's', proparallel => 'r',
+  prorettype => 'record', proargtypes => '',
+  proallargtypes => '{int4,text,pg_lsn,pg_lsn,pg_lsn,pg_lsn,interval,interval,interval,int4,text}',
+  proargmodes => '{o,o,o,o,o,o,o,o,o,o,o}',
+  proargnames => '{pid,state,sent_lsn,write_lsn,flush_lsn,replay_lsn,write_lag,flush_lag,replay_lag,sync_priority,sync_state}',
+  prosrc => 'pg_stat_get_wal_senders' },
+{ oid => '3317', descr => 'statistics: information about WAL receiver',
+  proname => 'pg_stat_get_wal_receiver', proisstrict => 'f', provolatile => 's',
+  proparallel => 'r', prorettype => 'record', proargtypes => '',
+  proallargtypes => '{int4,text,pg_lsn,int4,pg_lsn,int4,timestamptz,timestamptz,pg_lsn,timestamptz,text,text,int4,text}',
+  proargmodes => '{o,o,o,o,o,o,o,o,o,o,o,o,o,o}',
+  proargnames => '{pid,status,receive_start_lsn,receive_start_tli,received_lsn,received_tli,last_msg_send_time,last_msg_receipt_time,latest_end_lsn,latest_end_time,slot_name,sender_host,sender_port,conninfo}',
+  prosrc => 'pg_stat_get_wal_receiver' },
+{ oid => '6118', descr => 'statistics: information about subscription',
+  proname => 'pg_stat_get_subscription', proisstrict => 'f', provolatile => 's',
+  proparallel => 'r', prorettype => 'record', proargtypes => 'oid',
+  proallargtypes => '{oid,oid,oid,int4,pg_lsn,timestamptz,timestamptz,pg_lsn,timestamptz}',
+  proargmodes => '{i,o,o,o,o,o,o,o,o}',
+  proargnames => '{subid,subid,relid,pid,received_lsn,last_msg_send_time,last_msg_receipt_time,latest_end_lsn,latest_end_time}',
+  prosrc => 'pg_stat_get_subscription' },
+{ oid => '2026', descr => 'statistics: current backend PID',
+  proname => 'pg_backend_pid', provolatile => 's', proparallel => 'r',
+  prorettype => 'int4', proargtypes => '', prosrc => 'pg_backend_pid' },
+{ oid => '1937', descr => 'statistics: PID of backend',
+  proname => 'pg_stat_get_backend_pid', provolatile => 's', proparallel => 'r',
+  prorettype => 'int4', proargtypes => 'int4',
+  prosrc => 'pg_stat_get_backend_pid' },
+{ oid => '1938', descr => 'statistics: database ID of backend',
+  proname => 'pg_stat_get_backend_dbid', provolatile => 's', proparallel => 'r',
+  prorettype => 'oid', proargtypes => 'int4',
+  prosrc => 'pg_stat_get_backend_dbid' },
+{ oid => '1939', descr => 'statistics: user ID of backend',
+  proname => 'pg_stat_get_backend_userid', provolatile => 's',
+  proparallel => 'r', prorettype => 'oid', proargtypes => 'int4',
+  prosrc => 'pg_stat_get_backend_userid' },
+{ oid => '1940', descr => 'statistics: current query of backend',
+  proname => 'pg_stat_get_backend_activity', provolatile => 's',
+  proparallel => 'r', prorettype => 'text', proargtypes => 'int4',
+  prosrc => 'pg_stat_get_backend_activity' },
+{ oid => '2788',
+  descr => 'statistics: wait event type on which backend is currently waiting',
+  proname => 'pg_stat_get_backend_wait_event_type', provolatile => 's',
+  proparallel => 'r', prorettype => 'text', proargtypes => 'int4',
+  prosrc => 'pg_stat_get_backend_wait_event_type' },
+{ oid => '2853',
+  descr => 'statistics: wait event on which backend is currently waiting',
+  proname => 'pg_stat_get_backend_wait_event', provolatile => 's',
+  proparallel => 'r', prorettype => 'text', proargtypes => 'int4',
+  prosrc => 'pg_stat_get_backend_wait_event' },
+{ oid => '2094',
+  descr => 'statistics: start time for current query of backend',
+  proname => 'pg_stat_get_backend_activity_start', provolatile => 's',
+  proparallel => 'r', prorettype => 'timestamptz', proargtypes => 'int4',
+  prosrc => 'pg_stat_get_backend_activity_start' },
+{ oid => '2857',
+  descr => 'statistics: start time for backend\'s current transaction',
+  proname => 'pg_stat_get_backend_xact_start', provolatile => 's',
+  proparallel => 'r', prorettype => 'timestamptz', proargtypes => 'int4',
+  prosrc => 'pg_stat_get_backend_xact_start' },
+{ oid => '1391',
+  descr => 'statistics: start time for current backend session',
+  proname => 'pg_stat_get_backend_start', provolatile => 's',
+  proparallel => 'r', prorettype => 'timestamptz', proargtypes => 'int4',
+  prosrc => 'pg_stat_get_backend_start' },
+{ oid => '1392',
+  descr => 'statistics: address of client connected to backend',
+  proname => 'pg_stat_get_backend_client_addr', provolatile => 's',
+  proparallel => 'r', prorettype => 'inet', proargtypes => 'int4',
+  prosrc => 'pg_stat_get_backend_client_addr' },
+{ oid => '1393',
+  descr => 'statistics: port number of client connected to backend',
+  proname => 'pg_stat_get_backend_client_port', provolatile => 's',
+  proparallel => 'r', prorettype => 'int4', proargtypes => 'int4',
+  prosrc => 'pg_stat_get_backend_client_port' },
+{ oid => '1941', descr => 'statistics: number of backends in database',
+  proname => 'pg_stat_get_db_numbackends', provolatile => 's',
+  proparallel => 'r', prorettype => 'int4', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_numbackends' },
+{ oid => '1942', descr => 'statistics: transactions committed',
+  proname => 'pg_stat_get_db_xact_commit', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_xact_commit' },
+{ oid => '1943', descr => 'statistics: transactions rolled back',
+  proname => 'pg_stat_get_db_xact_rollback', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_xact_rollback' },
+{ oid => '1944', descr => 'statistics: blocks fetched for database',
+  proname => 'pg_stat_get_db_blocks_fetched', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_blocks_fetched' },
+{ oid => '1945', descr => 'statistics: blocks found in cache for database',
+  proname => 'pg_stat_get_db_blocks_hit', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_blocks_hit' },
+{ oid => '2758', descr => 'statistics: tuples returned for database',
+  proname => 'pg_stat_get_db_tuples_returned', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_tuples_returned' },
+{ oid => '2759', descr => 'statistics: tuples fetched for database',
+  proname => 'pg_stat_get_db_tuples_fetched', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_tuples_fetched' },
+{ oid => '2760', descr => 'statistics: tuples inserted in database',
+  proname => 'pg_stat_get_db_tuples_inserted', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_tuples_inserted' },
+{ oid => '2761', descr => 'statistics: tuples updated in database',
+  proname => 'pg_stat_get_db_tuples_updated', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_tuples_updated' },
+{ oid => '2762', descr => 'statistics: tuples deleted in database',
+  proname => 'pg_stat_get_db_tuples_deleted', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_tuples_deleted' },
+{ oid => '3065',
+  descr => 'statistics: recovery conflicts in database caused by drop tablespace',
+  proname => 'pg_stat_get_db_conflict_tablespace', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_conflict_tablespace' },
+{ oid => '3066',
+  descr => 'statistics: recovery conflicts in database caused by relation lock',
+  proname => 'pg_stat_get_db_conflict_lock', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_conflict_lock' },
+{ oid => '3067',
+  descr => 'statistics: recovery conflicts in database caused by snapshot expiry',
+  proname => 'pg_stat_get_db_conflict_snapshot', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_conflict_snapshot' },
+{ oid => '3068',
+  descr => 'statistics: recovery conflicts in database caused by shared buffer pin',
+  proname => 'pg_stat_get_db_conflict_bufferpin', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_conflict_bufferpin' },
+{ oid => '3069',
+  descr => 'statistics: recovery conflicts in database caused by buffer deadlock',
+  proname => 'pg_stat_get_db_conflict_startup_deadlock', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_conflict_startup_deadlock' },
+{ oid => '3070', descr => 'statistics: recovery conflicts in database',
+  proname => 'pg_stat_get_db_conflict_all', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_conflict_all' },
+{ oid => '3152', descr => 'statistics: deadlocks detected in database',
+  proname => 'pg_stat_get_db_deadlocks', provolatile => 's', proparallel => 'r',
+  prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_deadlocks' },
+{ oid => '3074', descr => 'statistics: last reset for a database',
+  proname => 'pg_stat_get_db_stat_reset_time', provolatile => 's',
+  proparallel => 'r', prorettype => 'timestamptz', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_stat_reset_time' },
+{ oid => '3150', descr => 'statistics: number of temporary files written',
+  proname => 'pg_stat_get_db_temp_files', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_temp_files' },
+{ oid => '3151',
+  descr => 'statistics: number of bytes in temporary files written',
+  proname => 'pg_stat_get_db_temp_bytes', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_temp_bytes' },
+{ oid => '2844', descr => 'statistics: block read time, in milliseconds',
+  proname => 'pg_stat_get_db_blk_read_time', provolatile => 's',
+  proparallel => 'r', prorettype => 'float8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_blk_read_time' },
+{ oid => '2845', descr => 'statistics: block write time, in milliseconds',
+  proname => 'pg_stat_get_db_blk_write_time', provolatile => 's',
+  proparallel => 'r', prorettype => 'float8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_db_blk_write_time' },
+{ oid => '3195', descr => 'statistics: information about WAL archiver',
+  proname => 'pg_stat_get_archiver', proisstrict => 'f', provolatile => 's',
+  proparallel => 'r', prorettype => 'record', proargtypes => '',
+  proallargtypes => '{int8,text,timestamptz,int8,text,timestamptz,timestamptz}',
+  proargmodes => '{o,o,o,o,o,o,o}',
+  proargnames => '{archived_count,last_archived_wal,last_archived_time,failed_count,last_failed_wal,last_failed_time,stats_reset}',
+  prosrc => 'pg_stat_get_archiver' },
+{ oid => '2769',
+  descr => 'statistics: number of timed checkpoints started by the bgwriter',
+  proname => 'pg_stat_get_bgwriter_timed_checkpoints', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => '',
+  prosrc => 'pg_stat_get_bgwriter_timed_checkpoints' },
+{ oid => '2770',
+  descr => 'statistics: number of backend requested checkpoints started by the bgwriter',
+  proname => 'pg_stat_get_bgwriter_requested_checkpoints', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => '',
+  prosrc => 'pg_stat_get_bgwriter_requested_checkpoints' },
+{ oid => '2771',
+  descr => 'statistics: number of buffers written by the bgwriter during checkpoints',
+  proname => 'pg_stat_get_bgwriter_buf_written_checkpoints', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => '',
+  prosrc => 'pg_stat_get_bgwriter_buf_written_checkpoints' },
+{ oid => '2772',
+  descr => 'statistics: number of buffers written by the bgwriter for cleaning dirty buffers',
+  proname => 'pg_stat_get_bgwriter_buf_written_clean', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => '',
+  prosrc => 'pg_stat_get_bgwriter_buf_written_clean' },
+{ oid => '2773',
+  descr => 'statistics: number of times the bgwriter stopped processing when it had written too many buffers while cleaning',
+  proname => 'pg_stat_get_bgwriter_maxwritten_clean', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => '',
+  prosrc => 'pg_stat_get_bgwriter_maxwritten_clean' },
+{ oid => '3075', descr => 'statistics: last reset for the bgwriter',
+  proname => 'pg_stat_get_bgwriter_stat_reset_time', provolatile => 's',
+  proparallel => 'r', prorettype => 'timestamptz', proargtypes => '',
+  prosrc => 'pg_stat_get_bgwriter_stat_reset_time' },
+{ oid => '3160',
+  descr => 'statistics: checkpoint time spent writing buffers to disk, in milliseconds',
+  proname => 'pg_stat_get_checkpoint_write_time', provolatile => 's',
+  proparallel => 'r', prorettype => 'float8', proargtypes => '',
+  prosrc => 'pg_stat_get_checkpoint_write_time' },
+{ oid => '3161',
+  descr => 'statistics: checkpoint time spent synchronizing buffers to disk, in milliseconds',
+  proname => 'pg_stat_get_checkpoint_sync_time', provolatile => 's',
+  proparallel => 'r', prorettype => 'float8', proargtypes => '',
+  prosrc => 'pg_stat_get_checkpoint_sync_time' },
+{ oid => '2775', descr => 'statistics: number of buffers written by backends',
+  proname => 'pg_stat_get_buf_written_backend', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => '',
+  prosrc => 'pg_stat_get_buf_written_backend' },
+{ oid => '3063',
+  descr => 'statistics: number of backend buffer writes that did their own fsync',
+  proname => 'pg_stat_get_buf_fsync_backend', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => '',
+  prosrc => 'pg_stat_get_buf_fsync_backend' },
+{ oid => '2859', descr => 'statistics: number of buffer allocations',
+  proname => 'pg_stat_get_buf_alloc', provolatile => 's', proparallel => 'r',
+  prorettype => 'int8', proargtypes => '', prosrc => 'pg_stat_get_buf_alloc' },
+
+{ oid => '2978', descr => 'statistics: number of function calls',
+  proname => 'pg_stat_get_function_calls', provolatile => 's',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_function_calls' },
+{ oid => '2979',
+  descr => 'statistics: total execution time of function, in milliseconds',
+  proname => 'pg_stat_get_function_total_time', provolatile => 's',
+  proparallel => 'r', prorettype => 'float8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_function_total_time' },
+{ oid => '2980',
+  descr => 'statistics: self execution time of function, in milliseconds',
+  proname => 'pg_stat_get_function_self_time', provolatile => 's',
+  proparallel => 'r', prorettype => 'float8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_function_self_time' },
+
+{ oid => '3037',
+  descr => 'statistics: number of scans done for table/index in current transaction',
+  proname => 'pg_stat_get_xact_numscans', provolatile => 'v',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_xact_numscans' },
+{ oid => '3038',
+  descr => 'statistics: number of tuples read by seqscan in current transaction',
+  proname => 'pg_stat_get_xact_tuples_returned', provolatile => 'v',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_xact_tuples_returned' },
+{ oid => '3039',
+  descr => 'statistics: number of tuples fetched by idxscan in current transaction',
+  proname => 'pg_stat_get_xact_tuples_fetched', provolatile => 'v',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_xact_tuples_fetched' },
+{ oid => '3040',
+  descr => 'statistics: number of tuples inserted in current transaction',
+  proname => 'pg_stat_get_xact_tuples_inserted', provolatile => 'v',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_xact_tuples_inserted' },
+{ oid => '3041',
+  descr => 'statistics: number of tuples updated in current transaction',
+  proname => 'pg_stat_get_xact_tuples_updated', provolatile => 'v',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_xact_tuples_updated' },
+{ oid => '3042',
+  descr => 'statistics: number of tuples deleted in current transaction',
+  proname => 'pg_stat_get_xact_tuples_deleted', provolatile => 'v',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_xact_tuples_deleted' },
+{ oid => '3043',
+  descr => 'statistics: number of tuples hot updated in current transaction',
+  proname => 'pg_stat_get_xact_tuples_hot_updated', provolatile => 'v',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_xact_tuples_hot_updated' },
+{ oid => '3044',
+  descr => 'statistics: number of blocks fetched in current transaction',
+  proname => 'pg_stat_get_xact_blocks_fetched', provolatile => 'v',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_xact_blocks_fetched' },
+{ oid => '3045',
+  descr => 'statistics: number of blocks found in cache in current transaction',
+  proname => 'pg_stat_get_xact_blocks_hit', provolatile => 'v',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_xact_blocks_hit' },
+{ oid => '3046',
+  descr => 'statistics: number of function calls in current transaction',
+  proname => 'pg_stat_get_xact_function_calls', provolatile => 'v',
+  proparallel => 'r', prorettype => 'int8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_xact_function_calls' },
+{ oid => '3047',
+  descr => 'statistics: total execution time of function in current transaction, in milliseconds',
+  proname => 'pg_stat_get_xact_function_total_time', provolatile => 'v',
+  proparallel => 'r', prorettype => 'float8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_xact_function_total_time' },
+{ oid => '3048',
+  descr => 'statistics: self execution time of function in current transaction, in milliseconds',
+  proname => 'pg_stat_get_xact_function_self_time', provolatile => 'v',
+  proparallel => 'r', prorettype => 'float8', proargtypes => 'oid',
+  prosrc => 'pg_stat_get_xact_function_self_time' },
+
+{ oid => '3788',
+  descr => 'statistics: timestamp of the current statistics snapshot',
+  proname => 'pg_stat_get_snapshot_timestamp', provolatile => 's',
+  proparallel => 'r', prorettype => 'timestamptz', proargtypes => '',
+  prosrc => 'pg_stat_get_snapshot_timestamp' },
+{ oid => '2230',
+  descr => 'statistics: discard current transaction\'s statistics snapshot',
+  proname => 'pg_stat_clear_snapshot', proisstrict => 'f', provolatile => 'v',
+  proparallel => 'r', prorettype => 'void', proargtypes => '',
+  prosrc => 'pg_stat_clear_snapshot' },
+{ oid => '2274',
+  descr => 'statistics: reset collected statistics for current database',
+  proname => 'pg_stat_reset', proisstrict => 'f', provolatile => 'v',
+  prorettype => 'void', proargtypes => '', prosrc => 'pg_stat_reset' },
+{ oid => '3775',
+  descr => 'statistics: reset collected statistics shared across the cluster',
+  proname => 'pg_stat_reset_shared', provolatile => 'v', prorettype => 'void',
+  proargtypes => 'text', prosrc => 'pg_stat_reset_shared' },
+{ oid => '3776',
+  descr => 'statistics: reset collected statistics for a single table or index in the current database',
+  proname => 'pg_stat_reset_single_table_counters', provolatile => 'v',
+  prorettype => 'void', proargtypes => 'oid',
+  prosrc => 'pg_stat_reset_single_table_counters' },
+{ oid => '3777',
+  descr => 'statistics: reset collected statistics for a single function in the current database',
+  proname => 'pg_stat_reset_single_function_counters', provolatile => 'v',
+  prorettype => 'void', proargtypes => 'oid',
+  prosrc => 'pg_stat_reset_single_function_counters' },
+
+{ oid => '3163', descr => 'current trigger depth',
+  proname => 'pg_trigger_depth', provolatile => 's', proparallel => 'r',
+  prorettype => 'int4', proargtypes => '', prosrc => 'pg_trigger_depth' },
+
+{ oid => '3778', descr => 'tablespace location',
+  proname => 'pg_tablespace_location', provolatile => 's', prorettype => 'text',
+  proargtypes => 'oid', prosrc => 'pg_tablespace_location' },
+
+{ oid => '1946',
+  descr => 'convert bytea value into some ascii-only text string',
+  proname => 'encode', prorettype => 'text', proargtypes => 'bytea text',
+  prosrc => 'binary_encode' },
+{ oid => '1947',
+  descr => 'convert ascii-encoded text string into bytea value',
+  proname => 'decode', prorettype => 'bytea', proargtypes => 'text text',
+  prosrc => 'binary_decode' },
+
+{ oid => '1948',
+  proname => 'byteaeq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bytea bytea', prosrc => 'byteaeq' },
+{ oid => '1949',
+  proname => 'bytealt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bytea bytea', prosrc => 'bytealt' },
+{ oid => '1950',
+  proname => 'byteale', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bytea bytea', prosrc => 'byteale' },
+{ oid => '1951',
+  proname => 'byteagt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bytea bytea', prosrc => 'byteagt' },
+{ oid => '1952',
+  proname => 'byteage', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bytea bytea', prosrc => 'byteage' },
+{ oid => '1953',
+  proname => 'byteane', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'bytea bytea', prosrc => 'byteane' },
+{ oid => '1954', descr => 'less-equal-greater',
+  proname => 'byteacmp', prorettype => 'int4', proargtypes => 'bytea bytea',
+  prosrc => 'byteacmp' },
+{ oid => '3331', descr => 'sort support',
+  proname => 'bytea_sortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'bytea_sortsupport' },
+
+{ oid => '3917', descr => 'transform a timestamp length coercion',
+  proname => 'timestamp_transform', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'timestamp_transform' },
+{ oid => '3944', descr => 'transform a time length coercion',
+  proname => 'time_transform', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'time_transform' },
+
+{ oid => '1961', descr => 'adjust timestamp precision',
+  proname => 'timestamp', protransform => 'timestamp_transform',
+  prorettype => 'timestamp', proargtypes => 'timestamp int4',
+  prosrc => 'timestamp_scale' },
+
+{ oid => '1965', descr => 'larger of two',
+  proname => 'oidlarger', prorettype => 'oid', proargtypes => 'oid oid',
+  prosrc => 'oidlarger' },
+{ oid => '1966', descr => 'smaller of two',
+  proname => 'oidsmaller', prorettype => 'oid', proargtypes => 'oid oid',
+  prosrc => 'oidsmaller' },
+
+{ oid => '1967', descr => 'adjust timestamptz precision',
+  proname => 'timestamptz', protransform => 'timestamp_transform',
+  prorettype => 'timestamptz', proargtypes => 'timestamptz int4',
+  prosrc => 'timestamptz_scale' },
+{ oid => '1968', descr => 'adjust time precision',
+  proname => 'time', protransform => 'time_transform', prorettype => 'time',
+  proargtypes => 'time int4', prosrc => 'time_scale' },
+{ oid => '1969', descr => 'adjust time with time zone precision',
+  proname => 'timetz', protransform => 'time_transform', prorettype => 'timetz',
+  proargtypes => 'timetz int4', prosrc => 'timetz_scale' },
+
+{ oid => '2003',
+  proname => 'textanycat', prolang => '14', provolatile => 's',
+  prorettype => 'text', proargtypes => 'text anynonarray',
+  prosrc => 'select $1 || $2::pg_catalog.text' },
+{ oid => '2004',
+  proname => 'anytextcat', prolang => '14', provolatile => 's',
+  prorettype => 'text', proargtypes => 'anynonarray text',
+  prosrc => 'select $1::pg_catalog.text || $2' },
+
+{ oid => '2005',
+  proname => 'bytealike', prorettype => 'bool', proargtypes => 'bytea bytea',
+  prosrc => 'bytealike' },
+{ oid => '2006',
+  proname => 'byteanlike', prorettype => 'bool', proargtypes => 'bytea bytea',
+  prosrc => 'byteanlike' },
+{ oid => '2007', descr => 'matches LIKE expression',
+  proname => 'like', prorettype => 'bool', proargtypes => 'bytea bytea',
+  prosrc => 'bytealike' },
+{ oid => '2008', descr => 'does not match LIKE expression',
+  proname => 'notlike', prorettype => 'bool', proargtypes => 'bytea bytea',
+  prosrc => 'byteanlike' },
+{ oid => '2009', descr => 'convert LIKE pattern to use backslash escapes',
+  proname => 'like_escape', prorettype => 'bytea', proargtypes => 'bytea bytea',
+  prosrc => 'like_escape_bytea' },
+{ oid => '2010', descr => 'octet length',
+  proname => 'length', prorettype => 'int4', proargtypes => 'bytea',
+  prosrc => 'byteaoctetlen' },
+{ oid => '2011',
+  proname => 'byteacat', prorettype => 'bytea', proargtypes => 'bytea bytea',
+  prosrc => 'byteacat' },
+{ oid => '2012', descr => 'extract portion of string',
+  proname => 'substring', prorettype => 'bytea',
+  proargtypes => 'bytea int4 int4', prosrc => 'bytea_substr' },
+{ oid => '2013', descr => 'extract portion of string',
+  proname => 'substring', prorettype => 'bytea', proargtypes => 'bytea int4',
+  prosrc => 'bytea_substr_no_len' },
+{ oid => '2085', descr => 'extract portion of string',
+  proname => 'substr', prorettype => 'bytea', proargtypes => 'bytea int4 int4',
+  prosrc => 'bytea_substr' },
+{ oid => '2086', descr => 'extract portion of string',
+  proname => 'substr', prorettype => 'bytea', proargtypes => 'bytea int4',
+  prosrc => 'bytea_substr_no_len' },
+{ oid => '2014', descr => 'position of substring',
+  proname => 'position', prorettype => 'int4', proargtypes => 'bytea bytea',
+  prosrc => 'byteapos' },
+{ oid => '2015', descr => 'trim both ends of string',
+  proname => 'btrim', prorettype => 'bytea', proargtypes => 'bytea bytea',
+  prosrc => 'byteatrim' },
+
+{ oid => '2019', descr => 'convert timestamp with time zone to time',
+  proname => 'time', provolatile => 's', prorettype => 'time',
+  proargtypes => 'timestamptz', prosrc => 'timestamptz_time' },
+{ oid => '2020', descr => 'truncate timestamp to specified units',
+  proname => 'date_trunc', prorettype => 'timestamp',
+  proargtypes => 'text timestamp', prosrc => 'timestamp_trunc' },
+{ oid => '2021', descr => 'extract field from timestamp',
+  proname => 'date_part', prorettype => 'float8',
+  proargtypes => 'text timestamp', prosrc => 'timestamp_part' },
+{ oid => '2023', descr => 'convert abstime to timestamp',
+  proname => 'timestamp', provolatile => 's', prorettype => 'timestamp',
+  proargtypes => 'abstime', prosrc => 'abstime_timestamp' },
+{ oid => '2024', descr => 'convert date to timestamp',
+  proname => 'timestamp', prorettype => 'timestamp', proargtypes => 'date',
+  prosrc => 'date_timestamp' },
+{ oid => '2025', descr => 'convert date and time to timestamp',
+  proname => 'timestamp', prorettype => 'timestamp', proargtypes => 'date time',
+  prosrc => 'datetime_timestamp' },
+{ oid => '2027', descr => 'convert timestamp with time zone to timestamp',
+  proname => 'timestamp', provolatile => 's', prorettype => 'timestamp',
+  proargtypes => 'timestamptz', prosrc => 'timestamptz_timestamp' },
+{ oid => '2028', descr => 'convert timestamp to timestamp with time zone',
+  proname => 'timestamptz', provolatile => 's', prorettype => 'timestamptz',
+  proargtypes => 'timestamp', prosrc => 'timestamp_timestamptz' },
+{ oid => '2029', descr => 'convert timestamp to date',
+  proname => 'date', prorettype => 'date', proargtypes => 'timestamp',
+  prosrc => 'timestamp_date' },
+{ oid => '2030', descr => 'convert timestamp to abstime',
+  proname => 'abstime', provolatile => 's', prorettype => 'abstime',
+  proargtypes => 'timestamp', prosrc => 'timestamp_abstime' },
+{ oid => '2031',
+  proname => 'timestamp_mi', prorettype => 'interval',
+  proargtypes => 'timestamp timestamp', prosrc => 'timestamp_mi' },
+{ oid => '2032',
+  proname => 'timestamp_pl_interval', prorettype => 'timestamp',
+  proargtypes => 'timestamp interval', prosrc => 'timestamp_pl_interval' },
+{ oid => '2033',
+  proname => 'timestamp_mi_interval', prorettype => 'timestamp',
+  proargtypes => 'timestamp interval', prosrc => 'timestamp_mi_interval' },
+{ oid => '2035', descr => 'smaller of two',
+  proname => 'timestamp_smaller', prorettype => 'timestamp',
+  proargtypes => 'timestamp timestamp', prosrc => 'timestamp_smaller' },
+{ oid => '2036', descr => 'larger of two',
+  proname => 'timestamp_larger', prorettype => 'timestamp',
+  proargtypes => 'timestamp timestamp', prosrc => 'timestamp_larger' },
+{ oid => '2037', descr => 'adjust time with time zone to new zone',
+  proname => 'timezone', provolatile => 'v', prorettype => 'timetz',
+  proargtypes => 'text timetz', prosrc => 'timetz_zone' },
+{ oid => '2038', descr => 'adjust time with time zone to new zone',
+  proname => 'timezone', prorettype => 'timetz',
+  proargtypes => 'interval timetz', prosrc => 'timetz_izone' },
+{ oid => '2039', descr => 'hash',
+  proname => 'timestamp_hash', prorettype => 'int4', proargtypes => 'timestamp',
+  prosrc => 'timestamp_hash' },
+{ oid => '3411', descr => 'hash',
+  proname => 'timestamp_hash_extended', prorettype => 'int8',
+  proargtypes => 'timestamp int8', prosrc => 'timestamp_hash_extended' },
+{ oid => '2041', descr => 'intervals overlap?',
+  proname => 'overlaps', proisstrict => 'f', prorettype => 'bool',
+  proargtypes => 'timestamp timestamp timestamp timestamp',
+  prosrc => 'overlaps_timestamp' },
+{ oid => '2042', descr => 'intervals overlap?',
+  proname => 'overlaps', prolang => '14', proisstrict => 'f',
+  prorettype => 'bool', proargtypes => 'timestamp interval timestamp interval',
+  prosrc => 'select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))' },
+{ oid => '2043', descr => 'intervals overlap?',
+  proname => 'overlaps', prolang => '14', proisstrict => 'f',
+  prorettype => 'bool', proargtypes => 'timestamp timestamp timestamp interval',
+  prosrc => 'select ($1, $2) overlaps ($3, ($3 + $4))' },
+{ oid => '2044', descr => 'intervals overlap?',
+  proname => 'overlaps', prolang => '14', proisstrict => 'f',
+  prorettype => 'bool', proargtypes => 'timestamp interval timestamp timestamp',
+  prosrc => 'select ($1, ($1 + $2)) overlaps ($3, $4)' },
+{ oid => '2045', descr => 'less-equal-greater',
+  proname => 'timestamp_cmp', prorettype => 'int4',
+  proargtypes => 'timestamp timestamp', prosrc => 'timestamp_cmp' },
+{ oid => '3137', descr => 'sort support',
+  proname => 'timestamp_sortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'timestamp_sortsupport' },
+
+{ oid => '4134', descr => 'window RANGE support',
+  proname => 'in_range', prorettype => 'bool',
+  proargtypes => 'timestamp timestamp interval bool bool',
+  prosrc => 'in_range_timestamp_interval' },
+{ oid => '4135', descr => 'window RANGE support',
+  proname => 'in_range', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'timestamptz timestamptz interval bool bool',
+  prosrc => 'in_range_timestamptz_interval' },
+{ oid => '4136', descr => 'window RANGE support',
+  proname => 'in_range', prorettype => 'bool',
+  proargtypes => 'interval interval interval bool bool',
+  prosrc => 'in_range_interval_interval' },
+{ oid => '4137', descr => 'window RANGE support',
+  proname => 'in_range', prorettype => 'bool',
+  proargtypes => 'time time interval bool bool',
+  prosrc => 'in_range_time_interval' },
+{ oid => '4138', descr => 'window RANGE support',
+  proname => 'in_range', prorettype => 'bool',
+  proargtypes => 'timetz timetz interval bool bool',
+  prosrc => 'in_range_timetz_interval' },
+
+{ oid => '2046', descr => 'convert time with time zone to time',
+  proname => 'time', prorettype => 'time', proargtypes => 'timetz',
+  prosrc => 'timetz_time' },
+{ oid => '2047', descr => 'convert time to time with time zone',
+  proname => 'timetz', provolatile => 's', prorettype => 'timetz',
+  proargtypes => 'time', prosrc => 'time_timetz' },
+{ oid => '2048', descr => 'finite timestamp?',
+  proname => 'isfinite', prorettype => 'bool', proargtypes => 'timestamp',
+  prosrc => 'timestamp_finite' },
+{ oid => '2049', descr => 'format timestamp to text',
+  proname => 'to_char', provolatile => 's', prorettype => 'text',
+  proargtypes => 'timestamp text', prosrc => 'timestamp_to_char' },
+{ oid => '2052',
+  proname => 'timestamp_eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timestamp timestamp', prosrc => 'timestamp_eq' },
+{ oid => '2053',
+  proname => 'timestamp_ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timestamp timestamp', prosrc => 'timestamp_ne' },
+{ oid => '2054',
+  proname => 'timestamp_lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timestamp timestamp', prosrc => 'timestamp_lt' },
+{ oid => '2055',
+  proname => 'timestamp_le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timestamp timestamp', prosrc => 'timestamp_le' },
+{ oid => '2056',
+  proname => 'timestamp_ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timestamp timestamp', prosrc => 'timestamp_ge' },
+{ oid => '2057',
+  proname => 'timestamp_gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'timestamp timestamp', prosrc => 'timestamp_gt' },
+{ oid => '2058', descr => 'date difference preserving months and years',
+  proname => 'age', prorettype => 'interval',
+  proargtypes => 'timestamp timestamp', prosrc => 'timestamp_age' },
+{ oid => '2059',
+  descr => 'date difference from today preserving months and years',
+  proname => 'age', prolang => '14', provolatile => 's',
+  prorettype => 'interval', proargtypes => 'timestamp',
+  prosrc => 'select pg_catalog.age(cast(current_date as timestamp without time zone), $1)' },
+
+{ oid => '2069', descr => 'adjust timestamp to new time zone',
+  proname => 'timezone', protransform => 'timestamp_zone_transform',
+  prorettype => 'timestamptz', proargtypes => 'text timestamp',
+  prosrc => 'timestamp_zone' },
+{ oid => '2070', descr => 'adjust timestamp to new time zone',
+  proname => 'timezone', protransform => 'timestamp_izone_transform',
+  prorettype => 'timestamptz', proargtypes => 'interval timestamp',
+  prosrc => 'timestamp_izone' },
+{ oid => '2071',
+  proname => 'date_pl_interval', prorettype => 'timestamp',
+  proargtypes => 'date interval', prosrc => 'date_pl_interval' },
+{ oid => '2072',
+  proname => 'date_mi_interval', prorettype => 'timestamp',
+  proargtypes => 'date interval', prosrc => 'date_mi_interval' },
+
+{ oid => '2073', descr => 'extract text matching regular expression',
+  proname => 'substring', prorettype => 'text', proargtypes => 'text text',
+  prosrc => 'textregexsubstr' },
+{ oid => '2074', descr => 'extract text matching SQL99 regular expression',
+  proname => 'substring', prolang => '14', prorettype => 'text',
+  proargtypes => 'text text text',
+  prosrc => 'select pg_catalog.substring($1, pg_catalog.similar_escape($2, $3))' },
+
+{ oid => '2075', descr => 'convert int8 to bitstring',
+  proname => 'bit', prorettype => 'bit', proargtypes => 'int8 int4',
+  prosrc => 'bitfromint8' },
+{ oid => '2076', descr => 'convert bitstring to int8',
+  proname => 'int8', prorettype => 'int8', proargtypes => 'bit',
+  prosrc => 'bittoint8' },
+
+{ oid => '2077', descr => 'SHOW X as a function',
+  proname => 'current_setting', provolatile => 's', prorettype => 'text',
+  proargtypes => 'text', prosrc => 'show_config_by_name' },
+{ oid => '3294',
+  descr => 'SHOW X as a function, optionally no error for missing variable',
+  proname => 'current_setting', provolatile => 's', prorettype => 'text',
+  proargtypes => 'text bool', prosrc => 'show_config_by_name_missing_ok' },
+{ oid => '2078', descr => 'SET X as a function',
+  proname => 'set_config', proisstrict => 'f', provolatile => 'v',
+  proparallel => 'u', prorettype => 'text', proargtypes => 'text text bool',
+  prosrc => 'set_config_by_name' },
+{ oid => '2084', descr => 'SHOW ALL as a function',
+  proname => 'pg_show_all_settings', prorows => '1000', proretset => 't',
+  provolatile => 's', prorettype => 'record', proargtypes => '',
+  proallargtypes => '{text,text,text,text,text,text,text,text,text,text,text,_text,text,text,text,int4,bool}',
+  proargmodes => '{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}',
+  proargnames => '{name,setting,unit,category,short_desc,extra_desc,context,vartype,source,min_val,max_val,enumvals,boot_val,reset_val,sourcefile,sourceline,pending_restart}',
+  prosrc => 'show_all_settings' },
+{ oid => '3329', descr => 'show config file settings',
+  proname => 'pg_show_all_file_settings', prorows => '1000', proretset => 't',
+  provolatile => 'v', prorettype => 'record', proargtypes => '',
+  proallargtypes => '{text,int4,int4,text,text,bool,text}',
+  proargmodes => '{o,o,o,o,o,o,o}',
+  proargnames => '{sourcefile,sourceline,seqno,name,setting,applied,error}',
+  prosrc => 'show_all_file_settings' },
+{ oid => '3401', descr => 'show pg_hba.conf rules',
+  proname => 'pg_hba_file_rules', prorows => '1000', proretset => 't',
+  provolatile => 'v', prorettype => 'record', proargtypes => '',
+  proallargtypes => '{int4,text,_text,_text,text,text,text,_text,text}',
+  proargmodes => '{o,o,o,o,o,o,o,o,o}',
+  proargnames => '{line_number,type,database,user_name,address,netmask,auth_method,options,error}',
+  prosrc => 'pg_hba_file_rules' },
+{ oid => '1371', descr => 'view system lock information',
+  proname => 'pg_lock_status', prorows => '1000', proretset => 't',
+  provolatile => 'v', prorettype => 'record', proargtypes => '',
+  proallargtypes => '{text,oid,oid,int4,int2,text,xid,oid,oid,int2,text,int4,text,bool,bool}',
+  proargmodes => '{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}',
+  proargnames => '{locktype,database,relation,page,tuple,virtualxid,transactionid,classid,objid,objsubid,virtualtransaction,pid,mode,granted,fastpath}',
+  prosrc => 'pg_lock_status' },
+{ oid => '2561',
+  descr => 'get array of PIDs of sessions blocking specified backend PID from acquiring a heavyweight lock',
+  proname => 'pg_blocking_pids', provolatile => 'v', prorettype => '_int4',
+  proargtypes => 'int4', prosrc => 'pg_blocking_pids' },
+{ oid => '3376',
+  descr => 'get array of PIDs of sessions blocking specified backend PID from acquiring a safe snapshot',
+  proname => 'pg_safe_snapshot_blocking_pids', provolatile => 'v',
+  prorettype => '_int4', proargtypes => 'int4',
+  prosrc => 'pg_safe_snapshot_blocking_pids' },
+{ oid => '3378', descr => 'isolationtester support function',
+  proname => 'pg_isolation_test_session_is_blocked', provolatile => 'v',
+  prorettype => 'bool', proargtypes => 'int4 _int4',
+  prosrc => 'pg_isolation_test_session_is_blocked' },
+{ oid => '1065', descr => 'view two-phase transactions',
+  proname => 'pg_prepared_xact', prorows => '1000', proretset => 't',
+  provolatile => 'v', prorettype => 'record', proargtypes => '',
+  proallargtypes => '{xid,text,timestamptz,oid,oid}',
+  proargmodes => '{o,o,o,o,o}',
+  proargnames => '{transaction,gid,prepared,ownerid,dbid}',
+  prosrc => 'pg_prepared_xact' },
+{ oid => '3819', descr => 'view members of a multixactid',
+  proname => 'pg_get_multixact_members', prorows => '1000', proretset => 't',
+  provolatile => 'v', prorettype => 'record', proargtypes => 'xid',
+  proallargtypes => '{xid,xid,text}', proargmodes => '{i,o,o}',
+  proargnames => '{multixid,xid,mode}', prosrc => 'pg_get_multixact_members' },
+
+{ oid => '3581', descr => 'get commit timestamp of a transaction',
+  proname => 'pg_xact_commit_timestamp', provolatile => 'v',
+  prorettype => 'timestamptz', proargtypes => 'xid',
+  prosrc => 'pg_xact_commit_timestamp' },
+
+{ oid => '3583',
+  descr => 'get transaction Id and commit timestamp of latest transaction commit',
+  proname => 'pg_last_committed_xact', provolatile => 'v',
+  prorettype => 'record', proargtypes => '',
+  proallargtypes => '{xid,timestamptz}', proargmodes => '{o,o}',
+  proargnames => '{xid,timestamp}', prosrc => 'pg_last_committed_xact' },
+
+{ oid => '3537', descr => 'get identification of SQL object',
+  proname => 'pg_describe_object', provolatile => 's', prorettype => 'text',
+  proargtypes => 'oid oid int4', prosrc => 'pg_describe_object' },
+
+{ oid => '3839',
+  descr => 'get machine-parseable identification of SQL object',
+  proname => 'pg_identify_object', provolatile => 's', prorettype => 'record',
+  proargtypes => 'oid oid int4',
+  proallargtypes => '{oid,oid,int4,text,text,text,text}',
+  proargmodes => '{i,i,i,o,o,o,o}',
+  proargnames => '{classid,objid,objsubid,type,schema,name,identity}',
+  prosrc => 'pg_identify_object' },
+
+{ oid => '3382',
+  descr => 'get identification of SQL object for pg_get_object_address()',
+  proname => 'pg_identify_object_as_address', provolatile => 's',
+  prorettype => 'record', proargtypes => 'oid oid int4',
+  proallargtypes => '{oid,oid,int4,text,_text,_text}',
+  proargmodes => '{i,i,i,o,o,o}',
+  proargnames => '{classid,objid,objsubid,type,object_names,object_args}',
+  prosrc => 'pg_identify_object_as_address' },
+
+{ oid => '3954',
+  descr => 'get OID-based object address from name/args arrays',
+  proname => 'pg_get_object_address', provolatile => 's',
+  prorettype => 'record', proargtypes => 'text _text _text',
+  proallargtypes => '{text,_text,_text,oid,oid,int4}',
+  proargmodes => '{i,i,i,o,o,o}',
+  proargnames => '{type,name,args,classid,objid,objsubid}',
+  prosrc => 'pg_get_object_address' },
+
+{ oid => '2079', descr => 'is table visible in search path?',
+  proname => 'pg_table_is_visible', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid', prosrc => 'pg_table_is_visible' },
+{ oid => '2080', descr => 'is type visible in search path?',
+  proname => 'pg_type_is_visible', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid', prosrc => 'pg_type_is_visible' },
+{ oid => '2081', descr => 'is function visible in search path?',
+  proname => 'pg_function_is_visible', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid',
+  prosrc => 'pg_function_is_visible' },
+{ oid => '2082', descr => 'is operator visible in search path?',
+  proname => 'pg_operator_is_visible', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid',
+  prosrc => 'pg_operator_is_visible' },
+{ oid => '2083', descr => 'is opclass visible in search path?',
+  proname => 'pg_opclass_is_visible', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid',
+  prosrc => 'pg_opclass_is_visible' },
+{ oid => '3829', descr => 'is opfamily visible in search path?',
+  proname => 'pg_opfamily_is_visible', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid',
+  prosrc => 'pg_opfamily_is_visible' },
+{ oid => '2093', descr => 'is conversion visible in search path?',
+  proname => 'pg_conversion_is_visible', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid',
+  prosrc => 'pg_conversion_is_visible' },
+{ oid => '3403', descr => 'is statistics object visible in search path?',
+  proname => 'pg_statistics_obj_is_visible', procost => '10',
+  provolatile => 's', prorettype => 'bool', proargtypes => 'oid',
+  prosrc => 'pg_statistics_obj_is_visible' },
+{ oid => '3756', descr => 'is text search parser visible in search path?',
+  proname => 'pg_ts_parser_is_visible', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid',
+  prosrc => 'pg_ts_parser_is_visible' },
+{ oid => '3757', descr => 'is text search dictionary visible in search path?',
+  proname => 'pg_ts_dict_is_visible', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid',
+  prosrc => 'pg_ts_dict_is_visible' },
+{ oid => '3768', descr => 'is text search template visible in search path?',
+  proname => 'pg_ts_template_is_visible', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid',
+  prosrc => 'pg_ts_template_is_visible' },
+{ oid => '3758',
+  descr => 'is text search configuration visible in search path?',
+  proname => 'pg_ts_config_is_visible', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid',
+  prosrc => 'pg_ts_config_is_visible' },
+{ oid => '3815', descr => 'is collation visible in search path?',
+  proname => 'pg_collation_is_visible', procost => '10', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid',
+  prosrc => 'pg_collation_is_visible' },
+
+{ oid => '2854', descr => 'get OID of current session\'s temp schema, if any',
+  proname => 'pg_my_temp_schema', provolatile => 's', proparallel => 'r',
+  prorettype => 'oid', proargtypes => '', prosrc => 'pg_my_temp_schema' },
+{ oid => '2855', descr => 'is schema another session\'s temp schema?',
+  proname => 'pg_is_other_temp_schema', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid',
+  prosrc => 'pg_is_other_temp_schema' },
+
+{ oid => '2171', descr => 'cancel a server process\' current query',
+  proname => 'pg_cancel_backend', provolatile => 'v', prorettype => 'bool',
+  proargtypes => 'int4', prosrc => 'pg_cancel_backend' },
+{ oid => '2096', descr => 'terminate a server process',
+  proname => 'pg_terminate_backend', provolatile => 'v', prorettype => 'bool',
+  proargtypes => 'int4', prosrc => 'pg_terminate_backend' },
+{ oid => '2172', descr => 'prepare for taking an online backup',
+  proname => 'pg_start_backup', provolatile => 'v', proparallel => 'r',
+  prorettype => 'pg_lsn', proargtypes => 'text bool bool',
+  prosrc => 'pg_start_backup' },
+{ oid => '2173', descr => 'finish taking an online backup',
+  proname => 'pg_stop_backup', provolatile => 'v', proparallel => 'r',
+  prorettype => 'pg_lsn', proargtypes => '', prosrc => 'pg_stop_backup' },
+{ oid => '2739', descr => 'finish taking an online backup',
+  proname => 'pg_stop_backup', prorows => '1', proretset => 't',
+  provolatile => 'v', proparallel => 'r', prorettype => 'record',
+  proargtypes => 'bool bool', proallargtypes => '{bool,bool,pg_lsn,text,text}',
+  proargmodes => '{i,i,o,o,o}',
+  proargnames => '{exclusive,wait_for_archive,lsn,labelfile,spcmapfile}',
+  prosrc => 'pg_stop_backup_v2' },
+{ oid => '3813', descr => 'true if server is in online backup',
+  proname => 'pg_is_in_backup', provolatile => 'v', prorettype => 'bool',
+  proargtypes => '', prosrc => 'pg_is_in_backup' },
+{ oid => '3814', descr => 'start time of an online backup',
+  proname => 'pg_backup_start_time', provolatile => 's',
+  prorettype => 'timestamptz', proargtypes => '',
+  prosrc => 'pg_backup_start_time' },
+{ oid => '2848', descr => 'switch to new wal file',
+  proname => 'pg_switch_wal', provolatile => 'v', prorettype => 'pg_lsn',
+  proargtypes => '', prosrc => 'pg_switch_wal' },
+{ oid => '3098', descr => 'create a named restore point',
+  proname => 'pg_create_restore_point', provolatile => 'v',
+  prorettype => 'pg_lsn', proargtypes => 'text',
+  prosrc => 'pg_create_restore_point' },
+{ oid => '2849', descr => 'current wal write location',
+  proname => 'pg_current_wal_lsn', provolatile => 'v', prorettype => 'pg_lsn',
+  proargtypes => '', prosrc => 'pg_current_wal_lsn' },
+{ oid => '2852', descr => 'current wal insert location',
+  proname => 'pg_current_wal_insert_lsn', provolatile => 'v',
+  prorettype => 'pg_lsn', proargtypes => '',
+  prosrc => 'pg_current_wal_insert_lsn' },
+{ oid => '3330', descr => 'current wal flush location',
+  proname => 'pg_current_wal_flush_lsn', provolatile => 'v',
+  prorettype => 'pg_lsn', proargtypes => '',
+  prosrc => 'pg_current_wal_flush_lsn' },
+{ oid => '2850',
+  descr => 'wal filename and byte offset, given a wal location',
+  proname => 'pg_walfile_name_offset', prorettype => 'record',
+  proargtypes => 'pg_lsn', proallargtypes => '{pg_lsn,text,int4}',
+  proargmodes => '{i,o,o}', proargnames => '{lsn,file_name,file_offset}',
+  prosrc => 'pg_walfile_name_offset' },
+{ oid => '2851', descr => 'wal filename, given a wal location',
+  proname => 'pg_walfile_name', prorettype => 'text', proargtypes => 'pg_lsn',
+  prosrc => 'pg_walfile_name' },
+
+{ oid => '3165', descr => 'difference in bytes, given two wal locations',
+  proname => 'pg_wal_lsn_diff', prorettype => 'numeric',
+  proargtypes => 'pg_lsn pg_lsn', prosrc => 'pg_wal_lsn_diff' },
+
+{ oid => '3809', descr => 'export a snapshot',
+  proname => 'pg_export_snapshot', provolatile => 'v', proparallel => 'u',
+  prorettype => 'text', proargtypes => '', prosrc => 'pg_export_snapshot' },
+
+{ oid => '3810', descr => 'true if server is in recovery',
+  proname => 'pg_is_in_recovery', provolatile => 'v', prorettype => 'bool',
+  proargtypes => '', prosrc => 'pg_is_in_recovery' },
+
+{ oid => '3820', descr => 'current wal flush location',
+  proname => 'pg_last_wal_receive_lsn', provolatile => 'v',
+  prorettype => 'pg_lsn', proargtypes => '',
+  prosrc => 'pg_last_wal_receive_lsn' },
+{ oid => '3821', descr => 'last wal replay location',
+  proname => 'pg_last_wal_replay_lsn', provolatile => 'v',
+  prorettype => 'pg_lsn', proargtypes => '',
+  prosrc => 'pg_last_wal_replay_lsn' },
+{ oid => '3830', descr => 'timestamp of last replay xact',
+  proname => 'pg_last_xact_replay_timestamp', provolatile => 'v',
+  prorettype => 'timestamptz', proargtypes => '',
+  prosrc => 'pg_last_xact_replay_timestamp' },
+
+{ oid => '3071', descr => 'pause wal replay',
+  proname => 'pg_wal_replay_pause', provolatile => 'v', prorettype => 'void',
+  proargtypes => '', prosrc => 'pg_wal_replay_pause' },
+{ oid => '3072', descr => 'resume wal replay, if it was paused',
+  proname => 'pg_wal_replay_resume', provolatile => 'v', prorettype => 'void',
+  proargtypes => '', prosrc => 'pg_wal_replay_resume' },
+{ oid => '3073', descr => 'true if wal replay is paused',
+  proname => 'pg_is_wal_replay_paused', provolatile => 'v',
+  prorettype => 'bool', proargtypes => '',
+  prosrc => 'pg_is_wal_replay_paused' },
+
+{ oid => '2621', descr => 'reload configuration files',
+  proname => 'pg_reload_conf', provolatile => 'v', prorettype => 'bool',
+  proargtypes => '', prosrc => 'pg_reload_conf' },
+{ oid => '2622', descr => 'rotate log file',
+  proname => 'pg_rotate_logfile', provolatile => 'v', prorettype => 'bool',
+  proargtypes => '', prosrc => 'pg_rotate_logfile_v2' },
+{ oid => '4099', descr => 'rotate log file - old version for adminpack 1.0',
+  proname => 'pg_rotate_logfile_old', provolatile => 'v', prorettype => 'bool',
+  proargtypes => '', prosrc => 'pg_rotate_logfile' },
+{ oid => '3800', descr => 'current logging collector file location',
+  proname => 'pg_current_logfile', proisstrict => 'f', provolatile => 'v',
+  prorettype => 'text', proargtypes => '', prosrc => 'pg_current_logfile' },
+{ oid => '3801', descr => 'current logging collector file location',
+  proname => 'pg_current_logfile', proisstrict => 'f', provolatile => 'v',
+  prorettype => 'text', proargtypes => 'text',
+  prosrc => 'pg_current_logfile_1arg' },
+
+{ oid => '2623', descr => 'get information about file',
+  proname => 'pg_stat_file', provolatile => 'v', prorettype => 'record',
+  proargtypes => 'text',
+  proallargtypes => '{text,int8,timestamptz,timestamptz,timestamptz,timestamptz,bool}',
+  proargmodes => '{i,o,o,o,o,o,o}',
+  proargnames => '{filename,size,access,modification,change,creation,isdir}',
+  prosrc => 'pg_stat_file_1arg' },
+{ oid => '3307', descr => 'get information about file',
+  proname => 'pg_stat_file', provolatile => 'v', prorettype => 'record',
+  proargtypes => 'text bool',
+  proallargtypes => '{text,bool,int8,timestamptz,timestamptz,timestamptz,timestamptz,bool}',
+  proargmodes => '{i,i,o,o,o,o,o,o}',
+  proargnames => '{filename,missing_ok,size,access,modification,change,creation,isdir}',
+  prosrc => 'pg_stat_file' },
+{ oid => '2624', descr => 'read text from a file',
+  proname => 'pg_read_file', provolatile => 'v', prorettype => 'text',
+  proargtypes => 'text int8 int8', prosrc => 'pg_read_file_off_len' },
+{ oid => '3293', descr => 'read text from a file',
+  proname => 'pg_read_file', provolatile => 'v', prorettype => 'text',
+  proargtypes => 'text int8 int8 bool', prosrc => 'pg_read_file_v2' },
+{ oid => '4100',
+  descr => 'read text from a file - old version for adminpack 1.0',
+  proname => 'pg_read_file_old', provolatile => 'v', prorettype => 'text',
+  proargtypes => 'text int8 int8', prosrc => 'pg_read_file' },
+{ oid => '3826', descr => 'read text from a file',
+  proname => 'pg_read_file', provolatile => 'v', prorettype => 'text',
+  proargtypes => 'text', prosrc => 'pg_read_file_all' },
+{ oid => '3827', descr => 'read bytea from a file',
+  proname => 'pg_read_binary_file', provolatile => 'v', prorettype => 'bytea',
+  proargtypes => 'text int8 int8', prosrc => 'pg_read_binary_file_off_len' },
+{ oid => '3295', descr => 'read bytea from a file',
+  proname => 'pg_read_binary_file', provolatile => 'v', prorettype => 'bytea',
+  proargtypes => 'text int8 int8 bool', prosrc => 'pg_read_binary_file' },
+{ oid => '3828', descr => 'read bytea from a file',
+  proname => 'pg_read_binary_file', provolatile => 'v', prorettype => 'bytea',
+  proargtypes => 'text', prosrc => 'pg_read_binary_file_all' },
+{ oid => '2625', descr => 'list all files in a directory',
+  proname => 'pg_ls_dir', prorows => '1000', proretset => 't',
+  provolatile => 'v', prorettype => 'text', proargtypes => 'text',
+  prosrc => 'pg_ls_dir_1arg' },
+{ oid => '3297', descr => 'list all files in a directory',
+  proname => 'pg_ls_dir', prorows => '1000', proretset => 't',
+  provolatile => 'v', prorettype => 'text', proargtypes => 'text bool bool',
+  prosrc => 'pg_ls_dir' },
+{ oid => '2626', descr => 'sleep for the specified time in seconds',
+  proname => 'pg_sleep', provolatile => 'v', prorettype => 'void',
+  proargtypes => 'float8', prosrc => 'pg_sleep' },
+{ oid => '3935', descr => 'sleep for the specified interval',
+  proname => 'pg_sleep_for', prolang => '14', provolatile => 'v',
+  prorettype => 'void', proargtypes => 'interval',
+  prosrc => 'select pg_catalog.pg_sleep(extract(epoch from pg_catalog.clock_timestamp() operator(pg_catalog.+) $1) operator(pg_catalog.-) extract(epoch from pg_catalog.clock_timestamp()))' },
+{ oid => '3936', descr => 'sleep until the specified time',
+  proname => 'pg_sleep_until', prolang => '14', provolatile => 'v',
+  prorettype => 'void', proargtypes => 'timestamptz',
+  prosrc => 'select pg_catalog.pg_sleep(extract(epoch from $1) operator(pg_catalog.-) extract(epoch from pg_catalog.clock_timestamp()))' },
+{ oid => '315', descr => 'Is JIT compilation available in this session?',
+  proname => 'pg_jit_available', provolatile => 'v', prorettype => 'bool',
+  proargtypes => '', prosrc => 'pg_jit_available' },
+
+{ oid => '2971', descr => 'convert boolean to text',
+  proname => 'text', prorettype => 'text', proargtypes => 'bool',
+  prosrc => 'booltext' },
+
+# Aggregates (moved here from pg_aggregate for 7.3)
+
+{ oid => '2100',
+  descr => 'the average (arithmetic mean) as numeric of all bigint values',
+  proname => 'avg', prokind => 'a', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'int8', prosrc => 'aggregate_dummy' },
+{ oid => '2101',
+  descr => 'the average (arithmetic mean) as numeric of all integer values',
+  proname => 'avg', prokind => 'a', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'int4', prosrc => 'aggregate_dummy' },
+{ oid => '2102',
+  descr => 'the average (arithmetic mean) as numeric of all smallint values',
+  proname => 'avg', prokind => 'a', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'int2', prosrc => 'aggregate_dummy' },
+{ oid => '2103',
+  descr => 'the average (arithmetic mean) as numeric of all numeric values',
+  proname => 'avg', prokind => 'a', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'numeric', prosrc => 'aggregate_dummy' },
+{ oid => '2104',
+  descr => 'the average (arithmetic mean) as float8 of all float4 values',
+  proname => 'avg', prokind => 'a', proisstrict => 'f', prorettype => 'float8',
+  proargtypes => 'float4', prosrc => 'aggregate_dummy' },
+{ oid => '2105',
+  descr => 'the average (arithmetic mean) as float8 of all float8 values',
+  proname => 'avg', prokind => 'a', proisstrict => 'f', prorettype => 'float8',
+  proargtypes => 'float8', prosrc => 'aggregate_dummy' },
+{ oid => '2106',
+  descr => 'the average (arithmetic mean) as interval of all interval values',
+  proname => 'avg', prokind => 'a', proisstrict => 'f',
+  prorettype => 'interval', proargtypes => 'interval',
+  prosrc => 'aggregate_dummy' },
+
+{ oid => '2107', descr => 'sum as numeric across all bigint input values',
+  proname => 'sum', prokind => 'a', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'int8', prosrc => 'aggregate_dummy' },
+{ oid => '2108', descr => 'sum as bigint across all integer input values',
+  proname => 'sum', prokind => 'a', proisstrict => 'f', prorettype => 'int8',
+  proargtypes => 'int4', prosrc => 'aggregate_dummy' },
+{ oid => '2109', descr => 'sum as bigint across all smallint input values',
+  proname => 'sum', prokind => 'a', proisstrict => 'f', prorettype => 'int8',
+  proargtypes => 'int2', prosrc => 'aggregate_dummy' },
+{ oid => '2110', descr => 'sum as float4 across all float4 input values',
+  proname => 'sum', prokind => 'a', proisstrict => 'f', prorettype => 'float4',
+  proargtypes => 'float4', prosrc => 'aggregate_dummy' },
+{ oid => '2111', descr => 'sum as float8 across all float8 input values',
+  proname => 'sum', prokind => 'a', proisstrict => 'f', prorettype => 'float8',
+  proargtypes => 'float8', prosrc => 'aggregate_dummy' },
+{ oid => '2112', descr => 'sum as money across all money input values',
+  proname => 'sum', prokind => 'a', proisstrict => 'f', prorettype => 'money',
+  proargtypes => 'money', prosrc => 'aggregate_dummy' },
+{ oid => '2113', descr => 'sum as interval across all interval input values',
+  proname => 'sum', prokind => 'a', proisstrict => 'f',
+  prorettype => 'interval', proargtypes => 'interval',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2114', descr => 'sum as numeric across all numeric input values',
+  proname => 'sum', prokind => 'a', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'numeric', prosrc => 'aggregate_dummy' },
+
+{ oid => '2115', descr => 'maximum value of all bigint input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'int8',
+  proargtypes => 'int8', prosrc => 'aggregate_dummy' },
+{ oid => '2116', descr => 'maximum value of all integer input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'int4',
+  proargtypes => 'int4', prosrc => 'aggregate_dummy' },
+{ oid => '2117', descr => 'maximum value of all smallint input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'int2',
+  proargtypes => 'int2', prosrc => 'aggregate_dummy' },
+{ oid => '2118', descr => 'maximum value of all oid input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'oid',
+  proargtypes => 'oid', prosrc => 'aggregate_dummy' },
+{ oid => '2119', descr => 'maximum value of all float4 input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'float4',
+  proargtypes => 'float4', prosrc => 'aggregate_dummy' },
+{ oid => '2120', descr => 'maximum value of all float8 input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'float8',
+  proargtypes => 'float8', prosrc => 'aggregate_dummy' },
+{ oid => '2121', descr => 'maximum value of all abstime input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'abstime',
+  proargtypes => 'abstime', prosrc => 'aggregate_dummy' },
+{ oid => '2122', descr => 'maximum value of all date input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'date',
+  proargtypes => 'date', prosrc => 'aggregate_dummy' },
+{ oid => '2123', descr => 'maximum value of all time input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'time',
+  proargtypes => 'time', prosrc => 'aggregate_dummy' },
+{ oid => '2124',
+  descr => 'maximum value of all time with time zone input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'timetz',
+  proargtypes => 'timetz', prosrc => 'aggregate_dummy' },
+{ oid => '2125', descr => 'maximum value of all money input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'money',
+  proargtypes => 'money', prosrc => 'aggregate_dummy' },
+{ oid => '2126', descr => 'maximum value of all timestamp input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f',
+  prorettype => 'timestamp', proargtypes => 'timestamp',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2127',
+  descr => 'maximum value of all timestamp with time zone input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f',
+  prorettype => 'timestamptz', proargtypes => 'timestamptz',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2128', descr => 'maximum value of all interval input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f',
+  prorettype => 'interval', proargtypes => 'interval',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2129', descr => 'maximum value of all text input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'text',
+  proargtypes => 'text', prosrc => 'aggregate_dummy' },
+{ oid => '2130', descr => 'maximum value of all numeric input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'numeric', prosrc => 'aggregate_dummy' },
+{ oid => '2050', descr => 'maximum value of all anyarray input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f',
+  prorettype => 'anyarray', proargtypes => 'anyarray',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2244', descr => 'maximum value of all bpchar input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'bpchar',
+  proargtypes => 'bpchar', prosrc => 'aggregate_dummy' },
+{ oid => '2797', descr => 'maximum value of all tid input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'tid',
+  proargtypes => 'tid', prosrc => 'aggregate_dummy' },
+{ oid => '3564', descr => 'maximum value of all inet input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'inet',
+  proargtypes => 'inet', prosrc => 'aggregate_dummy' },
+
+{ oid => '2131', descr => 'minimum value of all bigint input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'int8',
+  proargtypes => 'int8', prosrc => 'aggregate_dummy' },
+{ oid => '2132', descr => 'minimum value of all integer input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'int4',
+  proargtypes => 'int4', prosrc => 'aggregate_dummy' },
+{ oid => '2133', descr => 'minimum value of all smallint input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'int2',
+  proargtypes => 'int2', prosrc => 'aggregate_dummy' },
+{ oid => '2134', descr => 'minimum value of all oid input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'oid',
+  proargtypes => 'oid', prosrc => 'aggregate_dummy' },
+{ oid => '2135', descr => 'minimum value of all float4 input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'float4',
+  proargtypes => 'float4', prosrc => 'aggregate_dummy' },
+{ oid => '2136', descr => 'minimum value of all float8 input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'float8',
+  proargtypes => 'float8', prosrc => 'aggregate_dummy' },
+{ oid => '2137', descr => 'minimum value of all abstime input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'abstime',
+  proargtypes => 'abstime', prosrc => 'aggregate_dummy' },
+{ oid => '2138', descr => 'minimum value of all date input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'date',
+  proargtypes => 'date', prosrc => 'aggregate_dummy' },
+{ oid => '2139', descr => 'minimum value of all time input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'time',
+  proargtypes => 'time', prosrc => 'aggregate_dummy' },
+{ oid => '2140',
+  descr => 'minimum value of all time with time zone input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'timetz',
+  proargtypes => 'timetz', prosrc => 'aggregate_dummy' },
+{ oid => '2141', descr => 'minimum value of all money input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'money',
+  proargtypes => 'money', prosrc => 'aggregate_dummy' },
+{ oid => '2142', descr => 'minimum value of all timestamp input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f',
+  prorettype => 'timestamp', proargtypes => 'timestamp',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2143',
+  descr => 'minimum value of all timestamp with time zone input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f',
+  prorettype => 'timestamptz', proargtypes => 'timestamptz',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2144', descr => 'minimum value of all interval input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f',
+  prorettype => 'interval', proargtypes => 'interval',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2145', descr => 'minimum value of all text values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'text',
+  proargtypes => 'text', prosrc => 'aggregate_dummy' },
+{ oid => '2146', descr => 'minimum value of all numeric input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'numeric',
+  proargtypes => 'numeric', prosrc => 'aggregate_dummy' },
+{ oid => '2051', descr => 'minimum value of all anyarray input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f',
+  prorettype => 'anyarray', proargtypes => 'anyarray',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2245', descr => 'minimum value of all bpchar input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'bpchar',
+  proargtypes => 'bpchar', prosrc => 'aggregate_dummy' },
+{ oid => '2798', descr => 'minimum value of all tid input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'tid',
+  proargtypes => 'tid', prosrc => 'aggregate_dummy' },
+{ oid => '3565', descr => 'minimum value of all inet input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'inet',
+  proargtypes => 'inet', prosrc => 'aggregate_dummy' },
+
+# count has two forms: count(any) and count(*)
+{ oid => '2147',
+  descr => 'number of input rows for which the input expression is not null',
+  proname => 'count', prokind => 'a', proisstrict => 'f', prorettype => 'int8',
+  proargtypes => 'any', prosrc => 'aggregate_dummy' },
+{ oid => '2803', descr => 'number of input rows',
+  proname => 'count', prokind => 'a', proisstrict => 'f', prorettype => 'int8',
+  proargtypes => '', prosrc => 'aggregate_dummy' },
+
+{ oid => '2718',
+  descr => 'population variance of bigint input values (square of the population standard deviation)',
+  proname => 'var_pop', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int8', prosrc => 'aggregate_dummy' },
+{ oid => '2719',
+  descr => 'population variance of integer input values (square of the population standard deviation)',
+  proname => 'var_pop', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int4', prosrc => 'aggregate_dummy' },
+{ oid => '2720',
+  descr => 'population variance of smallint input values (square of the population standard deviation)',
+  proname => 'var_pop', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int2', prosrc => 'aggregate_dummy' },
+{ oid => '2721',
+  descr => 'population variance of float4 input values (square of the population standard deviation)',
+  proname => 'var_pop', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float4',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2722',
+  descr => 'population variance of float8 input values (square of the population standard deviation)',
+  proname => 'var_pop', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2723',
+  descr => 'population variance of numeric input values (square of the population standard deviation)',
+  proname => 'var_pop', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'aggregate_dummy' },
+
+{ oid => '2641',
+  descr => 'sample variance of bigint input values (square of the sample standard deviation)',
+  proname => 'var_samp', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int8', prosrc => 'aggregate_dummy' },
+{ oid => '2642',
+  descr => 'sample variance of integer input values (square of the sample standard deviation)',
+  proname => 'var_samp', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int4', prosrc => 'aggregate_dummy' },
+{ oid => '2643',
+  descr => 'sample variance of smallint input values (square of the sample standard deviation)',
+  proname => 'var_samp', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int2', prosrc => 'aggregate_dummy' },
+{ oid => '2644',
+  descr => 'sample variance of float4 input values (square of the sample standard deviation)',
+  proname => 'var_samp', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float4',
+  prosrc => 'aggregate_dummy' },
+
+{ oid => '2645',
+  descr => 'sample variance of float8 input values (square of the sample standard deviation)',
+  proname => 'var_samp', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2646',
+  descr => 'sample variance of numeric input values (square of the sample standard deviation)',
+  proname => 'var_samp', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'aggregate_dummy' },
+
+{ oid => '2148', descr => 'historical alias for var_samp',
+  proname => 'variance', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int8', prosrc => 'aggregate_dummy' },
+{ oid => '2149', descr => 'historical alias for var_samp',
+  proname => 'variance', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int4', prosrc => 'aggregate_dummy' },
+{ oid => '2150', descr => 'historical alias for var_samp',
+  proname => 'variance', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int2', prosrc => 'aggregate_dummy' },
+{ oid => '2151', descr => 'historical alias for var_samp',
+  proname => 'variance', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float4',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2152', descr => 'historical alias for var_samp',
+  proname => 'variance', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2153', descr => 'historical alias for var_samp',
+  proname => 'variance', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'aggregate_dummy' },
+
+{ oid => '2724',
+  descr => 'population standard deviation of bigint input values',
+  proname => 'stddev_pop', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int8', prosrc => 'aggregate_dummy' },
+{ oid => '2725',
+  descr => 'population standard deviation of integer input values',
+  proname => 'stddev_pop', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int4', prosrc => 'aggregate_dummy' },
+{ oid => '2726',
+  descr => 'population standard deviation of smallint input values',
+  proname => 'stddev_pop', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int2', prosrc => 'aggregate_dummy' },
+{ oid => '2727',
+  descr => 'population standard deviation of float4 input values',
+  proname => 'stddev_pop', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float4',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2728',
+  descr => 'population standard deviation of float8 input values',
+  proname => 'stddev_pop', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2729',
+  descr => 'population standard deviation of numeric input values',
+  proname => 'stddev_pop', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'aggregate_dummy' },
+
+{ oid => '2712', descr => 'sample standard deviation of bigint input values',
+  proname => 'stddev_samp', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int8', prosrc => 'aggregate_dummy' },
+{ oid => '2713', descr => 'sample standard deviation of integer input values',
+  proname => 'stddev_samp', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int4', prosrc => 'aggregate_dummy' },
+{ oid => '2714',
+  descr => 'sample standard deviation of smallint input values',
+  proname => 'stddev_samp', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int2', prosrc => 'aggregate_dummy' },
+{ oid => '2715', descr => 'sample standard deviation of float4 input values',
+  proname => 'stddev_samp', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float4',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2716', descr => 'sample standard deviation of float8 input values',
+  proname => 'stddev_samp', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2717', descr => 'sample standard deviation of numeric input values',
+  proname => 'stddev_samp', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'aggregate_dummy' },
+
+{ oid => '2154', descr => 'historical alias for stddev_samp',
+  proname => 'stddev', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int8', prosrc => 'aggregate_dummy' },
+{ oid => '2155', descr => 'historical alias for stddev_samp',
+  proname => 'stddev', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int4', prosrc => 'aggregate_dummy' },
+{ oid => '2156', descr => 'historical alias for stddev_samp',
+  proname => 'stddev', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'int2', prosrc => 'aggregate_dummy' },
+{ oid => '2157', descr => 'historical alias for stddev_samp',
+  proname => 'stddev', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float4',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2158', descr => 'historical alias for stddev_samp',
+  proname => 'stddev', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2159', descr => 'historical alias for stddev_samp',
+  proname => 'stddev', prokind => 'a', proisstrict => 'f',
+  prorettype => 'numeric', proargtypes => 'numeric',
+  prosrc => 'aggregate_dummy' },
+
+{ oid => '2818',
+  descr => 'number of input rows in which both expressions are not null',
+  proname => 'regr_count', prokind => 'a', proisstrict => 'f',
+  prorettype => 'int8', proargtypes => 'float8 float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2819',
+  descr => 'sum of squares of the independent variable (sum(X^2) - sum(X)^2/N)',
+  proname => 'regr_sxx', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2820',
+  descr => 'sum of squares of the dependent variable (sum(Y^2) - sum(Y)^2/N)',
+  proname => 'regr_syy', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2821',
+  descr => 'sum of products of independent times dependent variable (sum(X*Y) - sum(X) * sum(Y)/N)',
+  proname => 'regr_sxy', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2822', descr => 'average of the independent variable (sum(X)/N)',
+  proname => 'regr_avgx', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2823', descr => 'average of the dependent variable (sum(Y)/N)',
+  proname => 'regr_avgy', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2824', descr => 'square of the correlation coefficient',
+  proname => 'regr_r2', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2825',
+  descr => 'slope of the least-squares-fit linear equation determined by the (X, Y) pairs',
+  proname => 'regr_slope', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2826',
+  descr => 'y-intercept of the least-squares-fit linear equation determined by the (X, Y) pairs',
+  proname => 'regr_intercept', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'aggregate_dummy' },
+
+{ oid => '2827', descr => 'population covariance',
+  proname => 'covar_pop', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2828', descr => 'sample covariance',
+  proname => 'covar_samp', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '2829', descr => 'correlation coefficient',
+  proname => 'corr', prokind => 'a', proisstrict => 'f', prorettype => 'float8',
+  proargtypes => 'float8 float8', prosrc => 'aggregate_dummy' },
+
+{ oid => '2160',
+  proname => 'text_pattern_lt', prorettype => 'bool',
+  proargtypes => 'text text', prosrc => 'text_pattern_lt' },
+{ oid => '2161',
+  proname => 'text_pattern_le', prorettype => 'bool',
+  proargtypes => 'text text', prosrc => 'text_pattern_le' },
+{ oid => '2163',
+  proname => 'text_pattern_ge', prorettype => 'bool',
+  proargtypes => 'text text', prosrc => 'text_pattern_ge' },
+{ oid => '2164',
+  proname => 'text_pattern_gt', prorettype => 'bool',
+  proargtypes => 'text text', prosrc => 'text_pattern_gt' },
+{ oid => '2166', descr => 'less-equal-greater',
+  proname => 'bttext_pattern_cmp', prorettype => 'int4',
+  proargtypes => 'text text', prosrc => 'bttext_pattern_cmp' },
+{ oid => '3332', descr => 'sort support',
+  proname => 'bttext_pattern_sortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'bttext_pattern_sortsupport' },
+
+{ oid => '2174',
+  proname => 'bpchar_pattern_lt', prorettype => 'bool',
+  proargtypes => 'bpchar bpchar', prosrc => 'bpchar_pattern_lt' },
+{ oid => '2175',
+  proname => 'bpchar_pattern_le', prorettype => 'bool',
+  proargtypes => 'bpchar bpchar', prosrc => 'bpchar_pattern_le' },
+{ oid => '2177',
+  proname => 'bpchar_pattern_ge', prorettype => 'bool',
+  proargtypes => 'bpchar bpchar', prosrc => 'bpchar_pattern_ge' },
+{ oid => '2178',
+  proname => 'bpchar_pattern_gt', prorettype => 'bool',
+  proargtypes => 'bpchar bpchar', prosrc => 'bpchar_pattern_gt' },
+{ oid => '2180', descr => 'less-equal-greater',
+  proname => 'btbpchar_pattern_cmp', prorettype => 'int4',
+  proargtypes => 'bpchar bpchar', prosrc => 'btbpchar_pattern_cmp' },
+{ oid => '3333', descr => 'sort support',
+  proname => 'btbpchar_pattern_sortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'btbpchar_pattern_sortsupport' },
+
+{ oid => '2188', descr => 'less-equal-greater',
+  proname => 'btint48cmp', prorettype => 'int4', proargtypes => 'int4 int8',
+  prosrc => 'btint48cmp' },
+{ oid => '2189', descr => 'less-equal-greater',
+  proname => 'btint84cmp', prorettype => 'int4', proargtypes => 'int8 int4',
+  prosrc => 'btint84cmp' },
+{ oid => '2190', descr => 'less-equal-greater',
+  proname => 'btint24cmp', prorettype => 'int4', proargtypes => 'int2 int4',
+  prosrc => 'btint24cmp' },
+{ oid => '2191', descr => 'less-equal-greater',
+  proname => 'btint42cmp', prorettype => 'int4', proargtypes => 'int4 int2',
+  prosrc => 'btint42cmp' },
+{ oid => '2192', descr => 'less-equal-greater',
+  proname => 'btint28cmp', prorettype => 'int4', proargtypes => 'int2 int8',
+  prosrc => 'btint28cmp' },
+{ oid => '2193', descr => 'less-equal-greater',
+  proname => 'btint82cmp', prorettype => 'int4', proargtypes => 'int8 int2',
+  prosrc => 'btint82cmp' },
+{ oid => '2194', descr => 'less-equal-greater',
+  proname => 'btfloat48cmp', prorettype => 'int4',
+  proargtypes => 'float4 float8', prosrc => 'btfloat48cmp' },
+{ oid => '2195', descr => 'less-equal-greater',
+  proname => 'btfloat84cmp', prorettype => 'int4',
+  proargtypes => 'float8 float4', prosrc => 'btfloat84cmp' },
+
+{ oid => '2212', descr => 'I/O',
+  proname => 'regprocedurein', provolatile => 's', prorettype => 'regprocedure',
+  proargtypes => 'cstring', prosrc => 'regprocedurein' },
+{ oid => '2213', descr => 'I/O',
+  proname => 'regprocedureout', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'regprocedure', prosrc => 'regprocedureout' },
+{ oid => '2214', descr => 'I/O',
+  proname => 'regoperin', provolatile => 's', prorettype => 'regoper',
+  proargtypes => 'cstring', prosrc => 'regoperin' },
+{ oid => '2215', descr => 'I/O',
+  proname => 'regoperout', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'regoper', prosrc => 'regoperout' },
+{ oid => '3492', descr => 'convert operator name to regoper',
+  proname => 'to_regoper', provolatile => 's', prorettype => 'regoper',
+  proargtypes => 'text', prosrc => 'to_regoper' },
+{ oid => '3476', descr => 'convert operator name to regoperator',
+  proname => 'to_regoperator', provolatile => 's', prorettype => 'regoperator',
+  proargtypes => 'text', prosrc => 'to_regoperator' },
+{ oid => '2216', descr => 'I/O',
+  proname => 'regoperatorin', provolatile => 's', prorettype => 'regoperator',
+  proargtypes => 'cstring', prosrc => 'regoperatorin' },
+{ oid => '2217', descr => 'I/O',
+  proname => 'regoperatorout', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'regoperator', prosrc => 'regoperatorout' },
+{ oid => '2218', descr => 'I/O',
+  proname => 'regclassin', provolatile => 's', prorettype => 'regclass',
+  proargtypes => 'cstring', prosrc => 'regclassin' },
+{ oid => '2219', descr => 'I/O',
+  proname => 'regclassout', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'regclass', prosrc => 'regclassout' },
+{ oid => '3495', descr => 'convert classname to regclass',
+  proname => 'to_regclass', provolatile => 's', prorettype => 'regclass',
+  proargtypes => 'text', prosrc => 'to_regclass' },
+{ oid => '2220', descr => 'I/O',
+  proname => 'regtypein', provolatile => 's', prorettype => 'regtype',
+  proargtypes => 'cstring', prosrc => 'regtypein' },
+{ oid => '2221', descr => 'I/O',
+  proname => 'regtypeout', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'regtype', prosrc => 'regtypeout' },
+{ oid => '3493', descr => 'convert type name to regtype',
+  proname => 'to_regtype', provolatile => 's', prorettype => 'regtype',
+  proargtypes => 'text', prosrc => 'to_regtype' },
+{ oid => '1079', descr => 'convert text to regclass',
+  proname => 'regclass', provolatile => 's', prorettype => 'regclass',
+  proargtypes => 'text', prosrc => 'text_regclass' },
+
+{ oid => '4098', descr => 'I/O',
+  proname => 'regrolein', provolatile => 's', prorettype => 'regrole',
+  proargtypes => 'cstring', prosrc => 'regrolein' },
+{ oid => '4092', descr => 'I/O',
+  proname => 'regroleout', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'regrole', prosrc => 'regroleout' },
+{ oid => '4093', descr => 'convert role name to regrole',
+  proname => 'to_regrole', provolatile => 's', prorettype => 'regrole',
+  proargtypes => 'text', prosrc => 'to_regrole' },
+
+{ oid => '4084', descr => 'I/O',
+  proname => 'regnamespacein', provolatile => 's', prorettype => 'regnamespace',
+  proargtypes => 'cstring', prosrc => 'regnamespacein' },
+{ oid => '4085', descr => 'I/O',
+  proname => 'regnamespaceout', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'regnamespace', prosrc => 'regnamespaceout' },
+{ oid => '4086', descr => 'convert namespace name to regnamespace',
+  proname => 'to_regnamespace', provolatile => 's',
+  prorettype => 'regnamespace', proargtypes => 'text',
+  prosrc => 'to_regnamespace' },
+
+{ oid => '1268',
+  descr => 'parse qualified identifier to array of identifiers',
+  proname => 'parse_ident', prorettype => '_text', proargtypes => 'text bool',
+  proargnames => '{str,strict}', prosrc => 'parse_ident' },
+
+{ oid => '2246', descr => '(internal)',
+  proname => 'fmgr_internal_validator', provolatile => 's',
+  prorettype => 'void', proargtypes => 'oid',
+  prosrc => 'fmgr_internal_validator' },
+{ oid => '2247', descr => '(internal)',
+  proname => 'fmgr_c_validator', provolatile => 's', prorettype => 'void',
+  proargtypes => 'oid', prosrc => 'fmgr_c_validator' },
+{ oid => '2248', descr => '(internal)',
+  proname => 'fmgr_sql_validator', provolatile => 's', prorettype => 'void',
+  proargtypes => 'oid', prosrc => 'fmgr_sql_validator' },
+
+{ oid => '2250',
+  descr => 'user privilege on database by username, database name',
+  proname => 'has_database_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name text text',
+  prosrc => 'has_database_privilege_name_name' },
+{ oid => '2251',
+  descr => 'user privilege on database by username, database oid',
+  proname => 'has_database_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name oid text', prosrc => 'has_database_privilege_name_id' },
+{ oid => '2252',
+  descr => 'user privilege on database by user oid, database name',
+  proname => 'has_database_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text text', prosrc => 'has_database_privilege_id_name' },
+{ oid => '2253',
+  descr => 'user privilege on database by user oid, database oid',
+  proname => 'has_database_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid oid text', prosrc => 'has_database_privilege_id_id' },
+{ oid => '2254',
+  descr => 'current user privilege on database by database name',
+  proname => 'has_database_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'text text', prosrc => 'has_database_privilege_name' },
+{ oid => '2255',
+  descr => 'current user privilege on database by database oid',
+  proname => 'has_database_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text', prosrc => 'has_database_privilege_id' },
+
+{ oid => '2256',
+  descr => 'user privilege on function by username, function name',
+  proname => 'has_function_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name text text',
+  prosrc => 'has_function_privilege_name_name' },
+{ oid => '2257',
+  descr => 'user privilege on function by username, function oid',
+  proname => 'has_function_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name oid text', prosrc => 'has_function_privilege_name_id' },
+{ oid => '2258',
+  descr => 'user privilege on function by user oid, function name',
+  proname => 'has_function_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text text', prosrc => 'has_function_privilege_id_name' },
+{ oid => '2259',
+  descr => 'user privilege on function by user oid, function oid',
+  proname => 'has_function_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid oid text', prosrc => 'has_function_privilege_id_id' },
+{ oid => '2260',
+  descr => 'current user privilege on function by function name',
+  proname => 'has_function_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'text text', prosrc => 'has_function_privilege_name' },
+{ oid => '2261',
+  descr => 'current user privilege on function by function oid',
+  proname => 'has_function_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text', prosrc => 'has_function_privilege_id' },
+
+{ oid => '2262',
+  descr => 'user privilege on language by username, language name',
+  proname => 'has_language_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name text text',
+  prosrc => 'has_language_privilege_name_name' },
+{ oid => '2263',
+  descr => 'user privilege on language by username, language oid',
+  proname => 'has_language_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name oid text', prosrc => 'has_language_privilege_name_id' },
+{ oid => '2264',
+  descr => 'user privilege on language by user oid, language name',
+  proname => 'has_language_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text text', prosrc => 'has_language_privilege_id_name' },
+{ oid => '2265',
+  descr => 'user privilege on language by user oid, language oid',
+  proname => 'has_language_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid oid text', prosrc => 'has_language_privilege_id_id' },
+{ oid => '2266',
+  descr => 'current user privilege on language by language name',
+  proname => 'has_language_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'text text', prosrc => 'has_language_privilege_name' },
+{ oid => '2267',
+  descr => 'current user privilege on language by language oid',
+  proname => 'has_language_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text', prosrc => 'has_language_privilege_id' },
+
+{ oid => '2268', descr => 'user privilege on schema by username, schema name',
+  proname => 'has_schema_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name text text', prosrc => 'has_schema_privilege_name_name' },
+{ oid => '2269', descr => 'user privilege on schema by username, schema oid',
+  proname => 'has_schema_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name oid text', prosrc => 'has_schema_privilege_name_id' },
+{ oid => '2270', descr => 'user privilege on schema by user oid, schema name',
+  proname => 'has_schema_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text text', prosrc => 'has_schema_privilege_id_name' },
+{ oid => '2271', descr => 'user privilege on schema by user oid, schema oid',
+  proname => 'has_schema_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid oid text', prosrc => 'has_schema_privilege_id_id' },
+{ oid => '2272', descr => 'current user privilege on schema by schema name',
+  proname => 'has_schema_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'text text', prosrc => 'has_schema_privilege_name' },
+{ oid => '2273', descr => 'current user privilege on schema by schema oid',
+  proname => 'has_schema_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text', prosrc => 'has_schema_privilege_id' },
+
+{ oid => '2390',
+  descr => 'user privilege on tablespace by username, tablespace name',
+  proname => 'has_tablespace_privilege', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'name text text',
+  prosrc => 'has_tablespace_privilege_name_name' },
+{ oid => '2391',
+  descr => 'user privilege on tablespace by username, tablespace oid',
+  proname => 'has_tablespace_privilege', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'name oid text',
+  prosrc => 'has_tablespace_privilege_name_id' },
+{ oid => '2392',
+  descr => 'user privilege on tablespace by user oid, tablespace name',
+  proname => 'has_tablespace_privilege', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid text text',
+  prosrc => 'has_tablespace_privilege_id_name' },
+{ oid => '2393',
+  descr => 'user privilege on tablespace by user oid, tablespace oid',
+  proname => 'has_tablespace_privilege', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid oid text',
+  prosrc => 'has_tablespace_privilege_id_id' },
+{ oid => '2394',
+  descr => 'current user privilege on tablespace by tablespace name',
+  proname => 'has_tablespace_privilege', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'has_tablespace_privilege_name' },
+{ oid => '2395',
+  descr => 'current user privilege on tablespace by tablespace oid',
+  proname => 'has_tablespace_privilege', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid text',
+  prosrc => 'has_tablespace_privilege_id' },
+
+{ oid => '3000',
+  descr => 'user privilege on foreign data wrapper by username, foreign data wrapper name',
+  proname => 'has_foreign_data_wrapper_privilege', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'name text text',
+  prosrc => 'has_foreign_data_wrapper_privilege_name_name' },
+{ oid => '3001',
+  descr => 'user privilege on foreign data wrapper by username, foreign data wrapper oid',
+  proname => 'has_foreign_data_wrapper_privilege', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'name oid text',
+  prosrc => 'has_foreign_data_wrapper_privilege_name_id' },
+{ oid => '3002',
+  descr => 'user privilege on foreign data wrapper by user oid, foreign data wrapper name',
+  proname => 'has_foreign_data_wrapper_privilege', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid text text',
+  prosrc => 'has_foreign_data_wrapper_privilege_id_name' },
+{ oid => '3003',
+  descr => 'user privilege on foreign data wrapper by user oid, foreign data wrapper oid',
+  proname => 'has_foreign_data_wrapper_privilege', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid oid text',
+  prosrc => 'has_foreign_data_wrapper_privilege_id_id' },
+{ oid => '3004',
+  descr => 'current user privilege on foreign data wrapper by foreign data wrapper name',
+  proname => 'has_foreign_data_wrapper_privilege', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'text text',
+  prosrc => 'has_foreign_data_wrapper_privilege_name' },
+{ oid => '3005',
+  descr => 'current user privilege on foreign data wrapper by foreign data wrapper oid',
+  proname => 'has_foreign_data_wrapper_privilege', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'oid text',
+  prosrc => 'has_foreign_data_wrapper_privilege_id' },
+
+{ oid => '3006', descr => 'user privilege on server by username, server name',
+  proname => 'has_server_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name text text', prosrc => 'has_server_privilege_name_name' },
+{ oid => '3007', descr => 'user privilege on server by username, server oid',
+  proname => 'has_server_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name oid text', prosrc => 'has_server_privilege_name_id' },
+{ oid => '3008', descr => 'user privilege on server by user oid, server name',
+  proname => 'has_server_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text text', prosrc => 'has_server_privilege_id_name' },
+{ oid => '3009', descr => 'user privilege on server by user oid, server oid',
+  proname => 'has_server_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid oid text', prosrc => 'has_server_privilege_id_id' },
+{ oid => '3010', descr => 'current user privilege on server by server name',
+  proname => 'has_server_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'text text', prosrc => 'has_server_privilege_name' },
+{ oid => '3011', descr => 'current user privilege on server by server oid',
+  proname => 'has_server_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text', prosrc => 'has_server_privilege_id' },
+
+{ oid => '3138', descr => 'user privilege on type by username, type name',
+  proname => 'has_type_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name text text', prosrc => 'has_type_privilege_name_name' },
+{ oid => '3139', descr => 'user privilege on type by username, type oid',
+  proname => 'has_type_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name oid text', prosrc => 'has_type_privilege_name_id' },
+{ oid => '3140', descr => 'user privilege on type by user oid, type name',
+  proname => 'has_type_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text text', prosrc => 'has_type_privilege_id_name' },
+{ oid => '3141', descr => 'user privilege on type by user oid, type oid',
+  proname => 'has_type_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid oid text', prosrc => 'has_type_privilege_id_id' },
+{ oid => '3142', descr => 'current user privilege on type by type name',
+  proname => 'has_type_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'text text', prosrc => 'has_type_privilege_name' },
+{ oid => '3143', descr => 'current user privilege on type by type oid',
+  proname => 'has_type_privilege', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text', prosrc => 'has_type_privilege_id' },
+
+{ oid => '2705', descr => 'user privilege on role by username, role name',
+  proname => 'pg_has_role', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name name text', prosrc => 'pg_has_role_name_name' },
+{ oid => '2706', descr => 'user privilege on role by username, role oid',
+  proname => 'pg_has_role', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name oid text', prosrc => 'pg_has_role_name_id' },
+{ oid => '2707', descr => 'user privilege on role by user oid, role name',
+  proname => 'pg_has_role', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid name text', prosrc => 'pg_has_role_id_name' },
+{ oid => '2708', descr => 'user privilege on role by user oid, role oid',
+  proname => 'pg_has_role', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid oid text', prosrc => 'pg_has_role_id_id' },
+{ oid => '2709', descr => 'current user privilege on role by role name',
+  proname => 'pg_has_role', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'name text', prosrc => 'pg_has_role_name' },
+{ oid => '2710', descr => 'current user privilege on role by role oid',
+  proname => 'pg_has_role', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid text', prosrc => 'pg_has_role_id' },
+
+{ oid => '1269',
+  descr => 'bytes required to store the value, perhaps with compression',
+  proname => 'pg_column_size', provolatile => 's', prorettype => 'int4',
+  proargtypes => 'any', prosrc => 'pg_column_size' },
+{ oid => '2322',
+  descr => 'total disk space usage for the specified tablespace',
+  proname => 'pg_tablespace_size', provolatile => 'v', prorettype => 'int8',
+  proargtypes => 'oid', prosrc => 'pg_tablespace_size_oid' },
+{ oid => '2323',
+  descr => 'total disk space usage for the specified tablespace',
+  proname => 'pg_tablespace_size', provolatile => 'v', prorettype => 'int8',
+  proargtypes => 'name', prosrc => 'pg_tablespace_size_name' },
+{ oid => '2324', descr => 'total disk space usage for the specified database',
+  proname => 'pg_database_size', provolatile => 'v', prorettype => 'int8',
+  proargtypes => 'oid', prosrc => 'pg_database_size_oid' },
+{ oid => '2168', descr => 'total disk space usage for the specified database',
+  proname => 'pg_database_size', provolatile => 'v', prorettype => 'int8',
+  proargtypes => 'name', prosrc => 'pg_database_size_name' },
+{ oid => '2325',
+  descr => 'disk space usage for the main fork of the specified table or index',
+  proname => 'pg_relation_size', prolang => '14', provolatile => 'v',
+  prorettype => 'int8', proargtypes => 'regclass',
+  prosrc => 'select pg_catalog.pg_relation_size($1, \'\'main\'\')' },
+{ oid => '2332',
+  descr => 'disk space usage for the specified fork of a table or index',
+  proname => 'pg_relation_size', provolatile => 'v', prorettype => 'int8',
+  proargtypes => 'regclass text', prosrc => 'pg_relation_size' },
+{ oid => '2286',
+  descr => 'total disk space usage for the specified table and associated indexes',
+  proname => 'pg_total_relation_size', provolatile => 'v', prorettype => 'int8',
+  proargtypes => 'regclass', prosrc => 'pg_total_relation_size' },
+{ oid => '2288',
+  descr => 'convert a long int to a human readable text using size units',
+  proname => 'pg_size_pretty', prorettype => 'text', proargtypes => 'int8',
+  prosrc => 'pg_size_pretty' },
+{ oid => '3166',
+  descr => 'convert a numeric to a human readable text using size units',
+  proname => 'pg_size_pretty', prorettype => 'text', proargtypes => 'numeric',
+  prosrc => 'pg_size_pretty_numeric' },
+{ oid => '3334',
+  descr => 'convert a size in human-readable format with size units into bytes',
+  proname => 'pg_size_bytes', prorettype => 'int8', proargtypes => 'text',
+  prosrc => 'pg_size_bytes' },
+{ oid => '2997',
+  descr => 'disk space usage for the specified table, including TOAST, free space and visibility map',
+  proname => 'pg_table_size', provolatile => 'v', prorettype => 'int8',
+  proargtypes => 'regclass', prosrc => 'pg_table_size' },
+{ oid => '2998',
+  descr => 'disk space usage for all indexes attached to the specified table',
+  proname => 'pg_indexes_size', provolatile => 'v', prorettype => 'int8',
+  proargtypes => 'regclass', prosrc => 'pg_indexes_size' },
+{ oid => '2999', descr => 'filenode identifier of relation',
+  proname => 'pg_relation_filenode', provolatile => 's', prorettype => 'oid',
+  proargtypes => 'regclass', prosrc => 'pg_relation_filenode' },
+{ oid => '3454', descr => 'relation OID for filenode and tablespace',
+  proname => 'pg_filenode_relation', provolatile => 's',
+  prorettype => 'regclass', proargtypes => 'oid oid',
+  prosrc => 'pg_filenode_relation' },
+{ oid => '3034', descr => 'file path of relation',
+  proname => 'pg_relation_filepath', provolatile => 's', prorettype => 'text',
+  proargtypes => 'regclass', prosrc => 'pg_relation_filepath' },
+
+{ oid => '2316', descr => '(internal)',
+  proname => 'postgresql_fdw_validator', prorettype => 'bool',
+  proargtypes => '_text oid', prosrc => 'postgresql_fdw_validator' },
+
+{ oid => '2290', descr => 'I/O',
+  proname => 'record_in', provolatile => 's', prorettype => 'record',
+  proargtypes => 'cstring oid int4', prosrc => 'record_in' },
+{ oid => '2291', descr => 'I/O',
+  proname => 'record_out', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'record', prosrc => 'record_out' },
+{ oid => '2292', descr => 'I/O',
+  proname => 'cstring_in', prorettype => 'cstring', proargtypes => 'cstring',
+  prosrc => 'cstring_in' },
+{ oid => '2293', descr => 'I/O',
+  proname => 'cstring_out', prorettype => 'cstring', proargtypes => 'cstring',
+  prosrc => 'cstring_out' },
+{ oid => '2294', descr => 'I/O',
+  proname => 'any_in', prorettype => 'any', proargtypes => 'cstring',
+  prosrc => 'any_in' },
+{ oid => '2295', descr => 'I/O',
+  proname => 'any_out', prorettype => 'cstring', proargtypes => 'any',
+  prosrc => 'any_out' },
+{ oid => '2296', descr => 'I/O',
+  proname => 'anyarray_in', prorettype => 'anyarray', proargtypes => 'cstring',
+  prosrc => 'anyarray_in' },
+{ oid => '2297', descr => 'I/O',
+  proname => 'anyarray_out', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'anyarray', prosrc => 'anyarray_out' },
+{ oid => '2298', descr => 'I/O',
+  proname => 'void_in', prorettype => 'void', proargtypes => 'cstring',
+  prosrc => 'void_in' },
+{ oid => '2299', descr => 'I/O',
+  proname => 'void_out', prorettype => 'cstring', proargtypes => 'void',
+  prosrc => 'void_out' },
+{ oid => '2300', descr => 'I/O',
+  proname => 'trigger_in', proisstrict => 'f', prorettype => 'trigger',
+  proargtypes => 'cstring', prosrc => 'trigger_in' },
+{ oid => '2301', descr => 'I/O',
+  proname => 'trigger_out', prorettype => 'cstring', proargtypes => 'trigger',
+  prosrc => 'trigger_out' },
+{ oid => '3594', descr => 'I/O',
+  proname => 'event_trigger_in', proisstrict => 'f',
+  prorettype => 'event_trigger', proargtypes => 'cstring',
+  prosrc => 'event_trigger_in' },
+{ oid => '3595', descr => 'I/O',
+  proname => 'event_trigger_out', prorettype => 'cstring',
+  proargtypes => 'event_trigger', prosrc => 'event_trigger_out' },
+{ oid => '2302', descr => 'I/O',
+  proname => 'language_handler_in', proisstrict => 'f',
+  prorettype => 'language_handler', proargtypes => 'cstring',
+  prosrc => 'language_handler_in' },
+{ oid => '2303', descr => 'I/O',
+  proname => 'language_handler_out', prorettype => 'cstring',
+  proargtypes => 'language_handler', prosrc => 'language_handler_out' },
+{ oid => '2304', descr => 'I/O',
+  proname => 'internal_in', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'cstring', prosrc => 'internal_in' },
+{ oid => '2305', descr => 'I/O',
+  proname => 'internal_out', prorettype => 'cstring', proargtypes => 'internal',
+  prosrc => 'internal_out' },
+{ oid => '2306', descr => 'I/O',
+  proname => 'opaque_in', proisstrict => 'f', prorettype => 'opaque',
+  proargtypes => 'cstring', prosrc => 'opaque_in' },
+{ oid => '2307', descr => 'I/O',
+  proname => 'opaque_out', prorettype => 'cstring', proargtypes => 'opaque',
+  prosrc => 'opaque_out' },
+{ oid => '2312', descr => 'I/O',
+  proname => 'anyelement_in', prorettype => 'anyelement',
+  proargtypes => 'cstring', prosrc => 'anyelement_in' },
+{ oid => '2313', descr => 'I/O',
+  proname => 'anyelement_out', prorettype => 'cstring',
+  proargtypes => 'anyelement', prosrc => 'anyelement_out' },
+{ oid => '2398', descr => 'I/O',
+  proname => 'shell_in', proisstrict => 'f', prorettype => 'opaque',
+  proargtypes => 'cstring', prosrc => 'shell_in' },
+{ oid => '2399', descr => 'I/O',
+  proname => 'shell_out', prorettype => 'cstring', proargtypes => 'opaque',
+  prosrc => 'shell_out' },
+{ oid => '2597', descr => 'I/O',
+  proname => 'domain_in', proisstrict => 'f', provolatile => 's',
+  prorettype => 'any', proargtypes => 'cstring oid int4',
+  prosrc => 'domain_in' },
+{ oid => '2598', descr => 'I/O',
+  proname => 'domain_recv', proisstrict => 'f', provolatile => 's',
+  prorettype => 'any', proargtypes => 'internal oid int4',
+  prosrc => 'domain_recv' },
+{ oid => '2777', descr => 'I/O',
+  proname => 'anynonarray_in', prorettype => 'anynonarray',
+  proargtypes => 'cstring', prosrc => 'anynonarray_in' },
+{ oid => '2778', descr => 'I/O',
+  proname => 'anynonarray_out', prorettype => 'cstring',
+  proargtypes => 'anynonarray', prosrc => 'anynonarray_out' },
+{ oid => '3116', descr => 'I/O',
+  proname => 'fdw_handler_in', proisstrict => 'f', prorettype => 'fdw_handler',
+  proargtypes => 'cstring', prosrc => 'fdw_handler_in' },
+{ oid => '3117', descr => 'I/O',
+  proname => 'fdw_handler_out', prorettype => 'cstring',
+  proargtypes => 'fdw_handler', prosrc => 'fdw_handler_out' },
+{ oid => '326', descr => 'I/O',
+  proname => 'index_am_handler_in', proisstrict => 'f',
+  prorettype => 'index_am_handler', proargtypes => 'cstring',
+  prosrc => 'index_am_handler_in' },
+{ oid => '327', descr => 'I/O',
+  proname => 'index_am_handler_out', prorettype => 'cstring',
+  proargtypes => 'index_am_handler', prosrc => 'index_am_handler_out' },
+{ oid => '3311', descr => 'I/O',
+  proname => 'tsm_handler_in', proisstrict => 'f', prorettype => 'tsm_handler',
+  proargtypes => 'cstring', prosrc => 'tsm_handler_in' },
+{ oid => '3312', descr => 'I/O',
+  proname => 'tsm_handler_out', prorettype => 'cstring',
+  proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+
+# tablesample method handlers
+{ oid => '3313', descr => 'BERNOULLI tablesample method handler',
+  proname => 'bernoulli', provolatile => 'v', prorettype => 'tsm_handler',
+  proargtypes => 'internal', prosrc => 'tsm_bernoulli_handler' },
+{ oid => '3314', descr => 'SYSTEM tablesample method handler',
+  proname => 'system', provolatile => 'v', prorettype => 'tsm_handler',
+  proargtypes => 'internal', prosrc => 'tsm_system_handler' },
+
+# cryptographic
+{ oid => '2311', descr => 'MD5 hash',
+  proname => 'md5', proleakproof => 't', prorettype => 'text',
+  proargtypes => 'text', prosrc => 'md5_text' },
+{ oid => '2321', descr => 'MD5 hash',
+  proname => 'md5', proleakproof => 't', prorettype => 'text',
+  proargtypes => 'bytea', prosrc => 'md5_bytea' },
+{ oid => '3419', descr => 'SHA-224 hash',
+  proname => 'sha224', proleakproof => 't', prorettype => 'bytea',
+  proargtypes => 'bytea', prosrc => 'sha224_bytea' },
+{ oid => '3420', descr => 'SHA-256 hash',
+  proname => 'sha256', proleakproof => 't', prorettype => 'bytea',
+  proargtypes => 'bytea', prosrc => 'sha256_bytea' },
+{ oid => '3421', descr => 'SHA-384 hash',
+  proname => 'sha384', proleakproof => 't', prorettype => 'bytea',
+  proargtypes => 'bytea', prosrc => 'sha384_bytea' },
+{ oid => '3422', descr => 'SHA-512 hash',
+  proname => 'sha512', proleakproof => 't', prorettype => 'bytea',
+  proargtypes => 'bytea', prosrc => 'sha512_bytea' },
+
+# crosstype operations for date vs. timestamp and timestamptz
+{ oid => '2338',
+  proname => 'date_lt_timestamp', prorettype => 'bool',
+  proargtypes => 'date timestamp', prosrc => 'date_lt_timestamp' },
+{ oid => '2339',
+  proname => 'date_le_timestamp', prorettype => 'bool',
+  proargtypes => 'date timestamp', prosrc => 'date_le_timestamp' },
+{ oid => '2340',
+  proname => 'date_eq_timestamp', prorettype => 'bool',
+  proargtypes => 'date timestamp', prosrc => 'date_eq_timestamp' },
+{ oid => '2341',
+  proname => 'date_gt_timestamp', prorettype => 'bool',
+  proargtypes => 'date timestamp', prosrc => 'date_gt_timestamp' },
+{ oid => '2342',
+  proname => 'date_ge_timestamp', prorettype => 'bool',
+  proargtypes => 'date timestamp', prosrc => 'date_ge_timestamp' },
+{ oid => '2343',
+  proname => 'date_ne_timestamp', prorettype => 'bool',
+  proargtypes => 'date timestamp', prosrc => 'date_ne_timestamp' },
+{ oid => '2344', descr => 'less-equal-greater',
+  proname => 'date_cmp_timestamp', prorettype => 'int4',
+  proargtypes => 'date timestamp', prosrc => 'date_cmp_timestamp' },
+
+{ oid => '2351',
+  proname => 'date_lt_timestamptz', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'date timestamptz', prosrc => 'date_lt_timestamptz' },
+{ oid => '2352',
+  proname => 'date_le_timestamptz', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'date timestamptz', prosrc => 'date_le_timestamptz' },
+{ oid => '2353',
+  proname => 'date_eq_timestamptz', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'date timestamptz', prosrc => 'date_eq_timestamptz' },
+{ oid => '2354',
+  proname => 'date_gt_timestamptz', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'date timestamptz', prosrc => 'date_gt_timestamptz' },
+{ oid => '2355',
+  proname => 'date_ge_timestamptz', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'date timestamptz', prosrc => 'date_ge_timestamptz' },
+{ oid => '2356',
+  proname => 'date_ne_timestamptz', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'date timestamptz', prosrc => 'date_ne_timestamptz' },
+{ oid => '2357', descr => 'less-equal-greater',
+  proname => 'date_cmp_timestamptz', provolatile => 's', prorettype => 'int4',
+  proargtypes => 'date timestamptz', prosrc => 'date_cmp_timestamptz' },
+
+{ oid => '2364',
+  proname => 'timestamp_lt_date', prorettype => 'bool',
+  proargtypes => 'timestamp date', prosrc => 'timestamp_lt_date' },
+{ oid => '2365',
+  proname => 'timestamp_le_date', prorettype => 'bool',
+  proargtypes => 'timestamp date', prosrc => 'timestamp_le_date' },
+{ oid => '2366',
+  proname => 'timestamp_eq_date', prorettype => 'bool',
+  proargtypes => 'timestamp date', prosrc => 'timestamp_eq_date' },
+{ oid => '2367',
+  proname => 'timestamp_gt_date', prorettype => 'bool',
+  proargtypes => 'timestamp date', prosrc => 'timestamp_gt_date' },
+{ oid => '2368',
+  proname => 'timestamp_ge_date', prorettype => 'bool',
+  proargtypes => 'timestamp date', prosrc => 'timestamp_ge_date' },
+{ oid => '2369',
+  proname => 'timestamp_ne_date', prorettype => 'bool',
+  proargtypes => 'timestamp date', prosrc => 'timestamp_ne_date' },
+{ oid => '2370', descr => 'less-equal-greater',
+  proname => 'timestamp_cmp_date', prorettype => 'int4',
+  proargtypes => 'timestamp date', prosrc => 'timestamp_cmp_date' },
+
+{ oid => '2377',
+  proname => 'timestamptz_lt_date', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'timestamptz date', prosrc => 'timestamptz_lt_date' },
+{ oid => '2378',
+  proname => 'timestamptz_le_date', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'timestamptz date', prosrc => 'timestamptz_le_date' },
+{ oid => '2379',
+  proname => 'timestamptz_eq_date', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'timestamptz date', prosrc => 'timestamptz_eq_date' },
+{ oid => '2380',
+  proname => 'timestamptz_gt_date', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'timestamptz date', prosrc => 'timestamptz_gt_date' },
+{ oid => '2381',
+  proname => 'timestamptz_ge_date', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'timestamptz date', prosrc => 'timestamptz_ge_date' },
+{ oid => '2382',
+  proname => 'timestamptz_ne_date', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'timestamptz date', prosrc => 'timestamptz_ne_date' },
+{ oid => '2383', descr => 'less-equal-greater',
+  proname => 'timestamptz_cmp_date', provolatile => 's', prorettype => 'int4',
+  proargtypes => 'timestamptz date', prosrc => 'timestamptz_cmp_date' },
+
+# crosstype operations for timestamp vs. timestamptz
+{ oid => '2520',
+  proname => 'timestamp_lt_timestamptz', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'timestamp timestamptz',
+  prosrc => 'timestamp_lt_timestamptz' },
+{ oid => '2521',
+  proname => 'timestamp_le_timestamptz', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'timestamp timestamptz',
+  prosrc => 'timestamp_le_timestamptz' },
+{ oid => '2522',
+  proname => 'timestamp_eq_timestamptz', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'timestamp timestamptz',
+  prosrc => 'timestamp_eq_timestamptz' },
+{ oid => '2523',
+  proname => 'timestamp_gt_timestamptz', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'timestamp timestamptz',
+  prosrc => 'timestamp_gt_timestamptz' },
+{ oid => '2524',
+  proname => 'timestamp_ge_timestamptz', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'timestamp timestamptz',
+  prosrc => 'timestamp_ge_timestamptz' },
+{ oid => '2525',
+  proname => 'timestamp_ne_timestamptz', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'timestamp timestamptz',
+  prosrc => 'timestamp_ne_timestamptz' },
+{ oid => '2526', descr => 'less-equal-greater',
+  proname => 'timestamp_cmp_timestamptz', provolatile => 's',
+  prorettype => 'int4', proargtypes => 'timestamp timestamptz',
+  prosrc => 'timestamp_cmp_timestamptz' },
+
+{ oid => '2527',
+  proname => 'timestamptz_lt_timestamp', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'timestamptz timestamp',
+  prosrc => 'timestamptz_lt_timestamp' },
+{ oid => '2528',
+  proname => 'timestamptz_le_timestamp', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'timestamptz timestamp',
+  prosrc => 'timestamptz_le_timestamp' },
+{ oid => '2529',
+  proname => 'timestamptz_eq_timestamp', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'timestamptz timestamp',
+  prosrc => 'timestamptz_eq_timestamp' },
+{ oid => '2530',
+  proname => 'timestamptz_gt_timestamp', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'timestamptz timestamp',
+  prosrc => 'timestamptz_gt_timestamp' },
+{ oid => '2531',
+  proname => 'timestamptz_ge_timestamp', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'timestamptz timestamp',
+  prosrc => 'timestamptz_ge_timestamp' },
+{ oid => '2532',
+  proname => 'timestamptz_ne_timestamp', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'timestamptz timestamp',
+  prosrc => 'timestamptz_ne_timestamp' },
+{ oid => '2533', descr => 'less-equal-greater',
+  proname => 'timestamptz_cmp_timestamp', provolatile => 's',
+  prorettype => 'int4', proargtypes => 'timestamptz timestamp',
+  prosrc => 'timestamptz_cmp_timestamp' },
+
+# send/receive functions
+{ oid => '2400', descr => 'I/O',
+  proname => 'array_recv', provolatile => 's', prorettype => 'anyarray',
+  proargtypes => 'internal oid int4', prosrc => 'array_recv' },
+{ oid => '2401', descr => 'I/O',
+  proname => 'array_send', provolatile => 's', prorettype => 'bytea',
+  proargtypes => 'anyarray', prosrc => 'array_send' },
+{ oid => '2402', descr => 'I/O',
+  proname => 'record_recv', provolatile => 's', prorettype => 'record',
+  proargtypes => 'internal oid int4', prosrc => 'record_recv' },
+{ oid => '2403', descr => 'I/O',
+  proname => 'record_send', provolatile => 's', prorettype => 'bytea',
+  proargtypes => 'record', prosrc => 'record_send' },
+{ oid => '2404', descr => 'I/O',
+  proname => 'int2recv', prorettype => 'int2', proargtypes => 'internal',
+  prosrc => 'int2recv' },
+{ oid => '2405', descr => 'I/O',
+  proname => 'int2send', prorettype => 'bytea', proargtypes => 'int2',
+  prosrc => 'int2send' },
+{ oid => '2406', descr => 'I/O',
+  proname => 'int4recv', prorettype => 'int4', proargtypes => 'internal',
+  prosrc => 'int4recv' },
+{ oid => '2407', descr => 'I/O',
+  proname => 'int4send', prorettype => 'bytea', proargtypes => 'int4',
+  prosrc => 'int4send' },
+{ oid => '2408', descr => 'I/O',
+  proname => 'int8recv', prorettype => 'int8', proargtypes => 'internal',
+  prosrc => 'int8recv' },
+{ oid => '2409', descr => 'I/O',
+  proname => 'int8send', prorettype => 'bytea', proargtypes => 'int8',
+  prosrc => 'int8send' },
+{ oid => '2410', descr => 'I/O',
+  proname => 'int2vectorrecv', prorettype => 'int2vector',
+  proargtypes => 'internal', prosrc => 'int2vectorrecv' },
+{ oid => '2411', descr => 'I/O',
+  proname => 'int2vectorsend', prorettype => 'bytea',
+  proargtypes => 'int2vector', prosrc => 'int2vectorsend' },
+{ oid => '2412', descr => 'I/O',
+  proname => 'bytearecv', prorettype => 'bytea', proargtypes => 'internal',
+  prosrc => 'bytearecv' },
+{ oid => '2413', descr => 'I/O',
+  proname => 'byteasend', prorettype => 'bytea', proargtypes => 'bytea',
+  prosrc => 'byteasend' },
+{ oid => '2414', descr => 'I/O',
+  proname => 'textrecv', provolatile => 's', prorettype => 'text',
+  proargtypes => 'internal', prosrc => 'textrecv' },
+{ oid => '2415', descr => 'I/O',
+  proname => 'textsend', provolatile => 's', prorettype => 'bytea',
+  proargtypes => 'text', prosrc => 'textsend' },
+{ oid => '2416', descr => 'I/O',
+  proname => 'unknownrecv', prorettype => 'unknown', proargtypes => 'internal',
+  prosrc => 'unknownrecv' },
+{ oid => '2417', descr => 'I/O',
+  proname => 'unknownsend', prorettype => 'bytea', proargtypes => 'unknown',
+  prosrc => 'unknownsend' },
+{ oid => '2418', descr => 'I/O',
+  proname => 'oidrecv', prorettype => 'oid', proargtypes => 'internal',
+  prosrc => 'oidrecv' },
+{ oid => '2419', descr => 'I/O',
+  proname => 'oidsend', prorettype => 'bytea', proargtypes => 'oid',
+  prosrc => 'oidsend' },
+{ oid => '2420', descr => 'I/O',
+  proname => 'oidvectorrecv', prorettype => 'oidvector',
+  proargtypes => 'internal', prosrc => 'oidvectorrecv' },
+{ oid => '2421', descr => 'I/O',
+  proname => 'oidvectorsend', prorettype => 'bytea', proargtypes => 'oidvector',
+  prosrc => 'oidvectorsend' },
+{ oid => '2422', descr => 'I/O',
+  proname => 'namerecv', provolatile => 's', prorettype => 'name',
+  proargtypes => 'internal', prosrc => 'namerecv' },
+{ oid => '2423', descr => 'I/O',
+  proname => 'namesend', provolatile => 's', prorettype => 'bytea',
+  proargtypes => 'name', prosrc => 'namesend' },
+{ oid => '2424', descr => 'I/O',
+  proname => 'float4recv', prorettype => 'float4', proargtypes => 'internal',
+  prosrc => 'float4recv' },
+{ oid => '2425', descr => 'I/O',
+  proname => 'float4send', prorettype => 'bytea', proargtypes => 'float4',
+  prosrc => 'float4send' },
+{ oid => '2426', descr => 'I/O',
+  proname => 'float8recv', prorettype => 'float8', proargtypes => 'internal',
+  prosrc => 'float8recv' },
+{ oid => '2427', descr => 'I/O',
+  proname => 'float8send', prorettype => 'bytea', proargtypes => 'float8',
+  prosrc => 'float8send' },
+{ oid => '2428', descr => 'I/O',
+  proname => 'point_recv', prorettype => 'point', proargtypes => 'internal',
+  prosrc => 'point_recv' },
+{ oid => '2429', descr => 'I/O',
+  proname => 'point_send', prorettype => 'bytea', proargtypes => 'point',
+  prosrc => 'point_send' },
+{ oid => '2430', descr => 'I/O',
+  proname => 'bpcharrecv', provolatile => 's', prorettype => 'bpchar',
+  proargtypes => 'internal oid int4', prosrc => 'bpcharrecv' },
+{ oid => '2431', descr => 'I/O',
+  proname => 'bpcharsend', provolatile => 's', prorettype => 'bytea',
+  proargtypes => 'bpchar', prosrc => 'bpcharsend' },
+{ oid => '2432', descr => 'I/O',
+  proname => 'varcharrecv', provolatile => 's', prorettype => 'varchar',
+  proargtypes => 'internal oid int4', prosrc => 'varcharrecv' },
+{ oid => '2433', descr => 'I/O',
+  proname => 'varcharsend', provolatile => 's', prorettype => 'bytea',
+  proargtypes => 'varchar', prosrc => 'varcharsend' },
+{ oid => '2434', descr => 'I/O',
+  proname => 'charrecv', prorettype => 'char', proargtypes => 'internal',
+  prosrc => 'charrecv' },
+{ oid => '2435', descr => 'I/O',
+  proname => 'charsend', prorettype => 'bytea', proargtypes => 'char',
+  prosrc => 'charsend' },
+{ oid => '2436', descr => 'I/O',
+  proname => 'boolrecv', prorettype => 'bool', proargtypes => 'internal',
+  prosrc => 'boolrecv' },
+{ oid => '2437', descr => 'I/O',
+  proname => 'boolsend', prorettype => 'bytea', proargtypes => 'bool',
+  prosrc => 'boolsend' },
+{ oid => '2438', descr => 'I/O',
+  proname => 'tidrecv', prorettype => 'tid', proargtypes => 'internal',
+  prosrc => 'tidrecv' },
+{ oid => '2439', descr => 'I/O',
+  proname => 'tidsend', prorettype => 'bytea', proargtypes => 'tid',
+  prosrc => 'tidsend' },
+{ oid => '2440', descr => 'I/O',
+  proname => 'xidrecv', prorettype => 'xid', proargtypes => 'internal',
+  prosrc => 'xidrecv' },
+{ oid => '2441', descr => 'I/O',
+  proname => 'xidsend', prorettype => 'bytea', proargtypes => 'xid',
+  prosrc => 'xidsend' },
+{ oid => '2442', descr => 'I/O',
+  proname => 'cidrecv', prorettype => 'cid', proargtypes => 'internal',
+  prosrc => 'cidrecv' },
+{ oid => '2443', descr => 'I/O',
+  proname => 'cidsend', prorettype => 'bytea', proargtypes => 'cid',
+  prosrc => 'cidsend' },
+{ oid => '2444', descr => 'I/O',
+  proname => 'regprocrecv', prorettype => 'regproc', proargtypes => 'internal',
+  prosrc => 'regprocrecv' },
+{ oid => '2445', descr => 'I/O',
+  proname => 'regprocsend', prorettype => 'bytea', proargtypes => 'regproc',
+  prosrc => 'regprocsend' },
+{ oid => '2446', descr => 'I/O',
+  proname => 'regprocedurerecv', prorettype => 'regprocedure',
+  proargtypes => 'internal', prosrc => 'regprocedurerecv' },
+{ oid => '2447', descr => 'I/O',
+  proname => 'regproceduresend', prorettype => 'bytea',
+  proargtypes => 'regprocedure', prosrc => 'regproceduresend' },
+{ oid => '2448', descr => 'I/O',
+  proname => 'regoperrecv', prorettype => 'regoper', proargtypes => 'internal',
+  prosrc => 'regoperrecv' },
+{ oid => '2449', descr => 'I/O',
+  proname => 'regopersend', prorettype => 'bytea', proargtypes => 'regoper',
+  prosrc => 'regopersend' },
+{ oid => '2450', descr => 'I/O',
+  proname => 'regoperatorrecv', prorettype => 'regoperator',
+  proargtypes => 'internal', prosrc => 'regoperatorrecv' },
+{ oid => '2451', descr => 'I/O',
+  proname => 'regoperatorsend', prorettype => 'bytea',
+  proargtypes => 'regoperator', prosrc => 'regoperatorsend' },
+{ oid => '2452', descr => 'I/O',
+  proname => 'regclassrecv', prorettype => 'regclass',
+  proargtypes => 'internal', prosrc => 'regclassrecv' },
+{ oid => '2453', descr => 'I/O',
+  proname => 'regclasssend', prorettype => 'bytea', proargtypes => 'regclass',
+  prosrc => 'regclasssend' },
+{ oid => '2454', descr => 'I/O',
+  proname => 'regtyperecv', prorettype => 'regtype', proargtypes => 'internal',
+  prosrc => 'regtyperecv' },
+{ oid => '2455', descr => 'I/O',
+  proname => 'regtypesend', prorettype => 'bytea', proargtypes => 'regtype',
+  prosrc => 'regtypesend' },
+
+{ oid => '4094', descr => 'I/O',
+  proname => 'regrolerecv', prorettype => 'regrole', proargtypes => 'internal',
+  prosrc => 'regrolerecv' },
+{ oid => '4095', descr => 'I/O',
+  proname => 'regrolesend', prorettype => 'bytea', proargtypes => 'regrole',
+  prosrc => 'regrolesend' },
+{ oid => '4087', descr => 'I/O',
+  proname => 'regnamespacerecv', prorettype => 'regnamespace',
+  proargtypes => 'internal', prosrc => 'regnamespacerecv' },
+{ oid => '4088', descr => 'I/O',
+  proname => 'regnamespacesend', prorettype => 'bytea',
+  proargtypes => 'regnamespace', prosrc => 'regnamespacesend' },
+{ oid => '2456', descr => 'I/O',
+  proname => 'bit_recv', prorettype => 'bit',
+  proargtypes => 'internal oid int4', prosrc => 'bit_recv' },
+{ oid => '2457', descr => 'I/O',
+  proname => 'bit_send', prorettype => 'bytea', proargtypes => 'bit',
+  prosrc => 'bit_send' },
+{ oid => '2458', descr => 'I/O',
+  proname => 'varbit_recv', prorettype => 'varbit',
+  proargtypes => 'internal oid int4', prosrc => 'varbit_recv' },
+{ oid => '2459', descr => 'I/O',
+  proname => 'varbit_send', prorettype => 'bytea', proargtypes => 'varbit',
+  prosrc => 'varbit_send' },
+{ oid => '2460', descr => 'I/O',
+  proname => 'numeric_recv', prorettype => 'numeric',
+  proargtypes => 'internal oid int4', prosrc => 'numeric_recv' },
+{ oid => '2461', descr => 'I/O',
+  proname => 'numeric_send', prorettype => 'bytea', proargtypes => 'numeric',
+  prosrc => 'numeric_send' },
+{ oid => '2462', descr => 'I/O',
+  proname => 'abstimerecv', prorettype => 'abstime', proargtypes => 'internal',
+  prosrc => 'abstimerecv' },
+{ oid => '2463', descr => 'I/O',
+  proname => 'abstimesend', prorettype => 'bytea', proargtypes => 'abstime',
+  prosrc => 'abstimesend' },
+{ oid => '2464', descr => 'I/O',
+  proname => 'reltimerecv', prorettype => 'reltime', proargtypes => 'internal',
+  prosrc => 'reltimerecv' },
+{ oid => '2465', descr => 'I/O',
+  proname => 'reltimesend', prorettype => 'bytea', proargtypes => 'reltime',
+  prosrc => 'reltimesend' },
+{ oid => '2466', descr => 'I/O',
+  proname => 'tintervalrecv', prorettype => 'tinterval',
+  proargtypes => 'internal', prosrc => 'tintervalrecv' },
+{ oid => '2467', descr => 'I/O',
+  proname => 'tintervalsend', prorettype => 'bytea', proargtypes => 'tinterval',
+  prosrc => 'tintervalsend' },
+{ oid => '2468', descr => 'I/O',
+  proname => 'date_recv', prorettype => 'date', proargtypes => 'internal',
+  prosrc => 'date_recv' },
+{ oid => '2469', descr => 'I/O',
+  proname => 'date_send', prorettype => 'bytea', proargtypes => 'date',
+  prosrc => 'date_send' },
+{ oid => '2470', descr => 'I/O',
+  proname => 'time_recv', prorettype => 'time',
+  proargtypes => 'internal oid int4', prosrc => 'time_recv' },
+{ oid => '2471', descr => 'I/O',
+  proname => 'time_send', prorettype => 'bytea', proargtypes => 'time',
+  prosrc => 'time_send' },
+{ oid => '2472', descr => 'I/O',
+  proname => 'timetz_recv', prorettype => 'timetz',
+  proargtypes => 'internal oid int4', prosrc => 'timetz_recv' },
+{ oid => '2473', descr => 'I/O',
+  proname => 'timetz_send', prorettype => 'bytea', proargtypes => 'timetz',
+  prosrc => 'timetz_send' },
+{ oid => '2474', descr => 'I/O',
+  proname => 'timestamp_recv', prorettype => 'timestamp',
+  proargtypes => 'internal oid int4', prosrc => 'timestamp_recv' },
+{ oid => '2475', descr => 'I/O',
+  proname => 'timestamp_send', prorettype => 'bytea',
+  proargtypes => 'timestamp', prosrc => 'timestamp_send' },
+{ oid => '2476', descr => 'I/O',
+  proname => 'timestamptz_recv', prorettype => 'timestamptz',
+  proargtypes => 'internal oid int4', prosrc => 'timestamptz_recv' },
+{ oid => '2477', descr => 'I/O',
+  proname => 'timestamptz_send', prorettype => 'bytea',
+  proargtypes => 'timestamptz', prosrc => 'timestamptz_send' },
+{ oid => '2478', descr => 'I/O',
+  proname => 'interval_recv', prorettype => 'interval',
+  proargtypes => 'internal oid int4', prosrc => 'interval_recv' },
+{ oid => '2479', descr => 'I/O',
+  proname => 'interval_send', prorettype => 'bytea', proargtypes => 'interval',
+  prosrc => 'interval_send' },
+{ oid => '2480', descr => 'I/O',
+  proname => 'lseg_recv', prorettype => 'lseg', proargtypes => 'internal',
+  prosrc => 'lseg_recv' },
+{ oid => '2481', descr => 'I/O',
+  proname => 'lseg_send', prorettype => 'bytea', proargtypes => 'lseg',
+  prosrc => 'lseg_send' },
+{ oid => '2482', descr => 'I/O',
+  proname => 'path_recv', prorettype => 'path', proargtypes => 'internal',
+  prosrc => 'path_recv' },
+{ oid => '2483', descr => 'I/O',
+  proname => 'path_send', prorettype => 'bytea', proargtypes => 'path',
+  prosrc => 'path_send' },
+{ oid => '2484', descr => 'I/O',
+  proname => 'box_recv', prorettype => 'box', proargtypes => 'internal',
+  prosrc => 'box_recv' },
+{ oid => '2485', descr => 'I/O',
+  proname => 'box_send', prorettype => 'bytea', proargtypes => 'box',
+  prosrc => 'box_send' },
+{ oid => '2486', descr => 'I/O',
+  proname => 'poly_recv', prorettype => 'polygon', proargtypes => 'internal',
+  prosrc => 'poly_recv' },
+{ oid => '2487', descr => 'I/O',
+  proname => 'poly_send', prorettype => 'bytea', proargtypes => 'polygon',
+  prosrc => 'poly_send' },
+{ oid => '2488', descr => 'I/O',
+  proname => 'line_recv', prorettype => 'line', proargtypes => 'internal',
+  prosrc => 'line_recv' },
+{ oid => '2489', descr => 'I/O',
+  proname => 'line_send', prorettype => 'bytea', proargtypes => 'line',
+  prosrc => 'line_send' },
+{ oid => '2490', descr => 'I/O',
+  proname => 'circle_recv', prorettype => 'circle', proargtypes => 'internal',
+  prosrc => 'circle_recv' },
+{ oid => '2491', descr => 'I/O',
+  proname => 'circle_send', prorettype => 'bytea', proargtypes => 'circle',
+  prosrc => 'circle_send' },
+{ oid => '2492', descr => 'I/O',
+  proname => 'cash_recv', prorettype => 'money', proargtypes => 'internal',
+  prosrc => 'cash_recv' },
+{ oid => '2493', descr => 'I/O',
+  proname => 'cash_send', prorettype => 'bytea', proargtypes => 'money',
+  prosrc => 'cash_send' },
+{ oid => '2494', descr => 'I/O',
+  proname => 'macaddr_recv', prorettype => 'macaddr', proargtypes => 'internal',
+  prosrc => 'macaddr_recv' },
+{ oid => '2495', descr => 'I/O',
+  proname => 'macaddr_send', prorettype => 'bytea', proargtypes => 'macaddr',
+  prosrc => 'macaddr_send' },
+{ oid => '2496', descr => 'I/O',
+  proname => 'inet_recv', prorettype => 'inet', proargtypes => 'internal',
+  prosrc => 'inet_recv' },
+{ oid => '2497', descr => 'I/O',
+  proname => 'inet_send', prorettype => 'bytea', proargtypes => 'inet',
+  prosrc => 'inet_send' },
+{ oid => '2498', descr => 'I/O',
+  proname => 'cidr_recv', prorettype => 'cidr', proargtypes => 'internal',
+  prosrc => 'cidr_recv' },
+{ oid => '2499', descr => 'I/O',
+  proname => 'cidr_send', prorettype => 'bytea', proargtypes => 'cidr',
+  prosrc => 'cidr_send' },
+{ oid => '2500', descr => 'I/O',
+  proname => 'cstring_recv', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'internal', prosrc => 'cstring_recv' },
+{ oid => '2501', descr => 'I/O',
+  proname => 'cstring_send', provolatile => 's', prorettype => 'bytea',
+  proargtypes => 'cstring', prosrc => 'cstring_send' },
+{ oid => '2502', descr => 'I/O',
+  proname => 'anyarray_recv', provolatile => 's', prorettype => 'anyarray',
+  proargtypes => 'internal', prosrc => 'anyarray_recv' },
+{ oid => '2503', descr => 'I/O',
+  proname => 'anyarray_send', provolatile => 's', prorettype => 'bytea',
+  proargtypes => 'anyarray', prosrc => 'anyarray_send' },
+{ oid => '3120', descr => 'I/O',
+  proname => 'void_recv', prorettype => 'void', proargtypes => 'internal',
+  prosrc => 'void_recv' },
+{ oid => '3121', descr => 'I/O',
+  proname => 'void_send', prorettype => 'bytea', proargtypes => 'void',
+  prosrc => 'void_send' },
+{ oid => '3446', descr => 'I/O',
+  proname => 'macaddr8_recv', prorettype => 'macaddr8',
+  proargtypes => 'internal', prosrc => 'macaddr8_recv' },
+{ oid => '3447', descr => 'I/O',
+  proname => 'macaddr8_send', prorettype => 'bytea', proargtypes => 'macaddr8',
+  prosrc => 'macaddr8_send' },
+
+# System-view support functions with pretty-print option
+{ oid => '2504', descr => 'source text of a rule with pretty-print option',
+  proname => 'pg_get_ruledef', provolatile => 's', prorettype => 'text',
+  proargtypes => 'oid bool', prosrc => 'pg_get_ruledef_ext' },
+{ oid => '2505',
+  descr => 'select statement of a view with pretty-print option',
+  proname => 'pg_get_viewdef', provolatile => 's', proparallel => 'r',
+  prorettype => 'text', proargtypes => 'text bool',
+  prosrc => 'pg_get_viewdef_name_ext' },
+{ oid => '2506',
+  descr => 'select statement of a view with pretty-print option',
+  proname => 'pg_get_viewdef', provolatile => 's', proparallel => 'r',
+  prorettype => 'text', proargtypes => 'oid bool',
+  prosrc => 'pg_get_viewdef_ext' },
+{ oid => '3159',
+  descr => 'select statement of a view with pretty-printing and specified line wrapping',
+  proname => 'pg_get_viewdef', provolatile => 's', proparallel => 'r',
+  prorettype => 'text', proargtypes => 'oid int4',
+  prosrc => 'pg_get_viewdef_wrap' },
+{ oid => '2507',
+  descr => 'index description (full create statement or single expression) with pretty-print option',
+  proname => 'pg_get_indexdef', provolatile => 's', prorettype => 'text',
+  proargtypes => 'oid int4 bool', prosrc => 'pg_get_indexdef_ext' },
+{ oid => '2508', descr => 'constraint description with pretty-print option',
+  proname => 'pg_get_constraintdef', provolatile => 's', prorettype => 'text',
+  proargtypes => 'oid bool', prosrc => 'pg_get_constraintdef_ext' },
+{ oid => '2509',
+  descr => 'deparse an encoded expression with pretty-print option',
+  proname => 'pg_get_expr', provolatile => 's', prorettype => 'text',
+  proargtypes => 'pg_node_tree oid bool', prosrc => 'pg_get_expr_ext' },
+{ oid => '2510', descr => 'get the prepared statements for this session',
+  proname => 'pg_prepared_statement', prorows => '1000', proretset => 't',
+  provolatile => 's', proparallel => 'r', prorettype => 'record',
+  proargtypes => '', proallargtypes => '{text,text,timestamptz,_regtype,bool}',
+  proargmodes => '{o,o,o,o,o}',
+  proargnames => '{name,statement,prepare_time,parameter_types,from_sql}',
+  prosrc => 'pg_prepared_statement' },
+{ oid => '2511', descr => 'get the open cursors for this session',
+  proname => 'pg_cursor', prorows => '1000', proretset => 't',
+  provolatile => 's', proparallel => 'r', prorettype => 'record',
+  proargtypes => '', proallargtypes => '{text,text,bool,bool,bool,timestamptz}',
+  proargmodes => '{o,o,o,o,o,o}',
+  proargnames => '{name,statement,is_holdable,is_binary,is_scrollable,creation_time}',
+  prosrc => 'pg_cursor' },
+{ oid => '2599', descr => 'get the available time zone abbreviations',
+  proname => 'pg_timezone_abbrevs', prorows => '1000', proretset => 't',
+  provolatile => 's', prorettype => 'record', proargtypes => '',
+  proallargtypes => '{text,interval,bool}', proargmodes => '{o,o,o}',
+  proargnames => '{abbrev,utc_offset,is_dst}',
+  prosrc => 'pg_timezone_abbrevs' },
+{ oid => '2856', descr => 'get the available time zone names',
+  proname => 'pg_timezone_names', prorows => '1000', proretset => 't',
+  provolatile => 's', prorettype => 'record', proargtypes => '',
+  proallargtypes => '{text,text,interval,bool}', proargmodes => '{o,o,o,o}',
+  proargnames => '{name,abbrev,utc_offset,is_dst}',
+  prosrc => 'pg_timezone_names' },
+{ oid => '2730', descr => 'trigger description with pretty-print option',
+  proname => 'pg_get_triggerdef', provolatile => 's', prorettype => 'text',
+  proargtypes => 'oid bool', prosrc => 'pg_get_triggerdef_ext' },
+
+# asynchronous notifications
+{ oid => '3035',
+  descr => 'get the channels that the current backend listens to',
+  proname => 'pg_listening_channels', prorows => '10', proretset => 't',
+  provolatile => 's', proparallel => 'r', prorettype => 'text',
+  proargtypes => '', prosrc => 'pg_listening_channels' },
+{ oid => '3036', descr => 'send a notification event',
+  proname => 'pg_notify', proisstrict => 'f', provolatile => 'v',
+  proparallel => 'r', prorettype => 'void', proargtypes => 'text text',
+  prosrc => 'pg_notify' },
+{ oid => '3296',
+  descr => 'get the fraction of the asynchronous notification queue currently in use',
+  proname => 'pg_notification_queue_usage', provolatile => 'v',
+  prorettype => 'float8', proargtypes => '',
+  prosrc => 'pg_notification_queue_usage' },
+
+# non-persistent series generator
+{ oid => '1066', descr => 'non-persistent series generator',
+  proname => 'generate_series', prorows => '1000', proretset => 't',
+  prorettype => 'int4', proargtypes => 'int4 int4 int4',
+  prosrc => 'generate_series_step_int4' },
+{ oid => '1067', descr => 'non-persistent series generator',
+  proname => 'generate_series', prorows => '1000', proretset => 't',
+  prorettype => 'int4', proargtypes => 'int4 int4',
+  prosrc => 'generate_series_int4' },
+{ oid => '1068', descr => 'non-persistent series generator',
+  proname => 'generate_series', prorows => '1000', proretset => 't',
+  prorettype => 'int8', proargtypes => 'int8 int8 int8',
+  prosrc => 'generate_series_step_int8' },
+{ oid => '1069', descr => 'non-persistent series generator',
+  proname => 'generate_series', prorows => '1000', proretset => 't',
+  prorettype => 'int8', proargtypes => 'int8 int8',
+  prosrc => 'generate_series_int8' },
+{ oid => '3259', descr => 'non-persistent series generator',
+  proname => 'generate_series', prorows => '1000', proretset => 't',
+  prorettype => 'numeric', proargtypes => 'numeric numeric numeric',
+  prosrc => 'generate_series_step_numeric' },
+{ oid => '3260', descr => 'non-persistent series generator',
+  proname => 'generate_series', prorows => '1000', proretset => 't',
+  prorettype => 'numeric', proargtypes => 'numeric numeric',
+  prosrc => 'generate_series_numeric' },
+{ oid => '938', descr => 'non-persistent series generator',
+  proname => 'generate_series', prorows => '1000', proretset => 't',
+  prorettype => 'timestamp', proargtypes => 'timestamp timestamp interval',
+  prosrc => 'generate_series_timestamp' },
+{ oid => '939', descr => 'non-persistent series generator',
+  proname => 'generate_series', prorows => '1000', proretset => 't',
+  provolatile => 's', prorettype => 'timestamptz',
+  proargtypes => 'timestamptz timestamptz interval',
+  prosrc => 'generate_series_timestamptz' },
+
+# boolean aggregates
+{ oid => '2515', descr => 'aggregate transition function',
+  proname => 'booland_statefunc', prorettype => 'bool',
+  proargtypes => 'bool bool', prosrc => 'booland_statefunc' },
+{ oid => '2516', descr => 'aggregate transition function',
+  proname => 'boolor_statefunc', prorettype => 'bool',
+  proargtypes => 'bool bool', prosrc => 'boolor_statefunc' },
+{ oid => '3496', descr => 'aggregate transition function',
+  proname => 'bool_accum', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal bool', prosrc => 'bool_accum' },
+{ oid => '3497', descr => 'aggregate transition function',
+  proname => 'bool_accum_inv', proisstrict => 'f', prorettype => 'internal',
+  proargtypes => 'internal bool', prosrc => 'bool_accum_inv' },
+{ oid => '3498', descr => 'aggregate final function',
+  proname => 'bool_alltrue', prorettype => 'bool', proargtypes => 'internal',
+  prosrc => 'bool_alltrue' },
+{ oid => '3499', descr => 'aggregate final function',
+  proname => 'bool_anytrue', prorettype => 'bool', proargtypes => 'internal',
+  prosrc => 'bool_anytrue' },
+{ oid => '2517', descr => 'boolean-and aggregate',
+  proname => 'bool_and', prokind => 'a', proisstrict => 'f',
+  prorettype => 'bool', proargtypes => 'bool', prosrc => 'aggregate_dummy' },
+
+# ANY, SOME? These names conflict with subquery operators. See doc.
+{ oid => '2518', descr => 'boolean-or aggregate',
+  proname => 'bool_or', prokind => 'a', proisstrict => 'f',
+  prorettype => 'bool', proargtypes => 'bool', prosrc => 'aggregate_dummy' },
+{ oid => '2519', descr => 'boolean-and aggregate',
+  proname => 'every', prokind => 'a', proisstrict => 'f', prorettype => 'bool',
+  proargtypes => 'bool', prosrc => 'aggregate_dummy' },
+
+# bitwise integer aggregates
+{ oid => '2236', descr => 'bitwise-and smallint aggregate',
+  proname => 'bit_and', prokind => 'a', proisstrict => 'f',
+  prorettype => 'int2', proargtypes => 'int2', prosrc => 'aggregate_dummy' },
+{ oid => '2237', descr => 'bitwise-or smallint aggregate',
+  proname => 'bit_or', prokind => 'a', proisstrict => 'f', prorettype => 'int2',
+  proargtypes => 'int2', prosrc => 'aggregate_dummy' },
+{ oid => '2238', descr => 'bitwise-and integer aggregate',
+  proname => 'bit_and', prokind => 'a', proisstrict => 'f',
+  prorettype => 'int4', proargtypes => 'int4', prosrc => 'aggregate_dummy' },
+{ oid => '2239', descr => 'bitwise-or integer aggregate',
+  proname => 'bit_or', prokind => 'a', proisstrict => 'f', prorettype => 'int4',
+  proargtypes => 'int4', prosrc => 'aggregate_dummy' },
+{ oid => '2240', descr => 'bitwise-and bigint aggregate',
+  proname => 'bit_and', prokind => 'a', proisstrict => 'f',
+  prorettype => 'int8', proargtypes => 'int8', prosrc => 'aggregate_dummy' },
+{ oid => '2241', descr => 'bitwise-or bigint aggregate',
+  proname => 'bit_or', prokind => 'a', proisstrict => 'f', prorettype => 'int8',
+  proargtypes => 'int8', prosrc => 'aggregate_dummy' },
+{ oid => '2242', descr => 'bitwise-and bit aggregate',
+  proname => 'bit_and', prokind => 'a', proisstrict => 'f', prorettype => 'bit',
+  proargtypes => 'bit', prosrc => 'aggregate_dummy' },
+{ oid => '2243', descr => 'bitwise-or bit aggregate',
+  proname => 'bit_or', prokind => 'a', proisstrict => 'f', prorettype => 'bit',
+  proargtypes => 'bit', prosrc => 'aggregate_dummy' },
+
+# formerly-missing interval + datetime operators
+{ oid => '2546',
+  proname => 'interval_pl_date', prolang => '14', prorettype => 'timestamp',
+  proargtypes => 'interval date', prosrc => 'select $2 + $1' },
+{ oid => '2547',
+  proname => 'interval_pl_timetz', prolang => '14', prorettype => 'timetz',
+  proargtypes => 'interval timetz', prosrc => 'select $2 + $1' },
+{ oid => '2548',
+  proname => 'interval_pl_timestamp', prolang => '14',
+  prorettype => 'timestamp', proargtypes => 'interval timestamp',
+  prosrc => 'select $2 + $1' },
+{ oid => '2549',
+  proname => 'interval_pl_timestamptz', prolang => '14', provolatile => 's',
+  prorettype => 'timestamptz', proargtypes => 'interval timestamptz',
+  prosrc => 'select $2 + $1' },
+{ oid => '2550',
+  proname => 'integer_pl_date', prolang => '14', prorettype => 'date',
+  proargtypes => 'int4 date', prosrc => 'select $2 + $1' },
+
+{ oid => '2556', descr => 'get OIDs of databases in a tablespace',
+  proname => 'pg_tablespace_databases', prorows => '1000', proretset => 't',
+  provolatile => 's', prorettype => 'oid', proargtypes => 'oid',
+  prosrc => 'pg_tablespace_databases' },
+
+{ oid => '2557', descr => 'convert int4 to boolean',
+  proname => 'bool', prorettype => 'bool', proargtypes => 'int4',
+  prosrc => 'int4_bool' },
+{ oid => '2558', descr => 'convert boolean to int4',
+  proname => 'int4', prorettype => 'int4', proargtypes => 'bool',
+  prosrc => 'bool_int4' },
+{ oid => '2559', descr => 'current value from last used sequence',
+  proname => 'lastval', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int8', proargtypes => '', prosrc => 'lastval' },
+
+# start time function
+{ oid => '2560', descr => 'postmaster start time',
+  proname => 'pg_postmaster_start_time', provolatile => 's',
+  prorettype => 'timestamptz', proargtypes => '',
+  prosrc => 'pg_postmaster_start_time' },
+
+# config reload time function
+{ oid => '2034', descr => 'configuration load time',
+  proname => 'pg_conf_load_time', provolatile => 's', proparallel => 'r',
+  prorettype => 'timestamptz', proargtypes => '',
+  prosrc => 'pg_conf_load_time' },
+
+# new functions for Y-direction rtree opclasses
+{ oid => '2562',
+  proname => 'box_below', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_below' },
+{ oid => '2563',
+  proname => 'box_overbelow', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_overbelow' },
+{ oid => '2564',
+  proname => 'box_overabove', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_overabove' },
+{ oid => '2565',
+  proname => 'box_above', prorettype => 'bool', proargtypes => 'box box',
+  prosrc => 'box_above' },
+{ oid => '2566',
+  proname => 'poly_below', prorettype => 'bool',
+  proargtypes => 'polygon polygon', prosrc => 'poly_below' },
+{ oid => '2567',
+  proname => 'poly_overbelow', prorettype => 'bool',
+  proargtypes => 'polygon polygon', prosrc => 'poly_overbelow' },
+{ oid => '2568',
+  proname => 'poly_overabove', prorettype => 'bool',
+  proargtypes => 'polygon polygon', prosrc => 'poly_overabove' },
+{ oid => '2569',
+  proname => 'poly_above', prorettype => 'bool',
+  proargtypes => 'polygon polygon', prosrc => 'poly_above' },
+{ oid => '2587',
+  proname => 'circle_overbelow', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_overbelow' },
+{ oid => '2588',
+  proname => 'circle_overabove', prorettype => 'bool',
+  proargtypes => 'circle circle', prosrc => 'circle_overabove' },
+
+# support functions for GiST r-tree emulation
+{ oid => '2578', descr => 'GiST support',
+  proname => 'gist_box_consistent', prorettype => 'bool',
+  proargtypes => 'internal box int2 oid internal',
+  prosrc => 'gist_box_consistent' },
+{ oid => '2581', descr => 'GiST support',
+  proname => 'gist_box_penalty', prorettype => 'internal',
+  proargtypes => 'internal internal internal', prosrc => 'gist_box_penalty' },
+{ oid => '2582', descr => 'GiST support',
+  proname => 'gist_box_picksplit', prorettype => 'internal',
+  proargtypes => 'internal internal', prosrc => 'gist_box_picksplit' },
+{ oid => '2583', descr => 'GiST support',
+  proname => 'gist_box_union', prorettype => 'box',
+  proargtypes => 'internal internal', prosrc => 'gist_box_union' },
+{ oid => '2584', descr => 'GiST support',
+  proname => 'gist_box_same', prorettype => 'internal',
+  proargtypes => 'box box internal', prosrc => 'gist_box_same' },
+{ oid => '2585', descr => 'GiST support',
+  proname => 'gist_poly_consistent', prorettype => 'bool',
+  proargtypes => 'internal polygon int2 oid internal',
+  prosrc => 'gist_poly_consistent' },
+{ oid => '2586', descr => 'GiST support',
+  proname => 'gist_poly_compress', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'gist_poly_compress' },
+{ oid => '2591', descr => 'GiST support',
+  proname => 'gist_circle_consistent', prorettype => 'bool',
+  proargtypes => 'internal circle int2 oid internal',
+  prosrc => 'gist_circle_consistent' },
+{ oid => '2592', descr => 'GiST support',
+  proname => 'gist_circle_compress', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'gist_circle_compress' },
+{ oid => '1030', descr => 'GiST support',
+  proname => 'gist_point_compress', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'gist_point_compress' },
+{ oid => '3282', descr => 'GiST support',
+  proname => 'gist_point_fetch', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'gist_point_fetch' },
+{ oid => '2179', descr => 'GiST support',
+  proname => 'gist_point_consistent', prorettype => 'bool',
+  proargtypes => 'internal point int2 oid internal',
+  prosrc => 'gist_point_consistent' },
+{ oid => '3064', descr => 'GiST support',
+  proname => 'gist_point_distance', prorettype => 'float8',
+  proargtypes => 'internal point int2 oid internal',
+  prosrc => 'gist_point_distance' },
+{ oid => '3280', descr => 'GiST support',
+  proname => 'gist_circle_distance', prorettype => 'float8',
+  proargtypes => 'internal circle int2 oid internal',
+  prosrc => 'gist_circle_distance' },
+{ oid => '3288', descr => 'GiST support',
+  proname => 'gist_poly_distance', prorettype => 'float8',
+  proargtypes => 'internal polygon int2 oid internal',
+  prosrc => 'gist_poly_distance' },
+
+# GIN array support
+{ oid => '2743', descr => 'GIN array support',
+  proname => 'ginarrayextract', prorettype => 'internal',
+  proargtypes => 'anyarray internal internal', prosrc => 'ginarrayextract' },
+{ oid => '2774', descr => 'GIN array support',
+  proname => 'ginqueryarrayextract', prorettype => 'internal',
+  proargtypes => 'anyarray internal int2 internal internal internal internal',
+  prosrc => 'ginqueryarrayextract' },
+{ oid => '2744', descr => 'GIN array support',
+  proname => 'ginarrayconsistent', prorettype => 'bool',
+  proargtypes => 'internal int2 anyarray int4 internal internal internal internal',
+  prosrc => 'ginarrayconsistent' },
+{ oid => '3920', descr => 'GIN array support',
+  proname => 'ginarraytriconsistent', prorettype => 'char',
+  proargtypes => 'internal int2 anyarray int4 internal internal internal',
+  prosrc => 'ginarraytriconsistent' },
+{ oid => '3076', descr => 'GIN array support (obsolete)',
+  proname => 'ginarrayextract', prorettype => 'internal',
+  proargtypes => 'anyarray internal', prosrc => 'ginarrayextract_2args' },
+
+# overlap/contains/contained
+{ oid => '2747',
+  proname => 'arrayoverlap', prorettype => 'bool',
+  proargtypes => 'anyarray anyarray', prosrc => 'arrayoverlap' },
+{ oid => '2748',
+  proname => 'arraycontains', prorettype => 'bool',
+  proargtypes => 'anyarray anyarray', prosrc => 'arraycontains' },
+{ oid => '2749',
+  proname => 'arraycontained', prorettype => 'bool',
+  proargtypes => 'anyarray anyarray', prosrc => 'arraycontained' },
+
+# BRIN minmax
+{ oid => '3383', descr => 'BRIN minmax support',
+  proname => 'brin_minmax_opcinfo', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'brin_minmax_opcinfo' },
+{ oid => '3384', descr => 'BRIN minmax support',
+  proname => 'brin_minmax_add_value', prorettype => 'bool',
+  proargtypes => 'internal internal internal internal',
+  prosrc => 'brin_minmax_add_value' },
+{ oid => '3385', descr => 'BRIN minmax support',
+  proname => 'brin_minmax_consistent', prorettype => 'bool',
+  proargtypes => 'internal internal internal',
+  prosrc => 'brin_minmax_consistent' },
+{ oid => '3386', descr => 'BRIN minmax support',
+  proname => 'brin_minmax_union', prorettype => 'bool',
+  proargtypes => 'internal internal internal', prosrc => 'brin_minmax_union' },
+
+# BRIN inclusion
+{ oid => '4105', descr => 'BRIN inclusion support',
+  proname => 'brin_inclusion_opcinfo', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'brin_inclusion_opcinfo' },
+{ oid => '4106', descr => 'BRIN inclusion support',
+  proname => 'brin_inclusion_add_value', prorettype => 'bool',
+  proargtypes => 'internal internal internal internal',
+  prosrc => 'brin_inclusion_add_value' },
+{ oid => '4107', descr => 'BRIN inclusion support',
+  proname => 'brin_inclusion_consistent', prorettype => 'bool',
+  proargtypes => 'internal internal internal',
+  prosrc => 'brin_inclusion_consistent' },
+{ oid => '4108', descr => 'BRIN inclusion support',
+  proname => 'brin_inclusion_union', prorettype => 'bool',
+  proargtypes => 'internal internal internal',
+  prosrc => 'brin_inclusion_union' },
+
+# userlock replacements
+{ oid => '2880', descr => 'obtain exclusive advisory lock',
+  proname => 'pg_advisory_lock', provolatile => 'v', proparallel => 'u',
+  prorettype => 'void', proargtypes => 'int8',
+  prosrc => 'pg_advisory_lock_int8' },
+{ oid => '3089', descr => 'obtain exclusive advisory lock',
+  proname => 'pg_advisory_xact_lock', provolatile => 'v', proparallel => 'u',
+  prorettype => 'void', proargtypes => 'int8',
+  prosrc => 'pg_advisory_xact_lock_int8' },
+{ oid => '2881', descr => 'obtain shared advisory lock',
+  proname => 'pg_advisory_lock_shared', provolatile => 'v', proparallel => 'u',
+  prorettype => 'void', proargtypes => 'int8',
+  prosrc => 'pg_advisory_lock_shared_int8' },
+{ oid => '3090', descr => 'obtain shared advisory lock',
+  proname => 'pg_advisory_xact_lock_shared', provolatile => 'v',
+  proparallel => 'u', prorettype => 'void', proargtypes => 'int8',
+  prosrc => 'pg_advisory_xact_lock_shared_int8' },
+{ oid => '2882', descr => 'obtain exclusive advisory lock if available',
+  proname => 'pg_try_advisory_lock', provolatile => 'v', proparallel => 'u',
+  prorettype => 'bool', proargtypes => 'int8',
+  prosrc => 'pg_try_advisory_lock_int8' },
+{ oid => '3091', descr => 'obtain exclusive advisory lock if available',
+  proname => 'pg_try_advisory_xact_lock', provolatile => 'v',
+  proparallel => 'u', prorettype => 'bool', proargtypes => 'int8',
+  prosrc => 'pg_try_advisory_xact_lock_int8' },
+{ oid => '2883', descr => 'obtain shared advisory lock if available',
+  proname => 'pg_try_advisory_lock_shared', provolatile => 'v',
+  proparallel => 'u', prorettype => 'bool', proargtypes => 'int8',
+  prosrc => 'pg_try_advisory_lock_shared_int8' },
+{ oid => '3092', descr => 'obtain shared advisory lock if available',
+  proname => 'pg_try_advisory_xact_lock_shared', provolatile => 'v',
+  proparallel => 'u', prorettype => 'bool', proargtypes => 'int8',
+  prosrc => 'pg_try_advisory_xact_lock_shared_int8' },
+{ oid => '2884', descr => 'release exclusive advisory lock',
+  proname => 'pg_advisory_unlock', provolatile => 'v', proparallel => 'u',
+  prorettype => 'bool', proargtypes => 'int8',
+  prosrc => 'pg_advisory_unlock_int8' },
+{ oid => '2885', descr => 'release shared advisory lock',
+  proname => 'pg_advisory_unlock_shared', provolatile => 'v',
+  proparallel => 'u', prorettype => 'bool', proargtypes => 'int8',
+  prosrc => 'pg_advisory_unlock_shared_int8' },
+{ oid => '2886', descr => 'obtain exclusive advisory lock',
+  proname => 'pg_advisory_lock', provolatile => 'v', proparallel => 'u',
+  prorettype => 'void', proargtypes => 'int4 int4',
+  prosrc => 'pg_advisory_lock_int4' },
+{ oid => '3093', descr => 'obtain exclusive advisory lock',
+  proname => 'pg_advisory_xact_lock', provolatile => 'v', proparallel => 'u',
+  prorettype => 'void', proargtypes => 'int4 int4',
+  prosrc => 'pg_advisory_xact_lock_int4' },
+{ oid => '2887', descr => 'obtain shared advisory lock',
+  proname => 'pg_advisory_lock_shared', provolatile => 'v', proparallel => 'u',
+  prorettype => 'void', proargtypes => 'int4 int4',
+  prosrc => 'pg_advisory_lock_shared_int4' },
+{ oid => '3094', descr => 'obtain shared advisory lock',
+  proname => 'pg_advisory_xact_lock_shared', provolatile => 'v',
+  proparallel => 'u', prorettype => 'void', proargtypes => 'int4 int4',
+  prosrc => 'pg_advisory_xact_lock_shared_int4' },
+{ oid => '2888', descr => 'obtain exclusive advisory lock if available',
+  proname => 'pg_try_advisory_lock', provolatile => 'v', proparallel => 'u',
+  prorettype => 'bool', proargtypes => 'int4 int4',
+  prosrc => 'pg_try_advisory_lock_int4' },
+{ oid => '3095', descr => 'obtain exclusive advisory lock if available',
+  proname => 'pg_try_advisory_xact_lock', provolatile => 'v',
+  proparallel => 'u', prorettype => 'bool', proargtypes => 'int4 int4',
+  prosrc => 'pg_try_advisory_xact_lock_int4' },
+{ oid => '2889', descr => 'obtain shared advisory lock if available',
+  proname => 'pg_try_advisory_lock_shared', provolatile => 'v',
+  proparallel => 'u', prorettype => 'bool', proargtypes => 'int4 int4',
+  prosrc => 'pg_try_advisory_lock_shared_int4' },
+{ oid => '3096', descr => 'obtain shared advisory lock if available',
+  proname => 'pg_try_advisory_xact_lock_shared', provolatile => 'v',
+  proparallel => 'u', prorettype => 'bool', proargtypes => 'int4 int4',
+  prosrc => 'pg_try_advisory_xact_lock_shared_int4' },
+{ oid => '2890', descr => 'release exclusive advisory lock',
+  proname => 'pg_advisory_unlock', provolatile => 'v', proparallel => 'u',
+  prorettype => 'bool', proargtypes => 'int4 int4',
+  prosrc => 'pg_advisory_unlock_int4' },
+{ oid => '2891', descr => 'release shared advisory lock',
+  proname => 'pg_advisory_unlock_shared', provolatile => 'v',
+  proparallel => 'u', prorettype => 'bool', proargtypes => 'int4 int4',
+  prosrc => 'pg_advisory_unlock_shared_int4' },
+{ oid => '2892', descr => 'release all advisory locks',
+  proname => 'pg_advisory_unlock_all', provolatile => 'v', proparallel => 'u',
+  prorettype => 'void', proargtypes => '', prosrc => 'pg_advisory_unlock_all' },
+
+# XML support
+{ oid => '2893', descr => 'I/O',
+  proname => 'xml_in', provolatile => 's', prorettype => 'xml',
+  proargtypes => 'cstring', prosrc => 'xml_in' },
+{ oid => '2894', descr => 'I/O',
+  proname => 'xml_out', prorettype => 'cstring', proargtypes => 'xml',
+  prosrc => 'xml_out' },
+{ oid => '2895', descr => 'generate XML comment',
+  proname => 'xmlcomment', prorettype => 'xml', proargtypes => 'text',
+  prosrc => 'xmlcomment' },
+{ oid => '2896',
+  descr => 'perform a non-validating parse of a character string to produce an XML value',
+  proname => 'xml', provolatile => 's', prorettype => 'xml',
+  proargtypes => 'text', prosrc => 'texttoxml' },
+{ oid => '2897', descr => 'validate an XML value',
+  proname => 'xmlvalidate', prorettype => 'bool', proargtypes => 'xml text',
+  prosrc => 'xmlvalidate' },
+{ oid => '2898', descr => 'I/O',
+  proname => 'xml_recv', provolatile => 's', prorettype => 'xml',
+  proargtypes => 'internal', prosrc => 'xml_recv' },
+{ oid => '2899', descr => 'I/O',
+  proname => 'xml_send', provolatile => 's', prorettype => 'bytea',
+  proargtypes => 'xml', prosrc => 'xml_send' },
+{ oid => '2900', descr => 'aggregate transition function',
+  proname => 'xmlconcat2', proisstrict => 'f', prorettype => 'xml',
+  proargtypes => 'xml xml', prosrc => 'xmlconcat2' },
+{ oid => '2901', descr => 'concatenate XML values',
+  proname => 'xmlagg', prokind => 'a', proisstrict => 'f', prorettype => 'xml',
+  proargtypes => 'xml', prosrc => 'aggregate_dummy' },
+{ oid => '2922', descr => 'serialize an XML value to a character string',
+  proname => 'text', prorettype => 'text', proargtypes => 'xml',
+  prosrc => 'xmltotext' },
+
+{ oid => '2923', descr => 'map table contents to XML',
+  proname => 'table_to_xml', procost => '100', provolatile => 's',
+  proparallel => 'r', prorettype => 'xml',
+  proargtypes => 'regclass bool bool text',
+  proargnames => '{tbl,nulls,tableforest,targetns}', prosrc => 'table_to_xml' },
+{ oid => '2924', descr => 'map query result to XML',
+  proname => 'query_to_xml', procost => '100', provolatile => 'v',
+  proparallel => 'u', prorettype => 'xml', proargtypes => 'text bool bool text',
+  proargnames => '{query,nulls,tableforest,targetns}',
+  prosrc => 'query_to_xml' },
+{ oid => '2925', descr => 'map rows from cursor to XML',
+  proname => 'cursor_to_xml', procost => '100', provolatile => 'v',
+  proparallel => 'u', prorettype => 'xml',
+  proargtypes => 'refcursor int4 bool bool text',
+  proargnames => '{cursor,count,nulls,tableforest,targetns}',
+  prosrc => 'cursor_to_xml' },
+{ oid => '2926', descr => 'map table structure to XML Schema',
+  proname => 'table_to_xmlschema', procost => '100', provolatile => 's',
+  proparallel => 'r', prorettype => 'xml',
+  proargtypes => 'regclass bool bool text',
+  proargnames => '{tbl,nulls,tableforest,targetns}',
+  prosrc => 'table_to_xmlschema' },
+{ oid => '2927', descr => 'map query result structure to XML Schema',
+  proname => 'query_to_xmlschema', procost => '100', provolatile => 'v',
+  proparallel => 'u', prorettype => 'xml', proargtypes => 'text bool bool text',
+  proargnames => '{query,nulls,tableforest,targetns}',
+  prosrc => 'query_to_xmlschema' },
+{ oid => '2928', descr => 'map cursor structure to XML Schema',
+  proname => 'cursor_to_xmlschema', procost => '100', provolatile => 'v',
+  proparallel => 'u', prorettype => 'xml',
+  proargtypes => 'refcursor bool bool text',
+  proargnames => '{cursor,nulls,tableforest,targetns}',
+  prosrc => 'cursor_to_xmlschema' },
+{ oid => '2929',
+  descr => 'map table contents and structure to XML and XML Schema',
+  proname => 'table_to_xml_and_xmlschema', procost => '100', provolatile => 's',
+  proparallel => 'r', prorettype => 'xml',
+  proargtypes => 'regclass bool bool text',
+  proargnames => '{tbl,nulls,tableforest,targetns}',
+  prosrc => 'table_to_xml_and_xmlschema' },
+{ oid => '2930',
+  descr => 'map query result and structure to XML and XML Schema',
+  proname => 'query_to_xml_and_xmlschema', procost => '100', provolatile => 'v',
+  proparallel => 'u', prorettype => 'xml', proargtypes => 'text bool bool text',
+  proargnames => '{query,nulls,tableforest,targetns}',
+  prosrc => 'query_to_xml_and_xmlschema' },
+
+{ oid => '2933', descr => 'map schema contents to XML',
+  proname => 'schema_to_xml', procost => '100', provolatile => 's',
+  proparallel => 'r', prorettype => 'xml', proargtypes => 'name bool bool text',
+  proargnames => '{schema,nulls,tableforest,targetns}',
+  prosrc => 'schema_to_xml' },
+{ oid => '2934', descr => 'map schema structure to XML Schema',
+  proname => 'schema_to_xmlschema', procost => '100', provolatile => 's',
+  proparallel => 'r', prorettype => 'xml', proargtypes => 'name bool bool text',
+  proargnames => '{schema,nulls,tableforest,targetns}',
+  prosrc => 'schema_to_xmlschema' },
+{ oid => '2935',
+  descr => 'map schema contents and structure to XML and XML Schema',
+  proname => 'schema_to_xml_and_xmlschema', procost => '100',
+  provolatile => 's', proparallel => 'r', prorettype => 'xml',
+  proargtypes => 'name bool bool text',
+  proargnames => '{schema,nulls,tableforest,targetns}',
+  prosrc => 'schema_to_xml_and_xmlschema' },
+
+{ oid => '2936', descr => 'map database contents to XML',
+  proname => 'database_to_xml', procost => '100', provolatile => 's',
+  proparallel => 'r', prorettype => 'xml', proargtypes => 'bool bool text',
+  proargnames => '{nulls,tableforest,targetns}', prosrc => 'database_to_xml' },
+{ oid => '2937', descr => 'map database structure to XML Schema',
+  proname => 'database_to_xmlschema', procost => '100', provolatile => 's',
+  proparallel => 'r', prorettype => 'xml', proargtypes => 'bool bool text',
+  proargnames => '{nulls,tableforest,targetns}',
+  prosrc => 'database_to_xmlschema' },
+{ oid => '2938',
+  descr => 'map database contents and structure to XML and XML Schema',
+  proname => 'database_to_xml_and_xmlschema', procost => '100',
+  provolatile => 's', proparallel => 'r', prorettype => 'xml',
+  proargtypes => 'bool bool text',
+  proargnames => '{nulls,tableforest,targetns}',
+  prosrc => 'database_to_xml_and_xmlschema' },
+
+{ oid => '2931',
+  descr => 'evaluate XPath expression, with namespaces support',
+  proname => 'xpath', prorettype => '_xml', proargtypes => 'text xml _text',
+  prosrc => 'xpath' },
+{ oid => '2932', descr => 'evaluate XPath expression',
+  proname => 'xpath', prolang => '14', prorettype => '_xml',
+  proargtypes => 'text xml',
+  prosrc => 'select pg_catalog.xpath($1, $2, \'\'{}\'\'::pg_catalog.text[])' },
+
+{ oid => '2614', descr => 'test XML value against XPath expression',
+  proname => 'xmlexists', prorettype => 'bool', proargtypes => 'text xml',
+  prosrc => 'xmlexists' },
+
+{ oid => '3049',
+  descr => 'test XML value against XPath expression, with namespace support',
+  proname => 'xpath_exists', prorettype => 'bool',
+  proargtypes => 'text xml _text', prosrc => 'xpath_exists' },
+{ oid => '3050', descr => 'test XML value against XPath expression',
+  proname => 'xpath_exists', prolang => '14', prorettype => 'bool',
+  proargtypes => 'text xml',
+  prosrc => 'select pg_catalog.xpath_exists($1, $2, \'\'{}\'\'::pg_catalog.text[])' },
+{ oid => '3051', descr => 'determine if a string is well formed XML',
+  proname => 'xml_is_well_formed', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'text', prosrc => 'xml_is_well_formed' },
+{ oid => '3052', descr => 'determine if a string is well formed XML document',
+  proname => 'xml_is_well_formed_document', prorettype => 'bool',
+  proargtypes => 'text', prosrc => 'xml_is_well_formed_document' },
+{ oid => '3053', descr => 'determine if a string is well formed XML content',
+  proname => 'xml_is_well_formed_content', prorettype => 'bool',
+  proargtypes => 'text', prosrc => 'xml_is_well_formed_content' },
+
+# json
+{ oid => '321', descr => 'I/O',
+  proname => 'json_in', prorettype => 'json', proargtypes => 'cstring',
+  prosrc => 'json_in' },
+{ oid => '322', descr => 'I/O',
+  proname => 'json_out', prorettype => 'cstring', proargtypes => 'json',
+  prosrc => 'json_out' },
+{ oid => '323', descr => 'I/O',
+  proname => 'json_recv', prorettype => 'json', proargtypes => 'internal',
+  prosrc => 'json_recv' },
+{ oid => '324', descr => 'I/O',
+  proname => 'json_send', prorettype => 'bytea', proargtypes => 'json',
+  prosrc => 'json_send' },
+{ oid => '3153', descr => 'map array to json',
+  proname => 'array_to_json', provolatile => 's', prorettype => 'json',
+  proargtypes => 'anyarray', prosrc => 'array_to_json' },
+{ oid => '3154', descr => 'map array to json with optional pretty printing',
+  proname => 'array_to_json', provolatile => 's', prorettype => 'json',
+  proargtypes => 'anyarray bool', prosrc => 'array_to_json_pretty' },
+{ oid => '3155', descr => 'map row to json',
+  proname => 'row_to_json', provolatile => 's', prorettype => 'json',
+  proargtypes => 'record', prosrc => 'row_to_json' },
+{ oid => '3156', descr => 'map row to json with optional pretty printing',
+  proname => 'row_to_json', provolatile => 's', prorettype => 'json',
+  proargtypes => 'record bool', prosrc => 'row_to_json_pretty' },
+{ oid => '3173', descr => 'json aggregate transition function',
+  proname => 'json_agg_transfn', proisstrict => 'f', provolatile => 's',
+  prorettype => 'internal', proargtypes => 'internal anyelement',
+  prosrc => 'json_agg_transfn' },
+{ oid => '3174', descr => 'json aggregate final function',
+  proname => 'json_agg_finalfn', proisstrict => 'f', prorettype => 'json',
+  proargtypes => 'internal', prosrc => 'json_agg_finalfn' },
+{ oid => '3175', descr => 'aggregate input into json',
+  proname => 'json_agg', prokind => 'a', proisstrict => 'f', provolatile => 's',
+  prorettype => 'json', proargtypes => 'anyelement',
+  prosrc => 'aggregate_dummy' },
+{ oid => '3180', descr => 'json object aggregate transition function',
+  proname => 'json_object_agg_transfn', proisstrict => 'f', provolatile => 's',
+  prorettype => 'internal', proargtypes => 'internal any any',
+  prosrc => 'json_object_agg_transfn' },
+{ oid => '3196', descr => 'json object aggregate final function',
+  proname => 'json_object_agg_finalfn', proisstrict => 'f',
+  prorettype => 'json', proargtypes => 'internal',
+  prosrc => 'json_object_agg_finalfn' },
+{ oid => '3197', descr => 'aggregate input into a json object',
+  proname => 'json_object_agg', prokind => 'a', proisstrict => 'f',
+  provolatile => 's', prorettype => 'json', proargtypes => 'any any',
+  prosrc => 'aggregate_dummy' },
+{ oid => '3198', descr => 'build a json array from any inputs',
+  proname => 'json_build_array', provariadic => 'any', proisstrict => 'f',
+  provolatile => 's', prorettype => 'json', proargtypes => 'any',
+  proallargtypes => '{any}', proargmodes => '{v}',
+  prosrc => 'json_build_array' },
+{ oid => '3199', descr => 'build an empty json array',
+  proname => 'json_build_array', proisstrict => 'f', provolatile => 's',
+  prorettype => 'json', proargtypes => '',
+  prosrc => 'json_build_array_noargs' },
+{ oid => '3200',
+  descr => 'build a json object from pairwise key/value inputs',
+  proname => 'json_build_object', provariadic => 'any', proisstrict => 'f',
+  provolatile => 's', prorettype => 'json', proargtypes => 'any',
+  proallargtypes => '{any}', proargmodes => '{v}',
+  prosrc => 'json_build_object' },
+{ oid => '3201', descr => 'build an empty json object',
+  proname => 'json_build_object', proisstrict => 'f', provolatile => 's',
+  prorettype => 'json', proargtypes => '',
+  prosrc => 'json_build_object_noargs' },
+{ oid => '3202', descr => 'map text array of key value pairs to json object',
+  proname => 'json_object', prorettype => 'json', proargtypes => '_text',
+  prosrc => 'json_object' },
+{ oid => '3203', descr => 'map text arrays of keys and values to json object',
+  proname => 'json_object', prorettype => 'json', proargtypes => '_text _text',
+  prosrc => 'json_object_two_arg' },
+{ oid => '3176', descr => 'map input to json',
+  proname => 'to_json', provolatile => 's', prorettype => 'json',
+  proargtypes => 'anyelement', prosrc => 'to_json' },
+{ oid => '3261', descr => 'remove object fields with null values from json',
+  proname => 'json_strip_nulls', prorettype => 'json', proargtypes => 'json',
+  prosrc => 'json_strip_nulls' },
+
+{ oid => '3947',
+  proname => 'json_object_field', prorettype => 'json',
+  proargtypes => 'json text', proargnames => '{from_json, field_name}',
+  prosrc => 'json_object_field' },
+{ oid => '3948',
+  proname => 'json_object_field_text', prorettype => 'text',
+  proargtypes => 'json text', proargnames => '{from_json, field_name}',
+  prosrc => 'json_object_field_text' },
+{ oid => '3949',
+  proname => 'json_array_element', prorettype => 'json',
+  proargtypes => 'json int4', proargnames => '{from_json, element_index}',
+  prosrc => 'json_array_element' },
+{ oid => '3950',
+  proname => 'json_array_element_text', prorettype => 'text',
+  proargtypes => 'json int4', proargnames => '{from_json, element_index}',
+  prosrc => 'json_array_element_text' },
+{ oid => '3951', descr => 'get value from json with path elements',
+  proname => 'json_extract_path', provariadic => 'text', prorettype => 'json',
+  proargtypes => 'json _text', proallargtypes => '{json,_text}',
+  proargmodes => '{i,v}', proargnames => '{from_json,path_elems}',
+  prosrc => 'json_extract_path' },
+{ oid => '3953', descr => 'get value from json as text with path elements',
+  proname => 'json_extract_path_text', provariadic => 'text',
+  prorettype => 'text', proargtypes => 'json _text',
+  proallargtypes => '{json,_text}', proargmodes => '{i,v}',
+  proargnames => '{from_json,path_elems}', prosrc => 'json_extract_path_text' },
+{ oid => '3955', descr => 'key value pairs of a json object',
+  proname => 'json_array_elements', prorows => '100', proretset => 't',
+  prorettype => 'json', proargtypes => 'json', proallargtypes => '{json,json}',
+  proargmodes => '{i,o}', proargnames => '{from_json,value}',
+  prosrc => 'json_array_elements' },
+{ oid => '3969', descr => 'elements of json array',
+  proname => 'json_array_elements_text', prorows => '100', proretset => 't',
+  prorettype => 'text', proargtypes => 'json', proallargtypes => '{json,text}',
+  proargmodes => '{i,o}', proargnames => '{from_json,value}',
+  prosrc => 'json_array_elements_text' },
+{ oid => '3956', descr => 'length of json array',
+  proname => 'json_array_length', prorettype => 'int4', proargtypes => 'json',
+  prosrc => 'json_array_length' },
+{ oid => '3957', descr => 'get json object keys',
+  proname => 'json_object_keys', prorows => '100', proretset => 't',
+  prorettype => 'text', proargtypes => 'json', prosrc => 'json_object_keys' },
+{ oid => '3958', descr => 'key value pairs of a json object',
+  proname => 'json_each', prorows => '100', proretset => 't',
+  prorettype => 'record', proargtypes => 'json',
+  proallargtypes => '{json,text,json}', proargmodes => '{i,o,o}',
+  proargnames => '{from_json,key,value}', prosrc => 'json_each' },
+{ oid => '3959', descr => 'key value pairs of a json object',
+  proname => 'json_each_text', prorows => '100', proretset => 't',
+  prorettype => 'record', proargtypes => 'json',
+  proallargtypes => '{json,text,text}', proargmodes => '{i,o,o}',
+  proargnames => '{from_json,key,value}', prosrc => 'json_each_text' },
+{ oid => '3960', descr => 'get record fields from a json object',
+  proname => 'json_populate_record', proisstrict => 'f', provolatile => 's',
+  prorettype => 'anyelement', proargtypes => 'anyelement json bool',
+  prosrc => 'json_populate_record' },
+{ oid => '3961',
+  descr => 'get set of records with fields from a json array of objects',
+  proname => 'json_populate_recordset', prorows => '100', proisstrict => 'f',
+  proretset => 't', provolatile => 's', prorettype => 'anyelement',
+  proargtypes => 'anyelement json bool', prosrc => 'json_populate_recordset' },
+{ oid => '3204', descr => 'get record fields from a json object',
+  proname => 'json_to_record', provolatile => 's', prorettype => 'record',
+  proargtypes => 'json', prosrc => 'json_to_record' },
+{ oid => '3205',
+  descr => 'get set of records with fields from a json array of objects',
+  proname => 'json_to_recordset', prorows => '100', proisstrict => 'f',
+  proretset => 't', provolatile => 's', prorettype => 'record',
+  proargtypes => 'json', prosrc => 'json_to_recordset' },
+{ oid => '3968', descr => 'get the type of a json value',
+  proname => 'json_typeof', prorettype => 'text', proargtypes => 'json',
+  prosrc => 'json_typeof' },
+
+# uuid
+{ oid => '2952', descr => 'I/O',
+  proname => 'uuid_in', prorettype => 'uuid', proargtypes => 'cstring',
+  prosrc => 'uuid_in' },
+{ oid => '2953', descr => 'I/O',
+  proname => 'uuid_out', prorettype => 'cstring', proargtypes => 'uuid',
+  prosrc => 'uuid_out' },
+{ oid => '2954',
+  proname => 'uuid_lt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'uuid uuid', prosrc => 'uuid_lt' },
+{ oid => '2955',
+  proname => 'uuid_le', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'uuid uuid', prosrc => 'uuid_le' },
+{ oid => '2956',
+  proname => 'uuid_eq', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'uuid uuid', prosrc => 'uuid_eq' },
+{ oid => '2957',
+  proname => 'uuid_ge', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'uuid uuid', prosrc => 'uuid_ge' },
+{ oid => '2958',
+  proname => 'uuid_gt', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'uuid uuid', prosrc => 'uuid_gt' },
+{ oid => '2959',
+  proname => 'uuid_ne', proleakproof => 't', prorettype => 'bool',
+  proargtypes => 'uuid uuid', prosrc => 'uuid_ne' },
+{ oid => '2960', descr => 'less-equal-greater',
+  proname => 'uuid_cmp', prorettype => 'int4', proargtypes => 'uuid uuid',
+  prosrc => 'uuid_cmp' },
+{ oid => '3300', descr => 'sort support',
+  proname => 'uuid_sortsupport', prorettype => 'void',
+  proargtypes => 'internal', prosrc => 'uuid_sortsupport' },
+{ oid => '2961', descr => 'I/O',
+  proname => 'uuid_recv', prorettype => 'uuid', proargtypes => 'internal',
+  prosrc => 'uuid_recv' },
+{ oid => '2962', descr => 'I/O',
+  proname => 'uuid_send', prorettype => 'bytea', proargtypes => 'uuid',
+  prosrc => 'uuid_send' },
+{ oid => '2963', descr => 'hash',
+  proname => 'uuid_hash', prorettype => 'int4', proargtypes => 'uuid',
+  prosrc => 'uuid_hash' },
+{ oid => '3412', descr => 'hash',
+  proname => 'uuid_hash_extended', prorettype => 'int8',
+  proargtypes => 'uuid int8', prosrc => 'uuid_hash_extended' },
+
+# pg_lsn
+{ oid => '3229', descr => 'I/O',
+  proname => 'pg_lsn_in', prorettype => 'pg_lsn', proargtypes => 'cstring',
+  prosrc => 'pg_lsn_in' },
+{ oid => '3230', descr => 'I/O',
+  proname => 'pg_lsn_out', prorettype => 'cstring', proargtypes => 'pg_lsn',
+  prosrc => 'pg_lsn_out' },
+{ oid => '3231',
+  proname => 'pg_lsn_lt', prorettype => 'bool', proargtypes => 'pg_lsn pg_lsn',
+  prosrc => 'pg_lsn_lt' },
+{ oid => '3232',
+  proname => 'pg_lsn_le', prorettype => 'bool', proargtypes => 'pg_lsn pg_lsn',
+  prosrc => 'pg_lsn_le' },
+{ oid => '3233',
+  proname => 'pg_lsn_eq', prorettype => 'bool', proargtypes => 'pg_lsn pg_lsn',
+  prosrc => 'pg_lsn_eq' },
+{ oid => '3234',
+  proname => 'pg_lsn_ge', prorettype => 'bool', proargtypes => 'pg_lsn pg_lsn',
+  prosrc => 'pg_lsn_ge' },
+{ oid => '3235',
+  proname => 'pg_lsn_gt', prorettype => 'bool', proargtypes => 'pg_lsn pg_lsn',
+  prosrc => 'pg_lsn_gt' },
+{ oid => '3236',
+  proname => 'pg_lsn_ne', prorettype => 'bool', proargtypes => 'pg_lsn pg_lsn',
+  prosrc => 'pg_lsn_ne' },
+{ oid => '3237',
+  proname => 'pg_lsn_mi', prorettype => 'numeric',
+  proargtypes => 'pg_lsn pg_lsn', prosrc => 'pg_lsn_mi' },
+{ oid => '3238', descr => 'I/O',
+  proname => 'pg_lsn_recv', prorettype => 'pg_lsn', proargtypes => 'internal',
+  prosrc => 'pg_lsn_recv' },
+{ oid => '3239', descr => 'I/O',
+  proname => 'pg_lsn_send', prorettype => 'bytea', proargtypes => 'pg_lsn',
+  prosrc => 'pg_lsn_send' },
+{ oid => '3251', descr => 'less-equal-greater',
+  proname => 'pg_lsn_cmp', prorettype => 'int4', proargtypes => 'pg_lsn pg_lsn',
+  prosrc => 'pg_lsn_cmp' },
+{ oid => '3252', descr => 'hash',
+  proname => 'pg_lsn_hash', prorettype => 'int4', proargtypes => 'pg_lsn',
+  prosrc => 'pg_lsn_hash' },
+{ oid => '3413', descr => 'hash',
+  proname => 'pg_lsn_hash_extended', prorettype => 'int8',
+  proargtypes => 'pg_lsn int8', prosrc => 'pg_lsn_hash_extended' },
+
+# enum related procs
+{ oid => '3504', descr => 'I/O',
+  proname => 'anyenum_in', prorettype => 'anyenum', proargtypes => 'cstring',
+  prosrc => 'anyenum_in' },
+{ oid => '3505', descr => 'I/O',
+  proname => 'anyenum_out', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'anyenum', prosrc => 'anyenum_out' },
+{ oid => '3506', descr => 'I/O',
+  proname => 'enum_in', provolatile => 's', prorettype => 'anyenum',
+  proargtypes => 'cstring oid', prosrc => 'enum_in' },
+{ oid => '3507', descr => 'I/O',
+  proname => 'enum_out', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'anyenum', prosrc => 'enum_out' },
+{ oid => '3508',
+  proname => 'enum_eq', prorettype => 'bool', proargtypes => 'anyenum anyenum',
+  prosrc => 'enum_eq' },
+{ oid => '3509',
+  proname => 'enum_ne', prorettype => 'bool', proargtypes => 'anyenum anyenum',
+  prosrc => 'enum_ne' },
+{ oid => '3510',
+  proname => 'enum_lt', prorettype => 'bool', proargtypes => 'anyenum anyenum',
+  prosrc => 'enum_lt' },
+{ oid => '3511',
+  proname => 'enum_gt', prorettype => 'bool', proargtypes => 'anyenum anyenum',
+  prosrc => 'enum_gt' },
+{ oid => '3512',
+  proname => 'enum_le', prorettype => 'bool', proargtypes => 'anyenum anyenum',
+  prosrc => 'enum_le' },
+{ oid => '3513',
+  proname => 'enum_ge', prorettype => 'bool', proargtypes => 'anyenum anyenum',
+  prosrc => 'enum_ge' },
+{ oid => '3514', descr => 'less-equal-greater',
+  proname => 'enum_cmp', prorettype => 'int4', proargtypes => 'anyenum anyenum',
+  prosrc => 'enum_cmp' },
+{ oid => '3515', descr => 'hash',
+  proname => 'hashenum', prorettype => 'int4', proargtypes => 'anyenum',
+  prosrc => 'hashenum' },
+{ oid => '3414', descr => 'hash',
+  proname => 'hashenumextended', prorettype => 'int8',
+  proargtypes => 'anyenum int8', prosrc => 'hashenumextended' },
+{ oid => '3524', descr => 'smaller of two',
+  proname => 'enum_smaller', prorettype => 'anyenum',
+  proargtypes => 'anyenum anyenum', prosrc => 'enum_smaller' },
+{ oid => '3525', descr => 'larger of two',
+  proname => 'enum_larger', prorettype => 'anyenum',
+  proargtypes => 'anyenum anyenum', prosrc => 'enum_larger' },
+{ oid => '3526', descr => 'maximum value of all enum input values',
+  proname => 'max', prokind => 'a', proisstrict => 'f', prorettype => 'anyenum',
+  proargtypes => 'anyenum', prosrc => 'aggregate_dummy' },
+{ oid => '3527', descr => 'minimum value of all enum input values',
+  proname => 'min', prokind => 'a', proisstrict => 'f', prorettype => 'anyenum',
+  proargtypes => 'anyenum', prosrc => 'aggregate_dummy' },
+{ oid => '3528', descr => 'first value of the input enum type',
+  proname => 'enum_first', proisstrict => 'f', provolatile => 's',
+  prorettype => 'anyenum', proargtypes => 'anyenum', prosrc => 'enum_first' },
+{ oid => '3529', descr => 'last value of the input enum type',
+  proname => 'enum_last', proisstrict => 'f', provolatile => 's',
+  prorettype => 'anyenum', proargtypes => 'anyenum', prosrc => 'enum_last' },
+{ oid => '3530',
+  descr => 'range between the two given enum values, as an ordered array',
+  proname => 'enum_range', proisstrict => 'f', provolatile => 's',
+  prorettype => 'anyarray', proargtypes => 'anyenum anyenum',
+  prosrc => 'enum_range_bounds' },
+{ oid => '3531', descr => 'range of the given enum type, as an ordered array',
+  proname => 'enum_range', proisstrict => 'f', provolatile => 's',
+  prorettype => 'anyarray', proargtypes => 'anyenum',
+  prosrc => 'enum_range_all' },
+{ oid => '3532', descr => 'I/O',
+  proname => 'enum_recv', provolatile => 's', prorettype => 'anyenum',
+  proargtypes => 'internal oid', prosrc => 'enum_recv' },
+{ oid => '3533', descr => 'I/O',
+  proname => 'enum_send', provolatile => 's', prorettype => 'bytea',
+  proargtypes => 'anyenum', prosrc => 'enum_send' },
+
+# text search stuff
+{ oid => '3610', descr => 'I/O',
+  proname => 'tsvectorin', prorettype => 'tsvector', proargtypes => 'cstring',
+  prosrc => 'tsvectorin' },
+{ oid => '3639', descr => 'I/O',
+  proname => 'tsvectorrecv', prorettype => 'tsvector',
+  proargtypes => 'internal', prosrc => 'tsvectorrecv' },
+{ oid => '3611', descr => 'I/O',
+  proname => 'tsvectorout', prorettype => 'cstring', proargtypes => 'tsvector',
+  prosrc => 'tsvectorout' },
+{ oid => '3638', descr => 'I/O',
+  proname => 'tsvectorsend', prorettype => 'bytea', proargtypes => 'tsvector',
+  prosrc => 'tsvectorsend' },
+{ oid => '3612', descr => 'I/O',
+  proname => 'tsqueryin', prorettype => 'tsquery', proargtypes => 'cstring',
+  prosrc => 'tsqueryin' },
+{ oid => '3641', descr => 'I/O',
+  proname => 'tsqueryrecv', prorettype => 'tsquery', proargtypes => 'internal',
+  prosrc => 'tsqueryrecv' },
+{ oid => '3613', descr => 'I/O',
+  proname => 'tsqueryout', prorettype => 'cstring', proargtypes => 'tsquery',
+  prosrc => 'tsqueryout' },
+{ oid => '3640', descr => 'I/O',
+  proname => 'tsquerysend', prorettype => 'bytea', proargtypes => 'tsquery',
+  prosrc => 'tsquerysend' },
+{ oid => '3646', descr => 'I/O',
+  proname => 'gtsvectorin', prorettype => 'gtsvector', proargtypes => 'cstring',
+  prosrc => 'gtsvectorin' },
+{ oid => '3647', descr => 'I/O',
+  proname => 'gtsvectorout', prorettype => 'cstring',
+  proargtypes => 'gtsvector', prosrc => 'gtsvectorout' },
+
+{ oid => '3616',
+  proname => 'tsvector_lt', prorettype => 'bool',
+  proargtypes => 'tsvector tsvector', prosrc => 'tsvector_lt' },
+{ oid => '3617',
+  proname => 'tsvector_le', prorettype => 'bool',
+  proargtypes => 'tsvector tsvector', prosrc => 'tsvector_le' },
+{ oid => '3618',
+  proname => 'tsvector_eq', prorettype => 'bool',
+  proargtypes => 'tsvector tsvector', prosrc => 'tsvector_eq' },
+{ oid => '3619',
+  proname => 'tsvector_ne', prorettype => 'bool',
+  proargtypes => 'tsvector tsvector', prosrc => 'tsvector_ne' },
+{ oid => '3620',
+  proname => 'tsvector_ge', prorettype => 'bool',
+  proargtypes => 'tsvector tsvector', prosrc => 'tsvector_ge' },
+{ oid => '3621',
+  proname => 'tsvector_gt', prorettype => 'bool',
+  proargtypes => 'tsvector tsvector', prosrc => 'tsvector_gt' },
+{ oid => '3622', descr => 'less-equal-greater',
+  proname => 'tsvector_cmp', prorettype => 'int4',
+  proargtypes => 'tsvector tsvector', prosrc => 'tsvector_cmp' },
+
+{ oid => '3711', descr => 'number of lexemes',
+  proname => 'length', prorettype => 'int4', proargtypes => 'tsvector',
+  prosrc => 'tsvector_length' },
+{ oid => '3623', descr => 'strip position information',
+  proname => 'strip', prorettype => 'tsvector', proargtypes => 'tsvector',
+  prosrc => 'tsvector_strip' },
+{ oid => '3624', descr => 'set given weight for whole tsvector',
+  proname => 'setweight', prorettype => 'tsvector',
+  proargtypes => 'tsvector char', prosrc => 'tsvector_setweight' },
+{ oid => '3320', descr => 'set given weight for given lexemes',
+  proname => 'setweight', prorettype => 'tsvector',
+  proargtypes => 'tsvector char _text',
+  prosrc => 'tsvector_setweight_by_filter' },
+{ oid => '3625',
+  proname => 'tsvector_concat', prorettype => 'tsvector',
+  proargtypes => 'tsvector tsvector', prosrc => 'tsvector_concat' },
+{ oid => '3321', descr => 'delete lexeme',
+  proname => 'ts_delete', prorettype => 'tsvector',
+  proargtypes => 'tsvector text', prosrc => 'tsvector_delete_str' },
+{ oid => '3323', descr => 'delete given lexemes',
+  proname => 'ts_delete', prorettype => 'tsvector',
+  proargtypes => 'tsvector _text', prosrc => 'tsvector_delete_arr' },
+{ oid => '3322', descr => 'expand tsvector to set of rows',
+  proname => 'unnest', prorows => '10', proretset => 't',
+  prorettype => 'record', proargtypes => 'tsvector',
+  proallargtypes => '{tsvector,text,_int2,_text}', proargmodes => '{i,o,o,o}',
+  proargnames => '{tsvector,lexeme,positions,weights}',
+  prosrc => 'tsvector_unnest' },
+{ oid => '3326', descr => 'convert tsvector to array of lexemes',
+  proname => 'tsvector_to_array', prorettype => '_text',
+  proargtypes => 'tsvector', prosrc => 'tsvector_to_array' },
+{ oid => '3327', descr => 'build tsvector from array of lexemes',
+  proname => 'array_to_tsvector', prorettype => 'tsvector',
+  proargtypes => '_text', prosrc => 'array_to_tsvector' },
+{ oid => '3319',
+  descr => 'delete lexemes that do not have one of the given weights',
+  proname => 'ts_filter', prorettype => 'tsvector',
+  proargtypes => 'tsvector _char', prosrc => 'tsvector_filter' },
+
+{ oid => '3634',
+  proname => 'ts_match_vq', prorettype => 'bool',
+  proargtypes => 'tsvector tsquery', prosrc => 'ts_match_vq' },
+{ oid => '3635',
+  proname => 'ts_match_qv', prorettype => 'bool',
+  proargtypes => 'tsquery tsvector', prosrc => 'ts_match_qv' },
+{ oid => '3760',
+  proname => 'ts_match_tt', procost => '100', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'text text', prosrc => 'ts_match_tt' },
+{ oid => '3761',
+  proname => 'ts_match_tq', procost => '100', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'text tsquery',
+  prosrc => 'ts_match_tq' },
+
+{ oid => '3648', descr => 'GiST tsvector support',
+  proname => 'gtsvector_compress', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'gtsvector_compress' },
+{ oid => '3649', descr => 'GiST tsvector support',
+  proname => 'gtsvector_decompress', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'gtsvector_decompress' },
+{ oid => '3650', descr => 'GiST tsvector support',
+  proname => 'gtsvector_picksplit', prorettype => 'internal',
+  proargtypes => 'internal internal', prosrc => 'gtsvector_picksplit' },
+{ oid => '3651', descr => 'GiST tsvector support',
+  proname => 'gtsvector_union', prorettype => 'gtsvector',
+  proargtypes => 'internal internal', prosrc => 'gtsvector_union' },
+{ oid => '3652', descr => 'GiST tsvector support',
+  proname => 'gtsvector_same', prorettype => 'internal',
+  proargtypes => 'gtsvector gtsvector internal', prosrc => 'gtsvector_same' },
+{ oid => '3653', descr => 'GiST tsvector support',
+  proname => 'gtsvector_penalty', prorettype => 'internal',
+  proargtypes => 'internal internal internal', prosrc => 'gtsvector_penalty' },
+{ oid => '3654', descr => 'GiST tsvector support',
+  proname => 'gtsvector_consistent', prorettype => 'bool',
+  proargtypes => 'internal tsvector int2 oid internal',
+  prosrc => 'gtsvector_consistent' },
+{ oid => '3790', descr => 'GiST tsvector support (obsolete)',
+  proname => 'gtsvector_consistent', prorettype => 'bool',
+  proargtypes => 'internal gtsvector int4 oid internal',
+  prosrc => 'gtsvector_consistent_oldsig' },
+
+{ oid => '3656', descr => 'GIN tsvector support',
+  proname => 'gin_extract_tsvector', prorettype => 'internal',
+  proargtypes => 'tsvector internal internal',
+  prosrc => 'gin_extract_tsvector' },
+{ oid => '3657', descr => 'GIN tsvector support',
+  proname => 'gin_extract_tsquery', prorettype => 'internal',
+  proargtypes => 'tsvector internal int2 internal internal internal internal',
+  prosrc => 'gin_extract_tsquery' },
+{ oid => '3658', descr => 'GIN tsvector support',
+  proname => 'gin_tsquery_consistent', prorettype => 'bool',
+  proargtypes => 'internal int2 tsvector int4 internal internal internal internal',
+  prosrc => 'gin_tsquery_consistent' },
+{ oid => '3921', descr => 'GIN tsvector support',
+  proname => 'gin_tsquery_triconsistent', prorettype => 'char',
+  proargtypes => 'internal int2 tsvector int4 internal internal internal',
+  prosrc => 'gin_tsquery_triconsistent' },
+{ oid => '3724', descr => 'GIN tsvector support',
+  proname => 'gin_cmp_tslexeme', prorettype => 'int4',
+  proargtypes => 'text text', prosrc => 'gin_cmp_tslexeme' },
+{ oid => '2700', descr => 'GIN tsvector support',
+  proname => 'gin_cmp_prefix', prorettype => 'int4',
+  proargtypes => 'text text int2 internal', prosrc => 'gin_cmp_prefix' },
+{ oid => '3077', descr => 'GIN tsvector support (obsolete)',
+  proname => 'gin_extract_tsvector', prorettype => 'internal',
+  proargtypes => 'tsvector internal', prosrc => 'gin_extract_tsvector_2args' },
+{ oid => '3087', descr => 'GIN tsvector support (obsolete)',
+  proname => 'gin_extract_tsquery', prorettype => 'internal',
+  proargtypes => 'tsquery internal int2 internal internal',
+  prosrc => 'gin_extract_tsquery_5args' },
+{ oid => '3088', descr => 'GIN tsvector support (obsolete)',
+  proname => 'gin_tsquery_consistent', prorettype => 'bool',
+  proargtypes => 'internal int2 tsquery int4 internal internal',
+  prosrc => 'gin_tsquery_consistent_6args' },
+{ oid => '3791', descr => 'GIN tsvector support (obsolete)',
+  proname => 'gin_extract_tsquery', prorettype => 'internal',
+  proargtypes => 'tsquery internal int2 internal internal internal internal',
+  prosrc => 'gin_extract_tsquery_oldsig' },
+{ oid => '3792', descr => 'GIN tsvector support (obsolete)',
+  proname => 'gin_tsquery_consistent', prorettype => 'bool',
+  proargtypes => 'internal int2 tsquery int4 internal internal internal internal',
+  prosrc => 'gin_tsquery_consistent_oldsig' },
+
+{ oid => '3789', descr => 'clean up GIN pending list',
+  proname => 'gin_clean_pending_list', provolatile => 'v', proparallel => 'u',
+  prorettype => 'int8', proargtypes => 'regclass',
+  prosrc => 'gin_clean_pending_list' },
+
+{ oid => '3662',
+  proname => 'tsquery_lt', prorettype => 'bool',
+  proargtypes => 'tsquery tsquery', prosrc => 'tsquery_lt' },
+{ oid => '3663',
+  proname => 'tsquery_le', prorettype => 'bool',
+  proargtypes => 'tsquery tsquery', prosrc => 'tsquery_le' },
+{ oid => '3664',
+  proname => 'tsquery_eq', prorettype => 'bool',
+  proargtypes => 'tsquery tsquery', prosrc => 'tsquery_eq' },
+{ oid => '3665',
+  proname => 'tsquery_ne', prorettype => 'bool',
+  proargtypes => 'tsquery tsquery', prosrc => 'tsquery_ne' },
+{ oid => '3666',
+  proname => 'tsquery_ge', prorettype => 'bool',
+  proargtypes => 'tsquery tsquery', prosrc => 'tsquery_ge' },
+{ oid => '3667',
+  proname => 'tsquery_gt', prorettype => 'bool',
+  proargtypes => 'tsquery tsquery', prosrc => 'tsquery_gt' },
+{ oid => '3668', descr => 'less-equal-greater',
+  proname => 'tsquery_cmp', prorettype => 'int4',
+  proargtypes => 'tsquery tsquery', prosrc => 'tsquery_cmp' },
+
+{ oid => '3669',
+  proname => 'tsquery_and', prorettype => 'tsquery',
+  proargtypes => 'tsquery tsquery', prosrc => 'tsquery_and' },
+{ oid => '3670',
+  proname => 'tsquery_or', prorettype => 'tsquery',
+  proargtypes => 'tsquery tsquery', prosrc => 'tsquery_or' },
+{ oid => '5003',
+  proname => 'tsquery_phrase', prorettype => 'tsquery',
+  proargtypes => 'tsquery tsquery', prosrc => 'tsquery_phrase' },
+{ oid => '5004', descr => 'phrase-concatenate with distance',
+  proname => 'tsquery_phrase', prorettype => 'tsquery',
+  proargtypes => 'tsquery tsquery int4', prosrc => 'tsquery_phrase_distance' },
+{ oid => '3671',
+  proname => 'tsquery_not', prorettype => 'tsquery', proargtypes => 'tsquery',
+  prosrc => 'tsquery_not' },
+
+{ oid => '3691',
+  proname => 'tsq_mcontains', prorettype => 'bool',
+  proargtypes => 'tsquery tsquery', prosrc => 'tsq_mcontains' },
+{ oid => '3692',
+  proname => 'tsq_mcontained', prorettype => 'bool',
+  proargtypes => 'tsquery tsquery', prosrc => 'tsq_mcontained' },
+
+{ oid => '3672', descr => 'number of nodes',
+  proname => 'numnode', prorettype => 'int4', proargtypes => 'tsquery',
+  prosrc => 'tsquery_numnode' },
+{ oid => '3673', descr => 'show real useful query for GiST index',
+  proname => 'querytree', prorettype => 'text', proargtypes => 'tsquery',
+  prosrc => 'tsquerytree' },
+
+{ oid => '3684', descr => 'rewrite tsquery',
+  proname => 'ts_rewrite', prorettype => 'tsquery',
+  proargtypes => 'tsquery tsquery tsquery', prosrc => 'tsquery_rewrite' },
+{ oid => '3685', descr => 'rewrite tsquery',
+  proname => 'ts_rewrite', procost => '100', provolatile => 'v',
+  proparallel => 'u', prorettype => 'tsquery', proargtypes => 'tsquery text',
+  prosrc => 'tsquery_rewrite_query' },
+
+{ oid => '3695', descr => 'GiST tsquery support',
+  proname => 'gtsquery_compress', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'gtsquery_compress' },
+{ oid => '3697', descr => 'GiST tsquery support',
+  proname => 'gtsquery_picksplit', prorettype => 'internal',
+  proargtypes => 'internal internal', prosrc => 'gtsquery_picksplit' },
+{ oid => '3698', descr => 'GiST tsquery support',
+  proname => 'gtsquery_union', prorettype => 'int8',
+  proargtypes => 'internal internal', prosrc => 'gtsquery_union' },
+{ oid => '3699', descr => 'GiST tsquery support',
+  proname => 'gtsquery_same', prorettype => 'internal',
+  proargtypes => 'int8 int8 internal', prosrc => 'gtsquery_same' },
+{ oid => '3700', descr => 'GiST tsquery support',
+  proname => 'gtsquery_penalty', prorettype => 'internal',
+  proargtypes => 'internal internal internal', prosrc => 'gtsquery_penalty' },
+{ oid => '3701', descr => 'GiST tsquery support',
+  proname => 'gtsquery_consistent', prorettype => 'bool',
+  proargtypes => 'internal tsquery int2 oid internal',
+  prosrc => 'gtsquery_consistent' },
+{ oid => '3793', descr => 'GiST tsquery support (obsolete)',
+  proname => 'gtsquery_consistent', prorettype => 'bool',
+  proargtypes => 'internal internal int4 oid internal',
+  prosrc => 'gtsquery_consistent_oldsig' },
+
+{ oid => '3686', descr => 'restriction selectivity of tsvector @@ tsquery',
+  proname => 'tsmatchsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'tsmatchsel' },
+{ oid => '3687', descr => 'join selectivity of tsvector @@ tsquery',
+  proname => 'tsmatchjoinsel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int2 internal',
+  prosrc => 'tsmatchjoinsel' },
+{ oid => '3688', descr => 'tsvector typanalyze',
+  proname => 'ts_typanalyze', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'internal', prosrc => 'ts_typanalyze' },
+
+{ oid => '3689', descr => 'statistics of tsvector column',
+  proname => 'ts_stat', procost => '10', prorows => '10000', proretset => 't',
+  provolatile => 'v', proparallel => 'u', prorettype => 'record',
+  proargtypes => 'text', proallargtypes => '{text,text,int4,int4}',
+  proargmodes => '{i,o,o,o}', proargnames => '{query,word,ndoc,nentry}',
+  prosrc => 'ts_stat1' },
+{ oid => '3690', descr => 'statistics of tsvector column',
+  proname => 'ts_stat', procost => '10', prorows => '10000', proretset => 't',
+  provolatile => 'v', proparallel => 'u', prorettype => 'record',
+  proargtypes => 'text text', proallargtypes => '{text,text,text,int4,int4}',
+  proargmodes => '{i,i,o,o,o}',
+  proargnames => '{query,weights,word,ndoc,nentry}', prosrc => 'ts_stat2' },
+
+{ oid => '3703', descr => 'relevance',
+  proname => 'ts_rank', prorettype => 'float4',
+  proargtypes => '_float4 tsvector tsquery int4', prosrc => 'ts_rank_wttf' },
+{ oid => '3704', descr => 'relevance',
+  proname => 'ts_rank', prorettype => 'float4',
+  proargtypes => '_float4 tsvector tsquery', prosrc => 'ts_rank_wtt' },
+{ oid => '3705', descr => 'relevance',
+  proname => 'ts_rank', prorettype => 'float4',
+  proargtypes => 'tsvector tsquery int4', prosrc => 'ts_rank_ttf' },
+{ oid => '3706', descr => 'relevance',
+  proname => 'ts_rank', prorettype => 'float4',
+  proargtypes => 'tsvector tsquery', prosrc => 'ts_rank_tt' },
+{ oid => '3707', descr => 'relevance',
+  proname => 'ts_rank_cd', prorettype => 'float4',
+  proargtypes => '_float4 tsvector tsquery int4', prosrc => 'ts_rankcd_wttf' },
+{ oid => '3708', descr => 'relevance',
+  proname => 'ts_rank_cd', prorettype => 'float4',
+  proargtypes => '_float4 tsvector tsquery', prosrc => 'ts_rankcd_wtt' },
+{ oid => '3709', descr => 'relevance',
+  proname => 'ts_rank_cd', prorettype => 'float4',
+  proargtypes => 'tsvector tsquery int4', prosrc => 'ts_rankcd_ttf' },
+{ oid => '3710', descr => 'relevance',
+  proname => 'ts_rank_cd', prorettype => 'float4',
+  proargtypes => 'tsvector tsquery', prosrc => 'ts_rankcd_tt' },
+
+{ oid => '3713', descr => 'get parser\'s token types',
+  proname => 'ts_token_type', prorows => '16', proretset => 't',
+  prorettype => 'record', proargtypes => 'oid',
+  proallargtypes => '{oid,int4,text,text}', proargmodes => '{i,o,o,o}',
+  proargnames => '{parser_oid,tokid,alias,description}',
+  prosrc => 'ts_token_type_byid' },
+{ oid => '3714', descr => 'get parser\'s token types',
+  proname => 'ts_token_type', prorows => '16', proretset => 't',
+  provolatile => 's', prorettype => 'record', proargtypes => 'text',
+  proallargtypes => '{text,int4,text,text}', proargmodes => '{i,o,o,o}',
+  proargnames => '{parser_name,tokid,alias,description}',
+  prosrc => 'ts_token_type_byname' },
+{ oid => '3715', descr => 'parse text to tokens',
+  proname => 'ts_parse', prorows => '1000', proretset => 't',
+  prorettype => 'record', proargtypes => 'oid text',
+  proallargtypes => '{oid,text,int4,text}', proargmodes => '{i,i,o,o}',
+  proargnames => '{parser_oid,txt,tokid,token}', prosrc => 'ts_parse_byid' },
+{ oid => '3716', descr => 'parse text to tokens',
+  proname => 'ts_parse', prorows => '1000', proretset => 't',
+  provolatile => 's', prorettype => 'record', proargtypes => 'text text',
+  proallargtypes => '{text,text,int4,text}', proargmodes => '{i,i,o,o}',
+  proargnames => '{parser_name,txt,tokid,token}', prosrc => 'ts_parse_byname' },
+
+{ oid => '3717', descr => '(internal)',
+  proname => 'prsd_start', prorettype => 'internal',
+  proargtypes => 'internal int4', prosrc => 'prsd_start' },
+{ oid => '3718', descr => '(internal)',
+  proname => 'prsd_nexttoken', prorettype => 'internal',
+  proargtypes => 'internal internal internal', prosrc => 'prsd_nexttoken' },
+{ oid => '3719', descr => '(internal)',
+  proname => 'prsd_end', prorettype => 'void', proargtypes => 'internal',
+  prosrc => 'prsd_end' },
+{ oid => '3720', descr => '(internal)',
+  proname => 'prsd_headline', prorettype => 'internal',
+  proargtypes => 'internal internal tsquery', prosrc => 'prsd_headline' },
+{ oid => '3721', descr => '(internal)',
+  proname => 'prsd_lextype', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'prsd_lextype' },
+
+{ oid => '3723', descr => 'normalize one word by dictionary',
+  proname => 'ts_lexize', prorettype => '_text',
+  proargtypes => 'regdictionary text', prosrc => 'ts_lexize' },
+
+{ oid => '3725', descr => '(internal)',
+  proname => 'dsimple_init', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'dsimple_init' },
+{ oid => '3726', descr => '(internal)',
+  proname => 'dsimple_lexize', prorettype => 'internal',
+  proargtypes => 'internal internal internal internal',
+  prosrc => 'dsimple_lexize' },
+
+{ oid => '3728', descr => '(internal)',
+  proname => 'dsynonym_init', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'dsynonym_init' },
+{ oid => '3729', descr => '(internal)',
+  proname => 'dsynonym_lexize', prorettype => 'internal',
+  proargtypes => 'internal internal internal internal',
+  prosrc => 'dsynonym_lexize' },
+
+{ oid => '3731', descr => '(internal)',
+  proname => 'dispell_init', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'dispell_init' },
+{ oid => '3732', descr => '(internal)',
+  proname => 'dispell_lexize', prorettype => 'internal',
+  proargtypes => 'internal internal internal internal',
+  prosrc => 'dispell_lexize' },
+
+{ oid => '3740', descr => '(internal)',
+  proname => 'thesaurus_init', prorettype => 'internal',
+  proargtypes => 'internal', prosrc => 'thesaurus_init' },
+{ oid => '3741', descr => '(internal)',
+  proname => 'thesaurus_lexize', prorettype => 'internal',
+  proargtypes => 'internal internal internal internal',
+  prosrc => 'thesaurus_lexize' },
+
+{ oid => '3743', descr => 'generate headline',
+  proname => 'ts_headline', procost => '100', prorettype => 'text',
+  proargtypes => 'regconfig text tsquery text',
+  prosrc => 'ts_headline_byid_opt' },
+{ oid => '3744', descr => 'generate headline',
+  proname => 'ts_headline', procost => '100', prorettype => 'text',
+  proargtypes => 'regconfig text tsquery', prosrc => 'ts_headline_byid' },
+{ oid => '3754', descr => 'generate headline',
+  proname => 'ts_headline', procost => '100', provolatile => 's',
+  prorettype => 'text', proargtypes => 'text tsquery text',
+  prosrc => 'ts_headline_opt' },
+{ oid => '3755', descr => 'generate headline',
+  proname => 'ts_headline', procost => '100', provolatile => 's',
+  prorettype => 'text', proargtypes => 'text tsquery',
+  prosrc => 'ts_headline' },
+
+{ oid => '4201', descr => 'generate headline from jsonb',
+  proname => 'ts_headline', procost => '100', prorettype => 'jsonb',
+  proargtypes => 'regconfig jsonb tsquery text',
+  prosrc => 'ts_headline_jsonb_byid_opt' },
+{ oid => '4202', descr => 'generate headline from jsonb',
+  proname => 'ts_headline', procost => '100', prorettype => 'jsonb',
+  proargtypes => 'regconfig jsonb tsquery',
+  prosrc => 'ts_headline_jsonb_byid' },
+{ oid => '4203', descr => 'generate headline from jsonb',
+  proname => 'ts_headline', procost => '100', provolatile => 's',
+  prorettype => 'jsonb', proargtypes => 'jsonb tsquery text',
+  prosrc => 'ts_headline_jsonb_opt' },
+{ oid => '4204', descr => 'generate headline from jsonb',
+  proname => 'ts_headline', procost => '100', provolatile => 's',
+  prorettype => 'jsonb', proargtypes => 'jsonb tsquery',
+  prosrc => 'ts_headline_jsonb' },
+
+{ oid => '4205', descr => 'generate headline from json',
+  proname => 'ts_headline', procost => '100', prorettype => 'json',
+  proargtypes => 'regconfig json tsquery text',
+  prosrc => 'ts_headline_json_byid_opt' },
+{ oid => '4206', descr => 'generate headline from json',
+  proname => 'ts_headline', procost => '100', prorettype => 'json',
+  proargtypes => 'regconfig json tsquery', prosrc => 'ts_headline_json_byid' },
+{ oid => '4207', descr => 'generate headline from json',
+  proname => 'ts_headline', procost => '100', provolatile => 's',
+  prorettype => 'json', proargtypes => 'json tsquery text',
+  prosrc => 'ts_headline_json_opt' },
+{ oid => '4208', descr => 'generate headline from json',
+  proname => 'ts_headline', procost => '100', provolatile => 's',
+  prorettype => 'json', proargtypes => 'json tsquery',
+  prosrc => 'ts_headline_json' },
+
+{ oid => '3745', descr => 'transform to tsvector',
+  proname => 'to_tsvector', procost => '100', prorettype => 'tsvector',
+  proargtypes => 'regconfig text', prosrc => 'to_tsvector_byid' },
+{ oid => '3746', descr => 'make tsquery',
+  proname => 'to_tsquery', procost => '100', prorettype => 'tsquery',
+  proargtypes => 'regconfig text', prosrc => 'to_tsquery_byid' },
+{ oid => '3747', descr => 'transform to tsquery',
+  proname => 'plainto_tsquery', procost => '100', prorettype => 'tsquery',
+  proargtypes => 'regconfig text', prosrc => 'plainto_tsquery_byid' },
+{ oid => '5006', descr => 'transform to tsquery',
+  proname => 'phraseto_tsquery', procost => '100', prorettype => 'tsquery',
+  proargtypes => 'regconfig text', prosrc => 'phraseto_tsquery_byid' },
+{ oid => '8889', descr => 'transform to tsquery',
+  proname => 'websearch_to_tsquery', procost => '100', prorettype => 'tsquery',
+  proargtypes => 'regconfig text', prosrc => 'websearch_to_tsquery_byid' },
+{ oid => '3749', descr => 'transform to tsvector',
+  proname => 'to_tsvector', procost => '100', provolatile => 's',
+  prorettype => 'tsvector', proargtypes => 'text', prosrc => 'to_tsvector' },
+{ oid => '3750', descr => 'make tsquery',
+  proname => 'to_tsquery', procost => '100', provolatile => 's',
+  prorettype => 'tsquery', proargtypes => 'text', prosrc => 'to_tsquery' },
+{ oid => '3751', descr => 'transform to tsquery',
+  proname => 'plainto_tsquery', procost => '100', provolatile => 's',
+  prorettype => 'tsquery', proargtypes => 'text', prosrc => 'plainto_tsquery' },
+{ oid => '5001', descr => 'transform to tsquery',
+  proname => 'phraseto_tsquery', procost => '100', provolatile => 's',
+  prorettype => 'tsquery', proargtypes => 'text',
+  prosrc => 'phraseto_tsquery' },
+{ oid => '8890', descr => 'transform to tsquery',
+  proname => 'websearch_to_tsquery', procost => '100', provolatile => 's',
+  prorettype => 'tsquery', proargtypes => 'text',
+  prosrc => 'websearch_to_tsquery' },
+{ oid => '4209', descr => 'transform string values from jsonb to tsvector',
+  proname => 'to_tsvector', procost => '100', provolatile => 's',
+  prorettype => 'tsvector', proargtypes => 'jsonb',
+  prosrc => 'jsonb_string_to_tsvector' },
+{ oid => '4213', descr => 'transform specified values from jsonb to tsvector',
+  proname => 'jsonb_to_tsvector', procost => '100', provolatile => 's',
+  prorettype => 'tsvector', proargtypes => 'jsonb jsonb',
+  prosrc => 'jsonb_to_tsvector' },
+{ oid => '4210', descr => 'transform string values from json to tsvector',
+  proname => 'to_tsvector', procost => '100', provolatile => 's',
+  prorettype => 'tsvector', proargtypes => 'json',
+  prosrc => 'json_string_to_tsvector' },
+{ oid => '4215', descr => 'transform specified values from json to tsvector',
+  proname => 'json_to_tsvector', procost => '100', provolatile => 's',
+  prorettype => 'tsvector', proargtypes => 'json jsonb',
+  prosrc => 'json_to_tsvector' },
+{ oid => '4211', descr => 'transform string values from jsonb to tsvector',
+  proname => 'to_tsvector', procost => '100', prorettype => 'tsvector',
+  proargtypes => 'regconfig jsonb', prosrc => 'jsonb_string_to_tsvector_byid' },
+{ oid => '4214', descr => 'transform specified values from jsonb to tsvector',
+  proname => 'jsonb_to_tsvector', procost => '100', prorettype => 'tsvector',
+  proargtypes => 'regconfig jsonb jsonb', prosrc => 'jsonb_to_tsvector_byid' },
+{ oid => '4212', descr => 'transform string values from json to tsvector',
+  proname => 'to_tsvector', procost => '100', prorettype => 'tsvector',
+  proargtypes => 'regconfig json', prosrc => 'json_string_to_tsvector_byid' },
+{ oid => '4216', descr => 'transform specified values from json to tsvector',
+  proname => 'json_to_tsvector', procost => '100', prorettype => 'tsvector',
+  proargtypes => 'regconfig json jsonb', prosrc => 'json_to_tsvector_byid' },
+
+{ oid => '3752', descr => 'trigger for automatic update of tsvector column',
+  proname => 'tsvector_update_trigger', proisstrict => 'f', provolatile => 'v',
+  prorettype => 'trigger', proargtypes => '',
+  prosrc => 'tsvector_update_trigger_byid' },
+{ oid => '3753', descr => 'trigger for automatic update of tsvector column',
+  proname => 'tsvector_update_trigger_column', proisstrict => 'f',
+  provolatile => 'v', prorettype => 'trigger', proargtypes => '',
+  prosrc => 'tsvector_update_trigger_bycolumn' },
+
+{ oid => '3759', descr => 'get current tsearch configuration',
+  proname => 'get_current_ts_config', provolatile => 's',
+  prorettype => 'regconfig', proargtypes => '',
+  prosrc => 'get_current_ts_config' },
+
+{ oid => '3736', descr => 'I/O',
+  proname => 'regconfigin', provolatile => 's', prorettype => 'regconfig',
+  proargtypes => 'cstring', prosrc => 'regconfigin' },
+{ oid => '3737', descr => 'I/O',
+  proname => 'regconfigout', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'regconfig', prosrc => 'regconfigout' },
+{ oid => '3738', descr => 'I/O',
+  proname => 'regconfigrecv', prorettype => 'regconfig',
+  proargtypes => 'internal', prosrc => 'regconfigrecv' },
+{ oid => '3739', descr => 'I/O',
+  proname => 'regconfigsend', prorettype => 'bytea', proargtypes => 'regconfig',
+  prosrc => 'regconfigsend' },
+
+{ oid => '3771', descr => 'I/O',
+  proname => 'regdictionaryin', provolatile => 's',
+  prorettype => 'regdictionary', proargtypes => 'cstring',
+  prosrc => 'regdictionaryin' },
+{ oid => '3772', descr => 'I/O',
+  proname => 'regdictionaryout', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'regdictionary', prosrc => 'regdictionaryout' },
+{ oid => '3773', descr => 'I/O',
+  proname => 'regdictionaryrecv', prorettype => 'regdictionary',
+  proargtypes => 'internal', prosrc => 'regdictionaryrecv' },
+{ oid => '3774', descr => 'I/O',
+  proname => 'regdictionarysend', prorettype => 'bytea',
+  proargtypes => 'regdictionary', prosrc => 'regdictionarysend' },
+
+# jsonb
+{ oid => '3806', descr => 'I/O',
+  proname => 'jsonb_in', prorettype => 'jsonb', proargtypes => 'cstring',
+  prosrc => 'jsonb_in' },
+{ oid => '3805', descr => 'I/O',
+  proname => 'jsonb_recv', prorettype => 'jsonb', proargtypes => 'internal',
+  prosrc => 'jsonb_recv' },
+{ oid => '3804', descr => 'I/O',
+  proname => 'jsonb_out', prorettype => 'cstring', proargtypes => 'jsonb',
+  prosrc => 'jsonb_out' },
+{ oid => '3803', descr => 'I/O',
+  proname => 'jsonb_send', prorettype => 'bytea', proargtypes => 'jsonb',
+  prosrc => 'jsonb_send' },
+
+{ oid => '3263', descr => 'map text array of key value pairs to jsonb object',
+  proname => 'jsonb_object', prorettype => 'jsonb', proargtypes => '_text',
+  prosrc => 'jsonb_object' },
+{ oid => '3264', descr => 'map text array of key value pairs to jsonb object',
+  proname => 'jsonb_object', prorettype => 'jsonb',
+  proargtypes => '_text _text', prosrc => 'jsonb_object_two_arg' },
+{ oid => '3787', descr => 'map input to jsonb',
+  proname => 'to_jsonb', provolatile => 's', prorettype => 'jsonb',
+  proargtypes => 'anyelement', prosrc => 'to_jsonb' },
+{ oid => '3265', descr => 'jsonb aggregate transition function',
+  proname => 'jsonb_agg_transfn', proisstrict => 'f', provolatile => 's',
+  prorettype => 'internal', proargtypes => 'internal anyelement',
+  prosrc => 'jsonb_agg_transfn' },
+{ oid => '3266', descr => 'jsonb aggregate final function',
+  proname => 'jsonb_agg_finalfn', proisstrict => 'f', provolatile => 's',
+  prorettype => 'jsonb', proargtypes => 'internal',
+  prosrc => 'jsonb_agg_finalfn' },
+{ oid => '3267', descr => 'aggregate input into jsonb',
+  proname => 'jsonb_agg', prokind => 'a', proisstrict => 'f',
+  provolatile => 's', prorettype => 'jsonb', proargtypes => 'anyelement',
+  prosrc => 'aggregate_dummy' },
+{ oid => '3268', descr => 'jsonb object aggregate transition function',
+  proname => 'jsonb_object_agg_transfn', proisstrict => 'f', provolatile => 's',
+  prorettype => 'internal', proargtypes => 'internal any any',
+  prosrc => 'jsonb_object_agg_transfn' },
+{ oid => '3269', descr => 'jsonb object aggregate final function',
+  proname => 'jsonb_object_agg_finalfn', proisstrict => 'f', provolatile => 's',
+  prorettype => 'jsonb', proargtypes => 'internal',
+  prosrc => 'jsonb_object_agg_finalfn' },
+{ oid => '3270', descr => 'aggregate inputs into jsonb object',
+  proname => 'jsonb_object_agg', prokind => 'a', proisstrict => 'f',
+  prorettype => 'jsonb', proargtypes => 'any any',
+  prosrc => 'aggregate_dummy' },
+{ oid => '3271', descr => 'build a jsonb array from any inputs',
+  proname => 'jsonb_build_array', provariadic => 'any', proisstrict => 'f',
+  provolatile => 's', prorettype => 'jsonb', proargtypes => 'any',
+  proallargtypes => '{any}', proargmodes => '{v}',
+  prosrc => 'jsonb_build_array' },
+{ oid => '3272', descr => 'build an empty jsonb array',
+  proname => 'jsonb_build_array', proisstrict => 'f', provolatile => 's',
+  prorettype => 'jsonb', proargtypes => '',
+  prosrc => 'jsonb_build_array_noargs' },
+{ oid => '3273',
+  descr => 'build a jsonb object from pairwise key/value inputs',
+  proname => 'jsonb_build_object', provariadic => 'any', proisstrict => 'f',
+  provolatile => 's', prorettype => 'jsonb', proargtypes => 'any',
+  proallargtypes => '{any}', proargmodes => '{v}',
+  prosrc => 'jsonb_build_object' },
+{ oid => '3274', descr => 'build an empty jsonb object',
+  proname => 'jsonb_build_object', proisstrict => 'f', provolatile => 's',
+  prorettype => 'jsonb', proargtypes => '',
+  prosrc => 'jsonb_build_object_noargs' },
+{ oid => '3262', descr => 'remove object fields with null values from jsonb',
+  proname => 'jsonb_strip_nulls', prorettype => 'jsonb', proargtypes => 'jsonb',
+  prosrc => 'jsonb_strip_nulls' },
+
+{ oid => '3478',
+  proname => 'jsonb_object_field', prorettype => 'jsonb',
+  proargtypes => 'jsonb text', proargnames => '{from_json, field_name}',
+  prosrc => 'jsonb_object_field' },
+{ oid => '3214',
+  proname => 'jsonb_object_field_text', prorettype => 'text',
+  proargtypes => 'jsonb text', proargnames => '{from_json, field_name}',
+  prosrc => 'jsonb_object_field_text' },
+{ oid => '3215',
+  proname => 'jsonb_array_element', prorettype => 'jsonb',
+  proargtypes => 'jsonb int4', proargnames => '{from_json, element_index}',
+  prosrc => 'jsonb_array_element' },
+{ oid => '3216',
+  proname => 'jsonb_array_element_text', prorettype => 'text',
+  proargtypes => 'jsonb int4', proargnames => '{from_json, element_index}',
+  prosrc => 'jsonb_array_element_text' },
+{ oid => '3217', descr => 'get value from jsonb with path elements',
+  proname => 'jsonb_extract_path', provariadic => 'text', prorettype => 'jsonb',
+  proargtypes => 'jsonb _text', proallargtypes => '{jsonb,_text}',
+  proargmodes => '{i,v}', proargnames => '{from_json,path_elems}',
+  prosrc => 'jsonb_extract_path' },
+{ oid => '3940', descr => 'get value from jsonb as text with path elements',
+  proname => 'jsonb_extract_path_text', provariadic => 'text',
+  prorettype => 'text', proargtypes => 'jsonb _text',
+  proallargtypes => '{jsonb,_text}', proargmodes => '{i,v}',
+  proargnames => '{from_json,path_elems}',
+  prosrc => 'jsonb_extract_path_text' },
+{ oid => '3219', descr => 'elements of a jsonb array',
+  proname => 'jsonb_array_elements', prorows => '100', proretset => 't',
+  prorettype => 'jsonb', proargtypes => 'jsonb',
+  proallargtypes => '{jsonb,jsonb}', proargmodes => '{i,o}',
+  proargnames => '{from_json,value}', prosrc => 'jsonb_array_elements' },
+{ oid => '3465', descr => 'elements of jsonb array',
+  proname => 'jsonb_array_elements_text', prorows => '100', proretset => 't',
+  prorettype => 'text', proargtypes => 'jsonb',
+  proallargtypes => '{jsonb,text}', proargmodes => '{i,o}',
+  proargnames => '{from_json,value}', prosrc => 'jsonb_array_elements_text' },
+{ oid => '3207', descr => 'length of jsonb array',
+  proname => 'jsonb_array_length', prorettype => 'int4', proargtypes => 'jsonb',
+  prosrc => 'jsonb_array_length' },
+{ oid => '3931', descr => 'get jsonb object keys',
+  proname => 'jsonb_object_keys', prorows => '100', proretset => 't',
+  prorettype => 'text', proargtypes => 'jsonb', prosrc => 'jsonb_object_keys' },
+{ oid => '3208', descr => 'key value pairs of a jsonb object',
+  proname => 'jsonb_each', prorows => '100', proretset => 't',
+  prorettype => 'record', proargtypes => 'jsonb',
+  proallargtypes => '{jsonb,text,jsonb}', proargmodes => '{i,o,o}',
+  proargnames => '{from_json,key,value}', prosrc => 'jsonb_each' },
+{ oid => '3932', descr => 'key value pairs of a jsonb object',
+  proname => 'jsonb_each_text', prorows => '100', proretset => 't',
+  prorettype => 'record', proargtypes => 'jsonb',
+  proallargtypes => '{jsonb,text,text}', proargmodes => '{i,o,o}',
+  proargnames => '{from_json,key,value}', prosrc => 'jsonb_each_text' },
+{ oid => '3209', descr => 'get record fields from a jsonb object',
+  proname => 'jsonb_populate_record', proisstrict => 'f', provolatile => 's',
+  prorettype => 'anyelement', proargtypes => 'anyelement jsonb',
+  prosrc => 'jsonb_populate_record' },
+{ oid => '3475',
+  descr => 'get set of records with fields from a jsonb array of objects',
+  proname => 'jsonb_populate_recordset', prorows => '100', proisstrict => 'f',
+  proretset => 't', provolatile => 's', prorettype => 'anyelement',
+  proargtypes => 'anyelement jsonb', prosrc => 'jsonb_populate_recordset' },
+{ oid => '3490', descr => 'get record fields from a jsonb object',
+  proname => 'jsonb_to_record', provolatile => 's', prorettype => 'record',
+  proargtypes => 'jsonb', prosrc => 'jsonb_to_record' },
+{ oid => '3491',
+  descr => 'get set of records with fields from a jsonb array of objects',
+  proname => 'jsonb_to_recordset', prorows => '100', proisstrict => 'f',
+  proretset => 't', provolatile => 's', prorettype => 'record',
+  proargtypes => 'jsonb', prosrc => 'jsonb_to_recordset' },
+{ oid => '3210', descr => 'get the type of a jsonb value',
+  proname => 'jsonb_typeof', prorettype => 'text', proargtypes => 'jsonb',
+  prosrc => 'jsonb_typeof' },
+{ oid => '4038',
+  proname => 'jsonb_ne', prorettype => 'bool', proargtypes => 'jsonb jsonb',
+  prosrc => 'jsonb_ne' },
+{ oid => '4039',
+  proname => 'jsonb_lt', prorettype => 'bool', proargtypes => 'jsonb jsonb',
+  prosrc => 'jsonb_lt' },
+{ oid => '4040',
+  proname => 'jsonb_gt', prorettype => 'bool', proargtypes => 'jsonb jsonb',
+  prosrc => 'jsonb_gt' },
+{ oid => '4041',
+  proname => 'jsonb_le', prorettype => 'bool', proargtypes => 'jsonb jsonb',
+  prosrc => 'jsonb_le' },
+{ oid => '4042',
+  proname => 'jsonb_ge', prorettype => 'bool', proargtypes => 'jsonb jsonb',
+  prosrc => 'jsonb_ge' },
+{ oid => '4043',
+  proname => 'jsonb_eq', prorettype => 'bool', proargtypes => 'jsonb jsonb',
+  prosrc => 'jsonb_eq' },
+{ oid => '4044', descr => 'less-equal-greater',
+  proname => 'jsonb_cmp', prorettype => 'int4', proargtypes => 'jsonb jsonb',
+  prosrc => 'jsonb_cmp' },
+{ oid => '4045', descr => 'hash',
+  proname => 'jsonb_hash', prorettype => 'int4', proargtypes => 'jsonb',
+  prosrc => 'jsonb_hash' },
+{ oid => '3416', descr => 'hash',
+  proname => 'jsonb_hash_extended', prorettype => 'int8',
+  proargtypes => 'jsonb int8', prosrc => 'jsonb_hash_extended' },
+{ oid => '4046',
+  proname => 'jsonb_contains', prorettype => 'bool',
+  proargtypes => 'jsonb jsonb', prosrc => 'jsonb_contains' },
+{ oid => '4047',
+  proname => 'jsonb_exists', prorettype => 'bool', proargtypes => 'jsonb text',
+  prosrc => 'jsonb_exists' },
+{ oid => '4048',
+  proname => 'jsonb_exists_any', prorettype => 'bool',
+  proargtypes => 'jsonb _text', prosrc => 'jsonb_exists_any' },
+{ oid => '4049',
+  proname => 'jsonb_exists_all', prorettype => 'bool',
+  proargtypes => 'jsonb _text', prosrc => 'jsonb_exists_all' },
+{ oid => '4050',
+  proname => 'jsonb_contained', prorettype => 'bool',
+  proargtypes => 'jsonb jsonb', prosrc => 'jsonb_contained' },
+{ oid => '3480', descr => 'GIN support',
+  proname => 'gin_compare_jsonb', prorettype => 'int4',
+  proargtypes => 'text text', prosrc => 'gin_compare_jsonb' },
+{ oid => '3482', descr => 'GIN support',
+  proname => 'gin_extract_jsonb', prorettype => 'internal',
+  proargtypes => 'jsonb internal internal', prosrc => 'gin_extract_jsonb' },
+{ oid => '3483', descr => 'GIN support',
+  proname => 'gin_extract_jsonb_query', prorettype => 'internal',
+  proargtypes => 'jsonb internal int2 internal internal internal internal',
+  prosrc => 'gin_extract_jsonb_query' },
+{ oid => '3484', descr => 'GIN support',
+  proname => 'gin_consistent_jsonb', prorettype => 'bool',
+  proargtypes => 'internal int2 jsonb int4 internal internal internal internal',
+  prosrc => 'gin_consistent_jsonb' },
+{ oid => '3488', descr => 'GIN support',
+  proname => 'gin_triconsistent_jsonb', prorettype => 'char',
+  proargtypes => 'internal int2 jsonb int4 internal internal internal',
+  prosrc => 'gin_triconsistent_jsonb' },
+{ oid => '3485', descr => 'GIN support',
+  proname => 'gin_extract_jsonb_path', prorettype => 'internal',
+  proargtypes => 'jsonb internal internal',
+  prosrc => 'gin_extract_jsonb_path' },
+{ oid => '3486', descr => 'GIN support',
+  proname => 'gin_extract_jsonb_query_path', prorettype => 'internal',
+  proargtypes => 'jsonb internal int2 internal internal internal internal',
+  prosrc => 'gin_extract_jsonb_query_path' },
+{ oid => '3487', descr => 'GIN support',
+  proname => 'gin_consistent_jsonb_path', prorettype => 'bool',
+  proargtypes => 'internal int2 jsonb int4 internal internal internal internal',
+  prosrc => 'gin_consistent_jsonb_path' },
+{ oid => '3489', descr => 'GIN support',
+  proname => 'gin_triconsistent_jsonb_path', prorettype => 'char',
+  proargtypes => 'internal int2 jsonb int4 internal internal internal',
+  prosrc => 'gin_triconsistent_jsonb_path' },
+{ oid => '3301',
+  proname => 'jsonb_concat', prorettype => 'jsonb',
+  proargtypes => 'jsonb jsonb', prosrc => 'jsonb_concat' },
+{ oid => '3302',
+  proname => 'jsonb_delete', prorettype => 'jsonb', proargtypes => 'jsonb text',
+  prosrc => 'jsonb_delete' },
+{ oid => '3303',
+  proname => 'jsonb_delete', prorettype => 'jsonb', proargtypes => 'jsonb int4',
+  prosrc => 'jsonb_delete_idx' },
+{ oid => '3343',
+  proname => 'jsonb_delete', provariadic => 'text', prorettype => 'jsonb',
+  proargtypes => 'jsonb _text', proallargtypes => '{jsonb,_text}',
+  proargmodes => '{i,v}', proargnames => '{from_json,path_elems}',
+  prosrc => 'jsonb_delete_array' },
+{ oid => '3304',
+  proname => 'jsonb_delete_path', prorettype => 'jsonb',
+  proargtypes => 'jsonb _text', prosrc => 'jsonb_delete_path' },
+{ oid => '3305', descr => 'Set part of a jsonb',
+  proname => 'jsonb_set', prorettype => 'jsonb',
+  proargtypes => 'jsonb _text jsonb bool', prosrc => 'jsonb_set' },
+{ oid => '3306', descr => 'Indented text from jsonb',
+  proname => 'jsonb_pretty', prorettype => 'text', proargtypes => 'jsonb',
+  prosrc => 'jsonb_pretty' },
+{ oid => '3579', descr => 'Insert value into a jsonb',
+  proname => 'jsonb_insert', prorettype => 'jsonb',
+  proargtypes => 'jsonb _text jsonb bool', prosrc => 'jsonb_insert' },
+
+# txid
+{ oid => '2939', descr => 'I/O',
+  proname => 'txid_snapshot_in', prorettype => 'txid_snapshot',
+  proargtypes => 'cstring', prosrc => 'txid_snapshot_in' },
+{ oid => '2940', descr => 'I/O',
+  proname => 'txid_snapshot_out', prorettype => 'cstring',
+  proargtypes => 'txid_snapshot', prosrc => 'txid_snapshot_out' },
+{ oid => '2941', descr => 'I/O',
+  proname => 'txid_snapshot_recv', prorettype => 'txid_snapshot',
+  proargtypes => 'internal', prosrc => 'txid_snapshot_recv' },
+{ oid => '2942', descr => 'I/O',
+  proname => 'txid_snapshot_send', prorettype => 'bytea',
+  proargtypes => 'txid_snapshot', prosrc => 'txid_snapshot_send' },
+{ oid => '2943', descr => 'get current transaction ID',
+  proname => 'txid_current', provolatile => 's', proparallel => 'u',
+  prorettype => 'int8', proargtypes => '', prosrc => 'txid_current' },
+{ oid => '3348', descr => 'get current transaction ID',
+  proname => 'txid_current_if_assigned', provolatile => 's', proparallel => 'u',
+  prorettype => 'int8', proargtypes => '',
+  prosrc => 'txid_current_if_assigned' },
+{ oid => '2944', descr => 'get current snapshot',
+  proname => 'txid_current_snapshot', provolatile => 's',
+  prorettype => 'txid_snapshot', proargtypes => '',
+  prosrc => 'txid_current_snapshot' },
+{ oid => '2945', descr => 'get xmin of snapshot',
+  proname => 'txid_snapshot_xmin', prorettype => 'int8',
+  proargtypes => 'txid_snapshot', prosrc => 'txid_snapshot_xmin' },
+{ oid => '2946', descr => 'get xmax of snapshot',
+  proname => 'txid_snapshot_xmax', prorettype => 'int8',
+  proargtypes => 'txid_snapshot', prosrc => 'txid_snapshot_xmax' },
+{ oid => '2947', descr => 'get set of in-progress txids in snapshot',
+  proname => 'txid_snapshot_xip', prorows => '50', proretset => 't',
+  prorettype => 'int8', proargtypes => 'txid_snapshot',
+  prosrc => 'txid_snapshot_xip' },
+{ oid => '2948', descr => 'is txid visible in snapshot?',
+  proname => 'txid_visible_in_snapshot', prorettype => 'bool',
+  proargtypes => 'int8 txid_snapshot', prosrc => 'txid_visible_in_snapshot' },
+{ oid => '3360', descr => 'commit status of transaction',
+  proname => 'txid_status', provolatile => 'v', prorettype => 'text',
+  proargtypes => 'int8', prosrc => 'txid_status' },
+
+# record comparison using normal comparison rules
+{ oid => '2981',
+  proname => 'record_eq', prorettype => 'bool', proargtypes => 'record record',
+  prosrc => 'record_eq' },
+{ oid => '2982',
+  proname => 'record_ne', prorettype => 'bool', proargtypes => 'record record',
+  prosrc => 'record_ne' },
+{ oid => '2983',
+  proname => 'record_lt', prorettype => 'bool', proargtypes => 'record record',
+  prosrc => 'record_lt' },
+{ oid => '2984',
+  proname => 'record_gt', prorettype => 'bool', proargtypes => 'record record',
+  prosrc => 'record_gt' },
+{ oid => '2985',
+  proname => 'record_le', prorettype => 'bool', proargtypes => 'record record',
+  prosrc => 'record_le' },
+{ oid => '2986',
+  proname => 'record_ge', prorettype => 'bool', proargtypes => 'record record',
+  prosrc => 'record_ge' },
+{ oid => '2987', descr => 'less-equal-greater',
+  proname => 'btrecordcmp', prorettype => 'int4',
+  proargtypes => 'record record', prosrc => 'btrecordcmp' },
+
+# record comparison using raw byte images
+{ oid => '3181',
+  proname => 'record_image_eq', prorettype => 'bool',
+  proargtypes => 'record record', prosrc => 'record_image_eq' },
+{ oid => '3182',
+  proname => 'record_image_ne', prorettype => 'bool',
+  proargtypes => 'record record', prosrc => 'record_image_ne' },
+{ oid => '3183',
+  proname => 'record_image_lt', prorettype => 'bool',
+  proargtypes => 'record record', prosrc => 'record_image_lt' },
+{ oid => '3184',
+  proname => 'record_image_gt', prorettype => 'bool',
+  proargtypes => 'record record', prosrc => 'record_image_gt' },
+{ oid => '3185',
+  proname => 'record_image_le', prorettype => 'bool',
+  proargtypes => 'record record', prosrc => 'record_image_le' },
+{ oid => '3186',
+  proname => 'record_image_ge', prorettype => 'bool',
+  proargtypes => 'record record', prosrc => 'record_image_ge' },
+{ oid => '3187', descr => 'less-equal-greater based on byte images',
+  proname => 'btrecordimagecmp', prorettype => 'int4',
+  proargtypes => 'record record', prosrc => 'btrecordimagecmp' },
+
+# Extensions
+{ oid => '3082', descr => 'list available extensions',
+  proname => 'pg_available_extensions', procost => '10', prorows => '100',
+  proretset => 't', provolatile => 's', prorettype => 'record',
+  proargtypes => '', proallargtypes => '{name,text,text}',
+  proargmodes => '{o,o,o}', proargnames => '{name,default_version,comment}',
+  prosrc => 'pg_available_extensions' },
+{ oid => '3083', descr => 'list available extension versions',
+  proname => 'pg_available_extension_versions', procost => '10',
+  prorows => '100', proretset => 't', provolatile => 's',
+  prorettype => 'record', proargtypes => '',
+  proallargtypes => '{name,text,bool,bool,name,_name,text}',
+  proargmodes => '{o,o,o,o,o,o,o}',
+  proargnames => '{name,version,superuser,relocatable,schema,requires,comment}',
+  prosrc => 'pg_available_extension_versions' },
+{ oid => '3084', descr => 'list an extension\'s version update paths',
+  proname => 'pg_extension_update_paths', procost => '10', prorows => '100',
+  proretset => 't', provolatile => 's', prorettype => 'record',
+  proargtypes => 'name', proallargtypes => '{name,text,text,text}',
+  proargmodes => '{i,o,o,o}', proargnames => '{name,source,target,path}',
+  prosrc => 'pg_extension_update_paths' },
+{ oid => '3086',
+  descr => 'flag an extension\'s table contents to be emitted by pg_dump',
+  proname => 'pg_extension_config_dump', provolatile => 'v', proparallel => 'u',
+  prorettype => 'void', proargtypes => 'regclass text',
+  prosrc => 'pg_extension_config_dump' },
+
+# SQL-spec window functions
+{ oid => '3100', descr => 'row number within partition',
+  proname => 'row_number', prokind => 'w', proisstrict => 'f',
+  prorettype => 'int8', proargtypes => '', prosrc => 'window_row_number' },
+{ oid => '3101', descr => 'integer rank with gaps',
+  proname => 'rank', prokind => 'w', proisstrict => 'f', prorettype => 'int8',
+  proargtypes => '', prosrc => 'window_rank' },
+{ oid => '3102', descr => 'integer rank without gaps',
+  proname => 'dense_rank', prokind => 'w', proisstrict => 'f',
+  prorettype => 'int8', proargtypes => '', prosrc => 'window_dense_rank' },
+{ oid => '3103', descr => 'fractional rank within partition',
+  proname => 'percent_rank', prokind => 'w', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => '', prosrc => 'window_percent_rank' },
+{ oid => '3104', descr => 'fractional row number within partition',
+  proname => 'cume_dist', prokind => 'w', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => '', prosrc => 'window_cume_dist' },
+{ oid => '3105', descr => 'split rows into N groups',
+  proname => 'ntile', prokind => 'w', prorettype => 'int4',
+  proargtypes => 'int4', prosrc => 'window_ntile' },
+{ oid => '3106', descr => 'fetch the preceding row value',
+  proname => 'lag', prokind => 'w', prorettype => 'anyelement',
+  proargtypes => 'anyelement', prosrc => 'window_lag' },
+{ oid => '3107', descr => 'fetch the Nth preceding row value',
+  proname => 'lag', prokind => 'w', prorettype => 'anyelement',
+  proargtypes => 'anyelement int4', prosrc => 'window_lag_with_offset' },
+{ oid => '3108', descr => 'fetch the Nth preceding row value with default',
+  proname => 'lag', prokind => 'w', prorettype => 'anyelement',
+  proargtypes => 'anyelement int4 anyelement',
+  prosrc => 'window_lag_with_offset_and_default' },
+{ oid => '3109', descr => 'fetch the following row value',
+  proname => 'lead', prokind => 'w', prorettype => 'anyelement',
+  proargtypes => 'anyelement', prosrc => 'window_lead' },
+{ oid => '3110', descr => 'fetch the Nth following row value',
+  proname => 'lead', prokind => 'w', prorettype => 'anyelement',
+  proargtypes => 'anyelement int4', prosrc => 'window_lead_with_offset' },
+{ oid => '3111', descr => 'fetch the Nth following row value with default',
+  proname => 'lead', prokind => 'w', prorettype => 'anyelement',
+  proargtypes => 'anyelement int4 anyelement',
+  prosrc => 'window_lead_with_offset_and_default' },
+{ oid => '3112', descr => 'fetch the first row value',
+  proname => 'first_value', prokind => 'w', prorettype => 'anyelement',
+  proargtypes => 'anyelement', prosrc => 'window_first_value' },
+{ oid => '3113', descr => 'fetch the last row value',
+  proname => 'last_value', prokind => 'w', prorettype => 'anyelement',
+  proargtypes => 'anyelement', prosrc => 'window_last_value' },
+{ oid => '3114', descr => 'fetch the Nth row value',
+  proname => 'nth_value', prokind => 'w', prorettype => 'anyelement',
+  proargtypes => 'anyelement int4', prosrc => 'window_nth_value' },
+
+# functions for range types
+{ oid => '3832', descr => 'I/O',
+  proname => 'anyrange_in', provolatile => 's', prorettype => 'anyrange',
+  proargtypes => 'cstring oid int4', prosrc => 'anyrange_in' },
+{ oid => '3833', descr => 'I/O',
+  proname => 'anyrange_out', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'anyrange', prosrc => 'anyrange_out' },
+{ oid => '3834', descr => 'I/O',
+  proname => 'range_in', provolatile => 's', prorettype => 'anyrange',
+  proargtypes => 'cstring oid int4', prosrc => 'range_in' },
+{ oid => '3835', descr => 'I/O',
+  proname => 'range_out', provolatile => 's', prorettype => 'cstring',
+  proargtypes => 'anyrange', prosrc => 'range_out' },
+{ oid => '3836', descr => 'I/O',
+  proname => 'range_recv', provolatile => 's', prorettype => 'anyrange',
+  proargtypes => 'internal oid int4', prosrc => 'range_recv' },
+{ oid => '3837', descr => 'I/O',
+  proname => 'range_send', provolatile => 's', prorettype => 'bytea',
+  proargtypes => 'anyrange', prosrc => 'range_send' },
+{ oid => '3848', descr => 'lower bound of range',
+  proname => 'lower', prorettype => 'anyelement', proargtypes => 'anyrange',
+  prosrc => 'range_lower' },
+{ oid => '3849', descr => 'upper bound of range',
+  proname => 'upper', prorettype => 'anyelement', proargtypes => 'anyrange',
+  prosrc => 'range_upper' },
+{ oid => '3850', descr => 'is the range empty?',
+  proname => 'isempty', prorettype => 'bool', proargtypes => 'anyrange',
+  prosrc => 'range_empty' },
+{ oid => '3851', descr => 'is the range\'s lower bound inclusive?',
+  proname => 'lower_inc', prorettype => 'bool', proargtypes => 'anyrange',
+  prosrc => 'range_lower_inc' },
+{ oid => '3852', descr => 'is the range\'s upper bound inclusive?',
+  proname => 'upper_inc', prorettype => 'bool', proargtypes => 'anyrange',
+  prosrc => 'range_upper_inc' },
+{ oid => '3853', descr => 'is the range\'s lower bound infinite?',
+  proname => 'lower_inf', prorettype => 'bool', proargtypes => 'anyrange',
+  prosrc => 'range_lower_inf' },
+{ oid => '3854', descr => 'is the range\'s upper bound infinite?',
+  proname => 'upper_inf', prorettype => 'bool', proargtypes => 'anyrange',
+  prosrc => 'range_upper_inf' },
+{ oid => '3855',
+  proname => 'range_eq', prorettype => 'bool',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_eq' },
+{ oid => '3856',
+  proname => 'range_ne', prorettype => 'bool',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_ne' },
+{ oid => '3857',
+  proname => 'range_overlaps', prorettype => 'bool',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_overlaps' },
+{ oid => '3858',
+  proname => 'range_contains_elem', prorettype => 'bool',
+  proargtypes => 'anyrange anyelement', prosrc => 'range_contains_elem' },
+{ oid => '3859',
+  proname => 'range_contains', prorettype => 'bool',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_contains' },
+{ oid => '3860',
+  proname => 'elem_contained_by_range', prorettype => 'bool',
+  proargtypes => 'anyelement anyrange', prosrc => 'elem_contained_by_range' },
+{ oid => '3861',
+  proname => 'range_contained_by', prorettype => 'bool',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_contained_by' },
+{ oid => '3862',
+  proname => 'range_adjacent', prorettype => 'bool',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_adjacent' },
+{ oid => '3863',
+  proname => 'range_before', prorettype => 'bool',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_before' },
+{ oid => '3864',
+  proname => 'range_after', prorettype => 'bool',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_after' },
+{ oid => '3865',
+  proname => 'range_overleft', prorettype => 'bool',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_overleft' },
+{ oid => '3866',
+  proname => 'range_overright', prorettype => 'bool',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_overright' },
+{ oid => '3867',
+  proname => 'range_union', prorettype => 'anyrange',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_union' },
+{ oid => '4057',
+  descr => 'the smallest range which includes both of the given ranges',
+  proname => 'range_merge', prorettype => 'anyrange',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_merge' },
+{ oid => '3868',
+  proname => 'range_intersect', prorettype => 'anyrange',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_intersect' },
+{ oid => '3869',
+  proname => 'range_minus', prorettype => 'anyrange',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_minus' },
+{ oid => '3870', descr => 'less-equal-greater',
+  proname => 'range_cmp', prorettype => 'int4',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_cmp' },
+{ oid => '3871',
+  proname => 'range_lt', prorettype => 'bool',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_lt' },
+{ oid => '3872',
+  proname => 'range_le', prorettype => 'bool',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_le' },
+{ oid => '3873',
+  proname => 'range_ge', prorettype => 'bool',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_ge' },
+{ oid => '3874',
+  proname => 'range_gt', prorettype => 'bool',
+  proargtypes => 'anyrange anyrange', prosrc => 'range_gt' },
+{ oid => '3875', descr => 'GiST support',
+  proname => 'range_gist_consistent', prorettype => 'bool',
+  proargtypes => 'internal anyrange int2 oid internal',
+  prosrc => 'range_gist_consistent' },
+{ oid => '3876', descr => 'GiST support',
+  proname => 'range_gist_union', prorettype => 'anyrange',
+  proargtypes => 'internal internal', prosrc => 'range_gist_union' },
+{ oid => '3879', descr => 'GiST support',
+  proname => 'range_gist_penalty', prorettype => 'internal',
+  proargtypes => 'internal internal internal', prosrc => 'range_gist_penalty' },
+{ oid => '3880', descr => 'GiST support',
+  proname => 'range_gist_picksplit', prorettype => 'internal',
+  proargtypes => 'internal internal', prosrc => 'range_gist_picksplit' },
+{ oid => '3881', descr => 'GiST support',
+  proname => 'range_gist_same', prorettype => 'internal',
+  proargtypes => 'anyrange anyrange internal', prosrc => 'range_gist_same' },
+{ oid => '3902', descr => 'hash a range',
+  proname => 'hash_range', prorettype => 'int4', proargtypes => 'anyrange',
+  prosrc => 'hash_range' },
+{ oid => '3417', descr => 'hash a range',
+  proname => 'hash_range_extended', prorettype => 'int8',
+  proargtypes => 'anyrange int8', prosrc => 'hash_range_extended' },
+{ oid => '3916', descr => 'range typanalyze',
+  proname => 'range_typanalyze', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'internal', prosrc => 'range_typanalyze' },
+{ oid => '3169', descr => 'restriction selectivity for range operators',
+  proname => 'rangesel', provolatile => 's', prorettype => 'float8',
+  proargtypes => 'internal oid internal int4', prosrc => 'rangesel' },
+
+{ oid => '3914', descr => 'convert an int4 range to canonical form',
+  proname => 'int4range_canonical', prorettype => 'int4range',
+  proargtypes => 'int4range', prosrc => 'int4range_canonical' },
+{ oid => '3928', descr => 'convert an int8 range to canonical form',
+  proname => 'int8range_canonical', prorettype => 'int8range',
+  proargtypes => 'int8range', prosrc => 'int8range_canonical' },
+{ oid => '3915', descr => 'convert a date range to canonical form',
+  proname => 'daterange_canonical', prorettype => 'daterange',
+  proargtypes => 'daterange', prosrc => 'daterange_canonical' },
+{ oid => '3922', descr => 'float8 difference of two int4 values',
+  proname => 'int4range_subdiff', prorettype => 'float8',
+  proargtypes => 'int4 int4', prosrc => 'int4range_subdiff' },
+{ oid => '3923', descr => 'float8 difference of two int8 values',
+  proname => 'int8range_subdiff', prorettype => 'float8',
+  proargtypes => 'int8 int8', prosrc => 'int8range_subdiff' },
+{ oid => '3924', descr => 'float8 difference of two numeric values',
+  proname => 'numrange_subdiff', prorettype => 'float8',
+  proargtypes => 'numeric numeric', prosrc => 'numrange_subdiff' },
+{ oid => '3925', descr => 'float8 difference of two date values',
+  proname => 'daterange_subdiff', prorettype => 'float8',
+  proargtypes => 'date date', prosrc => 'daterange_subdiff' },
+{ oid => '3929', descr => 'float8 difference of two timestamp values',
+  proname => 'tsrange_subdiff', prorettype => 'float8',
+  proargtypes => 'timestamp timestamp', prosrc => 'tsrange_subdiff' },
+{ oid => '3930',
+  descr => 'float8 difference of two timestamp with time zone values',
+  proname => 'tstzrange_subdiff', prorettype => 'float8',
+  proargtypes => 'timestamptz timestamptz', prosrc => 'tstzrange_subdiff' },
+
+{ oid => '3840', descr => 'int4range constructor',
+  proname => 'int4range', proisstrict => 'f', prorettype => 'int4range',
+  proargtypes => 'int4 int4', prosrc => 'range_constructor2' },
+{ oid => '3841', descr => 'int4range constructor',
+  proname => 'int4range', proisstrict => 'f', prorettype => 'int4range',
+  proargtypes => 'int4 int4 text', prosrc => 'range_constructor3' },
+{ oid => '3844', descr => 'numrange constructor',
+  proname => 'numrange', proisstrict => 'f', prorettype => 'numrange',
+  proargtypes => 'numeric numeric', prosrc => 'range_constructor2' },
+{ oid => '3845', descr => 'numrange constructor',
+  proname => 'numrange', proisstrict => 'f', prorettype => 'numrange',
+  proargtypes => 'numeric numeric text', prosrc => 'range_constructor3' },
+{ oid => '3933', descr => 'tsrange constructor',
+  proname => 'tsrange', proisstrict => 'f', prorettype => 'tsrange',
+  proargtypes => 'timestamp timestamp', prosrc => 'range_constructor2' },
+{ oid => '3934', descr => 'tsrange constructor',
+  proname => 'tsrange', proisstrict => 'f', prorettype => 'tsrange',
+  proargtypes => 'timestamp timestamp text', prosrc => 'range_constructor3' },
+{ oid => '3937', descr => 'tstzrange constructor',
+  proname => 'tstzrange', proisstrict => 'f', prorettype => 'tstzrange',
+  proargtypes => 'timestamptz timestamptz', prosrc => 'range_constructor2' },
+{ oid => '3938', descr => 'tstzrange constructor',
+  proname => 'tstzrange', proisstrict => 'f', prorettype => 'tstzrange',
+  proargtypes => 'timestamptz timestamptz text',
+  prosrc => 'range_constructor3' },
+{ oid => '3941', descr => 'daterange constructor',
+  proname => 'daterange', proisstrict => 'f', prorettype => 'daterange',
+  proargtypes => 'date date', prosrc => 'range_constructor2' },
+{ oid => '3942', descr => 'daterange constructor',
+  proname => 'daterange', proisstrict => 'f', prorettype => 'daterange',
+  proargtypes => 'date date text', prosrc => 'range_constructor3' },
+{ oid => '3945', descr => 'int8range constructor',
+  proname => 'int8range', proisstrict => 'f', prorettype => 'int8range',
+  proargtypes => 'int8 int8', prosrc => 'range_constructor2' },
+{ oid => '3946', descr => 'int8range constructor',
+  proname => 'int8range', proisstrict => 'f', prorettype => 'int8range',
+  proargtypes => 'int8 int8 text', prosrc => 'range_constructor3' },
+
+# date, time, timestamp constructors
+{ oid => '3846', descr => 'construct date',
+  proname => 'make_date', prorettype => 'date', proargtypes => 'int4 int4 int4',
+  proargnames => '{year,month,day}', prosrc => 'make_date' },
+{ oid => '3847', descr => 'construct time',
+  proname => 'make_time', prorettype => 'time',
+  proargtypes => 'int4 int4 float8', proargnames => '{hour,min,sec}',
+  prosrc => 'make_time' },
+{ oid => '3461', descr => 'construct timestamp',
+  proname => 'make_timestamp', prorettype => 'timestamp',
+  proargtypes => 'int4 int4 int4 int4 int4 float8',
+  proargnames => '{year,month,mday,hour,min,sec}', prosrc => 'make_timestamp' },
+{ oid => '3462', descr => 'construct timestamp with time zone',
+  proname => 'make_timestamptz', provolatile => 's',
+  prorettype => 'timestamptz', proargtypes => 'int4 int4 int4 int4 int4 float8',
+  proargnames => '{year,month,mday,hour,min,sec}',
+  prosrc => 'make_timestamptz' },
+{ oid => '3463', descr => 'construct timestamp with time zone',
+  proname => 'make_timestamptz', provolatile => 's',
+  prorettype => 'timestamptz',
+  proargtypes => 'int4 int4 int4 int4 int4 float8 text',
+  proargnames => '{year,month,mday,hour,min,sec,timezone}',
+  prosrc => 'make_timestamptz_at_timezone' },
+{ oid => '3464', descr => 'construct interval',
+  proname => 'make_interval', prorettype => 'interval',
+  proargtypes => 'int4 int4 int4 int4 int4 int4 float8',
+  proargnames => '{years,months,weeks,days,hours,mins,secs}',
+  prosrc => 'make_interval' },
+
+# spgist opclasses
+{ oid => '4018', descr => 'SP-GiST support for quad tree over point',
+  proname => 'spg_quad_config', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_quad_config' },
+{ oid => '4019', descr => 'SP-GiST support for quad tree over point',
+  proname => 'spg_quad_choose', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_quad_choose' },
+{ oid => '4020', descr => 'SP-GiST support for quad tree over point',
+  proname => 'spg_quad_picksplit', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_quad_picksplit' },
+{ oid => '4021', descr => 'SP-GiST support for quad tree over point',
+  proname => 'spg_quad_inner_consistent', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_quad_inner_consistent' },
+{ oid => '4022',
+  descr => 'SP-GiST support for quad tree and k-d tree over point',
+  proname => 'spg_quad_leaf_consistent', prorettype => 'bool',
+  proargtypes => 'internal internal', prosrc => 'spg_quad_leaf_consistent' },
+
+{ oid => '4023', descr => 'SP-GiST support for k-d tree over point',
+  proname => 'spg_kd_config', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_kd_config' },
+{ oid => '4024', descr => 'SP-GiST support for k-d tree over point',
+  proname => 'spg_kd_choose', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_kd_choose' },
+{ oid => '4025', descr => 'SP-GiST support for k-d tree over point',
+  proname => 'spg_kd_picksplit', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_kd_picksplit' },
+{ oid => '4026', descr => 'SP-GiST support for k-d tree over point',
+  proname => 'spg_kd_inner_consistent', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_kd_inner_consistent' },
+
+{ oid => '4027', descr => 'SP-GiST support for radix tree over text',
+  proname => 'spg_text_config', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_text_config' },
+{ oid => '4028', descr => 'SP-GiST support for radix tree over text',
+  proname => 'spg_text_choose', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_text_choose' },
+{ oid => '4029', descr => 'SP-GiST support for radix tree over text',
+  proname => 'spg_text_picksplit', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_text_picksplit' },
+{ oid => '4030', descr => 'SP-GiST support for radix tree over text',
+  proname => 'spg_text_inner_consistent', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_text_inner_consistent' },
+{ oid => '4031', descr => 'SP-GiST support for radix tree over text',
+  proname => 'spg_text_leaf_consistent', prorettype => 'bool',
+  proargtypes => 'internal internal', prosrc => 'spg_text_leaf_consistent' },
+
+{ oid => '3469', descr => 'SP-GiST support for quad tree over range',
+  proname => 'spg_range_quad_config', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_range_quad_config' },
+{ oid => '3470', descr => 'SP-GiST support for quad tree over range',
+  proname => 'spg_range_quad_choose', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_range_quad_choose' },
+{ oid => '3471', descr => 'SP-GiST support for quad tree over range',
+  proname => 'spg_range_quad_picksplit', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_range_quad_picksplit' },
+{ oid => '3472', descr => 'SP-GiST support for quad tree over range',
+  proname => 'spg_range_quad_inner_consistent', prorettype => 'void',
+  proargtypes => 'internal internal',
+  prosrc => 'spg_range_quad_inner_consistent' },
+{ oid => '3473', descr => 'SP-GiST support for quad tree over range',
+  proname => 'spg_range_quad_leaf_consistent', prorettype => 'bool',
+  proargtypes => 'internal internal',
+  prosrc => 'spg_range_quad_leaf_consistent' },
+
+{ oid => '5012', descr => 'SP-GiST support for quad tree over box',
+  proname => 'spg_box_quad_config', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_box_quad_config' },
+{ oid => '5013', descr => 'SP-GiST support for quad tree over box',
+  proname => 'spg_box_quad_choose', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_box_quad_choose' },
+{ oid => '5014', descr => 'SP-GiST support for quad tree over box',
+  proname => 'spg_box_quad_picksplit', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_box_quad_picksplit' },
+{ oid => '5015', descr => 'SP-GiST support for quad tree over box',
+  proname => 'spg_box_quad_inner_consistent', prorettype => 'void',
+  proargtypes => 'internal internal',
+  prosrc => 'spg_box_quad_inner_consistent' },
+{ oid => '5016', descr => 'SP-GiST support for quad tree over box',
+  proname => 'spg_box_quad_leaf_consistent', prorettype => 'bool',
+  proargtypes => 'internal internal',
+  prosrc => 'spg_box_quad_leaf_consistent' },
+
+{ oid => '5010',
+  descr => 'SP-GiST support for quad tree over 2-D types represented by their bounding boxes',
+  proname => 'spg_bbox_quad_config', prorettype => 'void',
+  proargtypes => 'internal internal', prosrc => 'spg_bbox_quad_config' },
+{ oid => '5011', descr => 'SP-GiST support for quad tree over polygons',
+  proname => 'spg_poly_quad_compress', prorettype => 'box',
+  proargtypes => 'polygon', prosrc => 'spg_poly_quad_compress' },
+
+# replication slots
+{ oid => '3779', descr => 'create a physical replication slot',
+  proname => 'pg_create_physical_replication_slot', provolatile => 'v',
+  proparallel => 'u', prorettype => 'record', proargtypes => 'name bool bool',
+  proallargtypes => '{name,bool,bool,name,pg_lsn}',
+  proargmodes => '{i,i,i,o,o}',
+  proargnames => '{slot_name,immediately_reserve,temporary,slot_name,lsn}',
+  prosrc => 'pg_create_physical_replication_slot' },
+{ oid => '3780', descr => 'drop a replication slot',
+  proname => 'pg_drop_replication_slot', provolatile => 'v', proparallel => 'u',
+  prorettype => 'void', proargtypes => 'name',
+  prosrc => 'pg_drop_replication_slot' },
+{ oid => '3781',
+  descr => 'information about replication slots currently in use',
+  proname => 'pg_get_replication_slots', prorows => '10', proisstrict => 'f',
+  proretset => 't', provolatile => 's', prorettype => 'record',
+  proargtypes => '',
+  proallargtypes => '{name,name,text,oid,bool,bool,int4,xid,xid,pg_lsn,pg_lsn}',
+  proargmodes => '{o,o,o,o,o,o,o,o,o,o,o}',
+  proargnames => '{slot_name,plugin,slot_type,datoid,temporary,active,active_pid,xmin,catalog_xmin,restart_lsn,confirmed_flush_lsn}',
+  prosrc => 'pg_get_replication_slots' },
+{ oid => '3786', descr => 'set up a logical replication slot',
+  proname => 'pg_create_logical_replication_slot', provolatile => 'v',
+  proparallel => 'u', prorettype => 'record', proargtypes => 'name name bool',
+  proallargtypes => '{name,name,bool,text,pg_lsn}',
+  proargmodes => '{i,i,i,o,o}',
+  proargnames => '{slot_name,plugin,temporary,slot_name,lsn}',
+  prosrc => 'pg_create_logical_replication_slot' },
+{ oid => '3782', descr => 'get changes from replication slot',
+  proname => 'pg_logical_slot_get_changes', procost => '1000',
+  prorows => '1000', provariadic => 'text', proisstrict => 'f',
+  proretset => 't', provolatile => 'v', proparallel => 'u',
+  prorettype => 'record', proargtypes => 'name pg_lsn int4 _text',
+  proallargtypes => '{name,pg_lsn,int4,_text,pg_lsn,xid,text}',
+  proargmodes => '{i,i,i,v,o,o,o}',
+  proargnames => '{slot_name,upto_lsn,upto_nchanges,options,lsn,xid,data}',
+  prosrc => 'pg_logical_slot_get_changes' },
+{ oid => '3783', descr => 'get binary changes from replication slot',
+  proname => 'pg_logical_slot_get_binary_changes', procost => '1000',
+  prorows => '1000', provariadic => 'text', proisstrict => 'f',
+  proretset => 't', provolatile => 'v', proparallel => 'u',
+  prorettype => 'record', proargtypes => 'name pg_lsn int4 _text',
+  proallargtypes => '{name,pg_lsn,int4,_text,pg_lsn,xid,bytea}',
+  proargmodes => '{i,i,i,v,o,o,o}',
+  proargnames => '{slot_name,upto_lsn,upto_nchanges,options,lsn,xid,data}',
+  prosrc => 'pg_logical_slot_get_binary_changes' },
+{ oid => '3784', descr => 'peek at changes from replication slot',
+  proname => 'pg_logical_slot_peek_changes', procost => '1000',
+  prorows => '1000', provariadic => 'text', proisstrict => 'f',
+  proretset => 't', provolatile => 'v', proparallel => 'u',
+  prorettype => 'record', proargtypes => 'name pg_lsn int4 _text',
+  proallargtypes => '{name,pg_lsn,int4,_text,pg_lsn,xid,text}',
+  proargmodes => '{i,i,i,v,o,o,o}',
+  proargnames => '{slot_name,upto_lsn,upto_nchanges,options,lsn,xid,data}',
+  prosrc => 'pg_logical_slot_peek_changes' },
+{ oid => '3785', descr => 'peek at binary changes from replication slot',
+  proname => 'pg_logical_slot_peek_binary_changes', procost => '1000',
+  prorows => '1000', provariadic => 'text', proisstrict => 'f',
+  proretset => 't', provolatile => 'v', proparallel => 'u',
+  prorettype => 'record', proargtypes => 'name pg_lsn int4 _text',
+  proallargtypes => '{name,pg_lsn,int4,_text,pg_lsn,xid,bytea}',
+  proargmodes => '{i,i,i,v,o,o,o}',
+  proargnames => '{slot_name,upto_lsn,upto_nchanges,options,lsn,xid,data}',
+  prosrc => 'pg_logical_slot_peek_binary_changes' },
+{ oid => '3878', descr => 'advance logical replication slot',
+  proname => 'pg_replication_slot_advance', provolatile => 'v',
+  proparallel => 'u', prorettype => 'record', proargtypes => 'name pg_lsn',
+  proallargtypes => '{name,pg_lsn,name,pg_lsn}', proargmodes => '{i,i,o,o}',
+  proargnames => '{slot_name,upto_lsn,slot_name,end_lsn}',
+  prosrc => 'pg_replication_slot_advance' },
+{ oid => '3577', descr => 'emit a textual logical decoding message',
+  proname => 'pg_logical_emit_message', provolatile => 'v', proparallel => 'u',
+  prorettype => 'pg_lsn', proargtypes => 'bool text text',
+  prosrc => 'pg_logical_emit_message_text' },
+{ oid => '3578', descr => 'emit a binary logical decoding message',
+  proname => 'pg_logical_emit_message', provolatile => 'v', proparallel => 'u',
+  prorettype => 'pg_lsn', proargtypes => 'bool text bytea',
+  prosrc => 'pg_logical_emit_message_bytea' },
+
+# event triggers
+{ oid => '3566', descr => 'list objects dropped by the current command',
+  proname => 'pg_event_trigger_dropped_objects', procost => '10',
+  prorows => '100', proretset => 't', provolatile => 's', proparallel => 'r',
+  prorettype => 'record', proargtypes => '',
+  proallargtypes => '{oid,oid,int4,bool,bool,bool,text,text,text,text,_text,_text}',
+  proargmodes => '{o,o,o,o,o,o,o,o,o,o,o,o}',
+  proargnames => '{classid, objid, objsubid, original, normal, is_temporary, object_type, schema_name, object_name, object_identity, address_names, address_args}',
+  prosrc => 'pg_event_trigger_dropped_objects' },
+{ oid => '4566', descr => 'return Oid of the table getting rewritten',
+  proname => 'pg_event_trigger_table_rewrite_oid', provolatile => 's',
+  proparallel => 'r', prorettype => 'oid', proargtypes => '',
+  proallargtypes => '{oid}', proargmodes => '{o}', proargnames => '{oid}',
+  prosrc => 'pg_event_trigger_table_rewrite_oid' },
+{ oid => '4567', descr => 'return reason code for table getting rewritten',
+  proname => 'pg_event_trigger_table_rewrite_reason', provolatile => 's',
+  proparallel => 'r', prorettype => 'int4', proargtypes => '',
+  prosrc => 'pg_event_trigger_table_rewrite_reason' },
+{ oid => '4568',
+  descr => 'list DDL actions being executed by the current command',
+  proname => 'pg_event_trigger_ddl_commands', procost => '10', prorows => '100',
+  proretset => 't', provolatile => 's', proparallel => 'r',
+  prorettype => 'record', proargtypes => '',
+  proallargtypes => '{oid,oid,int4,text,text,text,text,bool,pg_ddl_command}',
+  proargmodes => '{o,o,o,o,o,o,o,o,o}',
+  proargnames => '{classid, objid, objsubid, command_tag, object_type, schema_name, object_identity, in_extension, command}',
+  prosrc => 'pg_event_trigger_ddl_commands' },
+
+# generic transition functions for ordered-set aggregates
+{ oid => '3970', descr => 'aggregate transition function',
+  proname => 'ordered_set_transition', proisstrict => 'f',
+  prorettype => 'internal', proargtypes => 'internal any',
+  prosrc => 'ordered_set_transition' },
+{ oid => '3971', descr => 'aggregate transition function',
+  proname => 'ordered_set_transition_multi', provariadic => 'any',
+  proisstrict => 'f', prorettype => 'internal', proargtypes => 'internal any',
+  proallargtypes => '{internal,any}', proargmodes => '{i,v}',
+  prosrc => 'ordered_set_transition_multi' },
+
+# inverse distribution aggregates (and their support functions)
+{ oid => '3972', descr => 'discrete percentile',
+  proname => 'percentile_disc', prokind => 'a', proisstrict => 'f',
+  prorettype => 'anyelement', proargtypes => 'float8 anyelement',
+  prosrc => 'aggregate_dummy' },
+{ oid => '3973', descr => 'aggregate final function',
+  proname => 'percentile_disc_final', proisstrict => 'f',
+  prorettype => 'anyelement', proargtypes => 'internal float8 anyelement',
+  prosrc => 'percentile_disc_final' },
+{ oid => '3974', descr => 'continuous distribution percentile',
+  proname => 'percentile_cont', prokind => 'a', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'float8 float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '3975', descr => 'aggregate final function',
+  proname => 'percentile_cont_float8_final', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'internal float8',
+  prosrc => 'percentile_cont_float8_final' },
+{ oid => '3976', descr => 'continuous distribution percentile',
+  proname => 'percentile_cont', prokind => 'a', proisstrict => 'f',
+  prorettype => 'interval', proargtypes => 'float8 interval',
+  prosrc => 'aggregate_dummy' },
+{ oid => '3977', descr => 'aggregate final function',
+  proname => 'percentile_cont_interval_final', proisstrict => 'f',
+  prorettype => 'interval', proargtypes => 'internal float8',
+  prosrc => 'percentile_cont_interval_final' },
+{ oid => '3978', descr => 'multiple discrete percentiles',
+  proname => 'percentile_disc', prokind => 'a', proisstrict => 'f',
+  prorettype => 'anyarray', proargtypes => '_float8 anyelement',
+  prosrc => 'aggregate_dummy' },
+{ oid => '3979', descr => 'aggregate final function',
+  proname => 'percentile_disc_multi_final', proisstrict => 'f',
+  prorettype => 'anyarray', proargtypes => 'internal _float8 anyelement',
+  prosrc => 'percentile_disc_multi_final' },
+{ oid => '3980', descr => 'multiple continuous percentiles',
+  proname => 'percentile_cont', prokind => 'a', proisstrict => 'f',
+  prorettype => '_float8', proargtypes => '_float8 float8',
+  prosrc => 'aggregate_dummy' },
+{ oid => '3981', descr => 'aggregate final function',
+  proname => 'percentile_cont_float8_multi_final', proisstrict => 'f',
+  prorettype => '_float8', proargtypes => 'internal _float8',
+  prosrc => 'percentile_cont_float8_multi_final' },
+{ oid => '3982', descr => 'multiple continuous percentiles',
+  proname => 'percentile_cont', prokind => 'a', proisstrict => 'f',
+  prorettype => '_interval', proargtypes => '_float8 interval',
+  prosrc => 'aggregate_dummy' },
+{ oid => '3983', descr => 'aggregate final function',
+  proname => 'percentile_cont_interval_multi_final', proisstrict => 'f',
+  prorettype => '_interval', proargtypes => 'internal _float8',
+  prosrc => 'percentile_cont_interval_multi_final' },
+{ oid => '3984', descr => 'most common value',
+  proname => 'mode', prokind => 'a', proisstrict => 'f',
+  prorettype => 'anyelement', proargtypes => 'anyelement',
+  prosrc => 'aggregate_dummy' },
+{ oid => '3985', descr => 'aggregate final function',
+  proname => 'mode_final', proisstrict => 'f', prorettype => 'anyelement',
+  proargtypes => 'internal anyelement', prosrc => 'mode_final' },
+
+# hypothetical-set aggregates (and their support functions)
+{ oid => '3986', descr => 'rank of hypothetical row',
+  proname => 'rank', provariadic => 'any', prokind => 'a', proisstrict => 'f',
+  prorettype => 'int8', proargtypes => 'any', proallargtypes => '{any}',
+  proargmodes => '{v}', prosrc => 'aggregate_dummy' },
+{ oid => '3987', descr => 'aggregate final function',
+  proname => 'rank_final', provariadic => 'any', proisstrict => 'f',
+  prorettype => 'int8', proargtypes => 'internal any',
+  proallargtypes => '{internal,any}', proargmodes => '{i,v}',
+  prosrc => 'hypothetical_rank_final' },
+{ oid => '3988', descr => 'fractional rank of hypothetical row',
+  proname => 'percent_rank', provariadic => 'any', prokind => 'a',
+  proisstrict => 'f', prorettype => 'float8', proargtypes => 'any',
+  proallargtypes => '{any}', proargmodes => '{v}',
+  prosrc => 'aggregate_dummy' },
+{ oid => '3989', descr => 'aggregate final function',
+  proname => 'percent_rank_final', provariadic => 'any', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'internal any',
+  proallargtypes => '{internal,any}', proargmodes => '{i,v}',
+  prosrc => 'hypothetical_percent_rank_final' },
+{ oid => '3990', descr => 'cumulative distribution of hypothetical row',
+  proname => 'cume_dist', provariadic => 'any', prokind => 'a',
+  proisstrict => 'f', prorettype => 'float8', proargtypes => 'any',
+  proallargtypes => '{any}', proargmodes => '{v}',
+  prosrc => 'aggregate_dummy' },
+{ oid => '3991', descr => 'aggregate final function',
+  proname => 'cume_dist_final', provariadic => 'any', proisstrict => 'f',
+  prorettype => 'float8', proargtypes => 'internal any',
+  proallargtypes => '{internal,any}', proargmodes => '{i,v}',
+  prosrc => 'hypothetical_cume_dist_final' },
+{ oid => '3992', descr => 'rank of hypothetical row without gaps',
+  proname => 'dense_rank', provariadic => 'any', prokind => 'a',
+  proisstrict => 'f', prorettype => 'int8', proargtypes => 'any',
+  proallargtypes => '{any}', proargmodes => '{v}',
+  prosrc => 'aggregate_dummy' },
+{ oid => '3993', descr => 'aggregate final function',
+  proname => 'dense_rank_final', provariadic => 'any', proisstrict => 'f',
+  prorettype => 'int8', proargtypes => 'internal any',
+  proallargtypes => '{internal,any}', proargmodes => '{i,v}',
+  prosrc => 'hypothetical_dense_rank_final' },
+
+# pg_upgrade support
+{ oid => '3582', descr => 'for use by pg_upgrade',
+  proname => 'binary_upgrade_set_next_pg_type_oid', provolatile => 'v',
+  proparallel => 'r', prorettype => 'void', proargtypes => 'oid',
+  prosrc => 'binary_upgrade_set_next_pg_type_oid' },
+{ oid => '3584', descr => 'for use by pg_upgrade',
+  proname => 'binary_upgrade_set_next_array_pg_type_oid', provolatile => 'v',
+  proparallel => 'r', prorettype => 'void', proargtypes => 'oid',
+  prosrc => 'binary_upgrade_set_next_array_pg_type_oid' },
+{ oid => '3585', descr => 'for use by pg_upgrade',
+  proname => 'binary_upgrade_set_next_toast_pg_type_oid', provolatile => 'v',
+  proparallel => 'r', prorettype => 'void', proargtypes => 'oid',
+  prosrc => 'binary_upgrade_set_next_toast_pg_type_oid' },
+{ oid => '3586', descr => 'for use by pg_upgrade',
+  proname => 'binary_upgrade_set_next_heap_pg_class_oid', provolatile => 'v',
+  proparallel => 'r', prorettype => 'void', proargtypes => 'oid',
+  prosrc => 'binary_upgrade_set_next_heap_pg_class_oid' },
+{ oid => '3587', descr => 'for use by pg_upgrade',
+  proname => 'binary_upgrade_set_next_index_pg_class_oid', provolatile => 'v',
+  proparallel => 'r', prorettype => 'void', proargtypes => 'oid',
+  prosrc => 'binary_upgrade_set_next_index_pg_class_oid' },
+{ oid => '3588', descr => 'for use by pg_upgrade',
+  proname => 'binary_upgrade_set_next_toast_pg_class_oid', provolatile => 'v',
+  proparallel => 'r', prorettype => 'void', proargtypes => 'oid',
+  prosrc => 'binary_upgrade_set_next_toast_pg_class_oid' },
+{ oid => '3589', descr => 'for use by pg_upgrade',
+  proname => 'binary_upgrade_set_next_pg_enum_oid', provolatile => 'v',
+  proparallel => 'r', prorettype => 'void', proargtypes => 'oid',
+  prosrc => 'binary_upgrade_set_next_pg_enum_oid' },
+{ oid => '3590', descr => 'for use by pg_upgrade',
+  proname => 'binary_upgrade_set_next_pg_authid_oid', provolatile => 'v',
+  proparallel => 'r', prorettype => 'void', proargtypes => 'oid',
+  prosrc => 'binary_upgrade_set_next_pg_authid_oid' },
+{ oid => '3591', descr => 'for use by pg_upgrade',
+  proname => 'binary_upgrade_create_empty_extension', proisstrict => 'f',
+  provolatile => 'v', proparallel => 'u', prorettype => 'void',
+  proargtypes => 'text text bool text _oid _text _text',
+  prosrc => 'binary_upgrade_create_empty_extension' },
+{ oid => '4083', descr => 'for use by pg_upgrade',
+  proname => 'binary_upgrade_set_record_init_privs', provolatile => 'v',
+  proparallel => 'r', prorettype => 'void', proargtypes => 'bool',
+  prosrc => 'binary_upgrade_set_record_init_privs' },
+
+# replication/origin.h
+{ oid => '6003', descr => 'create a replication origin',
+  proname => 'pg_replication_origin_create', provolatile => 'v',
+  proparallel => 'u', prorettype => 'oid', proargtypes => 'text',
+  prosrc => 'pg_replication_origin_create' },
+
+{ oid => '6004', descr => 'drop replication origin identified by its name',
+  proname => 'pg_replication_origin_drop', provolatile => 'v',
+  proparallel => 'u', prorettype => 'void', proargtypes => 'text',
+  prosrc => 'pg_replication_origin_drop' },
+
+{ oid => '6005',
+  descr => 'translate the replication origin\'s name to its id',
+  proname => 'pg_replication_origin_oid', provolatile => 's',
+  prorettype => 'oid', proargtypes => 'text',
+  prosrc => 'pg_replication_origin_oid' },
+
+{ oid => '6006',
+  descr => 'configure session to maintain replication progress tracking for the passed in origin',
+  proname => 'pg_replication_origin_session_setup', provolatile => 'v',
+  proparallel => 'u', prorettype => 'void', proargtypes => 'text',
+  prosrc => 'pg_replication_origin_session_setup' },
+
+{ oid => '6007', descr => 'teardown configured replication progress tracking',
+  proname => 'pg_replication_origin_session_reset', provolatile => 'v',
+  proparallel => 'u', prorettype => 'void', proargtypes => '',
+  prosrc => 'pg_replication_origin_session_reset' },
+
+{ oid => '6008',
+  descr => 'is a replication origin configured in this session',
+  proname => 'pg_replication_origin_session_is_setup', provolatile => 'v',
+  proparallel => 'r', prorettype => 'bool', proargtypes => '',
+  prosrc => 'pg_replication_origin_session_is_setup' },
+
+{ oid => '6009',
+  descr => 'get the replication progress of the current session',
+  proname => 'pg_replication_origin_session_progress', provolatile => 'v',
+  proparallel => 'u', prorettype => 'pg_lsn', proargtypes => 'bool',
+  prosrc => 'pg_replication_origin_session_progress' },
+
+{ oid => '6010', descr => 'setup the transaction\'s origin lsn and timestamp',
+  proname => 'pg_replication_origin_xact_setup', provolatile => 'v',
+  proparallel => 'r', prorettype => 'void', proargtypes => 'pg_lsn timestamptz',
+  prosrc => 'pg_replication_origin_xact_setup' },
+
+{ oid => '6011', descr => 'reset the transaction\'s origin lsn and timestamp',
+  proname => 'pg_replication_origin_xact_reset', provolatile => 'v',
+  proparallel => 'r', prorettype => 'void', proargtypes => '',
+  prosrc => 'pg_replication_origin_xact_reset' },
+
+{ oid => '6012',
+  descr => 'advance replication identifier to specific location',
+  proname => 'pg_replication_origin_advance', provolatile => 'v',
+  proparallel => 'u', prorettype => 'void', proargtypes => 'text pg_lsn',
+  prosrc => 'pg_replication_origin_advance' },
+
+{ oid => '6013',
+  descr => 'get an individual replication origin\'s replication progress',
+  proname => 'pg_replication_origin_progress', provolatile => 'v',
+  proparallel => 'u', prorettype => 'pg_lsn', proargtypes => 'text bool',
+  prosrc => 'pg_replication_origin_progress' },
+
+{ oid => '6014', descr => 'get progress for all replication origins',
+  proname => 'pg_show_replication_origin_status', prorows => '100',
+  proisstrict => 'f', proretset => 't', provolatile => 'v', proparallel => 'r',
+  prorettype => 'record', proargtypes => '',
+  proallargtypes => '{oid,text,pg_lsn,pg_lsn}', proargmodes => '{o,o,o,o}',
+  proargnames => '{local_id, external_id, remote_lsn, local_lsn}',
+  prosrc => 'pg_show_replication_origin_status' },
+
+# publications
+{ oid => '6119', descr => 'get OIDs of tables in a publication',
+  proname => 'pg_get_publication_tables', prorows => '1000', proretset => 't',
+  provolatile => 's', prorettype => 'oid', proargtypes => 'text',
+  proallargtypes => '{text,oid}', proargmodes => '{i,o}',
+  proargnames => '{pubname,relid}', prosrc => 'pg_get_publication_tables' },
+{ oid => '6121',
+  descr => 'returns whether a relation can be part of a publication',
+  proname => 'pg_relation_is_publishable', provolatile => 's',
+  prorettype => 'bool', proargtypes => 'regclass',
+  prosrc => 'pg_relation_is_publishable' },
+
+# rls
+{ oid => '3298',
+  descr => 'row security for current context active on table by table oid',
+  proname => 'row_security_active', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'oid', prosrc => 'row_security_active' },
+{ oid => '3299',
+  descr => 'row security for current context active on table by table name',
+  proname => 'row_security_active', provolatile => 's', prorettype => 'bool',
+  proargtypes => 'text', prosrc => 'row_security_active_name' },
+
+# pg_config
+{ oid => '3400', descr => 'pg_config binary as a function',
+  proname => 'pg_config', prorows => '23', proretset => 't', proparallel => 'r',
+  prorettype => 'record', proargtypes => '', proallargtypes => '{text,text}',
+  proargmodes => '{o,o}', proargnames => '{name,setting}',
+  prosrc => 'pg_config' },
+
+# pg_controldata related functions
+{ oid => '3441',
+  descr => 'pg_controldata general state information as a function',
+  proname => 'pg_control_system', provolatile => 'v', prorettype => 'record',
+  proargtypes => '', proallargtypes => '{int4,int4,int8,timestamptz}',
+  proargmodes => '{o,o,o,o}',
+  proargnames => '{pg_control_version,catalog_version_no,system_identifier,pg_control_last_modified}',
+  prosrc => 'pg_control_system' },
+
+{ oid => '3442',
+  descr => 'pg_controldata checkpoint state information as a function',
+  proname => 'pg_control_checkpoint', provolatile => 'v',
+  prorettype => 'record', proargtypes => '',
+  proallargtypes => '{pg_lsn,pg_lsn,text,int4,int4,bool,text,oid,xid,xid,xid,oid,xid,xid,oid,xid,xid,timestamptz}',
+  proargmodes => '{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}',
+  proargnames => '{checkpoint_lsn,redo_lsn,redo_wal_file,timeline_id,prev_timeline_id,full_page_writes,next_xid,next_oid,next_multixact_id,next_multi_offset,oldest_xid,oldest_xid_dbid,oldest_active_xid,oldest_multi_xid,oldest_multi_dbid,oldest_commit_ts_xid,newest_commit_ts_xid,checkpoint_time}',
+  prosrc => 'pg_control_checkpoint' },
+
+{ oid => '3443',
+  descr => 'pg_controldata recovery state information as a function',
+  proname => 'pg_control_recovery', provolatile => 'v', prorettype => 'record',
+  proargtypes => '', proallargtypes => '{pg_lsn,int4,pg_lsn,pg_lsn,bool}',
+  proargmodes => '{o,o,o,o,o}',
+  proargnames => '{min_recovery_end_lsn,min_recovery_end_timeline,backup_start_lsn,backup_end_lsn,end_of_backup_record_required}',
+  prosrc => 'pg_control_recovery' },
+
+{ oid => '3444',
+  descr => 'pg_controldata init state information as a function',
+  proname => 'pg_control_init', provolatile => 'v', prorettype => 'record',
+  proargtypes => '',
+  proallargtypes => '{int4,int4,int4,int4,int4,int4,int4,int4,int4,bool,bool,int4}',
+  proargmodes => '{o,o,o,o,o,o,o,o,o,o,o,o}',
+  proargnames => '{max_data_alignment,database_block_size,blocks_per_segment,wal_block_size,bytes_per_wal_segment,max_identifier_length,max_index_columns,max_toast_chunk_size,large_object_chunk_size,float4_pass_by_value,float8_pass_by_value,data_page_checksum_version}',
+  prosrc => 'pg_control_init' },
+
+{ oid => '3996', descr => 'disable data checksums',
+  proname => 'pg_disable_data_checksums', provolatile => 'v',
+  prorettype => 'void', proargtypes => '', prosrc => 'disable_data_checksums' },
+{ oid => '3998', descr => 'enable data checksums',
+  proname => 'pg_enable_data_checksums', provolatile => 'v',
+  prorettype => 'void', proargtypes => 'int4 int4',
+  proargnames => '{cost_delay,cost_limit}', prosrc => 'enable_data_checksums' },
+
+# collation management functions
+{ oid => '3445', descr => 'import collations from operating system',
+  proname => 'pg_import_system_collations', procost => '100',
+  provolatile => 'v', proparallel => 'u', prorettype => 'int4',
+  proargtypes => 'regnamespace', prosrc => 'pg_import_system_collations' },
+
+{ oid => '3448',
+  descr => 'get actual version of collation from operating system',
+  proname => 'pg_collation_actual_version', procost => '100',
+  provolatile => 'v', prorettype => 'text', proargtypes => 'oid',
+  prosrc => 'pg_collation_actual_version' },
+
+# system management/monitoring related functions
+{ oid => '3353', descr => 'list files in the log directory',
+  proname => 'pg_ls_logdir', procost => '10', prorows => '20', proretset => 't',
+  provolatile => 'v', prorettype => 'record', proargtypes => '',
+  proallargtypes => '{text,int8,timestamptz}', proargmodes => '{o,o,o}',
+  proargnames => '{name,size,modification}', prosrc => 'pg_ls_logdir' },
+{ oid => '3354', descr => 'list of files in the WAL directory',
+  proname => 'pg_ls_waldir', procost => '10', prorows => '20', proretset => 't',
+  provolatile => 'v', prorettype => 'record', proargtypes => '',
+  proallargtypes => '{text,int8,timestamptz}', proargmodes => '{o,o,o}',
+  proargnames => '{name,size,modification}', prosrc => 'pg_ls_waldir' },
+
+# hash partitioning constraint function
+{ oid => '5028', descr => 'hash partition CHECK constraint',
+  proname => 'satisfies_hash_partition', provariadic => 'any',
+  proisstrict => 'f', prorettype => 'bool', proargtypes => 'oid int4 int4 any',
+  proargmodes => '{i,i,i,v}', prosrc => 'satisfies_hash_partition' },
+
+]
index 42c2c429b40be3aefea5c3704137a78b341fbc4f..0b5203a68a2b227524fae16344a8cc1b183c65d3 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_proc.h
  *       definition of the system "procedure" relation (pg_proc)
- *       along with the relation's initial contents.
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
@@ -10,13 +9,8 @@
  * src/include/catalog/pg_proc.h
  *
  * NOTES
- *       The script catalog/genbki.pl reads this file and generates .bki
- *       information from the DATA() statements.  utils/Gen_fmgrtab.pl
- *       generates fmgroids.h and fmgrtab.c the same way.
- *
- *       XXX do NOT break up DATA() statements into multiple lines!
- *               the scripts are not as smart as you might think...
- *       XXX (eg. #if 0 #endif won't do what you think)
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_PROC_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_proc_d.h"
 
 /* ----------------
  *             pg_proc definition.  cpp turns this into
  *             typedef struct FormData_pg_proc
  * ----------------
  */
-#define ProcedureRelationId  1255
-#define ProcedureRelation_Rowtype_Id  81
-
-CATALOG(pg_proc,1255) BKI_BOOTSTRAP BKI_ROWTYPE_OID(81) BKI_SCHEMA_MACRO
+CATALOG(pg_proc,1255,ProcedureRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(81,ProcedureRelation_Rowtype_Id) BKI_SCHEMA_MACRO
 {
-       NameData        proname;                /* procedure name */
-       Oid                     pronamespace;   /* OID of namespace containing this proc */
-       Oid                     proowner;               /* procedure owner */
-       Oid                     prolang;                /* OID of pg_language entry */
-       float4          procost;                /* estimated execution cost */
-       float4          prorows;                /* estimated # of rows out (if proretset) */
-       Oid                     provariadic;    /* element type of variadic array, or 0 */
-       regproc         protransform;   /* transforms calls to it during planning */
-       char            prokind;                /* see PROKIND_ categories below */
-       bool            prosecdef;              /* security definer */
-       bool            proleakproof;   /* is it a leak-proof function? */
-       bool            proisstrict;    /* strict with respect to NULLs? */
-       bool            proretset;              /* returns a set? */
-       char            provolatile;    /* see PROVOLATILE_ categories below */
-       char            proparallel;    /* see PROPARALLEL_ categories below */
-       int16           pronargs;               /* number of arguments */
-       int16           pronargdefaults;        /* number of arguments with defaults */
-       Oid                     prorettype;             /* OID of result type */
-
-       /*
-        * variable-length fields start here, but we allow direct access to
-        * proargtypes
-        */
-       oidvector       proargtypes;    /* parameter types (excludes OUT params) */
-
-#ifdef CATALOG_VARLEN
-       Oid                     proallargtypes[1];      /* all param types (NULL if IN only) */
-       char            proargmodes[1]; /* parameter modes (NULL if IN only) */
-       text            proargnames[1]; /* parameter names (NULL if no names) */
-       pg_node_tree proargdefaults;    /* list of expression trees for argument
-                                                                        * defaults (NULL if none) */
-       Oid                     protrftypes[1]; /* types for which to apply transforms */
-       text            prosrc BKI_FORCE_NOT_NULL;      /* procedure source text */
-       text            probin;                 /* secondary procedure info (can be NULL) */
-       text            proconfig[1];   /* procedure-local GUC settings */
-       aclitem         proacl[1];              /* access permissions */
-#endif
-} FormData_pg_proc;
-
-/* ----------------
- *             Form_pg_proc corresponds to a pointer to a tuple with
- *             the format of pg_proc relation.
- * ----------------
- */
-typedef FormData_pg_proc *Form_pg_proc;
-
-/* ----------------
- *             compiler constants for pg_proc
- * ----------------
- */
-#define Natts_pg_proc                                  28
-#define Anum_pg_proc_proname                   1
-#define Anum_pg_proc_pronamespace              2
-#define Anum_pg_proc_proowner                  3
-#define Anum_pg_proc_prolang                   4
-#define Anum_pg_proc_procost                   5
-#define Anum_pg_proc_prorows                   6
-#define Anum_pg_proc_provariadic               7
-#define Anum_pg_proc_protransform              8
-#define Anum_pg_proc_prokind                   9
-#define Anum_pg_proc_prosecdef                 10
-#define Anum_pg_proc_proleakproof              11
-#define Anum_pg_proc_proisstrict               12
-#define Anum_pg_proc_proretset                 13
-#define Anum_pg_proc_provolatile               14
-#define Anum_pg_proc_proparallel               15
-#define Anum_pg_proc_pronargs                  16
-#define Anum_pg_proc_pronargdefaults   17
-#define Anum_pg_proc_prorettype                        18
-#define Anum_pg_proc_proargtypes               19
-#define Anum_pg_proc_proallargtypes            20
-#define Anum_pg_proc_proargmodes               21
-#define Anum_pg_proc_proargnames               22
-#define Anum_pg_proc_proargdefaults            23
-#define Anum_pg_proc_protrftypes               24
-#define Anum_pg_proc_prosrc                            25
-#define Anum_pg_proc_probin                            26
-#define Anum_pg_proc_proconfig                 27
-#define Anum_pg_proc_proacl                            28
-
-/* ----------------
- *             initial contents of pg_proc
- * ----------------
- */
-
-/*
- * Note: every entry in pg_proc.h is expected to have a DESCR() comment,
- * except for functions that implement pg_operator.h operators and don't
- * have a good reason to be called directly rather than via the operator.
- * (If you do expect such a function to be used directly, you should
- * duplicate the operator's comment.)  initdb will supply suitable default
- * comments for functions referenced by pg_operator.
- *
- * Try to follow the style of existing functions' comments.
- * Some recommended conventions:
- *             "I/O" for typinput, typoutput, typreceive, typsend functions
- *             "I/O typmod" for typmodin, typmodout functions
- *             "aggregate transition function" for aggtransfn functions, unless
- *                                     they are reasonably useful in their own right
- *             "aggregate final function" for aggfinalfn functions (likewise)
- *             "convert srctypename to desttypename" for cast functions
- *             "less-equal-greater" for B-tree comparison functions
- */
-
-/* keep the following ordered by OID so that later changes can be made easier */
-
-/* OIDS 1 - 99 */
-
-DATA(insert OID = 1242 (  boolin                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "2275" _null_ _null_ _null_ _null_ _null_ boolin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1243 (  boolout                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "16" _null_ _null_ _null_ _null_ _null_ boolout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1244 (  byteain                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "2275" _null_ _null_ _null_ _null_ _null_ byteain _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  31 (  byteaout                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "17" _null_ _null_ _null_ _null_ _null_ byteaout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1245 (  charin                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 18 "2275" _null_ _null_ _null_ _null_ _null_ charin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  33 (  charout                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "18" _null_ _null_ _null_ _null_ _null_ charout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  34 (  namein                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 19 "2275" _null_ _null_ _null_ _null_ _null_ namein _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  35 (  nameout                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "19" _null_ _null_ _null_ _null_ _null_ nameout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  38 (  int2in                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 21 "2275" _null_ _null_ _null_ _null_ _null_ int2in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  39 (  int2out                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "21" _null_ _null_ _null_ _null_ _null_ int2out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  40 (  int2vectorin     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 22 "2275" _null_ _null_ _null_ _null_ _null_ int2vectorin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  41 (  int2vectorout    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "22" _null_ _null_ _null_ _null_ _null_ int2vectorout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  42 (  int4in                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "2275" _null_ _null_ _null_ _null_ _null_ int4in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  43 (  int4out                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "23" _null_ _null_ _null_ _null_ _null_ int4out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  44 (  regprocin                PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 24 "2275" _null_ _null_ _null_ _null_ _null_ regprocin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  45 (  regprocout               PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "24" _null_ _null_ _null_ _null_ _null_ regprocout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3494 (  to_regproc           PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 24 "25" _null_ _null_ _null_ _null_ _null_ to_regproc _null_ _null_ _null_ ));
-DESCR("convert proname to regproc");
-DATA(insert OID = 3479 (  to_regprocedure      PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2202 "25" _null_ _null_ _null_ _null_ _null_ to_regprocedure _null_ _null_ _null_ ));
-DESCR("convert proname to regprocedure");
-DATA(insert OID =  46 (  textin                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "2275" _null_ _null_ _null_ _null_ _null_ textin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  47 (  textout                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "25" _null_ _null_ _null_ _null_ _null_ textout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  48 (  tidin                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 27 "2275" _null_ _null_ _null_ _null_ _null_ tidin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  49 (  tidout                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "27" _null_ _null_ _null_ _null_ _null_ tidout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  50 (  xidin                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 28 "2275" _null_ _null_ _null_ _null_ _null_ xidin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  51 (  xidout                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "28" _null_ _null_ _null_ _null_ _null_ xidout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  52 (  cidin                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 29 "2275" _null_ _null_ _null_ _null_ _null_ cidin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  53 (  cidout                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "29" _null_ _null_ _null_ _null_ _null_ cidout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  54 (  oidvectorin      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 30 "2275" _null_ _null_ _null_ _null_ _null_ oidvectorin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  55 (  oidvectorout     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "30" _null_ _null_ _null_ _null_ _null_ oidvectorout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  56 (  boollt                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "16 16" _null_ _null_ _null_ _null_ _null_ boollt _null_ _null_ _null_ ));
-DATA(insert OID =  57 (  boolgt                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "16 16" _null_ _null_ _null_ _null_ _null_ boolgt _null_ _null_ _null_ ));
-DATA(insert OID =  60 (  booleq                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "16 16" _null_ _null_ _null_ _null_ _null_ booleq _null_ _null_ _null_ ));
-DATA(insert OID =  61 (  chareq                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "18 18" _null_ _null_ _null_ _null_ _null_ chareq _null_ _null_ _null_ ));
-DATA(insert OID =  62 (  nameeq                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "19 19" _null_ _null_ _null_ _null_ _null_ nameeq _null_ _null_ _null_ ));
-DATA(insert OID =  63 (  int2eq                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 21" _null_ _null_ _null_ _null_ _null_ int2eq _null_ _null_ _null_ ));
-DATA(insert OID =  64 (  int2lt                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 21" _null_ _null_ _null_ _null_ _null_ int2lt _null_ _null_ _null_ ));
-DATA(insert OID =  65 (  int4eq                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 23" _null_ _null_ _null_ _null_ _null_ int4eq _null_ _null_ _null_ ));
-DATA(insert OID =  66 (  int4lt                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 23" _null_ _null_ _null_ _null_ _null_ int4lt _null_ _null_ _null_ ));
-DATA(insert OID =  67 (  texteq                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ texteq _null_ _null_ _null_ ));
-DATA(insert OID =  3696 ( starts_with     PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ text_starts_with _null_ _null_ _null_ ));
-DATA(insert OID =  68 (  xideq                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "28 28" _null_ _null_ _null_ _null_ _null_ xideq _null_ _null_ _null_ ));
-DATA(insert OID = 3308 (  xidneq                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "28 28" _null_ _null_ _null_ _null_ _null_ xidneq _null_ _null_ _null_ ));
-DATA(insert OID =  69 (  cideq                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "29 29" _null_ _null_ _null_ _null_ _null_ cideq _null_ _null_ _null_ ));
-DATA(insert OID =  70 (  charne                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "18 18" _null_ _null_ _null_ _null_ _null_ charne _null_ _null_ _null_ ));
-DATA(insert OID = 1246 (  charlt                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "18 18" _null_ _null_ _null_ _null_ _null_ charlt _null_ _null_ _null_ ));
-DATA(insert OID =  72 (  charle                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "18 18" _null_ _null_ _null_ _null_ _null_ charle _null_ _null_ _null_ ));
-DATA(insert OID =  73 (  chargt                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "18 18" _null_ _null_ _null_ _null_ _null_ chargt _null_ _null_ _null_ ));
-DATA(insert OID =  74 (  charge                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "18 18" _null_ _null_ _null_ _null_ _null_ charge _null_ _null_ _null_ ));
-DATA(insert OID =  77 (  int4                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23  "18" _null_ _null_ _null_ _null_ _null_ chartoi4 _null_ _null_ _null_ ));
-DESCR("convert char to int4");
-DATA(insert OID =  78 (  char                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 18  "23" _null_ _null_ _null_ _null_ _null_ i4tochar _null_ _null_ _null_ ));
-DESCR("convert int4 to char");
-
-DATA(insert OID =  79 (  nameregexeq      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "19 25" _null_ _null_ _null_ _null_ _null_ nameregexeq _null_ _null_ _null_ ));
-DATA(insert OID = 1252 (  nameregexne     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "19 25" _null_ _null_ _null_ _null_ _null_ nameregexne _null_ _null_ _null_ ));
-DATA(insert OID = 1254 (  textregexeq     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ textregexeq _null_ _null_ _null_ ));
-DATA(insert OID = 1256 (  textregexne     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ textregexne _null_ _null_ _null_ ));
-DATA(insert OID = 1257 (  textlen                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "25" _null_ _null_ _null_ _null_ _null_ textlen _null_ _null_ _null_ ));
-DESCR("length");
-DATA(insert OID = 1258 (  textcat                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25 "25 25" _null_ _null_ _null_ _null_ _null_ textcat _null_ _null_ _null_ ));
-
-DATA(insert OID =  84 (  boolne                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "16 16" _null_ _null_ _null_ _null_ _null_ boolne _null_ _null_ _null_ ));
-DATA(insert OID =  89 (  version                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 0 0 25 "" _null_ _null_ _null_ _null_ _null_ pgsql_version _null_ _null_ _null_ ));
-DESCR("PostgreSQL version string");
-
-DATA(insert OID = 86  (  pg_ddl_command_in             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 32 "2275" _null_ _null_ _null_ _null_ _null_ pg_ddl_command_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 87  (  pg_ddl_command_out            PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "32" _null_ _null_ _null_ _null_ _null_ pg_ddl_command_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 88  (  pg_ddl_command_recv   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 32 "2281" _null_ _null_ _null_ _null_ _null_ pg_ddl_command_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 90  (  pg_ddl_command_send   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "32" _null_ _null_ _null_ _null_ _null_ pg_ddl_command_send _null_ _null_ _null_ ));
-DESCR("I/O");
-
-/* OIDS 100 - 199 */
-
-DATA(insert OID = 101 (  eqsel                    PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_    eqsel _null_ _null_ _null_ ));
-DESCR("restriction selectivity of = and related operators");
-DATA(insert OID = 102 (  neqsel                           PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_    neqsel _null_ _null_ _null_ ));
-DESCR("restriction selectivity of <> and related operators");
-DATA(insert OID = 103 (  scalarltsel      PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_    scalarltsel _null_ _null_ _null_ ));
-DESCR("restriction selectivity of < and related operators on scalar datatypes");
-DATA(insert OID = 104 (  scalargtsel      PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_    scalargtsel _null_ _null_ _null_ ));
-DESCR("restriction selectivity of > and related operators on scalar datatypes");
-DATA(insert OID = 105 (  eqjoinsel                PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_ _null_ eqjoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity of = and related operators");
-DATA(insert OID = 106 (  neqjoinsel               PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_ _null_ neqjoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity of <> and related operators");
-DATA(insert OID = 107 (  scalarltjoinsel   PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_ _null_ scalarltjoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity of < and related operators on scalar datatypes");
-DATA(insert OID = 108 (  scalargtjoinsel   PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_ _null_ scalargtjoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity of > and related operators on scalar datatypes");
-
-DATA(insert OID = 336 (  scalarlesel      PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_    scalarlesel _null_ _null_ _null_ ));
-DESCR("restriction selectivity of <= and related operators on scalar datatypes");
-DATA(insert OID = 337 (  scalargesel      PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_    scalargesel _null_ _null_ _null_ ));
-DESCR("restriction selectivity of >= and related operators on scalar datatypes");
-DATA(insert OID = 386 (  scalarlejoinsel   PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_ _null_ scalarlejoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity of <= and related operators on scalar datatypes");
-DATA(insert OID = 398 (  scalargejoinsel   PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_ _null_ scalargejoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity of >= and related operators on scalar datatypes");
-
-DATA(insert OID =  109 (  unknownin               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 705 "2275" _null_ _null_ _null_ _null_ _null_ unknownin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  110 (  unknownout      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "705" _null_ _null_ _null_ _null_ _null_ unknownout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 111 (  numeric_fac      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "20" _null_ _null_ _null_ _null_ _null_        numeric_fac _null_ _null_ _null_ ));
-
-DATA(insert OID = 115 (  box_above_eq     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_above_eq _null_ _null_ _null_ ));
-DATA(insert OID = 116 (  box_below_eq     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_below_eq _null_ _null_ _null_ ));
-
-DATA(insert OID = 117 (  point_in                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 600 "2275" _null_ _null_ _null_ _null_ _null_ point_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 118 (  point_out                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "600" _null_ _null_ _null_ _null_ _null_ point_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 119 (  lseg_in                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 601 "2275" _null_ _null_ _null_ _null_ _null_ lseg_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 120 (  lseg_out                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "601" _null_ _null_ _null_ _null_ _null_ lseg_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 121 (  path_in                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 602 "2275" _null_ _null_ _null_ _null_ _null_ path_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 122 (  path_out                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "602" _null_ _null_ _null_ _null_ _null_ path_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 123 (  box_in                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 603 "2275" _null_ _null_ _null_ _null_ _null_ box_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 124 (  box_out                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "603" _null_ _null_ _null_ _null_ _null_ box_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 125 (  box_overlap      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_overlap _null_ _null_ _null_ ));
-DATA(insert OID = 126 (  box_ge                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_ge _null_ _null_ _null_ ));
-DATA(insert OID = 127 (  box_gt                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_gt _null_ _null_ _null_ ));
-DATA(insert OID = 128 (  box_eq                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_eq _null_ _null_ _null_ ));
-DATA(insert OID = 129 (  box_lt                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_lt _null_ _null_ _null_ ));
-DATA(insert OID = 130 (  box_le                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_le _null_ _null_ _null_ ));
-DATA(insert OID = 131 (  point_above      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "600 600" _null_ _null_ _null_ _null_ _null_ point_above _null_ _null_ _null_ ));
-DATA(insert OID = 132 (  point_left               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "600 600" _null_ _null_ _null_ _null_ _null_ point_left _null_ _null_ _null_ ));
-DATA(insert OID = 133 (  point_right      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "600 600" _null_ _null_ _null_ _null_ _null_ point_right _null_ _null_ _null_ ));
-DATA(insert OID = 134 (  point_below      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "600 600" _null_ _null_ _null_ _null_ _null_ point_below _null_ _null_ _null_ ));
-DATA(insert OID = 135 (  point_eq                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "600 600" _null_ _null_ _null_ _null_ _null_ point_eq _null_ _null_ _null_ ));
-DATA(insert OID = 136 (  on_pb                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "600 603" _null_ _null_ _null_ _null_ _null_ on_pb _null_ _null_ _null_ ));
-DATA(insert OID = 137 (  on_ppath                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "600 602" _null_ _null_ _null_ _null_ _null_ on_ppath _null_ _null_ _null_ ));
-DATA(insert OID = 138 (  box_center               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 600 "603" _null_ _null_ _null_ _null_ _null_        box_center _null_ _null_ _null_ ));
-DATA(insert OID = 139 (  areasel                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_    areasel _null_ _null_ _null_ ));
-DESCR("restriction selectivity for area-comparison operators");
-DATA(insert OID = 140 (  areajoinsel      PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_ _null_ areajoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity for area-comparison operators");
-DATA(insert OID = 141 (  int4mul                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 23" _null_ _null_ _null_ _null_ _null_ int4mul _null_ _null_ _null_ ));
-DATA(insert OID = 144 (  int4ne                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 23" _null_ _null_ _null_ _null_ _null_ int4ne _null_ _null_ _null_ ));
-DATA(insert OID = 145 (  int2ne                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 21" _null_ _null_ _null_ _null_ _null_ int2ne _null_ _null_ _null_ ));
-DATA(insert OID = 146 (  int2gt                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 21" _null_ _null_ _null_ _null_ _null_ int2gt _null_ _null_ _null_ ));
-DATA(insert OID = 147 (  int4gt                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 23" _null_ _null_ _null_ _null_ _null_ int4gt _null_ _null_ _null_ ));
-DATA(insert OID = 148 (  int2le                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 21" _null_ _null_ _null_ _null_ _null_ int2le _null_ _null_ _null_ ));
-DATA(insert OID = 149 (  int4le                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 23" _null_ _null_ _null_ _null_ _null_ int4le _null_ _null_ _null_ ));
-DATA(insert OID = 150 (  int4ge                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 23" _null_ _null_ _null_ _null_ _null_ int4ge _null_ _null_ _null_ ));
-DATA(insert OID = 151 (  int2ge                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 21" _null_ _null_ _null_ _null_ _null_ int2ge _null_ _null_ _null_ ));
-DATA(insert OID = 152 (  int2mul                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 21 "21 21" _null_ _null_ _null_ _null_ _null_ int2mul _null_ _null_ _null_ ));
-DATA(insert OID = 153 (  int2div                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 21 "21 21" _null_ _null_ _null_ _null_ _null_ int2div _null_ _null_ _null_ ));
-DATA(insert OID = 154 (  int4div                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 23" _null_ _null_ _null_ _null_ _null_ int4div _null_ _null_ _null_ ));
-DATA(insert OID = 155 (  int2mod                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 21 "21 21" _null_ _null_ _null_ _null_ _null_ int2mod _null_ _null_ _null_ ));
-DATA(insert OID = 156 (  int4mod                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 23" _null_ _null_ _null_ _null_ _null_ int4mod _null_ _null_ _null_ ));
-DATA(insert OID = 157 (  textne                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ textne _null_ _null_ _null_ ));
-DATA(insert OID = 158 (  int24eq                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 23" _null_ _null_ _null_ _null_ _null_ int24eq _null_ _null_ _null_ ));
-DATA(insert OID = 159 (  int42eq                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 21" _null_ _null_ _null_ _null_ _null_ int42eq _null_ _null_ _null_ ));
-DATA(insert OID = 160 (  int24lt                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 23" _null_ _null_ _null_ _null_ _null_ int24lt _null_ _null_ _null_ ));
-DATA(insert OID = 161 (  int42lt                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 21" _null_ _null_ _null_ _null_ _null_ int42lt _null_ _null_ _null_ ));
-DATA(insert OID = 162 (  int24gt                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 23" _null_ _null_ _null_ _null_ _null_ int24gt _null_ _null_ _null_ ));
-DATA(insert OID = 163 (  int42gt                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 21" _null_ _null_ _null_ _null_ _null_ int42gt _null_ _null_ _null_ ));
-DATA(insert OID = 164 (  int24ne                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 23" _null_ _null_ _null_ _null_ _null_ int24ne _null_ _null_ _null_ ));
-DATA(insert OID = 165 (  int42ne                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 21" _null_ _null_ _null_ _null_ _null_ int42ne _null_ _null_ _null_ ));
-DATA(insert OID = 166 (  int24le                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 23" _null_ _null_ _null_ _null_ _null_ int24le _null_ _null_ _null_ ));
-DATA(insert OID = 167 (  int42le                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 21" _null_ _null_ _null_ _null_ _null_ int42le _null_ _null_ _null_ ));
-DATA(insert OID = 168 (  int24ge                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 23" _null_ _null_ _null_ _null_ _null_ int24ge _null_ _null_ _null_ ));
-DATA(insert OID = 169 (  int42ge                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 21" _null_ _null_ _null_ _null_ _null_ int42ge _null_ _null_ _null_ ));
-DATA(insert OID = 170 (  int24mul                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "21 23" _null_ _null_ _null_ _null_ _null_ int24mul _null_ _null_ _null_ ));
-DATA(insert OID = 171 (  int42mul                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 21" _null_ _null_ _null_ _null_ _null_ int42mul _null_ _null_ _null_ ));
-DATA(insert OID = 172 (  int24div                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "21 23" _null_ _null_ _null_ _null_ _null_ int24div _null_ _null_ _null_ ));
-DATA(insert OID = 173 (  int42div                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 21" _null_ _null_ _null_ _null_ _null_ int42div _null_ _null_ _null_ ));
-DATA(insert OID = 176 (  int2pl                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 21 "21 21" _null_ _null_ _null_ _null_ _null_ int2pl _null_ _null_ _null_ ));
-DATA(insert OID = 177 (  int4pl                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 23" _null_ _null_ _null_ _null_ _null_ int4pl _null_ _null_ _null_ ));
-DATA(insert OID = 178 (  int24pl                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "21 23" _null_ _null_ _null_ _null_ _null_ int24pl _null_ _null_ _null_ ));
-DATA(insert OID = 179 (  int42pl                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 21" _null_ _null_ _null_ _null_ _null_ int42pl _null_ _null_ _null_ ));
-DATA(insert OID = 180 (  int2mi                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 21 "21 21" _null_ _null_ _null_ _null_ _null_ int2mi _null_ _null_ _null_ ));
-DATA(insert OID = 181 (  int4mi                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 23" _null_ _null_ _null_ _null_ _null_ int4mi _null_ _null_ _null_ ));
-DATA(insert OID = 182 (  int24mi                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "21 23" _null_ _null_ _null_ _null_ _null_ int24mi _null_ _null_ _null_ ));
-DATA(insert OID = 183 (  int42mi                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 21" _null_ _null_ _null_ _null_ _null_ int42mi _null_ _null_ _null_ ));
-DATA(insert OID = 184 (  oideq                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "26 26" _null_ _null_ _null_ _null_ _null_ oideq _null_ _null_ _null_ ));
-DATA(insert OID = 185 (  oidne                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "26 26" _null_ _null_ _null_ _null_ _null_ oidne _null_ _null_ _null_ ));
-DATA(insert OID = 186 (  box_same                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_same _null_ _null_ _null_ ));
-DATA(insert OID = 187 (  box_contain      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_contain _null_ _null_ _null_ ));
-DATA(insert OID = 188 (  box_left                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_left _null_ _null_ _null_ ));
-DATA(insert OID = 189 (  box_overleft     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_overleft _null_ _null_ _null_ ));
-DATA(insert OID = 190 (  box_overright    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_overright _null_ _null_ _null_ ));
-DATA(insert OID = 191 (  box_right                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_right _null_ _null_ _null_ ));
-DATA(insert OID = 192 (  box_contained    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_contained _null_ _null_ _null_ ));
-DATA(insert OID = 193 (  box_contain_pt    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 600" _null_ _null_ _null_ _null_ _null_ box_contain_pt _null_ _null_ _null_ ));
-
-DATA(insert OID = 195 (  pg_node_tree_in       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 194 "2275" _null_ _null_ _null_ _null_ _null_ pg_node_tree_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 196 (  pg_node_tree_out      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "194" _null_ _null_ _null_ _null_ _null_ pg_node_tree_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 197 (  pg_node_tree_recv     PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 194 "2281" _null_ _null_ _null_ _null_ _null_ pg_node_tree_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 198 (  pg_node_tree_send     PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 17 "194" _null_ _null_ _null_ _null_ _null_    pg_node_tree_send _null_ _null_ _null_ ));
-DESCR("I/O");
-
-/* OIDS 200 - 299 */
-
-DATA(insert OID = 200 (  float4in                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 700 "2275" _null_ _null_ _null_ _null_ _null_ float4in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 201 (  float4out                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "700" _null_ _null_ _null_ _null_ _null_ float4out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 202 (  float4mul                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 700 "700 700" _null_ _null_ _null_ _null_ _null_    float4mul _null_ _null_ _null_ ));
-DATA(insert OID = 203 (  float4div                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 700 "700 700" _null_ _null_ _null_ _null_ _null_    float4div _null_ _null_ _null_ ));
-DATA(insert OID = 204 (  float4pl                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 700 "700 700" _null_ _null_ _null_ _null_ _null_    float4pl _null_ _null_ _null_ ));
-DATA(insert OID = 205 (  float4mi                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 700 "700 700" _null_ _null_ _null_ _null_ _null_    float4mi _null_ _null_ _null_ ));
-DATA(insert OID = 206 (  float4um                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 700 "700" _null_ _null_ _null_ _null_ _null_        float4um _null_ _null_ _null_ ));
-DATA(insert OID = 207 (  float4abs                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 700 "700" _null_ _null_ _null_ _null_ _null_        float4abs _null_ _null_ _null_ ));
-DATA(insert OID = 208 (  float4_accum     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1022 "1022 700" _null_ _null_ _null_ _null_ _null_ float4_accum _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 209 (  float4larger     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 700 "700 700" _null_ _null_ _null_ _null_ _null_    float4larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 211 (  float4smaller    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 700 "700 700" _null_ _null_ _null_ _null_ _null_    float4smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-
-DATA(insert OID = 212 (  int4um                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ int4um _null_ _null_ _null_ ));
-DATA(insert OID = 213 (  int2um                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 21 "21" _null_ _null_ _null_ _null_ _null_ int2um _null_ _null_ _null_ ));
-
-DATA(insert OID = 214 (  float8in                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "2275" _null_ _null_ _null_ _null_ _null_ float8in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 215 (  float8out                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "701" _null_ _null_ _null_ _null_ _null_ float8out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 216 (  float8mul                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_    float8mul _null_ _null_ _null_ ));
-DATA(insert OID = 217 (  float8div                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_    float8div _null_ _null_ _null_ ));
-DATA(insert OID = 218 (  float8pl                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_    float8pl _null_ _null_ _null_ ));
-DATA(insert OID = 219 (  float8mi                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_    float8mi _null_ _null_ _null_ ));
-DATA(insert OID = 220 (  float8um                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_        float8um _null_ _null_ _null_ ));
-DATA(insert OID = 221 (  float8abs                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_        float8abs _null_ _null_ _null_ ));
-DATA(insert OID = 222 (  float8_accum     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1022 "1022 701" _null_ _null_ _null_ _null_ _null_ float8_accum _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 276 (  float8_combine                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1022 "1022 1022" _null_ _null_ _null_ _null_ _null_ float8_combine _null_ _null_ _null_ ));
-DESCR("aggregate combine function");
-DATA(insert OID = 223 (  float8larger     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_    float8larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 224 (  float8smaller    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_    float8smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-
-DATA(insert OID = 225 (  lseg_center      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 600 "601" _null_ _null_ _null_ _null_ _null_        lseg_center _null_ _null_ _null_ ));
-DATA(insert OID = 226 (  path_center      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 600 "602" _null_ _null_ _null_ _null_ _null_        path_center _null_ _null_ _null_ ));
-DATA(insert OID = 227 (  poly_center      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 600 "604" _null_ _null_ _null_ _null_ _null_        poly_center _null_ _null_ _null_ ));
-
-DATA(insert OID = 228 (  dround                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_        dround _null_ _null_ _null_ ));
-DESCR("round to nearest integer");
-DATA(insert OID = 229 (  dtrunc                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_        dtrunc _null_ _null_ _null_ ));
-DESCR("truncate to integer");
-DATA(insert OID = 2308 ( ceil                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_        dceil _null_ _null_ _null_ ));
-DESCR("nearest integer >= value");
-DATA(insert OID = 2320 ( ceiling                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_        dceil _null_ _null_ _null_ ));
-DESCR("nearest integer >= value");
-DATA(insert OID = 2309 ( floor                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_        dfloor _null_ _null_ _null_ ));
-DESCR("nearest integer <= value");
-DATA(insert OID = 2310 ( sign                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_        dsign _null_ _null_ _null_ ));
-DESCR("sign of value");
-DATA(insert OID = 230 (  dsqrt                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_        dsqrt _null_ _null_ _null_ ));
-DATA(insert OID = 231 (  dcbrt                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_        dcbrt _null_ _null_ _null_ ));
-DATA(insert OID = 232 (  dpow                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_    dpow _null_ _null_ _null_ ));
-DATA(insert OID = 233 (  dexp                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_        dexp _null_ _null_ _null_ ));
-DESCR("natural exponential (e^x)");
-DATA(insert OID = 234 (  dlog1                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_        dlog1 _null_ _null_ _null_ ));
-DESCR("natural logarithm");
-DATA(insert OID = 235 (  float8                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "21" _null_ _null_ _null_ _null_ _null_ i2tod _null_ _null_ _null_ ));
-DESCR("convert int2 to float8");
-DATA(insert OID = 236 (  float4                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 700 "21" _null_ _null_ _null_ _null_ _null_ i2tof _null_ _null_ _null_ ));
-DESCR("convert int2 to float4");
-DATA(insert OID = 237 (  int2                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 21 "701" _null_ _null_ _null_ _null_ _null_ dtoi2 _null_ _null_ _null_ ));
-DESCR("convert float8 to int2");
-DATA(insert OID = 238 (  int2                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 21 "700" _null_ _null_ _null_ _null_ _null_ ftoi2 _null_ _null_ _null_ ));
-DESCR("convert float4 to int2");
-DATA(insert OID = 239 (  line_distance    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "628 628" _null_ _null_ _null_ _null_ _null_    line_distance _null_ _null_ _null_ ));
-
-DATA(insert OID = 240 (  abstimein                PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 702 "2275" _null_ _null_ _null_ _null_ _null_ abstimein _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 241 (  abstimeout               PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "702" _null_ _null_ _null_ _null_ _null_ abstimeout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 242 (  reltimein                PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 703 "2275" _null_ _null_ _null_ _null_ _null_ reltimein _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 243 (  reltimeout               PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "703" _null_ _null_ _null_ _null_ _null_ reltimeout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 244 (  timepl                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 702 "702 703" _null_ _null_ _null_ _null_ _null_    timepl _null_ _null_ _null_ ));
-DATA(insert OID = 245 (  timemi                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 702 "702 703" _null_ _null_ _null_ _null_ _null_    timemi _null_ _null_ _null_ ));
-DATA(insert OID = 246 (  tintervalin      PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 704 "2275" _null_ _null_ _null_ _null_ _null_ tintervalin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 247 (  tintervalout     PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "704" _null_ _null_ _null_ _null_ _null_ tintervalout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 248 (  intinterval      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "702 704" _null_ _null_ _null_ _null_ _null_ intinterval _null_ _null_ _null_ ));
-DATA(insert OID = 249 (  tintervalrel     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 703 "704" _null_ _null_ _null_ _null_ _null_        tintervalrel _null_ _null_ _null_ ));
-DESCR("tinterval to reltime");
-DATA(insert OID = 250 (  timenow                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 0 0 702 "" _null_ _null_ _null_ _null_ _null_ timenow _null_ _null_ _null_ ));
-DESCR("current date and time (abstime)");
-DATA(insert OID = 251 (  abstimeeq                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "702 702" _null_ _null_ _null_ _null_ _null_ abstimeeq _null_ _null_ _null_ ));
-DATA(insert OID = 252 (  abstimene                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "702 702" _null_ _null_ _null_ _null_ _null_ abstimene _null_ _null_ _null_ ));
-DATA(insert OID = 253 (  abstimelt                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "702 702" _null_ _null_ _null_ _null_ _null_ abstimelt _null_ _null_ _null_ ));
-DATA(insert OID = 254 (  abstimegt                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "702 702" _null_ _null_ _null_ _null_ _null_ abstimegt _null_ _null_ _null_ ));
-DATA(insert OID = 255 (  abstimele                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "702 702" _null_ _null_ _null_ _null_ _null_ abstimele _null_ _null_ _null_ ));
-DATA(insert OID = 256 (  abstimege                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "702 702" _null_ _null_ _null_ _null_ _null_ abstimege _null_ _null_ _null_ ));
-DATA(insert OID = 257 (  reltimeeq                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "703 703" _null_ _null_ _null_ _null_ _null_ reltimeeq _null_ _null_ _null_ ));
-DATA(insert OID = 258 (  reltimene                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "703 703" _null_ _null_ _null_ _null_ _null_ reltimene _null_ _null_ _null_ ));
-DATA(insert OID = 259 (  reltimelt                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "703 703" _null_ _null_ _null_ _null_ _null_ reltimelt _null_ _null_ _null_ ));
-DATA(insert OID = 260 (  reltimegt                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "703 703" _null_ _null_ _null_ _null_ _null_ reltimegt _null_ _null_ _null_ ));
-DATA(insert OID = 261 (  reltimele                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "703 703" _null_ _null_ _null_ _null_ _null_ reltimele _null_ _null_ _null_ ));
-DATA(insert OID = 262 (  reltimege                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "703 703" _null_ _null_ _null_ _null_ _null_ reltimege _null_ _null_ _null_ ));
-DATA(insert OID = 263 (  tintervalsame    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "704 704" _null_ _null_ _null_ _null_ _null_ tintervalsame _null_ _null_ _null_ ));
-DATA(insert OID = 264 (  tintervalct      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "704 704" _null_ _null_ _null_ _null_ _null_ tintervalct _null_ _null_ _null_ ));
-DATA(insert OID = 265 (  tintervalov      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "704 704" _null_ _null_ _null_ _null_ _null_ tintervalov _null_ _null_ _null_ ));
-DATA(insert OID = 266 (  tintervalleneq    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "704 703" _null_ _null_ _null_ _null_ _null_ tintervalleneq _null_ _null_ _null_ ));
-DATA(insert OID = 267 (  tintervallenne    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "704 703" _null_ _null_ _null_ _null_ _null_ tintervallenne _null_ _null_ _null_ ));
-DATA(insert OID = 268 (  tintervallenlt    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "704 703" _null_ _null_ _null_ _null_ _null_ tintervallenlt _null_ _null_ _null_ ));
-DATA(insert OID = 269 (  tintervallengt    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "704 703" _null_ _null_ _null_ _null_ _null_ tintervallengt _null_ _null_ _null_ ));
-DATA(insert OID = 270 (  tintervallenle    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "704 703" _null_ _null_ _null_ _null_ _null_ tintervallenle _null_ _null_ _null_ ));
-DATA(insert OID = 271 (  tintervallenge    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "704 703" _null_ _null_ _null_ _null_ _null_ tintervallenge _null_ _null_ _null_ ));
-DATA(insert OID = 272 (  tintervalstart    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 702 "704" _null_ _null_ _null_ _null_ _null_       tintervalstart _null_ _null_ _null_ ));
-DATA(insert OID = 273 (  tintervalend     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 702 "704" _null_ _null_ _null_ _null_ _null_        tintervalend _null_ _null_ _null_ ));
-DESCR("end of interval");
-DATA(insert OID = 274 (  timeofday                PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 25 "" _null_ _null_ _null_ _null_ _null_ timeofday _null_ _null_ _null_ ));
-DESCR("current date and time - increments during transactions");
-DATA(insert OID = 275 (  isfinite                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "702" _null_ _null_ _null_ _null_ _null_ abstime_finite _null_ _null_ _null_ ));
-DESCR("finite abstime?");
-
-DATA(insert OID = 277 (  inter_sl                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "601 628" _null_ _null_ _null_ _null_ _null_ inter_sl _null_ _null_ _null_ ));
-DATA(insert OID = 278 (  inter_lb                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "628 603" _null_ _null_ _null_ _null_ _null_ inter_lb _null_ _null_ _null_ ));
-
-DATA(insert OID = 279 (  float48mul               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "700 701" _null_ _null_ _null_ _null_ _null_    float48mul _null_ _null_ _null_ ));
-DATA(insert OID = 280 (  float48div               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "700 701" _null_ _null_ _null_ _null_ _null_    float48div _null_ _null_ _null_ ));
-DATA(insert OID = 281 (  float48pl                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "700 701" _null_ _null_ _null_ _null_ _null_    float48pl _null_ _null_ _null_ ));
-DATA(insert OID = 282 (  float48mi                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "700 701" _null_ _null_ _null_ _null_ _null_    float48mi _null_ _null_ _null_ ));
-DATA(insert OID = 283 (  float84mul               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "701 700" _null_ _null_ _null_ _null_ _null_    float84mul _null_ _null_ _null_ ));
-DATA(insert OID = 284 (  float84div               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "701 700" _null_ _null_ _null_ _null_ _null_    float84div _null_ _null_ _null_ ));
-DATA(insert OID = 285 (  float84pl                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "701 700" _null_ _null_ _null_ _null_ _null_    float84pl _null_ _null_ _null_ ));
-DATA(insert OID = 286 (  float84mi                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "701 700" _null_ _null_ _null_ _null_ _null_    float84mi _null_ _null_ _null_ ));
-
-DATA(insert OID = 287 (  float4eq                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "700 700" _null_ _null_ _null_ _null_ _null_ float4eq _null_ _null_ _null_ ));
-DATA(insert OID = 288 (  float4ne                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "700 700" _null_ _null_ _null_ _null_ _null_ float4ne _null_ _null_ _null_ ));
-DATA(insert OID = 289 (  float4lt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "700 700" _null_ _null_ _null_ _null_ _null_ float4lt _null_ _null_ _null_ ));
-DATA(insert OID = 290 (  float4le                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "700 700" _null_ _null_ _null_ _null_ _null_ float4le _null_ _null_ _null_ ));
-DATA(insert OID = 291 (  float4gt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "700 700" _null_ _null_ _null_ _null_ _null_ float4gt _null_ _null_ _null_ ));
-DATA(insert OID = 292 (  float4ge                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "700 700" _null_ _null_ _null_ _null_ _null_ float4ge _null_ _null_ _null_ ));
-
-DATA(insert OID = 293 (  float8eq                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "701 701" _null_ _null_ _null_ _null_ _null_ float8eq _null_ _null_ _null_ ));
-DATA(insert OID = 294 (  float8ne                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "701 701" _null_ _null_ _null_ _null_ _null_ float8ne _null_ _null_ _null_ ));
-DATA(insert OID = 295 (  float8lt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "701 701" _null_ _null_ _null_ _null_ _null_ float8lt _null_ _null_ _null_ ));
-DATA(insert OID = 296 (  float8le                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "701 701" _null_ _null_ _null_ _null_ _null_ float8le _null_ _null_ _null_ ));
-DATA(insert OID = 297 (  float8gt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "701 701" _null_ _null_ _null_ _null_ _null_ float8gt _null_ _null_ _null_ ));
-DATA(insert OID = 298 (  float8ge                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "701 701" _null_ _null_ _null_ _null_ _null_ float8ge _null_ _null_ _null_ ));
-
-DATA(insert OID = 299 (  float48eq                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "700 701" _null_ _null_ _null_ _null_ _null_ float48eq _null_ _null_ _null_ ));
-
-/* OIDS 300 - 399 */
-
-DATA(insert OID = 300 (  float48ne                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "700 701" _null_ _null_ _null_ _null_ _null_ float48ne _null_ _null_ _null_ ));
-DATA(insert OID = 301 (  float48lt                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "700 701" _null_ _null_ _null_ _null_ _null_ float48lt _null_ _null_ _null_ ));
-DATA(insert OID = 302 (  float48le                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "700 701" _null_ _null_ _null_ _null_ _null_ float48le _null_ _null_ _null_ ));
-DATA(insert OID = 303 (  float48gt                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "700 701" _null_ _null_ _null_ _null_ _null_ float48gt _null_ _null_ _null_ ));
-DATA(insert OID = 304 (  float48ge                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "700 701" _null_ _null_ _null_ _null_ _null_ float48ge _null_ _null_ _null_ ));
-DATA(insert OID = 305 (  float84eq                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "701 700" _null_ _null_ _null_ _null_ _null_ float84eq _null_ _null_ _null_ ));
-DATA(insert OID = 306 (  float84ne                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "701 700" _null_ _null_ _null_ _null_ _null_ float84ne _null_ _null_ _null_ ));
-DATA(insert OID = 307 (  float84lt                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "701 700" _null_ _null_ _null_ _null_ _null_ float84lt _null_ _null_ _null_ ));
-DATA(insert OID = 308 (  float84le                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "701 700" _null_ _null_ _null_ _null_ _null_ float84le _null_ _null_ _null_ ));
-DATA(insert OID = 309 (  float84gt                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "701 700" _null_ _null_ _null_ _null_ _null_ float84gt _null_ _null_ _null_ ));
-DATA(insert OID = 310 (  float84ge                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "701 700" _null_ _null_ _null_ _null_ _null_ float84ge _null_ _null_ _null_ ));
-DATA(insert OID = 320 ( width_bucket      PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 23 "701 701 701 23" _null_ _null_ _null_ _null_ _null_ width_bucket_float8 _null_ _null_ _null_ ));
-DESCR("bucket number of operand in equal-width histogram");
-
-DATA(insert OID = 311 (  float8                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "700" _null_ _null_ _null_ _null_ _null_        ftod _null_ _null_ _null_ ));
-DESCR("convert float4 to float8");
-DATA(insert OID = 312 (  float4                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 700 "701" _null_ _null_ _null_ _null_ _null_        dtof _null_ _null_ _null_ ));
-DESCR("convert float8 to float4");
-DATA(insert OID = 313 (  int4                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23  "21" _null_ _null_ _null_ _null_ _null_ i2toi4 _null_ _null_ _null_ ));
-DESCR("convert int2 to int4");
-DATA(insert OID = 314 (  int2                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 21  "23" _null_ _null_ _null_ _null_ _null_ i4toi2 _null_ _null_ _null_ ));
-DESCR("convert int4 to int2");
-DATA(insert OID = 316 (  float8                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701  "23" _null_ _null_ _null_ _null_ _null_        i4tod _null_ _null_ _null_ ));
-DESCR("convert int4 to float8");
-DATA(insert OID = 317 (  int4                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "701" _null_ _null_ _null_ _null_ _null_ dtoi4 _null_ _null_ _null_ ));
-DESCR("convert float8 to int4");
-DATA(insert OID = 318 (  float4                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 700  "23" _null_ _null_ _null_ _null_ _null_        i4tof _null_ _null_ _null_ ));
-DESCR("convert int4 to float4");
-DATA(insert OID = 319 (  int4                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1  0 23 "700" _null_ _null_ _null_ _null_ _null_        ftoi4 _null_ _null_ _null_ ));
-DESCR("convert float4 to int4");
-
-/* Index access method handlers */
-DATA(insert OID = 330 (  bthandler             PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 325 "2281" _null_ _null_ _null_ _null_ _null_  bthandler _null_ _null_ _null_ ));
-DESCR("btree index access method handler");
-DATA(insert OID = 331 (  hashhandler   PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 325 "2281" _null_ _null_ _null_ _null_ _null_  hashhandler _null_ _null_ _null_ ));
-DESCR("hash index access method handler");
-DATA(insert OID = 332 (  gisthandler   PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 325 "2281" _null_ _null_ _null_ _null_ _null_  gisthandler _null_ _null_ _null_ ));
-DESCR("gist index access method handler");
-DATA(insert OID = 333 (  ginhandler            PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 325 "2281" _null_ _null_ _null_ _null_ _null_  ginhandler _null_ _null_ _null_ ));
-DESCR("gin index access method handler");
-DATA(insert OID = 334 (  spghandler            PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 325 "2281" _null_ _null_ _null_ _null_ _null_  spghandler _null_ _null_ _null_ ));
-DESCR("spgist index access method handler");
-DATA(insert OID = 335 (  brinhandler   PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 325 "2281" _null_ _null_ _null_ _null_ _null_  brinhandler _null_ _null_ _null_ ));
-DESCR("brin index access method handler");
-DATA(insert OID = 3952 (  brin_summarize_new_values PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 23 "2205" _null_ _null_ _null_ _null_ _null_ brin_summarize_new_values _null_ _null_ _null_ ));
-DESCR("brin: standalone scan new table pages");
-DATA(insert OID = 3999 (  brin_summarize_range PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 23 "2205 20" _null_ _null_ _null_ _null_ _null_ brin_summarize_range _null_ _null_ _null_ ));
-DESCR("brin: standalone scan new table pages");
-DATA(insert OID = 4014 (  brin_desummarize_range PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 2278 "2205 20" _null_ _null_ _null_ _null_ _null_ brin_desummarize_range _null_ _null_ _null_ ));
-DESCR("brin: desummarize page range");
-
-DATA(insert OID = 338 (  amvalidate            PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_     amvalidate _null_ _null_ _null_ ));
-DESCR("validate an operator class");
-
-DATA(insert OID = 636 (  pg_indexam_has_property               PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "26 25" _null_ _null_ _null_ _null_ _null_  pg_indexam_has_property _null_ _null_ _null_ ));
-DESCR("test property of an index access method");
-DATA(insert OID = 637 (  pg_index_has_property                 PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "2205 25" _null_ _null_ _null_ _null_ _null_        pg_index_has_property _null_ _null_ _null_ ));
-DESCR("test property of an index");
-DATA(insert OID = 638 (  pg_index_column_has_property  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "2205 23 25" _null_ _null_ _null_ _null_ _null_ pg_index_column_has_property _null_ _null_ _null_ ));
-DESCR("test property of an index column");
-
-DATA(insert OID = 339 (  poly_same                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "604 604" _null_ _null_ _null_ _null_ _null_ poly_same _null_ _null_ _null_ ));
-DATA(insert OID = 340 (  poly_contain     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "604 604" _null_ _null_ _null_ _null_ _null_ poly_contain _null_ _null_ _null_ ));
-DATA(insert OID = 341 (  poly_left                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "604 604" _null_ _null_ _null_ _null_ _null_ poly_left _null_ _null_ _null_ ));
-DATA(insert OID = 342 (  poly_overleft    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "604 604" _null_ _null_ _null_ _null_ _null_ poly_overleft _null_ _null_ _null_ ));
-DATA(insert OID = 343 (  poly_overright    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "604 604" _null_ _null_ _null_ _null_ _null_ poly_overright _null_ _null_ _null_ ));
-DATA(insert OID = 344 (  poly_right               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "604 604" _null_ _null_ _null_ _null_ _null_ poly_right _null_ _null_ _null_ ));
-DATA(insert OID = 345 (  poly_contained    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "604 604" _null_ _null_ _null_ _null_ _null_ poly_contained _null_ _null_ _null_ ));
-DATA(insert OID = 346 (  poly_overlap     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "604 604" _null_ _null_ _null_ _null_ _null_ poly_overlap _null_ _null_ _null_ ));
-DATA(insert OID = 347 (  poly_in                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 604 "2275" _null_ _null_ _null_ _null_ _null_ poly_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 348 (  poly_out                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "604" _null_ _null_ _null_ _null_ _null_ poly_out _null_ _null_ _null_ ));
-DESCR("I/O");
-
-DATA(insert OID = 350 (  btint2cmp                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "21 21" _null_ _null_ _null_ _null_ _null_ btint2cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3129 ( btint2sortsupport PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ btint2sortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-DATA(insert OID = 351 (  btint4cmp                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 23" _null_ _null_ _null_ _null_ _null_ btint4cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3130 ( btint4sortsupport PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ btint4sortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-DATA(insert OID = 842 (  btint8cmp                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "20 20" _null_ _null_ _null_ _null_ _null_ btint8cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3131 ( btint8sortsupport PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ btint8sortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-DATA(insert OID = 354 (  btfloat4cmp      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "700 700" _null_ _null_ _null_ _null_ _null_ btfloat4cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3132 ( btfloat4sortsupport PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ btfloat4sortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-DATA(insert OID = 355 (  btfloat8cmp      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "701 701" _null_ _null_ _null_ _null_ _null_ btfloat8cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3133 ( btfloat8sortsupport PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ btfloat8sortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-DATA(insert OID = 356 (  btoidcmp                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "26 26" _null_ _null_ _null_ _null_ _null_ btoidcmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3134 ( btoidsortsupport PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ btoidsortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-DATA(insert OID = 404 (  btoidvectorcmp    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "30 30" _null_ _null_ _null_ _null_ _null_ btoidvectorcmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 357 (  btabstimecmp     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "702 702" _null_ _null_ _null_ _null_ _null_ btabstimecmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 358 (  btcharcmp                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "18 18" _null_ _null_ _null_ _null_ _null_ btcharcmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 359 (  btnamecmp                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "19 19" _null_ _null_ _null_ _null_ _null_ btnamecmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3135 ( btnamesortsupport PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ btnamesortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-DATA(insert OID = 360 (  bttextcmp                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "25 25" _null_ _null_ _null_ _null_ _null_ bttextcmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3255 ( bttextsortsupport PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ bttextsortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-DATA(insert OID = 377 (  cash_cmp                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "790 790" _null_ _null_ _null_ _null_ _null_ cash_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 380 (  btreltimecmp     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "703 703" _null_ _null_ _null_ _null_ _null_ btreltimecmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 381 (  bttintervalcmp    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "704 704" _null_ _null_ _null_ _null_ _null_ bttintervalcmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 382 (  btarraycmp               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "2277 2277" _null_ _null_ _null_ _null_ _null_ btarraycmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 4126 ( in_range                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "20 20 20 16 16" _null_ _null_ _null_ _null_ _null_ in_range_int8_int8 _null_ _null_ _null_ ));
-DESCR("window RANGE support");
-DATA(insert OID = 4127 ( in_range                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "23 23 20 16 16" _null_ _null_ _null_ _null_ _null_ in_range_int4_int8 _null_ _null_ _null_ ));
-DESCR("window RANGE support");
-DATA(insert OID = 4128 ( in_range                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "23 23 23 16 16" _null_ _null_ _null_ _null_ _null_ in_range_int4_int4 _null_ _null_ _null_ ));
-DESCR("window RANGE support");
-DATA(insert OID = 4129 ( in_range                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "23 23 21 16 16" _null_ _null_ _null_ _null_ _null_ in_range_int4_int2 _null_ _null_ _null_ ));
-DESCR("window RANGE support");
-DATA(insert OID = 4130 ( in_range                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "21 21 20 16 16" _null_ _null_ _null_ _null_ _null_ in_range_int2_int8 _null_ _null_ _null_ ));
-DESCR("window RANGE support");
-DATA(insert OID = 4131 ( in_range                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "21 21 23 16 16" _null_ _null_ _null_ _null_ _null_ in_range_int2_int4 _null_ _null_ _null_ ));
-DESCR("window RANGE support");
-DATA(insert OID = 4132 ( in_range                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "21 21 21 16 16" _null_ _null_ _null_ _null_ _null_ in_range_int2_int2 _null_ _null_ _null_ ));
-DESCR("window RANGE support");
-DATA(insert OID = 4139 ( in_range                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "701 701 701 16 16" _null_ _null_ _null_ _null_ _null_ in_range_float8_float8 _null_ _null_ _null_ ));
-DESCR("window RANGE support");
-DATA(insert OID = 4140 ( in_range                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "700 700 701 16 16" _null_ _null_ _null_ _null_ _null_ in_range_float4_float8 _null_ _null_ _null_ ));
-DESCR("window RANGE support");
-DATA(insert OID = 4141 ( in_range                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "1700 1700 1700 16 16" _null_ _null_ _null_ _null_ _null_ in_range_numeric_numeric _null_ _null_ _null_ ));
-DESCR("window RANGE support");
-
-DATA(insert OID = 361 (  lseg_distance    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "601 601" _null_ _null_ _null_ _null_ _null_    lseg_distance _null_ _null_ _null_ ));
-DATA(insert OID = 362 (  lseg_interpt     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 600 "601 601" _null_ _null_ _null_ _null_ _null_    lseg_interpt _null_ _null_ _null_ ));
-DATA(insert OID = 363 (  dist_ps                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "600 601" _null_ _null_ _null_ _null_ _null_    dist_ps _null_ _null_ _null_ ));
-DATA(insert OID = 364 (  dist_pb                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "600 603" _null_ _null_ _null_ _null_ _null_    dist_pb _null_ _null_ _null_ ));
-DATA(insert OID = 365 (  dist_sb                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "601 603" _null_ _null_ _null_ _null_ _null_    dist_sb _null_ _null_ _null_ ));
-DATA(insert OID = 366 (  close_ps                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 600 "600 601" _null_ _null_ _null_ _null_ _null_    close_ps _null_ _null_ _null_ ));
-DATA(insert OID = 367 (  close_pb                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 600 "600 603" _null_ _null_ _null_ _null_ _null_    close_pb _null_ _null_ _null_ ));
-DATA(insert OID = 368 (  close_sb                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 600 "601 603" _null_ _null_ _null_ _null_ _null_    close_sb _null_ _null_ _null_ ));
-DATA(insert OID = 369 (  on_ps                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "600 601" _null_ _null_ _null_ _null_ _null_ on_ps _null_ _null_ _null_ ));
-DATA(insert OID = 370 (  path_distance    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "602 602" _null_ _null_ _null_ _null_ _null_    path_distance _null_ _null_ _null_ ));
-DATA(insert OID = 371 (  dist_ppath               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "600 602" _null_ _null_ _null_ _null_ _null_    dist_ppath _null_ _null_ _null_ ));
-DATA(insert OID = 372 (  on_sb                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "601 603" _null_ _null_ _null_ _null_ _null_ on_sb _null_ _null_ _null_ ));
-DATA(insert OID = 373 (  inter_sb                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "601 603" _null_ _null_ _null_ _null_ _null_ inter_sb _null_ _null_ _null_ ));
-
-/* OIDS 400 - 499 */
-
-DATA(insert OID =  401 (  text                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "1042" _null_ _null_ _null_ _null_ _null_        rtrim1 _null_ _null_ _null_ ));
-DESCR("convert char(n) to text");
-DATA(insert OID =  406 (  text                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "19" _null_ _null_ _null_ _null_ _null_ name_text _null_ _null_ _null_ ));
-DESCR("convert name to text");
-DATA(insert OID =  407 (  name                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 19 "25" _null_ _null_ _null_ _null_ _null_ text_name _null_ _null_ _null_ ));
-DESCR("convert text to name");
-DATA(insert OID =  408 (  bpchar                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1042 "19" _null_ _null_ _null_ _null_ _null_ name_bpchar _null_ _null_ _null_ ));
-DESCR("convert name to char(n)");
-DATA(insert OID =  409 (  name                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 19 "1042" _null_ _null_ _null_ _null_ _null_        bpchar_name _null_ _null_ _null_ ));
-DESCR("convert char(n) to name");
-
-DATA(insert OID = 449 (  hashint2                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "21" _null_ _null_ _null_ _null_ _null_ hashint2 _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 441 (  hashint2extended  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "21 20" _null_ _null_ _null_ _null_ _null_ hashint2extended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 450 (  hashint4                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ hashint4 _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 425 (  hashint4extended  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "23 20" _null_ _null_ _null_ _null_ _null_ hashint4extended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 949 (  hashint8                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "20" _null_ _null_ _null_ _null_ _null_ hashint8 _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 442 (  hashint8extended  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 20" _null_ _null_ _null_ _null_ _null_ hashint8extended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 451 (  hashfloat4               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "700" _null_ _null_ _null_ _null_ _null_ hashfloat4 _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 443 (  hashfloat4extended    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "700 20" _null_ _null_ _null_ _null_ _null_ hashfloat4extended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 452 (  hashfloat8               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "701" _null_ _null_ _null_ _null_ _null_ hashfloat8 _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 444 (  hashfloat8extended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "701 20" _null_ _null_ _null_ _null_ _null_ hashfloat8extended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 453 (  hashoid                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "26" _null_ _null_ _null_ _null_ _null_ hashoid _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 445 (  hashoidextended   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "26 20" _null_ _null_ _null_ _null_ _null_ hashoidextended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 454 (  hashchar                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "18" _null_ _null_ _null_ _null_ _null_ hashchar _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 446 (  hashcharextended  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "18 20" _null_ _null_ _null_ _null_ _null_ hashcharextended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 455 (  hashname                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "19" _null_ _null_ _null_ _null_ _null_ hashname _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 447 (  hashnameextended  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "19 20" _null_ _null_ _null_ _null_ _null_ hashnameextended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 400 (  hashtext                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "25" _null_ _null_ _null_ _null_ _null_ hashtext _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 448 (  hashtextextended  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "25 20" _null_ _null_ _null_ _null_ _null_ hashtextextended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 456 (  hashvarlena      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "2281" _null_ _null_ _null_ _null_ _null_ hashvarlena _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 772 (  hashvarlenaextended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "2281 20" _null_ _null_ _null_ _null_ _null_ hashvarlenaextended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 457 (  hashoidvector    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "30" _null_ _null_ _null_ _null_ _null_ hashoidvector _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 776 (  hashoidvectorextended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "30 20" _null_ _null_ _null_ _null_ _null_ hashoidvectorextended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 329 (  hash_aclitem     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1033" _null_ _null_ _null_ _null_ _null_        hash_aclitem _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 777 (  hash_aclitem_extended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "1033 20" _null_ _null_ _null_ _null_ _null_ hash_aclitem_extended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 399 (  hashmacaddr      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "829" _null_ _null_ _null_ _null_ _null_ hashmacaddr _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 778 (  hashmacaddrextended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "829 20" _null_ _null_ _null_ _null_ _null_ hashmacaddrextended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 422 (  hashinet                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "869" _null_ _null_ _null_ _null_ _null_ hashinet _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 779 (  hashinetextended  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "869 20" _null_ _null_ _null_ _null_ _null_ hashinetextended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 432 (  hash_numeric     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1700" _null_ _null_ _null_ _null_ _null_ hash_numeric _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 780 (  hash_numeric_extended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "1700 20" _null_ _null_ _null_ _null_ _null_ hash_numeric_extended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 328 (  hashmacaddr8     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "774" _null_ _null_ _null_ _null_ _null_ hashmacaddr8 _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 781 (  hashmacaddr8extended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "774 20" _null_ _null_ _null_ _null_ _null_ hashmacaddr8extended _null_ _null_ _null_ ));
-DESCR("hash");
-
-DATA(insert OID = 438 (  num_nulls                PGNSP PGUID 12 1 0 2276 0 f f f f f i s 1 0 23 "2276" "{2276}" "{v}" _null_ _null_ _null_ pg_num_nulls _null_ _null_ _null_ ));
-DESCR("count the number of NULL arguments");
-DATA(insert OID = 440 (  num_nonnulls     PGNSP PGUID 12 1 0 2276 0 f f f f f i s 1 0 23 "2276" "{2276}" "{v}" _null_ _null_ _null_ pg_num_nonnulls _null_ _null_ _null_ ));
-DESCR("count the number of non-NULL arguments");
-
-DATA(insert OID = 458 (  text_larger      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25 "25 25" _null_ _null_ _null_ _null_ _null_ text_larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 459 (  text_smaller     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25 "25 25" _null_ _null_ _null_ _null_ _null_ text_smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-
-DATA(insert OID = 460 (  int8in                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "2275" _null_ _null_ _null_ _null_ _null_ int8in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 461 (  int8out                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "20" _null_ _null_ _null_ _null_ _null_ int8out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 462 (  int8um                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "20" _null_ _null_ _null_ _null_ _null_ int8um _null_ _null_ _null_ ));
-DATA(insert OID = 463 (  int8pl                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 20" _null_ _null_ _null_ _null_ _null_ int8pl _null_ _null_ _null_ ));
-DATA(insert OID = 464 (  int8mi                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 20" _null_ _null_ _null_ _null_ _null_ int8mi _null_ _null_ _null_ ));
-DATA(insert OID = 465 (  int8mul                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 20" _null_ _null_ _null_ _null_ _null_ int8mul _null_ _null_ _null_ ));
-DATA(insert OID = 466 (  int8div                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 20" _null_ _null_ _null_ _null_ _null_ int8div _null_ _null_ _null_ ));
-DATA(insert OID = 467 (  int8eq                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 20" _null_ _null_ _null_ _null_ _null_ int8eq _null_ _null_ _null_ ));
-DATA(insert OID = 468 (  int8ne                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 20" _null_ _null_ _null_ _null_ _null_ int8ne _null_ _null_ _null_ ));
-DATA(insert OID = 469 (  int8lt                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 20" _null_ _null_ _null_ _null_ _null_ int8lt _null_ _null_ _null_ ));
-DATA(insert OID = 470 (  int8gt                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 20" _null_ _null_ _null_ _null_ _null_ int8gt _null_ _null_ _null_ ));
-DATA(insert OID = 471 (  int8le                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 20" _null_ _null_ _null_ _null_ _null_ int8le _null_ _null_ _null_ ));
-DATA(insert OID = 472 (  int8ge                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 20" _null_ _null_ _null_ _null_ _null_ int8ge _null_ _null_ _null_ ));
-
-DATA(insert OID = 474 (  int84eq                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 23" _null_ _null_ _null_ _null_ _null_ int84eq _null_ _null_ _null_ ));
-DATA(insert OID = 475 (  int84ne                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 23" _null_ _null_ _null_ _null_ _null_ int84ne _null_ _null_ _null_ ));
-DATA(insert OID = 476 (  int84lt                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 23" _null_ _null_ _null_ _null_ _null_ int84lt _null_ _null_ _null_ ));
-DATA(insert OID = 477 (  int84gt                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 23" _null_ _null_ _null_ _null_ _null_ int84gt _null_ _null_ _null_ ));
-DATA(insert OID = 478 (  int84le                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 23" _null_ _null_ _null_ _null_ _null_ int84le _null_ _null_ _null_ ));
-DATA(insert OID = 479 (  int84ge                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 23" _null_ _null_ _null_ _null_ _null_ int84ge _null_ _null_ _null_ ));
-
-DATA(insert OID = 480 (  int4                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "20" _null_ _null_ _null_ _null_ _null_ int84 _null_ _null_ _null_ ));
-DESCR("convert int8 to int4");
-DATA(insert OID = 481 (  int8                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "23" _null_ _null_ _null_ _null_ _null_ int48 _null_ _null_ _null_ ));
-DESCR("convert int4 to int8");
-DATA(insert OID = 482 (  float8                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "20" _null_ _null_ _null_ _null_ _null_ i8tod _null_ _null_ _null_ ));
-DESCR("convert int8 to float8");
-DATA(insert OID = 483 (  int8                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "701" _null_ _null_ _null_ _null_ _null_ dtoi8 _null_ _null_ _null_ ));
-DESCR("convert float8 to int8");
-
-/* OIDS 500 - 599 */
-
-/* OIDS 600 - 699 */
-
-DATA(insert OID = 626 (  hash_array               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "2277" _null_ _null_ _null_ _null_ _null_ hash_array _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 782 (  hash_array_extended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "2277 20" _null_ _null_ _null_ _null_ _null_ hash_array_extended _null_ _null_ _null_ ));
-DESCR("hash");
-
-DATA(insert OID = 652 (  float4                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 700 "20" _null_ _null_ _null_ _null_ _null_ i8tof _null_ _null_ _null_ ));
-DESCR("convert int8 to float4");
-DATA(insert OID = 653 (  int8                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "700" _null_ _null_ _null_ _null_ _null_ ftoi8 _null_ _null_ _null_ ));
-DESCR("convert float4 to int8");
-
-DATA(insert OID = 714 (  int2                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 21 "20" _null_ _null_ _null_ _null_ _null_ int82 _null_ _null_ _null_ ));
-DESCR("convert int8 to int2");
-DATA(insert OID = 754 (  int8                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "21" _null_ _null_ _null_ _null_ _null_ int28 _null_ _null_ _null_ ));
-DESCR("convert int2 to int8");
-
-DATA(insert OID = 655 (  namelt                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "19 19" _null_ _null_ _null_ _null_ _null_ namelt _null_ _null_ _null_ ));
-DATA(insert OID = 656 (  namele                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "19 19" _null_ _null_ _null_ _null_ _null_ namele _null_ _null_ _null_ ));
-DATA(insert OID = 657 (  namegt                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "19 19" _null_ _null_ _null_ _null_ _null_ namegt _null_ _null_ _null_ ));
-DATA(insert OID = 658 (  namege                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "19 19" _null_ _null_ _null_ _null_ _null_ namege _null_ _null_ _null_ ));
-DATA(insert OID = 659 (  namene                           PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "19 19" _null_ _null_ _null_ _null_ _null_ namene _null_ _null_ _null_ ));
-
-DATA(insert OID = 668 (  bpchar                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1042 "1042 23 16" _null_ _null_ _null_ _null_ _null_ bpchar _null_ _null_ _null_ ));
-DESCR("adjust char() to typmod length");
-DATA(insert OID = 3097 ( varchar_transform PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ varchar_transform _null_ _null_ _null_ ));
-DESCR("transform a varchar length coercion");
-DATA(insert OID = 669 (  varchar                  PGNSP PGUID 12 1 0 0 varchar_transform f f f t f i s 3 0 1043 "1043 23 16" _null_ _null_ _null_ _null_ _null_ varchar _null_ _null_ _null_ ));
-DESCR("adjust varchar() to typmod length");
-
-DATA(insert OID = 676 (  mktinterval      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 704 "702 702" _null_ _null_ _null_ _null_ _null_ mktinterval _null_ _null_ _null_ ));
-
-DATA(insert OID = 619 (  oidvectorne      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "30 30" _null_ _null_ _null_ _null_ _null_ oidvectorne _null_ _null_ _null_ ));
-DATA(insert OID = 677 (  oidvectorlt      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "30 30" _null_ _null_ _null_ _null_ _null_ oidvectorlt _null_ _null_ _null_ ));
-DATA(insert OID = 678 (  oidvectorle      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "30 30" _null_ _null_ _null_ _null_ _null_ oidvectorle _null_ _null_ _null_ ));
-DATA(insert OID = 679 (  oidvectoreq      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "30 30" _null_ _null_ _null_ _null_ _null_ oidvectoreq _null_ _null_ _null_ ));
-DATA(insert OID = 680 (  oidvectorge      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "30 30" _null_ _null_ _null_ _null_ _null_ oidvectorge _null_ _null_ _null_ ));
-DATA(insert OID = 681 (  oidvectorgt      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "30 30" _null_ _null_ _null_ _null_ _null_ oidvectorgt _null_ _null_ _null_ ));
-
-/* OIDS 700 - 799 */
-DATA(insert OID = 710 (  getpgusername    PGNSP PGUID 12 1 0 0 0 f f f t f s s 0 0 19 "" _null_ _null_ _null_ _null_ _null_ current_user _null_ _null_ _null_ ));
-DESCR("deprecated, use current_user instead");
-DATA(insert OID = 716 (  oidlt                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "26 26" _null_ _null_ _null_ _null_ _null_ oidlt _null_ _null_ _null_ ));
-DATA(insert OID = 717 (  oidle                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "26 26" _null_ _null_ _null_ _null_ _null_ oidle _null_ _null_ _null_ ));
-
-DATA(insert OID = 720 (  octet_length     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "17" _null_ _null_ _null_ _null_ _null_ byteaoctetlen _null_ _null_ _null_ ));
-DESCR("octet length");
-DATA(insert OID = 721 (  get_byte                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "17 23" _null_ _null_ _null_ _null_ _null_ byteaGetByte _null_ _null_ _null_ ));
-DESCR("get byte");
-DATA(insert OID = 722 (  set_byte                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 17 "17 23 23" _null_ _null_ _null_ _null_ _null_    byteaSetByte _null_ _null_ _null_ ));
-DESCR("set byte");
-DATA(insert OID = 723 (  get_bit                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "17 23" _null_ _null_ _null_ _null_ _null_ byteaGetBit _null_ _null_ _null_ ));
-DESCR("get bit");
-DATA(insert OID = 724 (  set_bit                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 17 "17 23 23" _null_ _null_ _null_ _null_ _null_    byteaSetBit _null_ _null_ _null_ ));
-DESCR("set bit");
-DATA(insert OID = 749 (  overlay                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 17 "17 17 23 23" _null_ _null_ _null_ _null_ _null_ byteaoverlay _null_ _null_ _null_ ));
-DESCR("substitute portion of string");
-DATA(insert OID = 752 (  overlay                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 17 "17 17 23" _null_ _null_ _null_ _null_ _null_    byteaoverlay_no_len _null_ _null_ _null_ ));
-DESCR("substitute portion of string");
-
-DATA(insert OID = 725 (  dist_pl                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "600 628" _null_ _null_ _null_ _null_ _null_    dist_pl _null_ _null_ _null_ ));
-DATA(insert OID = 726 (  dist_lb                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "628 603" _null_ _null_ _null_ _null_ _null_    dist_lb _null_ _null_ _null_ ));
-DATA(insert OID = 727 (  dist_sl                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "601 628" _null_ _null_ _null_ _null_ _null_    dist_sl _null_ _null_ _null_ ));
-DATA(insert OID = 728 (  dist_cpoly               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "718 604" _null_ _null_ _null_ _null_ _null_    dist_cpoly _null_ _null_ _null_ ));
-DATA(insert OID = 729 (  poly_distance    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "604 604" _null_ _null_ _null_ _null_ _null_    poly_distance _null_ _null_ _null_ ));
-DATA(insert OID = 3275 (  dist_ppoly      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "600 604" _null_ _null_ _null_ _null_ _null_    dist_ppoly _null_ _null_ _null_ ));
-DATA(insert OID = 3292 (  dist_polyp      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "604 600" _null_ _null_ _null_ _null_ _null_    dist_polyp _null_ _null_ _null_ ));
-DATA(insert OID = 3290 (  dist_cpoint     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "718 600" _null_ _null_ _null_ _null_ _null_    dist_cpoint _null_ _null_ _null_ ));
-
-DATA(insert OID = 740 (  text_lt                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ text_lt _null_ _null_ _null_ ));
-DATA(insert OID = 741 (  text_le                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ text_le _null_ _null_ _null_ ));
-DATA(insert OID = 742 (  text_gt                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ text_gt _null_ _null_ _null_ ));
-DATA(insert OID = 743 (  text_ge                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ text_ge _null_ _null_ _null_ ));
-
-DATA(insert OID = 745 (  current_user     PGNSP PGUID 12 1 0 0 0 f f f t f s s 0 0 19 "" _null_ _null_ _null_ _null_ _null_ current_user _null_ _null_ _null_ ));
-DESCR("current user name");
-DATA(insert OID = 746 (  session_user     PGNSP PGUID 12 1 0 0 0 f f f t f s s 0 0 19 "" _null_ _null_ _null_ _null_ _null_ session_user _null_ _null_ _null_ ));
-DESCR("session user name");
-
-DATA(insert OID = 744 (  array_eq                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2277 2277" _null_ _null_ _null_ _null_ _null_ array_eq _null_ _null_ _null_ ));
-DATA(insert OID = 390 (  array_ne                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2277 2277" _null_ _null_ _null_ _null_ _null_ array_ne _null_ _null_ _null_ ));
-DATA(insert OID = 391 (  array_lt                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2277 2277" _null_ _null_ _null_ _null_ _null_ array_lt _null_ _null_ _null_ ));
-DATA(insert OID = 392 (  array_gt                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2277 2277" _null_ _null_ _null_ _null_ _null_ array_gt _null_ _null_ _null_ ));
-DATA(insert OID = 393 (  array_le                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2277 2277" _null_ _null_ _null_ _null_ _null_ array_le _null_ _null_ _null_ ));
-DATA(insert OID = 396 (  array_ge                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2277 2277" _null_ _null_ _null_ _null_ _null_ array_ge _null_ _null_ _null_ ));
-DATA(insert OID = 747 (  array_dims               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "2277" _null_ _null_ _null_ _null_ _null_ array_dims _null_ _null_ _null_ ));
-DESCR("array dimensions");
-DATA(insert OID = 748 (  array_ndims      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "2277" _null_ _null_ _null_ _null_ _null_ array_ndims _null_ _null_ _null_ ));
-DESCR("number of array dimensions");
-DATA(insert OID = 750 (  array_in                 PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 2277 "2275 26 23" _null_ _null_ _null_ _null_ _null_        array_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 751 (  array_out                PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "2277" _null_ _null_ _null_ _null_ _null_ array_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2091 (  array_lower     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "2277 23" _null_ _null_ _null_ _null_ _null_ array_lower _null_ _null_ _null_ ));
-DESCR("array lower dimension");
-DATA(insert OID = 2092 (  array_upper     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "2277 23" _null_ _null_ _null_ _null_ _null_ array_upper _null_ _null_ _null_ ));
-DESCR("array upper dimension");
-DATA(insert OID = 2176 (  array_length    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "2277 23" _null_ _null_ _null_ _null_ _null_ array_length _null_ _null_ _null_ ));
-DESCR("array length");
-DATA(insert OID = 3179 (  cardinality     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "2277" _null_ _null_ _null_ _null_ _null_ array_cardinality _null_ _null_ _null_ ));
-DESCR("array cardinality");
-DATA(insert OID = 378 (  array_append     PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2277 "2277 2283" _null_ _null_ _null_ _null_ _null_ array_append _null_ _null_ _null_ ));
-DESCR("append element onto end of array");
-DATA(insert OID = 379 (  array_prepend    PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2277 "2283 2277" _null_ _null_ _null_ _null_ _null_ array_prepend _null_ _null_ _null_ ));
-DESCR("prepend element onto front of array");
-DATA(insert OID = 383 (  array_cat                PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2277 "2277 2277" _null_ _null_ _null_ _null_ _null_ array_cat _null_ _null_ _null_ ));
-DATA(insert OID = 394 (  string_to_array   PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 1009 "25 25" _null_ _null_ _null_ _null_ _null_ text_to_array _null_ _null_ _null_ ));
-DESCR("split delimited text into text[]");
-DATA(insert OID = 395 (  array_to_string   PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "2277 25" _null_ _null_ _null_ _null_ _null_ array_to_text _null_ _null_ _null_ ));
-DESCR("concatenate array elements, using delimiter, into text");
-DATA(insert OID = 376 (  string_to_array   PGNSP PGUID 12 1 0 0 0 f f f f f i s 3 0 1009 "25 25 25" _null_ _null_ _null_ _null_ _null_ text_to_array_null _null_ _null_ _null_ ));
-DESCR("split delimited text into text[], with null string");
-DATA(insert OID = 384 (  array_to_string   PGNSP PGUID 12 1 0 0 0 f f f f f s s 3 0 25 "2277 25 25" _null_ _null_ _null_ _null_ _null_ array_to_text_null _null_ _null_ _null_ ));
-DESCR("concatenate array elements, using delimiter and null string, into text");
-DATA(insert OID = 515 (  array_larger     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2277 "2277 2277" _null_ _null_ _null_ _null_ _null_ array_larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 516 (  array_smaller    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2277 "2277 2277" _null_ _null_ _null_ _null_ _null_ array_smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-DATA(insert OID = 3277 (  array_position                  PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 23 "2277 2283" _null_ _null_ _null_ _null_ _null_ array_position _null_ _null_ _null_ ));
-DESCR("returns an offset of value in array");
-DATA(insert OID = 3278 (  array_position                  PGNSP PGUID 12 1 0 0 0 f f f f f i s 3 0 23 "2277 2283 23" _null_ _null_ _null_ _null_ _null_ array_position_start _null_ _null_ _null_ ));
-DESCR("returns an offset of value in array with start index");
-DATA(insert OID = 3279 (  array_positions                 PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 1007 "2277 2283" _null_ _null_ _null_ _null_ _null_ array_positions _null_ _null_ _null_ ));
-DESCR("returns an array of offsets of some value in array");
-DATA(insert OID = 1191 (  generate_subscripts PGNSP PGUID 12 1 1000 0 0 f f f t t i s 3 0 23 "2277 23 16" _null_ _null_ _null_ _null_ _null_ generate_subscripts _null_ _null_ _null_ ));
-DESCR("array subscripts generator");
-DATA(insert OID = 1192 (  generate_subscripts PGNSP PGUID 12 1 1000 0 0 f f f t t i s 2 0 23 "2277 23" _null_ _null_ _null_ _null_ _null_ generate_subscripts_nodir _null_ _null_ _null_ ));
-DESCR("array subscripts generator");
-DATA(insert OID = 1193 (  array_fill PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2277 "2283 1007" _null_ _null_ _null_ _null_ _null_ array_fill _null_ _null_ _null_ ));
-DESCR("array constructor with value");
-DATA(insert OID = 1286 (  array_fill PGNSP PGUID 12 1 0 0 0 f f f f f i s 3 0 2277 "2283 1007 1007" _null_ _null_ _null_ _null_ _null_ array_fill_with_lower_bounds _null_ _null_ _null_ ));
-DESCR("array constructor with value");
-DATA(insert OID = 2331 (  unnest                  PGNSP PGUID 12 1 100 0 0 f f f t t i s 1 0 2283 "2277" _null_ _null_ _null_ _null_ _null_ array_unnest _null_ _null_ _null_ ));
-DESCR("expand array to set of rows");
-DATA(insert OID = 3167 (  array_remove    PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2277 "2277 2283" _null_ _null_ _null_ _null_ _null_ array_remove _null_ _null_ _null_ ));
-DESCR("remove any occurrences of an element from an array");
-DATA(insert OID = 3168 (  array_replace    PGNSP PGUID 12 1 0 0 0 f f f f f i s 3 0 2277 "2277 2283 2283" _null_ _null_ _null_ _null_ _null_ array_replace _null_ _null_ _null_ ));
-DESCR("replace any occurrences of an element in an array");
-DATA(insert OID = 2333 (  array_agg_transfn   PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 2776" _null_ _null_ _null_ _null_ _null_ array_agg_transfn _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 2334 (  array_agg_finalfn   PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2277 "2281 2776" _null_ _null_ _null_ _null_ _null_ array_agg_finalfn _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2335 (  array_agg               PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 2277 "2776" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("concatenate aggregate input into an array");
-DATA(insert OID = 4051 (  array_agg_array_transfn      PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 2277" _null_ _null_ _null_ _null_ _null_ array_agg_array_transfn _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 4052 (  array_agg_array_finalfn      PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2277 "2281 2277" _null_ _null_ _null_ _null_ _null_ array_agg_array_finalfn _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 4053 (  array_agg               PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 2277 "2277" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("concatenate aggregate input into an array");
-DATA(insert OID = 3218 ( width_bucket     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "2283 2277" _null_ _null_ _null_ _null_ _null_ width_bucket_array _null_ _null_ _null_ ));
-DESCR("bucket number of operand given a sorted array of bucket lower bounds");
-DATA(insert OID = 3816 (  array_typanalyze PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 16 "2281" _null_ _null_ _null_ _null_ _null_ array_typanalyze _null_ _null_ _null_ ));
-DESCR("array typanalyze");
-DATA(insert OID = 3817 (  arraycontsel    PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_ arraycontsel _null_ _null_ _null_ ));
-DESCR("restriction selectivity for array-containment operators");
-DATA(insert OID = 3818 (  arraycontjoinsel PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_ _null_ arraycontjoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity for array-containment operators");
-
-DATA(insert OID = 760 (  smgrin                           PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 210 "2275" _null_ _null_ _null_ _null_ _null_ smgrin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 761 (  smgrout                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "210" _null_ _null_ _null_ _null_ _null_ smgrout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 762 (  smgreq                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "210 210" _null_ _null_ _null_ _null_ _null_ smgreq _null_ _null_ _null_ ));
-DESCR("storage manager");
-DATA(insert OID = 763 (  smgrne                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "210 210" _null_ _null_ _null_ _null_ _null_ smgrne _null_ _null_ _null_ ));
-DESCR("storage manager");
-
-DATA(insert OID = 764 (  lo_import                PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 26 "25" _null_ _null_ _null_ _null_ _null_ be_lo_import _null_ _null_ _null_ ));
-DESCR("large object import");
-DATA(insert OID = 767 (  lo_import                PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 26 "25 26" _null_ _null_ _null_ _null_ _null_ be_lo_import_with_oid _null_ _null_ _null_ ));
-DESCR("large object import");
-DATA(insert OID = 765 (  lo_export                PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 23 "26 25" _null_ _null_ _null_ _null_ _null_ be_lo_export _null_ _null_ _null_ ));
-DESCR("large object export");
-
-DATA(insert OID = 766 (  int4inc                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ int4inc _null_ _null_ _null_ ));
-DESCR("increment");
-DATA(insert OID = 768 (  int4larger               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 23" _null_ _null_ _null_ _null_ _null_ int4larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 769 (  int4smaller      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 23" _null_ _null_ _null_ _null_ _null_ int4smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-DATA(insert OID = 770 (  int2larger               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 21 "21 21" _null_ _null_ _null_ _null_ _null_ int2larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 771 (  int2smaller      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 21 "21 21" _null_ _null_ _null_ _null_ _null_ int2smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-
-DATA(insert OID = 784 (  tintervaleq      PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "704 704" _null_ _null_ _null_ _null_ _null_ tintervaleq _null_ _null_ _null_ ));
-DATA(insert OID = 785 (  tintervalne      PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "704 704" _null_ _null_ _null_ _null_ _null_ tintervalne _null_ _null_ _null_ ));
-DATA(insert OID = 786 (  tintervallt      PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "704 704" _null_ _null_ _null_ _null_ _null_ tintervallt _null_ _null_ _null_ ));
-DATA(insert OID = 787 (  tintervalgt      PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "704 704" _null_ _null_ _null_ _null_ _null_ tintervalgt _null_ _null_ _null_ ));
-DATA(insert OID = 788 (  tintervalle      PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "704 704" _null_ _null_ _null_ _null_ _null_ tintervalle _null_ _null_ _null_ ));
-DATA(insert OID = 789 (  tintervalge      PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "704 704" _null_ _null_ _null_ _null_ _null_ tintervalge _null_ _null_ _null_ ));
-
-/* OIDS 800 - 899 */
-
-DATA(insert OID =  846 (  cash_mul_flt4    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "790 700" _null_ _null_ _null_ _null_ _null_   cash_mul_flt4 _null_ _null_ _null_ ));
-DATA(insert OID =  847 (  cash_div_flt4    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "790 700" _null_ _null_ _null_ _null_ _null_   cash_div_flt4 _null_ _null_ _null_ ));
-DATA(insert OID =  848 (  flt4_mul_cash    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "700 790" _null_ _null_ _null_ _null_ _null_   flt4_mul_cash _null_ _null_ _null_ ));
-
-DATA(insert OID =  849 (  position                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "25 25" _null_ _null_ _null_ _null_ _null_ textpos _null_ _null_ _null_ ));
-DESCR("position of substring");
-DATA(insert OID =  850 (  textlike                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ textlike _null_ _null_ _null_ ));
-DATA(insert OID =  851 (  textnlike               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ textnlike _null_ _null_ _null_ ));
-
-DATA(insert OID =  852 (  int48eq                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 20" _null_ _null_ _null_ _null_ _null_ int48eq _null_ _null_ _null_ ));
-DATA(insert OID =  853 (  int48ne                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 20" _null_ _null_ _null_ _null_ _null_ int48ne _null_ _null_ _null_ ));
-DATA(insert OID =  854 (  int48lt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 20" _null_ _null_ _null_ _null_ _null_ int48lt _null_ _null_ _null_ ));
-DATA(insert OID =  855 (  int48gt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 20" _null_ _null_ _null_ _null_ _null_ int48gt _null_ _null_ _null_ ));
-DATA(insert OID =  856 (  int48le                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 20" _null_ _null_ _null_ _null_ _null_ int48le _null_ _null_ _null_ ));
-DATA(insert OID =  857 (  int48ge                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "23 20" _null_ _null_ _null_ _null_ _null_ int48ge _null_ _null_ _null_ ));
-
-DATA(insert OID =  858 (  namelike                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "19 25" _null_ _null_ _null_ _null_ _null_ namelike _null_ _null_ _null_ ));
-DATA(insert OID =  859 (  namenlike               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "19 25" _null_ _null_ _null_ _null_ _null_ namenlike _null_ _null_ _null_ ));
-
-DATA(insert OID =  860 (  bpchar                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1042 "18" _null_ _null_ _null_ _null_ _null_        char_bpchar _null_ _null_ _null_ ));
-DESCR("convert char to char(n)");
-
-DATA(insert OID = 861 ( current_database          PGNSP PGUID 12 1 0 0 0 f f f t f s s 0 0 19 "" _null_ _null_ _null_ _null_ _null_ current_database _null_ _null_ _null_ ));
-DESCR("name of the current database");
-DATA(insert OID = 817 (  current_query           PGNSP PGUID 12 1 0 0 0 f f f f f v r 0 0 25 "" _null_ _null_ _null_ _null_    _null_ current_query _null_ _null_ _null_ ));
-DESCR("get the currently executing query");
-
-DATA(insert OID = 3399 (  int8_mul_cash                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "20 790" _null_ _null_ _null_ _null_ _null_ int8_mul_cash _null_ _null_ _null_ ));
-DATA(insert OID =  862 (  int4_mul_cash                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "23 790" _null_ _null_ _null_ _null_ _null_ int4_mul_cash _null_ _null_ _null_ ));
-DATA(insert OID =  863 (  int2_mul_cash                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "21 790" _null_ _null_ _null_ _null_ _null_ int2_mul_cash _null_ _null_ _null_ ));
-DATA(insert OID = 3344 (  cash_mul_int8                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "790 20" _null_ _null_ _null_ _null_ _null_ cash_mul_int8 _null_ _null_ _null_ ));
-DATA(insert OID = 3345 (  cash_div_int8                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "790 20" _null_ _null_ _null_ _null_ _null_ cash_div_int8 _null_ _null_ _null_ ));
-DATA(insert OID =  864 (  cash_mul_int4                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "790 23" _null_ _null_ _null_ _null_ _null_ cash_mul_int4 _null_ _null_ _null_ ));
-DATA(insert OID =  865 (  cash_div_int4                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "790 23" _null_ _null_ _null_ _null_ _null_ cash_div_int4 _null_ _null_ _null_ ));
-DATA(insert OID =  866 (  cash_mul_int2                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "790 21" _null_ _null_ _null_ _null_ _null_ cash_mul_int2 _null_ _null_ _null_ ));
-DATA(insert OID =  867 (  cash_div_int2                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "790 21" _null_ _null_ _null_ _null_ _null_ cash_div_int2 _null_ _null_ _null_ ));
-
-DATA(insert OID =  886 (  cash_in                 PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 790 "2275" _null_ _null_ _null_ _null_ _null_ cash_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  887 (  cash_out                PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "790" _null_ _null_ _null_ _null_ _null_ cash_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  888 (  cash_eq                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "790 790" _null_ _null_ _null_ _null_ _null_ cash_eq _null_ _null_ _null_ ));
-DATA(insert OID =  889 (  cash_ne                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "790 790" _null_ _null_ _null_ _null_ _null_ cash_ne _null_ _null_ _null_ ));
-DATA(insert OID =  890 (  cash_lt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "790 790" _null_ _null_ _null_ _null_ _null_ cash_lt _null_ _null_ _null_ ));
-DATA(insert OID =  891 (  cash_le                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "790 790" _null_ _null_ _null_ _null_ _null_ cash_le _null_ _null_ _null_ ));
-DATA(insert OID =  892 (  cash_gt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "790 790" _null_ _null_ _null_ _null_ _null_ cash_gt _null_ _null_ _null_ ));
-DATA(insert OID =  893 (  cash_ge                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "790 790" _null_ _null_ _null_ _null_ _null_ cash_ge _null_ _null_ _null_ ));
-DATA(insert OID =  894 (  cash_pl                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "790 790" _null_ _null_ _null_ _null_ _null_    cash_pl _null_ _null_ _null_ ));
-DATA(insert OID =  895 (  cash_mi                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "790 790" _null_ _null_ _null_ _null_ _null_    cash_mi _null_ _null_ _null_ ));
-DATA(insert OID =  896 (  cash_mul_flt8    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "790 701" _null_ _null_ _null_ _null_ _null_   cash_mul_flt8 _null_ _null_ _null_ ));
-DATA(insert OID =  897 (  cash_div_flt8    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "790 701" _null_ _null_ _null_ _null_ _null_   cash_div_flt8 _null_ _null_ _null_ ));
-DATA(insert OID =  898 (  cashlarger      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "790 790" _null_ _null_ _null_ _null_ _null_    cashlarger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID =  899 (  cashsmaller     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "790 790" _null_ _null_ _null_ _null_ _null_    cashsmaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-DATA(insert OID =  919 (  flt8_mul_cash    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 790 "701 790" _null_ _null_ _null_ _null_ _null_   flt8_mul_cash _null_ _null_ _null_ ));
-DATA(insert OID =  935 (  cash_words      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "790" _null_ _null_ _null_ _null_ _null_ cash_words _null_ _null_ _null_ ));
-DESCR("output money amount as words");
-DATA(insert OID = 3822 (  cash_div_cash    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "790 790" _null_ _null_ _null_ _null_ _null_   cash_div_cash _null_ _null_ _null_ ));
-DATA(insert OID = 3823 (  numeric                 PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 1700 "790" _null_ _null_ _null_ _null_ _null_ cash_numeric _null_ _null_ _null_ ));
-DESCR("convert money to numeric");
-DATA(insert OID = 3824 (  money                           PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 790 "1700" _null_ _null_ _null_ _null_ _null_ numeric_cash _null_ _null_ _null_ ));
-DESCR("convert numeric to money");
-DATA(insert OID = 3811 (  money                           PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 790 "23" _null_ _null_ _null_ _null_ _null_ int4_cash _null_ _null_ _null_ ));
-DESCR("convert int4 to money");
-DATA(insert OID = 3812 (  money                           PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 790 "20" _null_ _null_ _null_ _null_ _null_ int8_cash _null_ _null_ _null_ ));
-DESCR("convert int8 to money");
-
-/* OIDS 900 - 999 */
-
-DATA(insert OID = 940 (  mod                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 21 "21 21" _null_ _null_ _null_ _null_ _null_ int2mod _null_ _null_ _null_ ));
-DESCR("modulus");
-DATA(insert OID = 941 (  mod                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 23" _null_ _null_ _null_ _null_ _null_ int4mod _null_ _null_ _null_ ));
-DESCR("modulus");
-
-DATA(insert OID = 945 (  int8mod                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 20" _null_ _null_ _null_ _null_ _null_ int8mod _null_ _null_ _null_ ));
-DATA(insert OID = 947 (  mod                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 20" _null_ _null_ _null_ _null_ _null_ int8mod _null_ _null_ _null_ ));
-DESCR("modulus");
-
-DATA(insert OID = 944 (  char                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 18 "25" _null_ _null_ _null_ _null_ _null_ text_char _null_ _null_ _null_ ));
-DESCR("convert text to char");
-DATA(insert OID = 946 (  text                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "18" _null_ _null_ _null_ _null_ _null_ char_text _null_ _null_ _null_ ));
-DESCR("convert char to text");
-
-DATA(insert OID = 952 (  lo_open                  PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 23 "26 23" _null_ _null_ _null_ _null_ _null_ be_lo_open _null_ _null_ _null_ ));
-DESCR("large object open");
-DATA(insert OID = 953 (  lo_close                 PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ be_lo_close _null_ _null_ _null_ ));
-DESCR("large object close");
-DATA(insert OID = 954 (  loread                           PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 17 "23 23" _null_ _null_ _null_ _null_ _null_ be_loread _null_ _null_ _null_ ));
-DESCR("large object read");
-DATA(insert OID = 955 (  lowrite                  PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 23 "23 17" _null_ _null_ _null_ _null_ _null_ be_lowrite _null_ _null_ _null_ ));
-DESCR("large object write");
-DATA(insert OID = 956 (  lo_lseek                 PGNSP PGUID 12 1 0 0 0 f f f t f v u 3 0 23 "23 23 23" _null_ _null_ _null_ _null_ _null_    be_lo_lseek _null_ _null_ _null_ ));
-DESCR("large object seek");
-DATA(insert OID = 3170 (  lo_lseek64      PGNSP PGUID 12 1 0 0 0 f f f t f v u 3 0 20 "23 20 23" _null_ _null_ _null_ _null_ _null_    be_lo_lseek64 _null_ _null_ _null_ ));
-DESCR("large object seek (64 bit)");
-DATA(insert OID = 957 (  lo_creat                 PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 26 "23" _null_ _null_ _null_ _null_ _null_ be_lo_creat _null_ _null_ _null_ ));
-DESCR("large object create");
-DATA(insert OID = 715 (  lo_create                PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 26 "26" _null_ _null_ _null_ _null_ _null_ be_lo_create _null_ _null_ _null_ ));
-DESCR("large object create");
-DATA(insert OID = 958 (  lo_tell                  PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ be_lo_tell _null_ _null_ _null_ ));
-DESCR("large object position");
-DATA(insert OID = 3171 (  lo_tell64               PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 20 "23" _null_ _null_ _null_ _null_ _null_ be_lo_tell64 _null_ _null_ _null_ ));
-DESCR("large object position (64 bit)");
-DATA(insert OID = 1004 (  lo_truncate     PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 23 "23 23" _null_ _null_ _null_ _null_ _null_ be_lo_truncate _null_ _null_ _null_ ));
-DESCR("truncate large object");
-DATA(insert OID = 3172 (  lo_truncate64    PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 23 "23 20" _null_ _null_ _null_ _null_ _null_ be_lo_truncate64 _null_ _null_ _null_ ));
-DESCR("truncate large object (64 bit)");
-
-DATA(insert OID = 3457 (  lo_from_bytea    PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 26 "26 17" _null_ _null_ _null_ _null_ _null_ be_lo_from_bytea _null_ _null_ _null_ ));
-DESCR("create new large object with given content");
-DATA(insert OID = 3458 (  lo_get                  PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 17 "26" _null_ _null_ _null_ _null_ _null_ be_lo_get _null_ _null_ _null_ ));
-DESCR("read entire large object");
-DATA(insert OID = 3459 (  lo_get                  PGNSP PGUID 12 1 0 0 0 f f f t f v u 3 0 17 "26 20 23" _null_ _null_ _null_ _null_ _null_ be_lo_get_fragment _null_ _null_ _null_ ));
-DESCR("read large object from offset for length");
-DATA(insert OID = 3460 (  lo_put                  PGNSP PGUID 12 1 0 0 0 f f f t f v u 3 0 2278 "26 20 17" _null_ _null_ _null_ _null_ _null_ be_lo_put _null_ _null_ _null_ ));
-DESCR("write data at offset");
-
-DATA(insert OID = 959 (  on_pl                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "600 628" _null_ _null_ _null_ _null_ _null_ on_pl _null_ _null_ _null_ ));
-DATA(insert OID = 960 (  on_sl                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "601 628" _null_ _null_ _null_ _null_ _null_ on_sl _null_ _null_ _null_ ));
-DATA(insert OID = 961 (  close_pl                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 600 "600 628" _null_ _null_ _null_ _null_ _null_    close_pl _null_ _null_ _null_ ));
-DATA(insert OID = 962 (  close_sl                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 600 "601 628" _null_ _null_ _null_ _null_ _null_    close_sl _null_ _null_ _null_ ));
-DATA(insert OID = 963 (  close_lb                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 600 "628 603" _null_ _null_ _null_ _null_ _null_    close_lb _null_ _null_ _null_ ));
-
-DATA(insert OID = 964 (  lo_unlink                PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 23 "26" _null_ _null_ _null_ _null_ _null_ be_lo_unlink _null_ _null_ _null_ ));
-DESCR("large object unlink (delete)");
-
-DATA(insert OID = 973 (  path_inter               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "602 602" _null_ _null_ _null_ _null_ _null_ path_inter _null_ _null_ _null_ ));
-DATA(insert OID = 975 (  area                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "603" _null_ _null_ _null_ _null_ _null_        box_area _null_ _null_ _null_ ));
-DESCR("box area");
-DATA(insert OID = 976 (  width                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "603" _null_ _null_ _null_ _null_ _null_        box_width _null_ _null_ _null_ ));
-DESCR("box width");
-DATA(insert OID = 977 (  height                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "603" _null_ _null_ _null_ _null_ _null_        box_height _null_ _null_ _null_ ));
-DESCR("box height");
-DATA(insert OID = 978 (  box_distance     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "603 603" _null_ _null_ _null_ _null_ _null_    box_distance _null_ _null_ _null_ ));
-DATA(insert OID = 979 (  area                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "602" _null_ _null_ _null_ _null_ _null_        path_area _null_ _null_ _null_ ));
-DESCR("area of a closed path");
-DATA(insert OID = 980 (  box_intersect    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 603 "603 603" _null_ _null_ _null_ _null_ _null_    box_intersect _null_ _null_ _null_ ));
-DATA(insert OID = 4067 ( bound_box                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 603 "603 603" _null_ _null_ _null_ _null_ _null_    boxes_bound_box _null_ _null_ _null_ ));
-DESCR("bounding box of two boxes");
-DATA(insert OID = 981 (  diagonal                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 601 "603" _null_ _null_ _null_ _null_ _null_        box_diagonal _null_ _null_ _null_ ));
-DESCR("box diagonal");
-DATA(insert OID = 982 (  path_n_lt                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "602 602" _null_ _null_ _null_ _null_ _null_ path_n_lt _null_ _null_ _null_ ));
-DATA(insert OID = 983 (  path_n_gt                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "602 602" _null_ _null_ _null_ _null_ _null_ path_n_gt _null_ _null_ _null_ ));
-DATA(insert OID = 984 (  path_n_eq                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "602 602" _null_ _null_ _null_ _null_ _null_ path_n_eq _null_ _null_ _null_ ));
-DATA(insert OID = 985 (  path_n_le                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "602 602" _null_ _null_ _null_ _null_ _null_ path_n_le _null_ _null_ _null_ ));
-DATA(insert OID = 986 (  path_n_ge                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "602 602" _null_ _null_ _null_ _null_ _null_ path_n_ge _null_ _null_ _null_ ));
-DATA(insert OID = 987 (  path_length      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "602" _null_ _null_ _null_ _null_ _null_        path_length _null_ _null_ _null_ ));
-DATA(insert OID = 988 (  point_ne                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "600 600" _null_ _null_ _null_ _null_ _null_ point_ne _null_ _null_ _null_ ));
-DATA(insert OID = 989 (  point_vert               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "600 600" _null_ _null_ _null_ _null_ _null_ point_vert _null_ _null_ _null_ ));
-DATA(insert OID = 990 (  point_horiz      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "600 600" _null_ _null_ _null_ _null_ _null_ point_horiz _null_ _null_ _null_ ));
-DATA(insert OID = 991 (  point_distance    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "600 600" _null_ _null_ _null_ _null_ _null_   point_distance _null_ _null_ _null_ ));
-DATA(insert OID = 992 (  slope                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "600 600" _null_ _null_ _null_ _null_ _null_    point_slope _null_ _null_ _null_ ));
-DESCR("slope between points");
-DATA(insert OID = 993 (  lseg                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 601 "600 600" _null_ _null_ _null_ _null_ _null_    lseg_construct _null_ _null_ _null_ ));
-DESCR("convert points to line segment");
-DATA(insert OID = 994 (  lseg_intersect    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "601 601" _null_ _null_ _null_ _null_ _null_ lseg_intersect _null_ _null_ _null_ ));
-DATA(insert OID = 995 (  lseg_parallel    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "601 601" _null_ _null_ _null_ _null_ _null_ lseg_parallel _null_ _null_ _null_ ));
-DATA(insert OID = 996 (  lseg_perp                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "601 601" _null_ _null_ _null_ _null_ _null_ lseg_perp _null_ _null_ _null_ ));
-DATA(insert OID = 997 (  lseg_vertical    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "601" _null_ _null_ _null_ _null_ _null_ lseg_vertical _null_ _null_ _null_ ));
-DATA(insert OID = 998 (  lseg_horizontal   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "601" _null_ _null_ _null_ _null_ _null_ lseg_horizontal _null_ _null_ _null_ ));
-DATA(insert OID = 999 (  lseg_eq                  PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "601 601" _null_ _null_ _null_ _null_ _null_ lseg_eq _null_ _null_ _null_ ));
-
-/* OIDS 1000 - 1999 */
+       /* procedure name */
+       NameData        proname;
 
-DATA(insert OID = 3994 (  timestamp_izone_transform PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ timestamp_izone_transform _null_ _null_ _null_ ));
-DESCR("transform a time zone adjustment");
-DATA(insert OID = 1026 (  timezone                PGNSP PGUID 12 1 0 0 timestamp_izone_transform f f f t f i s 2 0 1114 "1186 1184" _null_ _null_ _null_ _null_ _null_ timestamptz_izone _null_ _null_ _null_ ));
-DESCR("adjust timestamp to new time zone");
+       /* OID of namespace containing this proc */
+       Oid                     pronamespace BKI_DEFAULT(PGNSP);
 
-DATA(insert OID = 1031 (  aclitemin               PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 1033 "2275" _null_ _null_ _null_ _null_ _null_ aclitemin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1032 (  aclitemout      PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "1033" _null_ _null_ _null_ _null_ _null_ aclitemout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1035 (  aclinsert               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1034 "1034 1033" _null_ _null_ _null_ _null_ _null_ aclinsert _null_ _null_ _null_ ));
-DESCR("add/update ACL item");
-DATA(insert OID = 1036 (  aclremove               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1034 "1034 1033" _null_ _null_ _null_ _null_ _null_ aclremove _null_ _null_ _null_ ));
-DESCR("remove ACL item");
-DATA(insert OID = 1037 (  aclcontains     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1034 1033" _null_ _null_ _null_ _null_ _null_ aclcontains _null_ _null_ _null_ ));
-DESCR("contains");
-DATA(insert OID = 1062 (  aclitemeq               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1033 1033" _null_ _null_ _null_ _null_ _null_ aclitem_eq _null_ _null_ _null_ ));
-DATA(insert OID = 1365 (  makeaclitem     PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 1033 "26 26 25 16" _null_ _null_ _null_ _null_ _null_ makeaclitem _null_ _null_ _null_ ));
-DESCR("make ACL item");
-DATA(insert OID = 3943 (  acldefault   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1034 "18 26" _null_ _null_ _null_ _null_  _null_ acldefault_sql _null_ _null_ _null_ ));
-DESCR("TODO");
-DATA(insert OID = 1689 (  aclexplode   PGNSP PGUID 12 1 10 0 0 f f f t t s s 1 0 2249 "1034" "{1034,26,26,25,16}" "{i,o,o,o,o}" "{acl,grantor,grantee,privilege_type,is_grantable}" _null_ _null_ aclexplode _null_ _null_ _null_ ));
-DESCR("convert ACL item array to table, for use by information schema");
-DATA(insert OID = 1044 (  bpcharin                PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1042 "2275 26 23" _null_ _null_ _null_ _null_ _null_ bpcharin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1045 (  bpcharout               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "1042" _null_ _null_ _null_ _null_ _null_ bpcharout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2913 (  bpchartypmodin   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1263" _null_ _null_ _null_ _null_ _null_       bpchartypmodin _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 2914 (  bpchartypmodout  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "23" _null_ _null_ _null_ _null_ _null_       bpchartypmodout _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 1046 (  varcharin               PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1043 "2275 26 23" _null_ _null_ _null_ _null_ _null_ varcharin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1047 (  varcharout      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "1043" _null_ _null_ _null_ _null_ _null_ varcharout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2915 (  varchartypmodin  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1263" _null_ _null_ _null_ _null_ _null_       varchartypmodin _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 2916 (  varchartypmodout PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "23" _null_ _null_ _null_ _null_ _null_       varchartypmodout _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 1048 (  bpchareq                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1042 1042" _null_ _null_ _null_ _null_ _null_ bpchareq _null_ _null_ _null_ ));
-DATA(insert OID = 1049 (  bpcharlt                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1042 1042" _null_ _null_ _null_ _null_ _null_ bpcharlt _null_ _null_ _null_ ));
-DATA(insert OID = 1050 (  bpcharle                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1042 1042" _null_ _null_ _null_ _null_ _null_ bpcharle _null_ _null_ _null_ ));
-DATA(insert OID = 1051 (  bpchargt                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1042 1042" _null_ _null_ _null_ _null_ _null_ bpchargt _null_ _null_ _null_ ));
-DATA(insert OID = 1052 (  bpcharge                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1042 1042" _null_ _null_ _null_ _null_ _null_ bpcharge _null_ _null_ _null_ ));
-DATA(insert OID = 1053 (  bpcharne                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1042 1042" _null_ _null_ _null_ _null_ _null_ bpcharne _null_ _null_ _null_ ));
-DATA(insert OID = 1063 (  bpchar_larger    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1042 "1042 1042" _null_ _null_ _null_ _null_ _null_ bpchar_larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 1064 (  bpchar_smaller   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1042 "1042 1042" _null_ _null_ _null_ _null_ _null_ bpchar_smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-DATA(insert OID = 1078 (  bpcharcmp               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "1042 1042" _null_ _null_ _null_ _null_ _null_ bpcharcmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3328 ( bpchar_sortsupport PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ bpchar_sortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-DATA(insert OID = 1080 (  hashbpchar      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1042" _null_ _null_ _null_ _null_ _null_        hashbpchar _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 972  (  hashbpcharextended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "1042 20" _null_ _null_ _null_ _null_ _null_  hashbpcharextended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 1081 (  format_type     PGNSP PGUID 12 1 0 0 0 f f f f f s s 2 0 25 "26 23" _null_ _null_ _null_ _null_ _null_ format_type _null_ _null_ _null_ ));
-DESCR("format a type oid and atttypmod to canonical SQL");
-DATA(insert OID = 1084 (  date_in                 PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 1082 "2275" _null_ _null_ _null_ _null_ _null_ date_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1085 (  date_out                PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "1082" _null_ _null_ _null_ _null_ _null_ date_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1086 (  date_eq                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1082 1082" _null_ _null_ _null_ _null_ _null_ date_eq _null_ _null_ _null_ ));
-DATA(insert OID = 1087 (  date_lt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1082 1082" _null_ _null_ _null_ _null_ _null_ date_lt _null_ _null_ _null_ ));
-DATA(insert OID = 1088 (  date_le                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1082 1082" _null_ _null_ _null_ _null_ _null_ date_le _null_ _null_ _null_ ));
-DATA(insert OID = 1089 (  date_gt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1082 1082" _null_ _null_ _null_ _null_ _null_ date_gt _null_ _null_ _null_ ));
-DATA(insert OID = 1090 (  date_ge                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1082 1082" _null_ _null_ _null_ _null_ _null_ date_ge _null_ _null_ _null_ ));
-DATA(insert OID = 1091 (  date_ne                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1082 1082" _null_ _null_ _null_ _null_ _null_ date_ne _null_ _null_ _null_ ));
-DATA(insert OID = 1092 (  date_cmp                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "1082 1082" _null_ _null_ _null_ _null_ _null_ date_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3136 (  date_sortsupport PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ date_sortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-DATA(insert OID = 4133 (  in_range                PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "1082 1082 1186 16 16" _null_ _null_ _null_ _null_ _null_ in_range_date_interval _null_ _null_ _null_ ));
-DESCR("window RANGE support");
+       /* procedure owner */
+       Oid                     proowner BKI_DEFAULT(PGUID);
 
-/* OIDS 1100 - 1199 */
+       /* OID of pg_language entry */
+       Oid                     prolang BKI_DEFAULT(12);
 
-DATA(insert OID = 1102 (  time_lt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1083 1083" _null_ _null_ _null_ _null_ _null_ time_lt _null_ _null_ _null_ ));
-DATA(insert OID = 1103 (  time_le                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1083 1083" _null_ _null_ _null_ _null_ _null_ time_le _null_ _null_ _null_ ));
-DATA(insert OID = 1104 (  time_gt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1083 1083" _null_ _null_ _null_ _null_ _null_ time_gt _null_ _null_ _null_ ));
-DATA(insert OID = 1105 (  time_ge                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1083 1083" _null_ _null_ _null_ _null_ _null_ time_ge _null_ _null_ _null_ ));
-DATA(insert OID = 1106 (  time_ne                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1083 1083" _null_ _null_ _null_ _null_ _null_ time_ne _null_ _null_ _null_ ));
-DATA(insert OID = 1107 (  time_cmp                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "1083 1083" _null_ _null_ _null_ _null_ _null_ time_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 1138 (  date_larger     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1082 "1082 1082" _null_ _null_ _null_ _null_ _null_ date_larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 1139 (  date_smaller    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1082 "1082 1082" _null_ _null_ _null_ _null_ _null_ date_smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-DATA(insert OID = 1140 (  date_mi                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "1082 1082" _null_ _null_ _null_ _null_ _null_ date_mi _null_ _null_ _null_ ));
-DATA(insert OID = 1141 (  date_pli                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1082 "1082 23" _null_ _null_ _null_ _null_ _null_ date_pli _null_ _null_ _null_ ));
-DATA(insert OID = 1142 (  date_mii                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1082 "1082 23" _null_ _null_ _null_ _null_ _null_ date_mii _null_ _null_ _null_ ));
-DATA(insert OID = 1143 (  time_in                 PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 1083 "2275 26 23" _null_ _null_ _null_ _null_ _null_ time_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1144 (  time_out                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "1083" _null_ _null_ _null_ _null_ _null_ time_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2909 (  timetypmodin         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1263" _null_ _null_ _null_ _null_ _null_ timetypmodin _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 2910 (  timetypmodout                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "23" _null_ _null_ _null_ _null_ _null_ timetypmodout _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 1145 (  time_eq                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1083 1083" _null_ _null_ _null_ _null_ _null_ time_eq _null_ _null_ _null_ ));
+       /* estimated execution cost */
+       float4          procost BKI_DEFAULT(1);
 
-DATA(insert OID = 1146 (  circle_add_pt    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 718 "718 600" _null_ _null_ _null_ _null_ _null_   circle_add_pt _null_ _null_ _null_ ));
-DATA(insert OID = 1147 (  circle_sub_pt    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 718 "718 600" _null_ _null_ _null_ _null_ _null_   circle_sub_pt _null_ _null_ _null_ ));
-DATA(insert OID = 1148 (  circle_mul_pt    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 718 "718 600" _null_ _null_ _null_ _null_ _null_   circle_mul_pt _null_ _null_ _null_ ));
-DATA(insert OID = 1149 (  circle_div_pt    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 718 "718 600" _null_ _null_ _null_ _null_ _null_   circle_div_pt _null_ _null_ _null_ ));
+       /* estimated # of rows out (if proretset) */
+       float4          prorows BKI_DEFAULT(0);
 
-DATA(insert OID = 1150 (  timestamptz_in   PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 1184 "2275 26 23" _null_ _null_ _null_ _null_ _null_ timestamptz_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1151 (  timestamptz_out  PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "1184" _null_ _null_ _null_ _null_ _null_ timestamptz_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2907 (  timestamptztypmodin          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1263" _null_ _null_ _null_ _null_ _null_ timestamptztypmodin _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 2908 (  timestamptztypmodout         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "23" _null_ _null_ _null_ _null_ _null_ timestamptztypmodout _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 1152 (  timestamptz_eq   PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1184 1184" _null_ _null_ _null_ _null_ _null_ timestamp_eq _null_ _null_ _null_ ));
-DATA(insert OID = 1153 (  timestamptz_ne   PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1184 1184" _null_ _null_ _null_ _null_ _null_ timestamp_ne _null_ _null_ _null_ ));
-DATA(insert OID = 1154 (  timestamptz_lt   PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1184 1184" _null_ _null_ _null_ _null_ _null_ timestamp_lt _null_ _null_ _null_ ));
-DATA(insert OID = 1155 (  timestamptz_le   PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1184 1184" _null_ _null_ _null_ _null_ _null_ timestamp_le _null_ _null_ _null_ ));
-DATA(insert OID = 1156 (  timestamptz_ge   PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1184 1184" _null_ _null_ _null_ _null_ _null_ timestamp_ge _null_ _null_ _null_ ));
-DATA(insert OID = 1157 (  timestamptz_gt   PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1184 1184" _null_ _null_ _null_ _null_ _null_ timestamp_gt _null_ _null_ _null_ ));
-DATA(insert OID = 1158 (  to_timestamp    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1184 "701" _null_ _null_ _null_ _null_ _null_ float8_timestamptz _null_ _null_ _null_ ));
-DESCR("convert UNIX epoch to timestamptz");
-DATA(insert OID = 3995 (  timestamp_zone_transform PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ timestamp_zone_transform _null_ _null_ _null_ ));
-DESCR("transform a time zone adjustment");
-DATA(insert OID = 1159 (  timezone                PGNSP PGUID 12 1 0 0 timestamp_zone_transform f f f t f i s 2 0 1114 "25 1184" _null_ _null_ _null_ _null_ _null_    timestamptz_zone _null_ _null_ _null_ ));
-DESCR("adjust timestamp to new time zone");
+       /* element type of variadic array, or 0 */
+       Oid                     provariadic BKI_DEFAULT(0) BKI_LOOKUP(pg_type);
 
-DATA(insert OID = 1160 (  interval_in     PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 1186 "2275 26 23" _null_ _null_ _null_ _null_ _null_ interval_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1161 (  interval_out    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "1186" _null_ _null_ _null_ _null_ _null_ interval_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2903 (  intervaltypmodin             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1263" _null_ _null_ _null_ _null_ _null_ intervaltypmodin _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 2904 (  intervaltypmodout            PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "23" _null_ _null_ _null_ _null_ _null_ intervaltypmodout _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 1162 (  interval_eq     PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1186 1186" _null_ _null_ _null_ _null_ _null_ interval_eq _null_ _null_ _null_ ));
-DATA(insert OID = 1163 (  interval_ne     PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1186 1186" _null_ _null_ _null_ _null_ _null_ interval_ne _null_ _null_ _null_ ));
-DATA(insert OID = 1164 (  interval_lt     PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1186 1186" _null_ _null_ _null_ _null_ _null_ interval_lt _null_ _null_ _null_ ));
-DATA(insert OID = 1165 (  interval_le     PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1186 1186" _null_ _null_ _null_ _null_ _null_ interval_le _null_ _null_ _null_ ));
-DATA(insert OID = 1166 (  interval_ge     PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1186 1186" _null_ _null_ _null_ _null_ _null_ interval_ge _null_ _null_ _null_ ));
-DATA(insert OID = 1167 (  interval_gt     PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1186 1186" _null_ _null_ _null_ _null_ _null_ interval_gt _null_ _null_ _null_ ));
-DATA(insert OID = 1168 (  interval_um     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1186 "1186" _null_ _null_ _null_ _null_ _null_ interval_um _null_ _null_ _null_ ));
-DATA(insert OID = 1169 (  interval_pl     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1186 "1186 1186" _null_ _null_ _null_ _null_ _null_ interval_pl _null_ _null_ _null_ ));
-DATA(insert OID = 1170 (  interval_mi     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1186 "1186 1186" _null_ _null_ _null_ _null_ _null_ interval_mi _null_ _null_ _null_ ));
-DATA(insert OID = 1171 (  date_part               PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 701 "25 1184" _null_ _null_ _null_ _null_ _null_ timestamptz_part _null_ _null_ _null_ ));
-DESCR("extract field from timestamp with time zone");
-DATA(insert OID = 1172 (  date_part               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "25 1186" _null_ _null_ _null_ _null_ _null_ interval_part _null_ _null_ _null_ ));
-DESCR("extract field from interval");
-DATA(insert OID = 1173 (  timestamptz     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1184 "702" _null_ _null_ _null_ _null_ _null_ abstime_timestamptz _null_ _null_ _null_ ));
-DESCR("convert abstime to timestamp with time zone");
-DATA(insert OID = 1174 (  timestamptz     PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 1184 "1082" _null_ _null_ _null_ _null_ _null_ date_timestamptz _null_ _null_ _null_ ));
-DESCR("convert date to timestamp with time zone");
-DATA(insert OID = 2711 (  justify_interval PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1186 "1186" _null_ _null_ _null_ _null_ _null_ interval_justify_interval _null_ _null_ _null_ ));
-DESCR("promote groups of 24 hours to numbers of days and promote groups of 30 days to numbers of months");
-DATA(insert OID = 1175 (  justify_hours    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1186 "1186" _null_ _null_ _null_ _null_ _null_ interval_justify_hours _null_ _null_ _null_ ));
-DESCR("promote groups of 24 hours to numbers of days");
-DATA(insert OID = 1295 (  justify_days    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1186 "1186" _null_ _null_ _null_ _null_ _null_ interval_justify_days _null_ _null_ _null_ ));
-DESCR("promote groups of 30 days to numbers of months");
-DATA(insert OID = 1176 (  timestamptz     PGNSP PGUID 14 1 0 0 0 f f f t f s s 2 0 1184 "1082 1083" _null_ _null_ _null_ _null_ _null_ "select cast(($1 + $2) as timestamp with time zone)" _null_ _null_ _null_ ));
-DESCR("convert date and time to timestamp with time zone");
-DATA(insert OID = 1177 (  interval                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1186 "703" _null_ _null_ _null_ _null_ _null_ reltime_interval _null_ _null_ _null_ ));
-DESCR("convert reltime to interval");
-DATA(insert OID = 1178 (  date                    PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 1082 "1184" _null_ _null_ _null_ _null_ _null_ timestamptz_date _null_ _null_ _null_ ));
-DESCR("convert timestamp with time zone to date");
-DATA(insert OID = 1179 (  date                    PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 1082 "702" _null_ _null_ _null_ _null_ _null_ abstime_date _null_ _null_ _null_ ));
-DESCR("convert abstime to date");
-DATA(insert OID = 1180 (  abstime                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 702 "1184" _null_ _null_ _null_ _null_ _null_ timestamptz_abstime _null_ _null_ _null_ ));
-DESCR("convert timestamp with time zone to abstime");
-DATA(insert OID = 1181 (  age                     PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 23 "28" _null_ _null_ _null_ _null_ _null_ xid_age _null_ _null_ _null_ ));
-DESCR("age of a transaction ID, in transactions before current transaction");
-DATA(insert OID = 3939 (  mxid_age                PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 23 "28" _null_ _null_ _null_ _null_ _null_ mxid_age _null_ _null_ _null_ ));
-DESCR("age of a multi-transaction ID, in multi-transactions before current multi-transaction");
+       /* transforms calls to it during planning */
+       regproc         protransform BKI_DEFAULT(0) BKI_LOOKUP(pg_proc);
 
-DATA(insert OID = 1188 (  timestamptz_mi   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1186 "1184 1184" _null_ _null_ _null_ _null_ _null_ timestamp_mi _null_ _null_ _null_ ));
-DATA(insert OID = 1189 (  timestamptz_pl_interval PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 1184 "1184 1186" _null_ _null_ _null_ _null_ _null_ timestamptz_pl_interval _null_ _null_ _null_ ));
-DATA(insert OID = 1190 (  timestamptz_mi_interval PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 1184 "1184 1186" _null_ _null_ _null_ _null_ _null_ timestamptz_mi_interval _null_ _null_ _null_ ));
-DATA(insert OID = 1194 (  reltime                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 703 "1186" _null_ _null_ _null_ _null_ _null_ interval_reltime _null_ _null_ _null_ ));
-DESCR("convert interval to reltime");
-DATA(insert OID = 1195 (  timestamptz_smaller PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1184 "1184 1184" _null_ _null_ _null_ _null_ _null_ timestamp_smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-DATA(insert OID = 1196 (  timestamptz_larger  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1184 "1184 1184" _null_ _null_ _null_ _null_ _null_ timestamp_larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 1197 (  interval_smaller     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1186 "1186 1186" _null_ _null_ _null_ _null_ _null_    interval_smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-DATA(insert OID = 1198 (  interval_larger      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1186 "1186 1186" _null_ _null_ _null_ _null_ _null_    interval_larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 1199 (  age                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1186 "1184 1184" _null_ _null_ _null_ _null_ _null_    timestamptz_age _null_ _null_ _null_ ));
-DESCR("date difference preserving months and years");
+       /* see PROKIND_ categories below */
+       char            prokind BKI_DEFAULT(f);
 
-/* OIDS 1200 - 1299 */
+       /* security definer */
+       bool            prosecdef BKI_DEFAULT(f);
 
-DATA(insert OID = 3918 (  interval_transform PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ interval_transform _null_ _null_ _null_ ));
-DESCR("transform an interval length coercion");
-DATA(insert OID = 1200 (  interval                     PGNSP PGUID 12 1 0 0 interval_transform f f f t f i s 2 0 1186 "1186 23" _null_ _null_ _null_ _null_ _null_ interval_scale _null_ _null_ _null_ ));
-DESCR("adjust interval precision");
+       /* is it a leak-proof function? */
+       bool            proleakproof BKI_DEFAULT(f);
 
-DATA(insert OID = 1215 (  obj_description      PGNSP PGUID 14 100 0 0 0 f f f t f s s 2 0 25 "26 19" _null_ _null_ _null_ _null_ _null_ "select description from pg_catalog.pg_description where objoid = $1 and classoid = (select oid from pg_catalog.pg_class where relname = $2 and relnamespace = PGNSP) and objsubid = 0" _null_ _null_ _null_ ));
-DESCR("get description for object id and catalog name");
-DATA(insert OID = 1216 (  col_description      PGNSP PGUID 14 100 0 0 0 f f f t f s s 2 0 25 "26 23" _null_ _null_ _null_ _null_ _null_ "select description from pg_catalog.pg_description where objoid = $1 and classoid = ''pg_catalog.pg_class''::pg_catalog.regclass and objsubid = $2" _null_ _null_ _null_ ));
-DESCR("get description for table column");
-DATA(insert OID = 1993 ( shobj_description     PGNSP PGUID 14 100 0 0 0 f f f t f s s 2 0 25 "26 19" _null_ _null_ _null_ _null_ _null_ "select description from pg_catalog.pg_shdescription where objoid = $1 and classoid = (select oid from pg_catalog.pg_class where relname = $2 and relnamespace = PGNSP)" _null_ _null_ _null_ ));
-DESCR("get description for object id and shared catalog name");
+       /* strict with respect to NULLs? */
+       bool            proisstrict BKI_DEFAULT(t);
 
-DATA(insert OID = 1217 (  date_trunc      PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 1184 "25 1184" _null_ _null_ _null_ _null_ _null_ timestamptz_trunc _null_ _null_ _null_ ));
-DESCR("truncate timestamp with time zone to specified units");
-DATA(insert OID = 1218 (  date_trunc      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1186 "25 1186" _null_ _null_ _null_ _null_ _null_ interval_trunc _null_ _null_ _null_ ));
-DESCR("truncate interval to specified units");
+       /* returns a set? */
+       bool            proretset BKI_DEFAULT(f);
 
-DATA(insert OID = 1219 (  int8inc                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "20" _null_ _null_ _null_ _null_ _null_ int8inc _null_ _null_ _null_ ));
-DESCR("increment");
-DATA(insert OID = 3546 (  int8dec                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "20" _null_ _null_ _null_ _null_ _null_ int8dec _null_ _null_ _null_ ));
-DESCR("decrement");
-DATA(insert OID = 2804 (  int8inc_any     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 2276" _null_ _null_ _null_ _null_ _null_ int8inc_any _null_ _null_ _null_ ));
-DESCR("increment, ignores second argument");
-DATA(insert OID = 3547 (  int8dec_any     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 2276" _null_ _null_ _null_ _null_ _null_ int8dec_any _null_ _null_ _null_ ));
-DESCR("decrement, ignores second argument");
-DATA(insert OID = 1230 (  int8abs                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "20" _null_ _null_ _null_ _null_ _null_ int8abs _null_ _null_ _null_ ));
+       /* see PROVOLATILE_ categories below */
+       char            provolatile BKI_DEFAULT(i);
 
-DATA(insert OID = 1236 (  int8larger      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 20" _null_ _null_ _null_ _null_ _null_ int8larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 1237 (  int8smaller     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 20" _null_ _null_ _null_ _null_ _null_ int8smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
+       /* see PROPARALLEL_ categories below */
+       char            proparallel BKI_DEFAULT(s);
 
-DATA(insert OID = 1238 (  texticregexeq    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ texticregexeq _null_ _null_ _null_ ));
-DATA(insert OID = 1239 (  texticregexne    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ texticregexne _null_ _null_ _null_ ));
-DATA(insert OID = 1240 (  nameicregexeq    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "19 25" _null_ _null_ _null_ _null_ _null_ nameicregexeq _null_ _null_ _null_ ));
-DATA(insert OID = 1241 (  nameicregexne    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "19 25" _null_ _null_ _null_ _null_ _null_ nameicregexne _null_ _null_ _null_ ));
+       /* number of arguments */
+       /* Note: need not be given in pg_proc.dat; genbki.pl will compute it */
+       int16           pronargs;
 
-DATA(insert OID = 1251 (  int4abs                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ int4abs _null_ _null_ _null_ ));
-DATA(insert OID = 1253 (  int2abs                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 21 "21" _null_ _null_ _null_ _null_ _null_ int2abs _null_ _null_ _null_ ));
+       /* number of arguments with defaults */
+       int16           pronargdefaults BKI_DEFAULT(0);
 
-DATA(insert OID = 1271 (  overlaps                PGNSP PGUID 12 1 0 0 0 f f f f f i s 4 0 16 "1266 1266 1266 1266" _null_ _null_ _null_ _null_ _null_ overlaps_timetz _null_ _null_ _null_ ));
-DESCR("intervals overlap?");
-DATA(insert OID = 1272 (  datetime_pl     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1114 "1082 1083" _null_ _null_ _null_ _null_ _null_ datetime_timestamp _null_ _null_ _null_ ));
-DATA(insert OID = 1273 (  date_part               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "25 1266" _null_ _null_ _null_ _null_ _null_ timetz_part _null_ _null_ _null_ ));
-DESCR("extract field from time with time zone");
-DATA(insert OID = 1274 (  int84pl                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 23" _null_ _null_ _null_ _null_ _null_ int84pl _null_ _null_ _null_ ));
-DATA(insert OID = 1275 (  int84mi                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 23" _null_ _null_ _null_ _null_ _null_ int84mi _null_ _null_ _null_ ));
-DATA(insert OID = 1276 (  int84mul                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 23" _null_ _null_ _null_ _null_ _null_ int84mul _null_ _null_ _null_ ));
-DATA(insert OID = 1277 (  int84div                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 23" _null_ _null_ _null_ _null_ _null_ int84div _null_ _null_ _null_ ));
-DATA(insert OID = 1278 (  int48pl                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "23 20" _null_ _null_ _null_ _null_ _null_ int48pl _null_ _null_ _null_ ));
-DATA(insert OID = 1279 (  int48mi                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "23 20" _null_ _null_ _null_ _null_ _null_ int48mi _null_ _null_ _null_ ));
-DATA(insert OID = 1280 (  int48mul                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "23 20" _null_ _null_ _null_ _null_ _null_ int48mul _null_ _null_ _null_ ));
-DATA(insert OID = 1281 (  int48div                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "23 20" _null_ _null_ _null_ _null_ _null_ int48div _null_ _null_ _null_ ));
+       /* OID of result type */
+       Oid                     prorettype BKI_LOOKUP(pg_type);
 
-DATA(insert OID =  837 (  int82pl                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 21" _null_ _null_ _null_ _null_ _null_ int82pl _null_ _null_ _null_ ));
-DATA(insert OID =  838 (  int82mi                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 21" _null_ _null_ _null_ _null_ _null_ int82mi _null_ _null_ _null_ ));
-DATA(insert OID =  839 (  int82mul                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 21" _null_ _null_ _null_ _null_ _null_ int82mul _null_ _null_ _null_ ));
-DATA(insert OID =  840 (  int82div                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 21" _null_ _null_ _null_ _null_ _null_ int82div _null_ _null_ _null_ ));
-DATA(insert OID =  841 (  int28pl                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "21 20" _null_ _null_ _null_ _null_ _null_ int28pl _null_ _null_ _null_ ));
-DATA(insert OID =  942 (  int28mi                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "21 20" _null_ _null_ _null_ _null_ _null_ int28mi _null_ _null_ _null_ ));
-DATA(insert OID =  943 (  int28mul                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "21 20" _null_ _null_ _null_ _null_ _null_ int28mul _null_ _null_ _null_ ));
-DATA(insert OID =  948 (  int28div                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "21 20" _null_ _null_ _null_ _null_ _null_ int28div _null_ _null_ _null_ ));
-
-DATA(insert OID = 1287 (  oid                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 26 "20" _null_ _null_ _null_ _null_ _null_ i8tooid _null_ _null_ _null_ ));
-DESCR("convert int8 to oid");
-DATA(insert OID = 1288 (  int8                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ oidtoi8 _null_ _null_ _null_ ));
-DESCR("convert oid to int8");
-
-DATA(insert OID = 1291 (  suppress_redundant_updates_trigger   PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ suppress_redundant_updates_trigger _null_ _null_ _null_ ));
-DESCR("trigger to suppress updates when new and old records match");
-
-DATA(insert OID = 1292 ( tideq                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "27 27" _null_ _null_ _null_ _null_ _null_ tideq _null_ _null_ _null_ ));
-DATA(insert OID = 1293 ( currtid                  PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 27 "26 27" _null_ _null_ _null_ _null_ _null_ currtid_byreloid _null_ _null_ _null_ ));
-DESCR("latest tid of a tuple");
-DATA(insert OID = 1294 ( currtid2                 PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 27 "25 27" _null_ _null_ _null_ _null_ _null_ currtid_byrelname _null_ _null_ _null_ ));
-DESCR("latest tid of a tuple");
-DATA(insert OID = 1265 ( tidne                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "27 27" _null_ _null_ _null_ _null_ _null_ tidne _null_ _null_ _null_ ));
-DATA(insert OID = 2790 ( tidgt                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "27 27" _null_ _null_ _null_ _null_ _null_ tidgt _null_ _null_ _null_ ));
-DATA(insert OID = 2791 ( tidlt                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "27 27" _null_ _null_ _null_ _null_ _null_ tidlt _null_ _null_ _null_ ));
-DATA(insert OID = 2792 ( tidge                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "27 27" _null_ _null_ _null_ _null_ _null_ tidge _null_ _null_ _null_ ));
-DATA(insert OID = 2793 ( tidle                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "27 27" _null_ _null_ _null_ _null_ _null_ tidle _null_ _null_ _null_ ));
-DATA(insert OID = 2794 ( bttidcmp                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "27 27" _null_ _null_ _null_ _null_ _null_ bttidcmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 2795 ( tidlarger                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 27 "27 27" _null_ _null_ _null_ _null_ _null_ tidlarger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 2796 ( tidsmaller               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 27 "27 27" _null_ _null_ _null_ _null_ _null_ tidsmaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-
-DATA(insert OID = 1296 (  timedate_pl     PGNSP PGUID 14 1 0 0 0 f f f t f i s 2 0 1114 "1083 1082" _null_ _null_ _null_ _null_ _null_ "select ($2 + $1)" _null_ _null_ _null_ ));
-DATA(insert OID = 1297 (  datetimetz_pl    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1184 "1082 1266" _null_ _null_ _null_ _null_ _null_ datetimetz_timestamptz _null_ _null_ _null_ ));
-DATA(insert OID = 1298 (  timetzdate_pl    PGNSP PGUID 14 1 0 0 0 f f f t f i s 2 0 1184 "1266 1082" _null_ _null_ _null_ _null_ _null_ "select ($2 + $1)" _null_ _null_ _null_ ));
-DATA(insert OID = 1299 (  now                     PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 1184 "" _null_ _null_ _null_ _null_ _null_ now _null_ _null_ _null_ ));
-DESCR("current transaction time");
-DATA(insert OID = 2647 (  transaction_timestamp PGNSP PGUID 12 1 0 0 0 f f f t f s s 0 0 1184 "" _null_ _null_ _null_ _null_ _null_ now _null_ _null_ _null_ ));
-DESCR("current transaction time");
-DATA(insert OID = 2648 (  statement_timestamp  PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 1184 "" _null_ _null_ _null_ _null_ _null_ statement_timestamp _null_ _null_ _null_ ));
-DESCR("current statement time");
-DATA(insert OID = 2649 (  clock_timestamp      PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 1184 "" _null_ _null_ _null_ _null_ _null_ clock_timestamp _null_ _null_ _null_ ));
-DESCR("current clock time");
-
-/* OIDS 1300 - 1399 */
-
-DATA(insert OID = 1300 (  positionsel             PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_    positionsel _null_ _null_ _null_ ));
-DESCR("restriction selectivity for position-comparison operators");
-DATA(insert OID = 1301 (  positionjoinsel         PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_ _null_ positionjoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity for position-comparison operators");
-DATA(insert OID = 1302 (  contsel                 PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_    contsel _null_ _null_ _null_ ));
-DESCR("restriction selectivity for containment comparison operators");
-DATA(insert OID = 1303 (  contjoinsel     PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_ _null_ contjoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity for containment comparison operators");
-
-DATA(insert OID = 1304 ( overlaps                       PGNSP PGUID 12 1 0 0 0 f f f f f i s 4 0 16 "1184 1184 1184 1184" _null_ _null_ _null_ _null_ _null_ overlaps_timestamp _null_ _null_ _null_ ));
-DESCR("intervals overlap?");
-DATA(insert OID = 1305 ( overlaps                       PGNSP PGUID 14 1 0 0 0 f f f f f s s 4 0 16 "1184 1186 1184 1186" _null_ _null_ _null_ _null_ _null_ "select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))" _null_ _null_ _null_ ));
-DESCR("intervals overlap?");
-DATA(insert OID = 1306 ( overlaps                       PGNSP PGUID 14 1 0 0 0 f f f f f s s 4 0 16 "1184 1184 1184 1186" _null_ _null_ _null_ _null_ _null_ "select ($1, $2) overlaps ($3, ($3 + $4))" _null_ _null_ _null_ ));
-DESCR("intervals overlap?");
-DATA(insert OID = 1307 ( overlaps                       PGNSP PGUID 14 1 0 0 0 f f f f f s s 4 0 16 "1184 1186 1184 1184" _null_ _null_ _null_ _null_ _null_ "select ($1, ($1 + $2)) overlaps ($3, $4)" _null_ _null_ _null_ ));
-DESCR("intervals overlap?");
-
-DATA(insert OID = 1308 ( overlaps                       PGNSP PGUID 12 1 0 0 0 f f f f f i s 4 0 16 "1083 1083 1083 1083" _null_ _null_ _null_ _null_ _null_ overlaps_time _null_ _null_ _null_ ));
-DESCR("intervals overlap?");
-DATA(insert OID = 1309 ( overlaps                       PGNSP PGUID 14 1 0 0 0 f f f f f i s 4 0 16 "1083 1186 1083 1186" _null_ _null_ _null_ _null_ _null_ "select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))" _null_ _null_ _null_ ));
-DESCR("intervals overlap?");
-DATA(insert OID = 1310 ( overlaps                       PGNSP PGUID 14 1 0 0 0 f f f f f i s 4 0 16 "1083 1083 1083 1186" _null_ _null_ _null_ _null_ _null_ "select ($1, $2) overlaps ($3, ($3 + $4))" _null_ _null_ _null_ ));
-DESCR("intervals overlap?");
-DATA(insert OID = 1311 ( overlaps                       PGNSP PGUID 14 1 0 0 0 f f f f f i s 4 0 16 "1083 1186 1083 1083" _null_ _null_ _null_ _null_ _null_ "select ($1, ($1 + $2)) overlaps ($3, $4)" _null_ _null_ _null_ ));
-DESCR("intervals overlap?");
-
-DATA(insert OID = 1312 (  timestamp_in          PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 1114 "2275 26 23" _null_ _null_ _null_ _null_ _null_ timestamp_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1313 (  timestamp_out                 PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "1114" _null_ _null_ _null_ _null_ _null_ timestamp_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2905 (  timestamptypmodin            PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1263" _null_ _null_ _null_ _null_ _null_ timestamptypmodin _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 2906 (  timestamptypmodout   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "23" _null_ _null_ _null_ _null_ _null_ timestamptypmodout _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 1314 (  timestamptz_cmp       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "1184 1184" _null_ _null_ _null_ _null_ _null_ timestamp_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 1315 (  interval_cmp          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "1186 1186" _null_ _null_ _null_ _null_ _null_ interval_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 1316 (  time                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1083 "1114" _null_ _null_ _null_ _null_ _null_        timestamp_time _null_ _null_ _null_ ));
-DESCR("convert timestamp to time");
-
-DATA(insert OID = 1317 (  length                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "25" _null_ _null_ _null_ _null_ _null_    textlen _null_ _null_ _null_ ));
-DESCR("length");
-DATA(insert OID = 1318 (  length                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1042" _null_ _null_ _null_ _null_ _null_ bpcharlen _null_ _null_ _null_ ));
-DESCR("character length");
-
-DATA(insert OID = 1319 (  xideqint4                     PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "28 23" _null_ _null_ _null_ _null_ _null_ xideq _null_ _null_ _null_ ));
-DATA(insert OID = 3309 (  xidneqint4            PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "28 23" _null_ _null_ _null_ _null_ _null_ xidneq _null_ _null_ _null_ ));
-
-DATA(insert OID = 1326 (  interval_div          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1186 "1186 701" _null_ _null_ _null_ _null_ _null_    interval_div _null_ _null_ _null_ ));
-
-DATA(insert OID = 1339 (  dlog10                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dlog10 _null_ _null_ _null_ ));
-DESCR("base 10 logarithm");
-DATA(insert OID = 1340 (  log                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dlog10 _null_ _null_ _null_ ));
-DESCR("base 10 logarithm");
-DATA(insert OID = 1341 (  ln                            PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dlog1 _null_ _null_ _null_ ));
-DESCR("natural logarithm");
-DATA(insert OID = 1342 (  round                                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dround _null_ _null_ _null_ ));
-DESCR("round to nearest integer");
-DATA(insert OID = 1343 (  trunc                                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dtrunc _null_ _null_ _null_ ));
-DESCR("truncate to integer");
-DATA(insert OID = 1344 (  sqrt                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dsqrt _null_ _null_ _null_ ));
-DESCR("square root");
-DATA(insert OID = 1345 (  cbrt                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dcbrt _null_ _null_ _null_ ));
-DESCR("cube root");
-DATA(insert OID = 1346 (  pow                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_ dpow _null_ _null_ _null_ ));
-DESCR("exponentiation");
-DATA(insert OID = 1368 (  power                                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_ dpow _null_ _null_ _null_ ));
-DESCR("exponentiation");
-DATA(insert OID = 1347 (  exp                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dexp _null_ _null_ _null_ ));
-DESCR("natural exponential (e^x)");
-
-/*
- * This form of obj_description is now deprecated, since it will fail if
- * OIDs are not unique across system catalogs.  Use the other form instead.
- */
-DATA(insert OID = 1348 (  obj_description       PGNSP PGUID 14 100 0 0 0 f f f t f s s 1 0 25 "26" _null_ _null_ _null_ _null_ _null_ "select description from pg_catalog.pg_description where objoid = $1 and objsubid = 0" _null_ _null_ _null_ ));
-DESCR("deprecated, use two-argument form instead");
-DATA(insert OID = 1349 (  oidvectortypes        PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 25 "30" _null_ _null_ _null_ _null_ _null_    oidvectortypes _null_ _null_ _null_ ));
-DESCR("print type names of oidvector field");
-
-
-DATA(insert OID = 1350 (  timetz_in               PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 1266 "2275 26 23" _null_ _null_ _null_ _null_ _null_ timetz_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1351 (  timetz_out      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "1266" _null_ _null_ _null_ _null_ _null_ timetz_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2911 (  timetztypmodin       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1263" _null_ _null_ _null_ _null_ _null_ timetztypmodin _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 2912 (  timetztypmodout      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "23" _null_ _null_ _null_ _null_ _null_ timetztypmodout _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 1352 (  timetz_eq               PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1266 1266" _null_ _null_ _null_ _null_ _null_ timetz_eq _null_ _null_ _null_ ));
-DATA(insert OID = 1353 (  timetz_ne               PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1266 1266" _null_ _null_ _null_ _null_ _null_ timetz_ne _null_ _null_ _null_ ));
-DATA(insert OID = 1354 (  timetz_lt               PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1266 1266" _null_ _null_ _null_ _null_ _null_ timetz_lt _null_ _null_ _null_ ));
-DATA(insert OID = 1355 (  timetz_le               PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1266 1266" _null_ _null_ _null_ _null_ _null_ timetz_le _null_ _null_ _null_ ));
-DATA(insert OID = 1356 (  timetz_ge               PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1266 1266" _null_ _null_ _null_ _null_ _null_ timetz_ge _null_ _null_ _null_ ));
-DATA(insert OID = 1357 (  timetz_gt               PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1266 1266" _null_ _null_ _null_ _null_ _null_ timetz_gt _null_ _null_ _null_ ));
-DATA(insert OID = 1358 (  timetz_cmp      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "1266 1266" _null_ _null_ _null_ _null_ _null_ timetz_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 1359 (  timestamptz     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1184 "1082 1266" _null_ _null_ _null_ _null_ _null_ datetimetz_timestamptz _null_ _null_ _null_ ));
-DESCR("convert date and time with time zone to timestamp with time zone");
-
-DATA(insert OID = 1364 (  time                    PGNSP PGUID 14 1 0 0 0 f f f t f s s 1 0 1083 "702" _null_ _null_ _null_ _null_ _null_ "select cast(cast($1 as timestamp without time zone) as pg_catalog.time)" _null_ _null_ _null_ ));
-DESCR("convert abstime to time");
-
-DATA(insert OID = 1367 (  character_length     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1042" _null_ _null_ _null_ _null_ _null_ bpcharlen _null_ _null_ _null_ ));
-DESCR("character length");
-DATA(insert OID = 1369 (  character_length     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "25" _null_ _null_ _null_ _null_ _null_ textlen _null_ _null_ _null_ ));
-DESCR("character length");
-
-DATA(insert OID = 1370 (  interval                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1186 "1083" _null_ _null_ _null_ _null_ _null_        time_interval _null_ _null_ _null_ ));
-DESCR("convert time to interval");
-DATA(insert OID = 1372 (  char_length           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1042" _null_ _null_ _null_ _null_ _null_ bpcharlen _null_ _null_ _null_ ));
-DESCR("character length");
-DATA(insert OID = 1374 (  octet_length                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "25" _null_ _null_ _null_ _null_ _null_    textoctetlen _null_ _null_ _null_ ));
-DESCR("octet length");
-DATA(insert OID = 1375 (  octet_length                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1042" _null_ _null_ _null_ _null_ _null_ bpcharoctetlen _null_ _null_ _null_ ));
-DESCR("octet length");
-
-DATA(insert OID = 1377 (  time_larger     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1083 "1083 1083" _null_ _null_ _null_ _null_ _null_ time_larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 1378 (  time_smaller    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1083 "1083 1083" _null_ _null_ _null_ _null_ _null_ time_smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-DATA(insert OID = 1379 (  timetz_larger    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1266 "1266 1266" _null_ _null_ _null_ _null_ _null_ timetz_larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 1380 (  timetz_smaller   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1266 "1266 1266" _null_ _null_ _null_ _null_ _null_ timetz_smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-
-DATA(insert OID = 1381 (  char_length     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "25" _null_ _null_ _null_ _null_ _null_ textlen _null_ _null_ _null_ ));
-DESCR("character length");
-
-DATA(insert OID = 1382 (  date_part    PGNSP PGUID 14 1 0 0 0 f f f t f s s 2 0 701 "25 702" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.date_part($1, cast($2 as timestamp with time zone))" _null_ _null_ _null_ ));
-DESCR("extract field from abstime");
-DATA(insert OID = 1383 (  date_part    PGNSP PGUID 14 1 0 0 0 f f f t f s s 2 0 701 "25 703" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.date_part($1, cast($2 as pg_catalog.interval))" _null_ _null_ _null_ ));
-DESCR("extract field from reltime");
-DATA(insert OID = 1384 (  date_part    PGNSP PGUID 14 1 0 0 0 f f f t f i s 2 0 701 "25 1082" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.date_part($1, cast($2 as timestamp without time zone))" _null_ _null_ _null_ ));
-DESCR("extract field from date");
-DATA(insert OID = 1385 (  date_part    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "25 1083" _null_ _null_ _null_ _null_  _null_ time_part _null_ _null_ _null_ ));
-DESCR("extract field from time");
-DATA(insert OID = 1386 (  age             PGNSP PGUID 14 1 0 0 0 f f f t f s s 1 0 1186 "1184" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.age(cast(current_date as timestamp with time zone), $1)" _null_ _null_ _null_ ));
-DESCR("date difference from today preserving months and years");
-
-DATA(insert OID = 1388 (  timetz          PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 1266 "1184" _null_ _null_ _null_ _null_ _null_ timestamptz_timetz _null_ _null_ _null_ ));
-DESCR("convert timestamp with time zone to time with time zone");
+       /*
+        * variable-length fields start here, but we allow direct access to
+        * proargtypes
+        */
 
-DATA(insert OID = 1373 (  isfinite        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "1082" _null_ _null_ _null_ _null_ _null_        date_finite _null_ _null_ _null_ ));
-DESCR("finite date?");
-DATA(insert OID = 1389 (  isfinite        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "1184" _null_ _null_ _null_ _null_ _null_        timestamp_finite _null_ _null_ _null_ ));
-DESCR("finite timestamp?");
-DATA(insert OID = 1390 (  isfinite        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "1186" _null_ _null_ _null_ _null_ _null_        interval_finite _null_ _null_ _null_ ));
-DESCR("finite interval?");
+       /* parameter types (excludes OUT params) */
+       oidvector       proargtypes BKI_LOOKUP(pg_type);
 
+#ifdef CATALOG_VARLEN
 
-DATA(insert OID = 1376 (  factorial               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "20" _null_ _null_ _null_ _null_ _null_        numeric_fac _null_ _null_ _null_ ));
-DESCR("factorial");
-DATA(insert OID = 1394 (  abs                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 700 "700" _null_ _null_ _null_ _null_ _null_        float4abs _null_ _null_ _null_ ));
-DESCR("absolute value");
-DATA(insert OID = 1395 (  abs                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_        float8abs _null_ _null_ _null_ ));
-DESCR("absolute value");
-DATA(insert OID = 1396 (  abs                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "20" _null_ _null_ _null_ _null_ _null_ int8abs _null_ _null_ _null_ ));
-DESCR("absolute value");
-DATA(insert OID = 1397 (  abs                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ int4abs _null_ _null_ _null_ ));
-DESCR("absolute value");
-DATA(insert OID = 1398 (  abs                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 21 "21" _null_ _null_ _null_ _null_ _null_ int2abs _null_ _null_ _null_ ));
-DESCR("absolute value");
+       /* all param types (NULL if IN only) */
+       Oid                     proallargtypes[1] BKI_DEFAULT(_null_) BKI_LOOKUP(pg_type);
 
-/* OIDS 1400 - 1499 */
+       /* parameter modes (NULL if IN only) */
+       char            proargmodes[1] BKI_DEFAULT(_null_);
 
-DATA(insert OID = 1400 (  name            PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 19 "1043" _null_ _null_ _null_ _null_ _null_        text_name _null_ _null_ _null_ ));
-DESCR("convert varchar to name");
-DATA(insert OID = 1401 (  varchar         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1043 "19" _null_ _null_ _null_ _null_ _null_        name_text _null_ _null_ _null_ ));
-DESCR("convert name to varchar");
+       /* parameter names (NULL if no names) */
+       text            proargnames[1] BKI_DEFAULT(_null_);
 
-DATA(insert OID = 1402 (  current_schema       PGNSP PGUID 12 1 0 0 0 f f f t f s s 0 0 19 "" _null_ _null_ _null_ _null_ _null_ current_schema _null_ _null_ _null_ ));
-DESCR("current schema name");
-DATA(insert OID = 1403 (  current_schemas      PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 1003 "16" _null_ _null_ _null_ _null_ _null_ current_schemas _null_ _null_ _null_ ));
-DESCR("current schema search list");
+       /* list of expression trees for argument defaults (NULL if none) */
+       pg_node_tree proargdefaults BKI_DEFAULT(_null_);
 
-DATA(insert OID = 1404 (  overlay                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 25 "25 25 23 23" _null_ _null_ _null_ _null_ _null_    textoverlay _null_ _null_ _null_ ));
-DESCR("substitute portion of string");
-DATA(insert OID = 1405 (  overlay                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 25 "25 25 23" _null_ _null_ _null_ _null_ _null_ textoverlay_no_len _null_ _null_ _null_ ));
-DESCR("substitute portion of string");
+       /* types for which to apply transforms */
+       Oid                     protrftypes[1] BKI_DEFAULT(_null_);
 
-DATA(insert OID = 1406 (  isvertical           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "600 600" _null_ _null_ _null_ _null_  _null_ point_vert _null_ _null_ _null_ ));
-DESCR("vertically aligned");
-DATA(insert OID = 1407 (  ishorizontal         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "600 600" _null_ _null_ _null_ _null_  _null_ point_horiz _null_ _null_ _null_ ));
-DESCR("horizontally aligned");
-DATA(insert OID = 1408 (  isparallel           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "601 601" _null_ _null_ _null_ _null_  _null_ lseg_parallel _null_ _null_ _null_ ));
-DESCR("parallel");
-DATA(insert OID = 1409 (  isperp                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "601 601" _null_ _null_ _null_ _null_  _null_ lseg_perp _null_ _null_ _null_ ));
-DESCR("perpendicular");
-DATA(insert OID = 1410 (  isvertical           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "601" _null_ _null_ _null_ _null_  _null_ lseg_vertical _null_ _null_ _null_ ));
-DESCR("vertical");
-DATA(insert OID = 1411 (  ishorizontal         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "601" _null_ _null_ _null_ _null_  _null_ lseg_horizontal _null_ _null_ _null_ ));
-DESCR("horizontal");
-DATA(insert OID = 1412 (  isparallel           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "628 628" _null_ _null_ _null_ _null_  _null_ line_parallel _null_ _null_ _null_ ));
-DESCR("parallel");
-DATA(insert OID = 1413 (  isperp                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "628 628" _null_ _null_ _null_ _null_  _null_ line_perp _null_ _null_ _null_ ));
-DESCR("perpendicular");
-DATA(insert OID = 1414 (  isvertical           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "628" _null_ _null_ _null_ _null_  _null_ line_vertical _null_ _null_ _null_ ));
-DESCR("vertical");
-DATA(insert OID = 1415 (  ishorizontal         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "628" _null_ _null_ _null_ _null_  _null_ line_horizontal _null_ _null_ _null_ ));
-DESCR("horizontal");
-DATA(insert OID = 1416 (  point                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 600 "718" _null_ _null_ _null_ _null_ _null_ circle_center _null_ _null_ _null_ ));
-DESCR("center of");
+       /* procedure source text */
+       text            prosrc BKI_FORCE_NOT_NULL;
 
-DATA(insert OID = 1419 (  time                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1083 "1186" _null_ _null_ _null_ _null_ _null_ interval_time _null_ _null_ _null_ ));
-DESCR("convert interval to time");
+       /* secondary procedure info (can be NULL) */
+       text            probin BKI_DEFAULT(_null_);
 
-DATA(insert OID = 1421 (  box                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 603 "600 600" _null_ _null_ _null_ _null_ _null_ points_box _null_ _null_ _null_ ));
-DESCR("convert points to box");
-DATA(insert OID = 1422 (  box_add                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 603 "603 600" _null_ _null_ _null_ _null_ _null_ box_add _null_ _null_ _null_ ));
-DATA(insert OID = 1423 (  box_sub                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 603 "603 600" _null_ _null_ _null_ _null_ _null_ box_sub _null_ _null_ _null_ ));
-DATA(insert OID = 1424 (  box_mul                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 603 "603 600" _null_ _null_ _null_ _null_ _null_ box_mul _null_ _null_ _null_ ));
-DATA(insert OID = 1425 (  box_div                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 603 "603 600" _null_ _null_ _null_ _null_ _null_ box_div _null_ _null_ _null_ ));
-DATA(insert OID = 1426 (  path_contain_pt      PGNSP PGUID 14 1 0 0 0 f f f t f i s 2 0 16 "602 600" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.on_ppath($2, $1)" _null_ _null_ _null_ ));
-DATA(insert OID = 1428 (  poly_contain_pt      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "604 600" _null_ _null_ _null_ _null_  _null_ poly_contain_pt _null_ _null_ _null_ ));
-DATA(insert OID = 1429 (  pt_contained_poly PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "600 604" _null_ _null_ _null_ _null_  _null_ pt_contained_poly _null_ _null_ _null_ ));
+       /* procedure-local GUC settings */
+       text            proconfig[1] BKI_DEFAULT(_null_);
 
-DATA(insert OID = 1430 (  isclosed                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "602" _null_ _null_ _null_ _null_  _null_ path_isclosed _null_ _null_ _null_ ));
-DESCR("path closed?");
-DATA(insert OID = 1431 (  isopen                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "602" _null_ _null_ _null_ _null_  _null_ path_isopen _null_ _null_ _null_ ));
-DESCR("path open?");
-DATA(insert OID = 1432 (  path_npoints         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "602" _null_ _null_ _null_ _null_  _null_ path_npoints _null_ _null_ _null_ ));
+       /* access permissions */
+       aclitem         proacl[1] BKI_DEFAULT(_null_);
+#endif
+} FormData_pg_proc;
 
-/* pclose and popen might better be named close and open, but that crashes initdb.
- * - thomas 97/04/20
+/* ----------------
+ *             Form_pg_proc corresponds to a pointer to a tuple with
+ *             the format of pg_proc relation.
+ * ----------------
  */
+typedef FormData_pg_proc *Form_pg_proc;
 
-DATA(insert OID = 1433 (  pclose                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 602 "602" _null_ _null_ _null_ _null_ _null_ path_close _null_ _null_ _null_ ));
-DESCR("close path");
-DATA(insert OID = 1434 (  popen                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 602 "602" _null_ _null_ _null_ _null_ _null_ path_open _null_ _null_ _null_ ));
-DESCR("open path");
-DATA(insert OID = 1435 (  path_add                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 602 "602 602" _null_ _null_ _null_ _null_ _null_ path_add _null_ _null_ _null_ ));
-DATA(insert OID = 1436 (  path_add_pt          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 602 "602 600" _null_ _null_ _null_ _null_ _null_ path_add_pt _null_ _null_ _null_ ));
-DATA(insert OID = 1437 (  path_sub_pt          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 602 "602 600" _null_ _null_ _null_ _null_ _null_ path_sub_pt _null_ _null_ _null_ ));
-DATA(insert OID = 1438 (  path_mul_pt          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 602 "602 600" _null_ _null_ _null_ _null_ _null_ path_mul_pt _null_ _null_ _null_ ));
-DATA(insert OID = 1439 (  path_div_pt          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 602 "602 600" _null_ _null_ _null_ _null_ _null_ path_div_pt _null_ _null_ _null_ ));
-
-DATA(insert OID = 1440 (  point                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 600 "701 701" _null_ _null_ _null_ _null_ _null_ construct_point _null_ _null_ _null_ ));
-DESCR("convert x, y to point");
-DATA(insert OID = 1441 (  point_add                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 600 "600 600" _null_ _null_ _null_ _null_ _null_ point_add _null_ _null_ _null_ ));
-DATA(insert OID = 1442 (  point_sub                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 600 "600 600" _null_ _null_ _null_ _null_ _null_ point_sub _null_ _null_ _null_ ));
-DATA(insert OID = 1443 (  point_mul                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 600 "600 600" _null_ _null_ _null_ _null_ _null_ point_mul _null_ _null_ _null_ ));
-DATA(insert OID = 1444 (  point_div                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 600 "600 600" _null_ _null_ _null_ _null_ _null_ point_div _null_ _null_ _null_ ));
-
-DATA(insert OID = 1445 (  poly_npoints         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "604" _null_ _null_ _null_ _null_  _null_ poly_npoints _null_ _null_ _null_ ));
-DATA(insert OID = 1446 (  box                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 603 "604" _null_ _null_ _null_ _null_ _null_ poly_box _null_ _null_ _null_ ));
-DESCR("convert polygon to bounding box");
-DATA(insert OID = 1447 (  path                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 602 "604" _null_ _null_ _null_ _null_ _null_ poly_path _null_ _null_ _null_ ));
-DESCR("convert polygon to path");
-DATA(insert OID = 1448 (  polygon                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 604 "603" _null_ _null_ _null_ _null_ _null_ box_poly _null_ _null_ _null_ ));
-DESCR("convert box to polygon");
-DATA(insert OID = 1449 (  polygon                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 604 "602" _null_ _null_ _null_ _null_ _null_ path_poly _null_ _null_ _null_ ));
-DESCR("convert path to polygon");
-
-DATA(insert OID = 1450 (  circle_in                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 718 "2275" _null_ _null_ _null_ _null_ _null_ circle_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1451 (  circle_out           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "718" _null_ _null_ _null_ _null_ _null_ circle_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1452 (  circle_same          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_same _null_ _null_ _null_ ));
-DATA(insert OID = 1453 (  circle_contain       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_contain _null_ _null_ _null_ ));
-DATA(insert OID = 1454 (  circle_left          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_left _null_ _null_ _null_ ));
-DATA(insert OID = 1455 (  circle_overleft      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_overleft _null_ _null_ _null_ ));
-DATA(insert OID = 1456 (  circle_overright     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_overright _null_ _null_ _null_ ));
-DATA(insert OID = 1457 (  circle_right         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_right _null_ _null_ _null_ ));
-DATA(insert OID = 1458 (  circle_contained     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_contained _null_ _null_ _null_ ));
-DATA(insert OID = 1459 (  circle_overlap       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_overlap _null_ _null_ _null_ ));
-DATA(insert OID = 1460 (  circle_below         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_below _null_ _null_ _null_ ));
-DATA(insert OID = 1461 (  circle_above         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_above _null_ _null_ _null_ ));
-DATA(insert OID = 1462 (  circle_eq                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_eq _null_ _null_ _null_ ));
-DATA(insert OID = 1463 (  circle_ne                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_ne _null_ _null_ _null_ ));
-DATA(insert OID = 1464 (  circle_lt                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_lt _null_ _null_ _null_ ));
-DATA(insert OID = 1465 (  circle_gt                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_gt _null_ _null_ _null_ ));
-DATA(insert OID = 1466 (  circle_le                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_le _null_ _null_ _null_ ));
-DATA(insert OID = 1467 (  circle_ge                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_ge _null_ _null_ _null_ ));
-DATA(insert OID = 1468 (  area                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "718" _null_ _null_ _null_ _null_ _null_ circle_area _null_ _null_ _null_ ));
-DESCR("area of circle");
-DATA(insert OID = 1469 (  diameter                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "718" _null_ _null_ _null_ _null_ _null_ circle_diameter _null_ _null_ _null_ ));
-DESCR("diameter of circle");
-DATA(insert OID = 1470 (  radius                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "718" _null_ _null_ _null_ _null_ _null_ circle_radius _null_ _null_ _null_ ));
-DESCR("radius of circle");
-DATA(insert OID = 1471 (  circle_distance      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "718 718" _null_ _null_ _null_ _null_ _null_ circle_distance _null_ _null_ _null_ ));
-DATA(insert OID = 1472 (  circle_center                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 600 "718" _null_ _null_ _null_ _null_ _null_ circle_center _null_ _null_ _null_ ));
-DATA(insert OID = 1473 (  circle                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 718 "600 701" _null_ _null_ _null_ _null_ _null_ cr_circle _null_ _null_ _null_ ));
-DESCR("convert point and radius to circle");
-DATA(insert OID = 1474 (  circle                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 718 "604" _null_ _null_ _null_ _null_ _null_ poly_circle _null_ _null_ _null_ ));
-DESCR("convert polygon to circle");
-DATA(insert OID = 1475 (  polygon                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 604 "23 718" _null_ _null_ _null_ _null_ _null_        circle_poly _null_ _null_ _null_ ));
-DESCR("convert vertex count and circle to polygon");
-DATA(insert OID = 1476 (  dist_pc                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "600 718" _null_ _null_ _null_ _null_ _null_ dist_pc _null_ _null_ _null_ ));
-DATA(insert OID = 1477 (  circle_contain_pt PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "718 600" _null_ _null_ _null_ _null_  _null_ circle_contain_pt _null_ _null_ _null_ ));
-DATA(insert OID = 1478 (  pt_contained_circle  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "600 718" _null_ _null_ _null_ _null_  _null_ pt_contained_circle _null_ _null_ _null_ ));
-DATA(insert OID = 4091 (  box                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 603 "600" _null_ _null_ _null_ _null_ _null_ point_box _null_ _null_ _null_ ));
-DESCR("convert point to empty box");
-DATA(insert OID = 1479 (  circle                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 718 "603" _null_ _null_ _null_ _null_ _null_ box_circle _null_ _null_ _null_ ));
-DESCR("convert box to circle");
-DATA(insert OID = 1480 (  box                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 603 "718" _null_ _null_ _null_ _null_ _null_ circle_box _null_ _null_ _null_ ));
-DESCR("convert circle to box");
-DATA(insert OID = 1481 (  tinterval                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 704 "702 702" _null_ _null_ _null_ _null_ _null_ mktinterval _null_ _null_ _null_ ));
-DESCR("convert to tinterval");
-
-DATA(insert OID = 1482 (  lseg_ne                      PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "601 601" _null_ _null_ _null_ _null_  _null_ lseg_ne _null_ _null_ _null_ ));
-DATA(insert OID = 1483 (  lseg_lt                      PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "601 601" _null_ _null_ _null_ _null_  _null_ lseg_lt _null_ _null_ _null_ ));
-DATA(insert OID = 1484 (  lseg_le                      PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "601 601" _null_ _null_ _null_ _null_  _null_ lseg_le _null_ _null_ _null_ ));
-DATA(insert OID = 1485 (  lseg_gt                      PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "601 601" _null_ _null_ _null_ _null_  _null_ lseg_gt _null_ _null_ _null_ ));
-DATA(insert OID = 1486 (  lseg_ge                      PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "601 601" _null_ _null_ _null_ _null_  _null_ lseg_ge _null_ _null_ _null_ ));
-DATA(insert OID = 1487 (  lseg_length          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "601" _null_ _null_ _null_ _null_ _null_ lseg_length _null_ _null_ _null_ ));
-DATA(insert OID = 1488 (  close_ls                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 600 "628 601" _null_ _null_ _null_ _null_ _null_ close_ls _null_ _null_ _null_ ));
-DATA(insert OID = 1489 (  close_lseg           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 600 "601 601" _null_ _null_ _null_ _null_ _null_ close_lseg _null_ _null_ _null_ ));
-
-DATA(insert OID = 1490 (  line_in                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 628 "2275" _null_ _null_ _null_ _null_ _null_ line_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1491 (  line_out                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "628" _null_ _null_ _null_ _null_ _null_ line_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1492 (  line_eq                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "628 628" _null_ _null_ _null_ _null_ _null_ line_eq _null_ _null_ _null_ ));
-DATA(insert OID = 1493 (  line                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 628 "600 600" _null_ _null_ _null_ _null_ _null_ line_construct_pp _null_ _null_ _null_ ));
-DESCR("construct line from points");
-DATA(insert OID = 1494 (  line_interpt         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 600 "628 628" _null_ _null_ _null_ _null_ _null_ line_interpt _null_ _null_ _null_ ));
-DATA(insert OID = 1495 (  line_intersect       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "628 628" _null_ _null_ _null_ _null_  _null_ line_intersect _null_ _null_ _null_ ));
-DATA(insert OID = 1496 (  line_parallel                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "628 628" _null_ _null_ _null_ _null_  _null_ line_parallel _null_ _null_ _null_ ));
-DATA(insert OID = 1497 (  line_perp                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "628 628" _null_ _null_ _null_ _null_  _null_ line_perp _null_ _null_ _null_ ));
-DATA(insert OID = 1498 (  line_vertical                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "628" _null_ _null_ _null_ _null_  _null_ line_vertical _null_ _null_ _null_ ));
-DATA(insert OID = 1499 (  line_horizontal      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "628" _null_ _null_ _null_ _null_  _null_ line_horizontal _null_ _null_ _null_ ));
-
-/* OIDS 1500 - 1599 */
-
-DATA(insert OID = 1530 (  length                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "601" _null_ _null_ _null_ _null_ _null_ lseg_length _null_ _null_ _null_ ));
-DESCR("distance between endpoints");
-DATA(insert OID = 1531 (  length                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "602" _null_ _null_ _null_ _null_ _null_ path_length _null_ _null_ _null_ ));
-DESCR("sum of path segments");
-
-
-DATA(insert OID = 1532 (  point                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 600 "601" _null_ _null_ _null_ _null_ _null_ lseg_center _null_ _null_ _null_ ));
-DESCR("center of");
-DATA(insert OID = 1533 (  point                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 600 "602" _null_ _null_ _null_ _null_ _null_ path_center _null_ _null_ _null_ ));
-DESCR("center of");
-DATA(insert OID = 1534 (  point                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 600 "603" _null_ _null_ _null_ _null_ _null_ box_center _null_ _null_ _null_ ));
-DESCR("center of");
-DATA(insert OID = 1540 (  point                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 600 "604" _null_ _null_ _null_ _null_ _null_ poly_center _null_ _null_ _null_ ));
-DESCR("center of");
-DATA(insert OID = 1541 (  lseg                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 601 "603" _null_ _null_ _null_ _null_ _null_ box_diagonal _null_ _null_ _null_ ));
-DESCR("diagonal of");
-DATA(insert OID = 1542 (  center                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 600 "603" _null_ _null_ _null_ _null_ _null_ box_center _null_ _null_ _null_ ));
-DESCR("center of");
-DATA(insert OID = 1543 (  center                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 600 "718" _null_ _null_ _null_ _null_ _null_ circle_center _null_ _null_ _null_ ));
-DESCR("center of");
-DATA(insert OID = 1544 (  polygon                      PGNSP PGUID 14 1 0 0 0 f f f t f i s 1 0 604 "718" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.polygon(12, $1)" _null_ _null_ _null_ ));
-DESCR("convert circle to 12-vertex polygon");
-DATA(insert OID = 1545 (  npoints                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "602" _null_ _null_ _null_ _null_  _null_ path_npoints _null_ _null_ _null_ ));
-DESCR("number of points");
-DATA(insert OID = 1556 (  npoints                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "604" _null_ _null_ _null_ _null_  _null_ poly_npoints _null_ _null_ _null_ ));
-DESCR("number of points");
-
-DATA(insert OID = 1564 (  bit_in                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1560 "2275 26 23" _null_ _null_ _null_ _null_ _null_ bit_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1565 (  bit_out                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "1560" _null_ _null_ _null_ _null_ _null_ bit_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2919 (  bittypmodin          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1263" _null_ _null_ _null_ _null_ _null_ bittypmodin _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 2920 (  bittypmodout         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "23" _null_ _null_ _null_ _null_ _null_ bittypmodout _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-
-DATA(insert OID = 1569 (  like                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ textlike _null_ _null_ _null_ ));
-DESCR("matches LIKE expression");
-DATA(insert OID = 1570 (  notlike                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ textnlike _null_ _null_ _null_ ));
-DESCR("does not match LIKE expression");
-DATA(insert OID = 1571 (  like                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "19 25" _null_ _null_ _null_ _null_ _null_ namelike _null_ _null_ _null_ ));
-DESCR("matches LIKE expression");
-DATA(insert OID = 1572 (  notlike                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "19 25" _null_ _null_ _null_ _null_ _null_ namenlike _null_ _null_ _null_ ));
-DESCR("does not match LIKE expression");
-
-
-/* SEQUENCE functions */
-DATA(insert OID = 1574 (  nextval                      PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 20 "2205" _null_ _null_ _null_ _null_ _null_ nextval_oid _null_ _null_ _null_ ));
-DESCR("sequence next value");
-DATA(insert OID = 1575 (  currval                      PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 20 "2205" _null_ _null_ _null_ _null_ _null_ currval_oid _null_ _null_ _null_ ));
-DESCR("sequence current value");
-DATA(insert OID = 1576 (  setval                       PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 20 "2205 20" _null_ _null_ _null_ _null_  _null_ setval_oid _null_ _null_ _null_ ));
-DESCR("set sequence value");
-DATA(insert OID = 1765 (  setval                       PGNSP PGUID 12 1 0 0 0 f f f t f v u 3 0 20 "2205 20 16" _null_ _null_ _null_ _null_ _null_ setval3_oid _null_ _null_ _null_ ));
-DESCR("set sequence value and is_called status");
-DATA(insert OID = 3078 (  pg_sequence_parameters       PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2249 "26" "{26,20,20,20,20,16,20,26}" "{i,o,o,o,o,o,o,o}" "{sequence_oid,start_value,minimum_value,maximum_value,increment,cycle_option,cache_size,data_type}" _null_ _null_ pg_sequence_parameters _null_ _null_ _null_));
-DESCR("sequence parameters, for use by information schema");
-DATA(insert OID = 4032 ( pg_sequence_last_value                PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 20 "2205" _null_ _null_ _null_ _null_ _null_ pg_sequence_last_value _null_ _null_ _null_ ));
-DESCR("sequence last value");
-
-DATA(insert OID = 1579 (  varbit_in                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1562 "2275 26 23" _null_ _null_ _null_ _null_ _null_ varbit_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1580 (  varbit_out           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "1562" _null_ _null_ _null_ _null_ _null_ varbit_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2902 (  varbittypmodin       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1263" _null_ _null_ _null_ _null_ _null_ varbittypmodin _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 2921 (  varbittypmodout      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "23" _null_ _null_ _null_ _null_ _null_ varbittypmodout _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-
-DATA(insert OID = 1581 (  biteq                                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1560 1560" _null_ _null_ _null_ _null_ _null_ biteq _null_ _null_ _null_ ));
-DATA(insert OID = 1582 (  bitne                                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1560 1560" _null_ _null_ _null_ _null_ _null_ bitne _null_ _null_ _null_ ));
-DATA(insert OID = 1592 (  bitge                                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1560 1560" _null_ _null_ _null_ _null_ _null_ bitge _null_ _null_ _null_ ));
-DATA(insert OID = 1593 (  bitgt                                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1560 1560" _null_ _null_ _null_ _null_ _null_ bitgt _null_ _null_ _null_ ));
-DATA(insert OID = 1594 (  bitle                                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1560 1560" _null_ _null_ _null_ _null_ _null_ bitle _null_ _null_ _null_ ));
-DATA(insert OID = 1595 (  bitlt                                PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1560 1560" _null_ _null_ _null_ _null_ _null_ bitlt _null_ _null_ _null_ ));
-DATA(insert OID = 1596 (  bitcmp                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "1560 1560" _null_ _null_ _null_ _null_ _null_ bitcmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-
-DATA(insert OID = 1598 (  random                       PGNSP PGUID 12 1 0 0 0 f f f t f v r 0 0 701 "" _null_ _null_ _null_ _null_ _null_ drandom _null_ _null_ _null_ ));
-DESCR("random value");
-DATA(insert OID = 1599 (  setseed                      PGNSP PGUID 12 1 0 0 0 f f f t f v r 1 0 2278 "701" _null_ _null_ _null_ _null_ _null_ setseed _null_ _null_ _null_ ));
-DESCR("set random seed");
-
-/* OIDS 1600 - 1699 */
-
-DATA(insert OID = 1600 (  asin                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dasin _null_ _null_ _null_ ));
-DESCR("arcsine");
-DATA(insert OID = 1601 (  acos                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dacos _null_ _null_ _null_ ));
-DESCR("arccosine");
-DATA(insert OID = 1602 (  atan                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ datan _null_ _null_ _null_ ));
-DESCR("arctangent");
-DATA(insert OID = 1603 (  atan2                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_ datan2 _null_ _null_ _null_ ));
-DESCR("arctangent, two arguments");
-DATA(insert OID = 1604 (  sin                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dsin _null_ _null_ _null_ ));
-DESCR("sine");
-DATA(insert OID = 1605 (  cos                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dcos _null_ _null_ _null_ ));
-DESCR("cosine");
-DATA(insert OID = 1606 (  tan                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dtan _null_ _null_ _null_ ));
-DESCR("tangent");
-DATA(insert OID = 1607 (  cot                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dcot _null_ _null_ _null_ ));
-DESCR("cotangent");
-
-DATA(insert OID = 2731 (  asind                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dasind _null_ _null_ _null_ ));
-DESCR("arcsine, degrees");
-DATA(insert OID = 2732 (  acosd                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dacosd _null_ _null_ _null_ ));
-DESCR("arccosine, degrees");
-DATA(insert OID = 2733 (  atand                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ datand _null_ _null_ _null_ ));
-DESCR("arctangent, degrees");
-DATA(insert OID = 2734 (  atan2d                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_ datan2d _null_ _null_ _null_ ));
-DESCR("arctangent, two arguments, degrees");
-DATA(insert OID = 2735 (  sind                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dsind _null_ _null_ _null_ ));
-DESCR("sine, degrees");
-DATA(insert OID = 2736 (  cosd                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dcosd _null_ _null_ _null_ ));
-DESCR("cosine, degrees");
-DATA(insert OID = 2737 (  tand                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dtand _null_ _null_ _null_ ));
-DESCR("tangent, degrees");
-DATA(insert OID = 2738 (  cotd                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ dcotd _null_ _null_ _null_ ));
-DESCR("cotangent, degrees");
-
-DATA(insert OID = 1608 (  degrees                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ degrees _null_ _null_ _null_ ));
-DESCR("radians to degrees");
-DATA(insert OID = 1609 (  radians                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ radians _null_ _null_ _null_ ));
-DESCR("degrees to radians");
-DATA(insert OID = 1610 (  pi                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 0 0 701 "" _null_ _null_ _null_ _null_ _null_ dpi _null_ _null_ _null_ ));
-DESCR("PI");
-
-DATA(insert OID = 1618 (  interval_mul         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1186 "1186 701" _null_ _null_ _null_ _null_ _null_ interval_mul _null_ _null_ _null_ ));
-
-DATA(insert OID = 1620 (  ascii                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "25" _null_ _null_ _null_ _null_ _null_ ascii _null_ _null_ _null_ ));
-DESCR("convert first char to int4");
-DATA(insert OID = 1621 (  chr                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "23" _null_ _null_ _null_ _null_ _null_ chr _null_ _null_ _null_ ));
-DESCR("convert int4 to char");
-DATA(insert OID = 1622 (  repeat                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25 "25 23" _null_ _null_ _null_ _null_ _null_ repeat _null_ _null_ _null_ ));
-DESCR("replicate string n times");
-
-DATA(insert OID = 1623 (  similar_escape       PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 25 "25 25" _null_ _null_ _null_ _null_ _null_ similar_escape _null_ _null_ _null_ ));
-DESCR("convert SQL99 regexp pattern to POSIX style");
-
-DATA(insert OID = 1624 (  mul_d_interval       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1186 "701 1186" _null_ _null_ _null_ _null_ _null_ mul_d_interval _null_ _null_ _null_ ));
-
-DATA(insert OID = 1631 (  bpcharlike      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1042 25" _null_ _null_ _null_ _null_ _null_ textlike _null_ _null_ _null_ ));
-DATA(insert OID = 1632 (  bpcharnlike     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1042 25" _null_ _null_ _null_ _null_ _null_ textnlike _null_ _null_ _null_ ));
-
-DATA(insert OID = 1633 (  texticlike           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ texticlike _null_ _null_ _null_ ));
-DATA(insert OID = 1634 (  texticnlike          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ texticnlike _null_ _null_ _null_ ));
-DATA(insert OID = 1635 (  nameiclike           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "19 25" _null_ _null_ _null_ _null_ _null_ nameiclike _null_ _null_ _null_ ));
-DATA(insert OID = 1636 (  nameicnlike          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "19 25" _null_ _null_ _null_ _null_ _null_ nameicnlike _null_ _null_ _null_ ));
-DATA(insert OID = 1637 (  like_escape          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25 "25 25" _null_ _null_ _null_ _null_ _null_ like_escape _null_ _null_ _null_ ));
-DESCR("convert LIKE pattern to use backslash escapes");
-
-DATA(insert OID = 1656 (  bpcharicregexeq       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1042 25" _null_ _null_ _null_ _null_ _null_ texticregexeq _null_ _null_ _null_ ));
-DATA(insert OID = 1657 (  bpcharicregexne       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1042 25" _null_ _null_ _null_ _null_ _null_ texticregexne _null_ _null_ _null_ ));
-DATA(insert OID = 1658 (  bpcharregexeq    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1042 25" _null_ _null_ _null_ _null_ _null_ textregexeq _null_ _null_ _null_ ));
-DATA(insert OID = 1659 (  bpcharregexne    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1042 25" _null_ _null_ _null_ _null_ _null_ textregexne _null_ _null_ _null_ ));
-DATA(insert OID = 1660 (  bpchariclike         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1042 25" _null_ _null_ _null_ _null_ _null_ texticlike _null_ _null_ _null_ ));
-DATA(insert OID = 1661 (  bpcharicnlike                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1042 25" _null_ _null_ _null_ _null_ _null_ texticnlike _null_ _null_ _null_ ));
-
-/* Oracle Compatibility Related Functions - By Edmund Mergl <E.Mergl@bawue.de> */
-DATA(insert OID =  868 (  strpos          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "25 25" _null_ _null_ _null_ _null_ _null_ textpos _null_ _null_ _null_ ));
-DESCR("position of substring");
-DATA(insert OID =  870 (  lower                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ lower _null_ _null_ _null_ ));
-DESCR("lowercase");
-DATA(insert OID =  871 (  upper                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ upper _null_ _null_ _null_ ));
-DESCR("uppercase");
-DATA(insert OID =  872 (  initcap         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ initcap _null_ _null_ _null_ ));
-DESCR("capitalize each word");
-DATA(insert OID =  873 (  lpad            PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 25 "25 23 25" _null_ _null_ _null_ _null_ _null_    lpad _null_ _null_ _null_ ));
-DESCR("left-pad string to length");
-DATA(insert OID =  874 (  rpad            PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 25 "25 23 25" _null_ _null_ _null_ _null_ _null_    rpad _null_ _null_ _null_ ));
-DESCR("right-pad string to length");
-DATA(insert OID =  875 (  ltrim                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25 "25 25" _null_ _null_ _null_ _null_ _null_ ltrim _null_ _null_ _null_ ));
-DESCR("trim selected characters from left end of string");
-DATA(insert OID =  876 (  rtrim                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25 "25 25" _null_ _null_ _null_ _null_ _null_ rtrim _null_ _null_ _null_ ));
-DESCR("trim selected characters from right end of string");
-DATA(insert OID =  877 (  substr          PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 25 "25 23 23" _null_ _null_ _null_ _null_ _null_    text_substr _null_ _null_ _null_ ));
-DESCR("extract portion of string");
-DATA(insert OID =  878 (  translate    PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 25 "25 25 25" _null_ _null_ _null_ _null_ _null_       translate _null_ _null_ _null_ ));
-DESCR("map a set of characters appearing in string");
-DATA(insert OID =  879 (  lpad            PGNSP PGUID 14 1 0 0 0 f f f t f i s 2 0 25 "25 23" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.lpad($1, $2, '' '')" _null_ _null_ _null_ ));
-DESCR("left-pad string to length");
-DATA(insert OID =  880 (  rpad            PGNSP PGUID 14 1 0 0 0 f f f t f i s 2 0 25 "25 23" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.rpad($1, $2, '' '')" _null_ _null_ _null_ ));
-DESCR("right-pad string to length");
-DATA(insert OID =  881 (  ltrim                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ ltrim1 _null_ _null_ _null_ ));
-DESCR("trim spaces from left end of string");
-DATA(insert OID =  882 (  rtrim                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ rtrim1 _null_ _null_ _null_ ));
-DESCR("trim spaces from right end of string");
-DATA(insert OID =  883 (  substr          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25 "25 23" _null_ _null_ _null_ _null_ _null_ text_substr_no_len _null_ _null_ _null_ ));
-DESCR("extract portion of string");
-DATA(insert OID =  884 (  btrim                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25 "25 25" _null_ _null_ _null_ _null_ _null_ btrim _null_ _null_ _null_ ));
-DESCR("trim selected characters from both ends of string");
-DATA(insert OID =  885 (  btrim                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ btrim1 _null_ _null_ _null_ ));
-DESCR("trim spaces from both ends of string");
-
-DATA(insert OID =  936 (  substring    PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 25 "25 23 23" _null_ _null_ _null_ _null_ _null_       text_substr _null_ _null_ _null_ ));
-DESCR("extract portion of string");
-DATA(insert OID =  937 (  substring    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25 "25 23" _null_ _null_ _null_ _null_ _null_ text_substr_no_len _null_ _null_ _null_ ));
-DESCR("extract portion of string");
-DATA(insert OID =  2087 ( replace         PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 25 "25 25 25" _null_ _null_ _null_ _null_ _null_    replace_text _null_ _null_ _null_ ));
-DESCR("replace all occurrences in string of old_substr with new_substr");
-DATA(insert OID =  2284 ( regexp_replace          PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 25 "25 25 25" _null_ _null_ _null_ _null_ _null_    textregexreplace_noopt _null_ _null_ _null_ ));
-DESCR("replace text using regexp");
-DATA(insert OID =  2285 ( regexp_replace          PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 25 "25 25 25 25" _null_ _null_ _null_ _null_ _null_ textregexreplace _null_ _null_ _null_ ));
-DESCR("replace text using regexp");
-DATA(insert OID =  3396 ( regexp_match    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1009 "25 25" _null_ _null_ _null_ _null_ _null_ regexp_match_no_flags _null_ _null_ _null_ ));
-DESCR("find first match for regexp");
-DATA(insert OID =  3397 ( regexp_match    PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1009 "25 25 25" _null_ _null_ _null_ _null_ _null_ regexp_match _null_ _null_ _null_ ));
-DESCR("find first match for regexp");
-DATA(insert OID =  2763 ( regexp_matches   PGNSP PGUID 12 1 1 0 0 f f f t t i s 2 0 1009 "25 25" _null_ _null_ _null_ _null_ _null_ regexp_matches_no_flags _null_ _null_ _null_ ));
-DESCR("find match(es) for regexp");
-DATA(insert OID =  2764 ( regexp_matches   PGNSP PGUID 12 1 10 0 0 f f f t t i s 3 0 1009 "25 25 25" _null_ _null_ _null_ _null_ _null_ regexp_matches _null_ _null_ _null_ ));
-DESCR("find match(es) for regexp");
-DATA(insert OID =  2088 ( split_part   PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 25 "25 25 23" _null_ _null_ _null_ _null_ _null_       split_text _null_ _null_ _null_ ));
-DESCR("split string by field_sep and return field_num");
-DATA(insert OID =  2765 ( regexp_split_to_table PGNSP PGUID 12 1 1000 0 0 f f f t t i s 2 0 25 "25 25" _null_ _null_ _null_ _null_ _null_ regexp_split_to_table_no_flags _null_ _null_ _null_ ));
-DESCR("split string by pattern");
-DATA(insert OID =  2766 ( regexp_split_to_table PGNSP PGUID 12 1 1000 0 0 f f f t t i s 3 0 25 "25 25 25" _null_ _null_ _null_ _null_ _null_   regexp_split_to_table _null_ _null_ _null_ ));
-DESCR("split string by pattern");
-DATA(insert OID =  2767 ( regexp_split_to_array PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1009 "25 25" _null_ _null_ _null_ _null_ _null_       regexp_split_to_array_no_flags _null_ _null_ _null_ ));
-DESCR("split string by pattern");
-DATA(insert OID =  2768 ( regexp_split_to_array PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1009 "25 25 25" _null_ _null_ _null_ _null_ _null_ regexp_split_to_array _null_ _null_ _null_ ));
-DESCR("split string by pattern");
-DATA(insert OID =  2089 ( to_hex          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "23" _null_ _null_ _null_ _null_ _null_ to_hex32 _null_ _null_ _null_ ));
-DESCR("convert int4 number to hex");
-DATA(insert OID =  2090 ( to_hex          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "20" _null_ _null_ _null_ _null_ _null_ to_hex64 _null_ _null_ _null_ ));
-DESCR("convert int8 number to hex");
-
-/* for character set encoding support */
-
-/* return database encoding name */
-DATA(insert OID = 1039 (  getdatabaseencoding     PGNSP PGUID 12 1 0 0 0 f f f t f s s 0 0 19 "" _null_ _null_ _null_ _null_ _null_ getdatabaseencoding _null_ _null_ _null_ ));
-DESCR("encoding name of current database");
-
-/* return client encoding name i.e. session encoding */
-DATA(insert OID = 810 (  pg_client_encoding    PGNSP PGUID 12 1 0 0 0 f f f t f s s 0 0 19 "" _null_ _null_ _null_ _null_ _null_ pg_client_encoding _null_ _null_ _null_ ));
-DESCR("encoding name of current database");
-
-DATA(insert OID = 1713 (  length                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 23 "17 19" _null_ _null_ _null_ _null_ _null_ length_in_encoding _null_ _null_ _null_ ));
-DESCR("length of string in specified encoding");
-
-DATA(insert OID = 1714 (  convert_from            PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "17 19" _null_ _null_ _null_ _null_ _null_ pg_convert_from _null_ _null_ _null_ ));
-DESCR("convert string with specified source encoding name");
-
-DATA(insert OID = 1717 (  convert_to              PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 17 "25 19" _null_ _null_ _null_ _null_ _null_ pg_convert_to _null_ _null_ _null_ ));
-DESCR("convert string with specified destination encoding name");
-
-DATA(insert OID = 1813 (  convert                 PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 17 "17 19 19" _null_ _null_ _null_ _null_ _null_ pg_convert _null_ _null_ _null_ ));
-DESCR("convert string with specified encoding names");
-
-DATA(insert OID = 1264 (  pg_char_to_encoding     PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 23 "19" _null_ _null_ _null_ _null_ _null_ PG_char_to_encoding _null_ _null_ _null_ ));
-DESCR("convert encoding name to encoding id");
-
-DATA(insert OID = 1597 (  pg_encoding_to_char     PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 19 "23" _null_ _null_ _null_ _null_ _null_ PG_encoding_to_char _null_ _null_ _null_ ));
-DESCR("convert encoding id to encoding name");
-
-DATA(insert OID = 2319 (  pg_encoding_max_length   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ pg_encoding_max_length_sql _null_ _null_ _null_ ));
-DESCR("maximum octet length of a character in given encoding");
-
-DATA(insert OID = 1638 (  oidgt                                   PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "26 26" _null_ _null_ _null_ _null_ _null_ oidgt _null_ _null_ _null_ ));
-DATA(insert OID = 1639 (  oidge                                   PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "26 26" _null_ _null_ _null_ _null_ _null_ oidge _null_ _null_ _null_ ));
-
-/* System-view support functions */
-DATA(insert OID = 1573 (  pg_get_ruledef          PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 25 "26" _null_ _null_ _null_ _null_ _null_ pg_get_ruledef _null_ _null_ _null_ ));
-DESCR("source text of a rule");
-DATA(insert OID = 1640 (  pg_get_viewdef          PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ pg_get_viewdef_name _null_ _null_ _null_ ));
-DESCR("select statement of a view");
-DATA(insert OID = 1641 (  pg_get_viewdef          PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 25 "26" _null_ _null_ _null_ _null_ _null_ pg_get_viewdef _null_ _null_ _null_ ));
-DESCR("select statement of a view");
-DATA(insert OID = 1642 (  pg_get_userbyid         PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 19 "26" _null_ _null_ _null_ _null_ _null_ pg_get_userbyid _null_ _null_ _null_ ));
-DESCR("role name by OID (with fallback)");
-DATA(insert OID = 1643 (  pg_get_indexdef         PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 25 "26" _null_ _null_ _null_ _null_ _null_ pg_get_indexdef _null_ _null_ _null_ ));
-DESCR("index description");
-DATA(insert OID = 3415 (  pg_get_statisticsobjdef         PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 25 "26" _null_ _null_ _null_ _null_ _null_ pg_get_statisticsobjdef _null_ _null_ _null_ ));
-DESCR("extended statistics object description");
-DATA(insert OID = 3352 (  pg_get_partkeydef    PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 25 "26" _null_ _null_ _null_ _null_ _null_ pg_get_partkeydef _null_ _null_ _null_ ));
-DESCR("partition key description");
-DATA(insert OID = 3408 (  pg_get_partition_constraintdef       PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 25 "26" _null_ _null_ _null_ _null_ _null_ pg_get_partition_constraintdef _null_ _null_ _null_ ));
-DESCR("partition constraint description");
-DATA(insert OID = 1662 (  pg_get_triggerdef    PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 25 "26" _null_ _null_ _null_ _null_ _null_ pg_get_triggerdef _null_ _null_ _null_ ));
-DESCR("trigger description");
-DATA(insert OID = 1387 (  pg_get_constraintdef PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 25 "26" _null_ _null_ _null_ _null_ _null_ pg_get_constraintdef _null_ _null_ _null_ ));
-DESCR("constraint description");
-DATA(insert OID = 1716 (  pg_get_expr             PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "194 26" _null_ _null_ _null_ _null_ _null_ pg_get_expr _null_ _null_ _null_ ));
-DESCR("deparse an encoded expression");
-DATA(insert OID = 1665 (  pg_get_serial_sequence       PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "25 25" _null_ _null_ _null_ _null_ _null_ pg_get_serial_sequence _null_ _null_ _null_ ));
-DESCR("name of sequence for a serial column");
-DATA(insert OID = 2098 (  pg_get_functiondef   PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 25 "26" _null_ _null_ _null_ _null_ _null_ pg_get_functiondef _null_ _null_ _null_ ));
-DESCR("definition of a function");
-DATA(insert OID = 2162 (  pg_get_function_arguments    PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 25 "26" _null_ _null_ _null_ _null_ _null_ pg_get_function_arguments _null_ _null_ _null_ ));
-DESCR("argument list of a function");
-DATA(insert OID = 2232 (  pg_get_function_identity_arguments      PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 25 "26" _null_ _null_ _null_ _null_ _null_ pg_get_function_identity_arguments _null_ _null_ _null_ ));
-DESCR("identity argument list of a function");
-DATA(insert OID = 2165 (  pg_get_function_result          PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 25 "26" _null_ _null_ _null_ _null_ _null_ pg_get_function_result _null_ _null_ _null_ ));
-DESCR("result type of a function");
-DATA(insert OID = 3808 (  pg_get_function_arg_default  PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "26 23" _null_ _null_ _null_ _null_ _null_ pg_get_function_arg_default _null_ _null_ _null_ ));
-DESCR("function argument default");
-
-DATA(insert OID = 1686 (  pg_get_keywords              PGNSP PGUID 12 10 400 0 0 f f f t t s s 0 0 2249 "" "{25,18,25}" "{o,o,o}" "{word,catcode,catdesc}" _null_ _null_ pg_get_keywords _null_ _null_ _null_ ));
-DESCR("list of SQL keywords");
-
-DATA(insert OID = 2289 (  pg_options_to_table          PGNSP PGUID 12 1 3 0 0 f f f t t s s 1 0 2249 "1009" "{1009,25,25}" "{i,o,o}" "{options_array,option_name,option_value}" _null_ _null_ pg_options_to_table _null_ _null_ _null_ ));
-DESCR("convert generic options array to name/value table");
-
-DATA(insert OID = 1619 (  pg_typeof                            PGNSP PGUID 12 1 0 0 0 f f f f f s s 1 0 2206 "2276" _null_ _null_ _null_ _null_        _null_ pg_typeof _null_ _null_ _null_ ));
-DESCR("type of the argument");
-DATA(insert OID = 3162 (  pg_collation_for             PGNSP PGUID 12 1 0 0 0 f f f f f s s 1 0         25 "2276" _null_ _null_ _null_ _null_  _null_ pg_collation_for _null_ _null_ _null_ ));
-DESCR("collation of the argument; implementation of the COLLATION FOR expression");
-
-DATA(insert OID = 3842 (  pg_relation_is_updatable     PGNSP PGUID 12 10 0 0 0 f f f t f s s 2 0 23 "2205 16" _null_ _null_ _null_ _null_ _null_ pg_relation_is_updatable _null_ _null_ _null_ ));
-DESCR("is a relation insertable/updatable/deletable");
-DATA(insert OID = 3843 (  pg_column_is_updatable       PGNSP PGUID 12 10 0 0 0 f f f t f s s 3 0 16 "2205 21 16" _null_ _null_ _null_ _null_ _null_ pg_column_is_updatable _null_ _null_ _null_ ));
-DESCR("is a column updatable");
-
-DATA(insert OID = 6120 (  pg_get_replica_identity_index PGNSP PGUID 12 10 0 0 0 f f f t f s s 1 0 2205 "2205" _null_ _null_ _null_ _null_ _null_ pg_get_replica_identity_index _null_ _null_ _null_ ));
-DESCR("oid of replica identity index if any");
-
-/* Deferrable unique constraint trigger */
-DATA(insert OID = 1250 (  unique_key_recheck   PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ unique_key_recheck _null_ _null_ _null_ ));
-DESCR("deferred UNIQUE constraint check");
-
-/* Generic referential integrity constraint triggers */
-DATA(insert OID = 1644 (  RI_FKey_check_ins            PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ RI_FKey_check_ins _null_ _null_ _null_ ));
-DESCR("referential integrity FOREIGN KEY ... REFERENCES");
-DATA(insert OID = 1645 (  RI_FKey_check_upd            PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ RI_FKey_check_upd _null_ _null_ _null_ ));
-DESCR("referential integrity FOREIGN KEY ... REFERENCES");
-DATA(insert OID = 1646 (  RI_FKey_cascade_del  PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ RI_FKey_cascade_del _null_ _null_ _null_ ));
-DESCR("referential integrity ON DELETE CASCADE");
-DATA(insert OID = 1647 (  RI_FKey_cascade_upd  PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ RI_FKey_cascade_upd _null_ _null_ _null_ ));
-DESCR("referential integrity ON UPDATE CASCADE");
-DATA(insert OID = 1648 (  RI_FKey_restrict_del PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ RI_FKey_restrict_del _null_ _null_ _null_ ));
-DESCR("referential integrity ON DELETE RESTRICT");
-DATA(insert OID = 1649 (  RI_FKey_restrict_upd PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ RI_FKey_restrict_upd _null_ _null_ _null_ ));
-DESCR("referential integrity ON UPDATE RESTRICT");
-DATA(insert OID = 1650 (  RI_FKey_setnull_del  PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ RI_FKey_setnull_del _null_ _null_ _null_ ));
-DESCR("referential integrity ON DELETE SET NULL");
-DATA(insert OID = 1651 (  RI_FKey_setnull_upd  PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ RI_FKey_setnull_upd _null_ _null_ _null_ ));
-DESCR("referential integrity ON UPDATE SET NULL");
-DATA(insert OID = 1652 (  RI_FKey_setdefault_del PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ RI_FKey_setdefault_del _null_ _null_ _null_ ));
-DESCR("referential integrity ON DELETE SET DEFAULT");
-DATA(insert OID = 1653 (  RI_FKey_setdefault_upd PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ RI_FKey_setdefault_upd _null_ _null_ _null_ ));
-DESCR("referential integrity ON UPDATE SET DEFAULT");
-DATA(insert OID = 1654 (  RI_FKey_noaction_del PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ RI_FKey_noaction_del _null_ _null_ _null_ ));
-DESCR("referential integrity ON DELETE NO ACTION");
-DATA(insert OID = 1655 (  RI_FKey_noaction_upd PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ RI_FKey_noaction_upd _null_ _null_ _null_ ));
-DESCR("referential integrity ON UPDATE NO ACTION");
-
-DATA(insert OID = 1666 (  varbiteq                     PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1562 1562" _null_ _null_ _null_ _null_ _null_ biteq _null_ _null_ _null_ ));
-DATA(insert OID = 1667 (  varbitne                     PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1562 1562" _null_ _null_ _null_ _null_ _null_ bitne _null_ _null_ _null_ ));
-DATA(insert OID = 1668 (  varbitge                     PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1562 1562" _null_ _null_ _null_ _null_ _null_ bitge _null_ _null_ _null_ ));
-DATA(insert OID = 1669 (  varbitgt                     PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1562 1562" _null_ _null_ _null_ _null_ _null_ bitgt _null_ _null_ _null_ ));
-DATA(insert OID = 1670 (  varbitle                     PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1562 1562" _null_ _null_ _null_ _null_ _null_ bitle _null_ _null_ _null_ ));
-DATA(insert OID = 1671 (  varbitlt                     PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1562 1562" _null_ _null_ _null_ _null_ _null_ bitlt _null_ _null_ _null_ ));
-DATA(insert OID = 1672 (  varbitcmp                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "1562 1562" _null_ _null_ _null_ _null_ _null_ bitcmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-
-/* avoid the C names bitand and bitor, since they are C++ keywords */
-DATA(insert OID = 1673 (  bitand                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1560 "1560 1560" _null_ _null_ _null_ _null_ _null_    bit_and _null_ _null_ _null_ ));
-DATA(insert OID = 1674 (  bitor                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1560 "1560 1560" _null_ _null_ _null_ _null_ _null_    bit_or _null_ _null_ _null_ ));
-DATA(insert OID = 1675 (  bitxor                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1560 "1560 1560" _null_ _null_ _null_ _null_ _null_    bitxor _null_ _null_ _null_ ));
-DATA(insert OID = 1676 (  bitnot                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1560 "1560" _null_ _null_ _null_ _null_ _null_ bitnot _null_ _null_ _null_ ));
-DATA(insert OID = 1677 (  bitshiftleft         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1560 "1560 23" _null_ _null_ _null_ _null_ _null_ bitshiftleft _null_ _null_ _null_ ));
-DATA(insert OID = 1678 (  bitshiftright                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1560 "1560 23" _null_ _null_ _null_ _null_ _null_ bitshiftright _null_ _null_ _null_ ));
-DATA(insert OID = 1679 (  bitcat                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1562 "1562 1562" _null_ _null_ _null_ _null_ _null_    bitcat _null_ _null_ _null_ ));
-DATA(insert OID = 1680 (  substring                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1560 "1560 23 23" _null_ _null_ _null_ _null_ _null_ bitsubstr _null_ _null_ _null_ ));
-DESCR("extract portion of bitstring");
-DATA(insert OID = 1681 (  length                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1560" _null_ _null_ _null_ _null_ _null_ bitlength _null_ _null_ _null_ ));
-DESCR("bitstring length");
-DATA(insert OID = 1682 (  octet_length         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1560" _null_ _null_ _null_ _null_ _null_ bitoctetlength _null_ _null_ _null_ ));
-DESCR("octet length");
-DATA(insert OID = 1683 (  bit                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1560 "23 23" _null_ _null_ _null_ _null_ _null_        bitfromint4 _null_ _null_ _null_ ));
-DESCR("convert int4 to bitstring");
-DATA(insert OID = 1684 (  int4                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1560" _null_ _null_ _null_ _null_ _null_ bittoint4 _null_ _null_ _null_ ));
-DESCR("convert bitstring to int4");
-
-DATA(insert OID = 1685 (  bit                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1560 "1560 23 16" _null_ _null_ _null_ _null_ _null_ bit _null_ _null_ _null_ ));
-DESCR("adjust bit() to typmod length");
-DATA(insert OID = 3158 ( varbit_transform  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ varbit_transform _null_ _null_ _null_ ));
-DESCR("transform a varbit length coercion");
-DATA(insert OID = 1687 (  varbit                  PGNSP PGUID 12 1 0 0 varbit_transform f f f t f i s 3 0 1562 "1562 23 16" _null_ _null_ _null_ _null_ _null_ varbit _null_ _null_ _null_ ));
-DESCR("adjust varbit() to typmod length");
-
-DATA(insert OID = 1698 (  position                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "1560 1560" _null_ _null_ _null_ _null_ _null_ bitposition _null_ _null_ _null_ ));
-DESCR("position of sub-bitstring");
-DATA(insert OID = 1699 (  substring               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1560 "1560 23" _null_ _null_ _null_ _null_ _null_ bitsubstr_no_len _null_ _null_ _null_ ));
-DESCR("extract portion of bitstring");
-
-DATA(insert OID = 3030 (  overlay                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 1560 "1560 1560 23 23" _null_ _null_ _null_ _null_ _null_ bitoverlay _null_ _null_ _null_ ));
-DESCR("substitute portion of bitstring");
-DATA(insert OID = 3031 (  overlay                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1560 "1560 1560 23" _null_ _null_ _null_ _null_ _null_ bitoverlay_no_len _null_ _null_ _null_ ));
-DESCR("substitute portion of bitstring");
-DATA(insert OID = 3032 (  get_bit                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "1560 23" _null_ _null_ _null_ _null_ _null_ bitgetbit _null_ _null_ _null_ ));
-DESCR("get bit");
-DATA(insert OID = 3033 (  set_bit                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1560 "1560 23 23" _null_ _null_ _null_ _null_ _null_ bitsetbit _null_ _null_ _null_ ));
-DESCR("set bit");
-
-/* for macaddr type support */
-DATA(insert OID = 436 (  macaddr_in                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 829 "2275" _null_ _null_ _null_ _null_ _null_ macaddr_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 437 (  macaddr_out           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "829" _null_ _null_ _null_ _null_ _null_ macaddr_out _null_ _null_ _null_ ));
-DESCR("I/O");
-
-DATA(insert OID = 753 (  trunc                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 829 "829" _null_ _null_ _null_ _null_ _null_ macaddr_trunc _null_ _null_ _null_ ));
-DESCR("MACADDR manufacturer fields");
-
-DATA(insert OID = 830 (  macaddr_eq                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "829 829" _null_ _null_ _null_ _null_ _null_        macaddr_eq _null_ _null_ _null_ ));
-DATA(insert OID = 831 (  macaddr_lt                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "829 829" _null_ _null_ _null_ _null_ _null_        macaddr_lt _null_ _null_ _null_ ));
-DATA(insert OID = 832 (  macaddr_le                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "829 829" _null_ _null_ _null_ _null_ _null_        macaddr_le _null_ _null_ _null_ ));
-DATA(insert OID = 833 (  macaddr_gt                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "829 829" _null_ _null_ _null_ _null_ _null_        macaddr_gt _null_ _null_ _null_ ));
-DATA(insert OID = 834 (  macaddr_ge                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "829 829" _null_ _null_ _null_ _null_ _null_        macaddr_ge _null_ _null_ _null_ ));
-DATA(insert OID = 835 (  macaddr_ne                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "829 829" _null_ _null_ _null_ _null_ _null_        macaddr_ne _null_ _null_ _null_ ));
-DATA(insert OID = 836 (  macaddr_cmp           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "829 829" _null_ _null_ _null_ _null_ _null_        macaddr_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3144 (  macaddr_not          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 829 "829" _null_ _null_ _null_ _null_ _null_ macaddr_not _null_ _null_ _null_ ));
-DATA(insert OID = 3145 (  macaddr_and          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 829 "829 829" _null_ _null_ _null_ _null_ _null_ macaddr_and _null_ _null_ _null_ ));
-DATA(insert OID = 3146 (  macaddr_or           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 829 "829 829" _null_ _null_ _null_ _null_ _null_ macaddr_or _null_ _null_ _null_ ));
-DATA(insert OID = 3359 (  macaddr_sortsupport PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ macaddr_sortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-
-/* for macaddr8 type support */
-DATA(insert OID = 4110 (  macaddr8_in          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 774 "2275" _null_ _null_ _null_ _null_ _null_ macaddr8_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 4111 (  macaddr8_out         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "774" _null_ _null_ _null_ _null_ _null_ macaddr8_out _null_ _null_ _null_ ));
-DESCR("I/O");
-
-DATA(insert OID = 4112 (  trunc                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 774 "774" _null_ _null_ _null_ _null_ _null_ macaddr8_trunc _null_ _null_ _null_ ));
-DESCR("MACADDR8 manufacturer fields");
-
-DATA(insert OID = 4113 (  macaddr8_eq          PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "774 774" _null_ _null_ _null_ _null_ _null_        macaddr8_eq _null_ _null_ _null_ ));
-DATA(insert OID = 4114 (  macaddr8_lt          PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "774 774" _null_ _null_ _null_ _null_ _null_        macaddr8_lt _null_ _null_ _null_ ));
-DATA(insert OID = 4115 (  macaddr8_le          PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "774 774" _null_ _null_ _null_ _null_ _null_        macaddr8_le _null_ _null_ _null_ ));
-DATA(insert OID = 4116 (  macaddr8_gt          PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "774 774" _null_ _null_ _null_ _null_ _null_        macaddr8_gt _null_ _null_ _null_ ));
-DATA(insert OID = 4117 (  macaddr8_ge          PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "774 774" _null_ _null_ _null_ _null_ _null_        macaddr8_ge _null_ _null_ _null_ ));
-DATA(insert OID = 4118 (  macaddr8_ne          PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "774 774" _null_ _null_ _null_ _null_ _null_        macaddr8_ne _null_ _null_ _null_ ));
-DATA(insert OID = 4119 (  macaddr8_cmp         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "774 774" _null_ _null_ _null_ _null_ _null_        macaddr8_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 4120 (  macaddr8_not         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 774 "774" _null_ _null_ _null_ _null_ _null_ macaddr8_not _null_ _null_ _null_ ));
-DATA(insert OID = 4121 (  macaddr8_and         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 774 "774 774" _null_ _null_ _null_ _null_ _null_ macaddr8_and _null_ _null_ _null_ ));
-DATA(insert OID = 4122 (  macaddr8_or          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 774 "774 774" _null_ _null_ _null_ _null_ _null_ macaddr8_or _null_ _null_ _null_ ));
-DATA(insert OID = 4123 (  macaddr8                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 774 "829" _null_ _null_ _null_ _null_ _null_ macaddrtomacaddr8 _null_ _null_ _null_ ));
-DESCR("convert macaddr to macaddr8");
-DATA(insert OID = 4124 (  macaddr                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 829 "774" _null_ _null_ _null_ _null_ _null_ macaddr8tomacaddr _null_ _null_ _null_ ));
-DESCR("convert macaddr8 to macaddr");
-DATA(insert OID = 4125 (  macaddr8_set7bit     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 774 "774" _null_ _null_ _null_ _null_ _null_ macaddr8_set7bit _null_ _null_ _null_ ));
-DESCR("set 7th bit in macaddr8");
-
-/* for inet type support */
-DATA(insert OID = 910 (  inet_in                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 869 "2275" _null_ _null_ _null_ _null_ _null_ inet_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 911 (  inet_out                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "869" _null_ _null_ _null_ _null_ _null_ inet_out _null_ _null_ _null_ ));
-DESCR("I/O");
-
-/* for cidr type support */
-DATA(insert OID = 1267 (  cidr_in                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 650 "2275" _null_ _null_ _null_ _null_ _null_ cidr_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1427 (  cidr_out                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "650" _null_ _null_ _null_ _null_ _null_ cidr_out _null_ _null_ _null_ ));
-DESCR("I/O");
-
-/* these are used for both inet and cidr */
-DATA(insert OID = 920 (  network_eq                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "869 869" _null_ _null_ _null_ _null_ _null_        network_eq _null_ _null_ _null_ ));
-DATA(insert OID = 921 (  network_lt                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "869 869" _null_ _null_ _null_ _null_ _null_        network_lt _null_ _null_ _null_ ));
-DATA(insert OID = 922 (  network_le                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "869 869" _null_ _null_ _null_ _null_ _null_        network_le _null_ _null_ _null_ ));
-DATA(insert OID = 923 (  network_gt                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "869 869" _null_ _null_ _null_ _null_ _null_        network_gt _null_ _null_ _null_ ));
-DATA(insert OID = 924 (  network_ge                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "869 869" _null_ _null_ _null_ _null_ _null_        network_ge _null_ _null_ _null_ ));
-DATA(insert OID = 925 (  network_ne                    PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "869 869" _null_ _null_ _null_ _null_ _null_        network_ne _null_ _null_ _null_ ));
-DATA(insert OID = 3562 (  network_larger       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 869 "869 869" _null_ _null_ _null_ _null_ _null_ network_larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 3563 (  network_smaller      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 869 "869 869" _null_ _null_ _null_ _null_ _null_ network_smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-DATA(insert OID = 926 (  network_cmp           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "869 869" _null_ _null_ _null_ _null_ _null_        network_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 927 (  network_sub           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "869 869" _null_ _null_ _null_ _null_ _null_        network_sub _null_ _null_ _null_ ));
-DATA(insert OID = 928 (  network_subeq         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "869 869" _null_ _null_ _null_ _null_ _null_        network_subeq _null_ _null_ _null_ ));
-DATA(insert OID = 929 (  network_sup           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "869 869" _null_ _null_ _null_ _null_ _null_        network_sup _null_ _null_ _null_ ));
-DATA(insert OID = 930 (  network_supeq         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "869 869" _null_ _null_ _null_ _null_ _null_        network_supeq _null_ _null_ _null_ ));
-DATA(insert OID = 3551 (  network_overlap      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "869 869" _null_ _null_ _null_ _null_ _null_        network_overlap _null_ _null_ _null_ ));
-
-/* inet/cidr functions */
-DATA(insert OID = 598 (  abbrev                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "869" _null_ _null_ _null_ _null_ _null_    inet_abbrev _null_ _null_ _null_ ));
-DESCR("abbreviated display of inet value");
-DATA(insert OID = 599 (  abbrev                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "650" _null_ _null_ _null_ _null_ _null_    cidr_abbrev _null_ _null_ _null_ ));
-DESCR("abbreviated display of cidr value");
-DATA(insert OID = 605 (  set_masklen           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 869 "869 23" _null_ _null_ _null_ _null_ _null_        inet_set_masklen _null_ _null_ _null_ ));
-DESCR("change netmask of inet");
-DATA(insert OID = 635 (  set_masklen           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 650 "650 23" _null_ _null_ _null_ _null_ _null_        cidr_set_masklen _null_ _null_ _null_ ));
-DESCR("change netmask of cidr");
-DATA(insert OID = 711 (  family                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "869" _null_ _null_ _null_ _null_ _null_    network_family _null_ _null_ _null_ ));
-DESCR("address family (4 for IPv4, 6 for IPv6)");
-DATA(insert OID = 683 (  network                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 650 "869" _null_ _null_ _null_ _null_ _null_ network_network _null_ _null_ _null_ ));
-DESCR("network part of address");
-DATA(insert OID = 696 (  netmask                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 869 "869" _null_ _null_ _null_ _null_ _null_ network_netmask _null_ _null_ _null_ ));
-DESCR("netmask of address");
-DATA(insert OID = 697 (  masklen                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "869" _null_ _null_ _null_ _null_ _null_    network_masklen _null_ _null_ _null_ ));
-DESCR("netmask length");
-DATA(insert OID = 698 (  broadcast                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 869 "869" _null_ _null_ _null_ _null_ _null_ network_broadcast _null_ _null_ _null_ ));
-DESCR("broadcast address of network");
-DATA(insert OID = 699 (  host                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "869" _null_ _null_ _null_ _null_ _null_    network_host _null_ _null_ _null_ ));
-DESCR("show address octets only");
-DATA(insert OID = 730 (  text                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "869" _null_ _null_ _null_ _null_ _null_    network_show _null_ _null_ _null_ ));
-DESCR("show all parts of inet/cidr value");
-DATA(insert OID = 1362 (  hostmask                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 869 "869" _null_ _null_ _null_ _null_ _null_ network_hostmask _null_ _null_ _null_ ));
-DESCR("hostmask of address");
-DATA(insert OID = 1715 (  cidr                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 650 "869" _null_ _null_ _null_ _null_ _null_ inet_to_cidr _null_ _null_ _null_ ));
-DESCR("convert inet to cidr");
-
-DATA(insert OID = 2196 (  inet_client_addr             PGNSP PGUID 12 1 0 0 0 f f f f f s r 0 0 869 "" _null_ _null_ _null_ _null_ _null_ inet_client_addr _null_ _null_ _null_ ));
-DESCR("inet address of the client");
-DATA(insert OID = 2197 (  inet_client_port             PGNSP PGUID 12 1 0 0 0 f f f f f s r 0 0 23 "" _null_ _null_ _null_ _null_ _null_ inet_client_port _null_ _null_ _null_ ));
-DESCR("client's port number for this connection");
-DATA(insert OID = 2198 (  inet_server_addr             PGNSP PGUID 12 1 0 0 0 f f f f f s s 0 0 869 "" _null_ _null_ _null_ _null_ _null_ inet_server_addr _null_ _null_ _null_ ));
-DESCR("inet address of the server");
-DATA(insert OID = 2199 (  inet_server_port             PGNSP PGUID 12 1 0 0 0 f f f f f s s 0 0 23 "" _null_ _null_ _null_ _null_ _null_ inet_server_port _null_ _null_ _null_ ));
-DESCR("server's port number for this connection");
-
-DATA(insert OID = 2627 (  inetnot                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 869 "869" _null_ _null_ _null_ _null_ _null_ inetnot _null_ _null_ _null_ ));
-DATA(insert OID = 2628 (  inetand                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 869 "869 869" _null_ _null_ _null_ _null_ _null_ inetand _null_ _null_ _null_ ));
-DATA(insert OID = 2629 (  inetor                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 869 "869 869" _null_ _null_ _null_ _null_ _null_ inetor _null_ _null_ _null_ ));
-DATA(insert OID = 2630 (  inetpl                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 869 "869 20" _null_ _null_ _null_ _null_ _null_        inetpl _null_ _null_ _null_ ));
-DATA(insert OID = 2631 (  int8pl_inet          PGNSP PGUID 14 1 0 0 0 f f f t f i s 2 0 869 "20 869" _null_ _null_ _null_ _null_ _null_ "select $2 + $1" _null_ _null_ _null_ ));
-DATA(insert OID = 2632 (  inetmi_int8          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 869 "869 20" _null_ _null_ _null_ _null_ _null_        inetmi_int8 _null_ _null_ _null_ ));
-DATA(insert OID = 2633 (  inetmi                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "869 869" _null_ _null_ _null_ _null_ _null_        inetmi _null_ _null_ _null_ ));
-DATA(insert OID = 4071 (  inet_same_family     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "869 869" _null_ _null_ _null_ _null_ _null_ inet_same_family _null_ _null_ _null_ ));
-DESCR("are the addresses from the same family?");
-DATA(insert OID = 4063 (  inet_merge           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 650 "869 869" _null_ _null_ _null_ _null_ _null_ inet_merge _null_ _null_ _null_ ));
-DESCR("the smallest network which includes both of the given networks");
-
-/* GiST support for inet and cidr */
-DATA(insert OID = 3553 (  inet_gist_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "2281 869 21 26 2281" _null_ _null_ _null_ _null_ _null_ inet_gist_consistent _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 3554 (  inet_gist_union              PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 869 "2281 2281" _null_ _null_ _null_ _null_ _null_ inet_gist_union _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 3555 (  inet_gist_compress   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ inet_gist_compress _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 3573 (  inet_gist_fetch              PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ inet_gist_fetch _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 3557 (  inet_gist_penalty            PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 2281 "2281 2281 2281" _null_ _null_ _null_ _null_ _null_ inet_gist_penalty _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 3558 (  inet_gist_picksplit  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2281 "2281 2281" _null_ _null_ _null_ _null_ _null_ inet_gist_picksplit _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 3559 (  inet_gist_same               PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 2281 "869 869 2281" _null_ _null_ _null_ _null_ _null_ inet_gist_same _null_ _null_ _null_ ));
-DESCR("GiST support");
-
-/* SP-GiST support for inet and cidr */
-DATA(insert OID = 3795 (  inet_spg_config              PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_ _null_ inet_spg_config _null_ _null_ _null_ ));
-DESCR("SP-GiST support");
-DATA(insert OID = 3796 (  inet_spg_choose              PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_ _null_ inet_spg_choose _null_ _null_ _null_ ));
-DESCR("SP-GiST support");
-DATA(insert OID = 3797 (  inet_spg_picksplit   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_ _null_ inet_spg_picksplit _null_ _null_ _null_ ));
-DESCR("SP-GiST support");
-DATA(insert OID = 3798 (  inet_spg_inner_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_ _null_ inet_spg_inner_consistent _null_ _null_ _null_ ));
-DESCR("SP-GiST support");
-DATA(insert OID = 3799 (  inet_spg_leaf_consistent     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2281 2281" _null_ _null_ _null_ _null_ _null_ inet_spg_leaf_consistent _null_ _null_ _null_ ));
-DESCR("SP-GiST support");
-
-/* Selectivity estimation for inet and cidr */
-DATA(insert OID = 3560 (  networksel              PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_    networksel _null_ _null_ _null_ ));
-DESCR("restriction selectivity for network operators");
-DATA(insert OID = 3561 (  networkjoinsel          PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_ _null_ networkjoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity for network operators");
-
-DATA(insert OID = 1690 ( time_mi_time          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1186 "1083 1083" _null_ _null_ _null_ _null_ _null_    time_mi_time _null_ _null_ _null_ ));
-
-DATA(insert OID = 1691 (  boolle                       PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "16 16" _null_ _null_ _null_ _null_ _null_ boolle _null_ _null_ _null_ ));
-DATA(insert OID = 1692 (  boolge                       PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "16 16" _null_ _null_ _null_ _null_ _null_ boolge _null_ _null_ _null_ ));
-DATA(insert OID = 1693 (  btboolcmp                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "16 16" _null_ _null_ _null_ _null_ _null_ btboolcmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-
-DATA(insert OID = 1688 (  time_hash                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1083" _null_ _null_ _null_ _null_ _null_ time_hash _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 3409 (  time_hash_extended   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "1083 20" _null_ _null_ _null_ _null_ _null_ time_hash_extended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 1696 (  timetz_hash          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1266" _null_ _null_ _null_ _null_ _null_ timetz_hash _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 3410 (  timetz_hash_extended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "1266 20" _null_ _null_ _null_ _null_ _null_ timetz_hash_extended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 1697 (  interval_hash                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1186" _null_ _null_ _null_ _null_ _null_ interval_hash _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 3418 (  interval_hash_extended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "1186 20" _null_ _null_ _null_ _null_ _null_ interval_hash_extended _null_ _null_ _null_ ));
-DESCR("hash");
-
-
-/* OID's 1700 - 1799 NUMERIC data type */
-DATA(insert OID = 1701 ( numeric_in                            PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1700 "2275 26 23" _null_ _null_ _null_ _null_ _null_ numeric_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1702 ( numeric_out                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "1700" _null_ _null_ _null_ _null_ _null_ numeric_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2917 (  numerictypmodin              PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1263" _null_ _null_ _null_ _null_ _null_ numerictypmodin _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 2918 (  numerictypmodout             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "23" _null_ _null_ _null_ _null_ _null_ numerictypmodout _null_ _null_ _null_ ));
-DESCR("I/O typmod");
-DATA(insert OID = 3157 ( numeric_transform             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ numeric_transform _null_ _null_ _null_ ));
-DESCR("transform a numeric length coercion");
-DATA(insert OID = 1703 ( numeric                               PGNSP PGUID 12 1 0 0 numeric_transform f f f t f i s 2 0 1700 "1700 23" _null_ _null_ _null_ _null_ _null_ numeric _null_ _null_ _null_ ));
-DESCR("adjust numeric to typmod precision/scale");
-DATA(insert OID = 1704 ( numeric_abs                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ numeric_abs _null_ _null_ _null_ ));
-DATA(insert OID = 1705 ( abs                                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ numeric_abs _null_ _null_ _null_ ));
-DESCR("absolute value");
-DATA(insert OID = 1706 ( sign                                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ numeric_sign _null_ _null_ _null_ ));
-DESCR("sign of value");
-DATA(insert OID = 1707 ( round                                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 23" _null_ _null_ _null_ _null_ _null_ numeric_round _null_ _null_ _null_ ));
-DESCR("value rounded to 'scale'");
-DATA(insert OID = 1708 ( round                                 PGNSP PGUID 14 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.round($1,0)" _null_ _null_ _null_ ));
-DESCR("value rounded to 'scale' of zero");
-DATA(insert OID = 1709 ( trunc                                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 23" _null_ _null_ _null_ _null_ _null_ numeric_trunc _null_ _null_ _null_ ));
-DESCR("value truncated to 'scale'");
-DATA(insert OID = 1710 ( trunc                                 PGNSP PGUID 14 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.trunc($1,0)" _null_ _null_ _null_ ));
-DESCR("value truncated to 'scale' of zero");
-DATA(insert OID = 1711 ( ceil                                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ numeric_ceil _null_ _null_ _null_ ));
-DESCR("nearest integer >= value");
-DATA(insert OID = 2167 ( ceiling                               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ numeric_ceil _null_ _null_ _null_ ));
-DESCR("nearest integer >= value");
-DATA(insert OID = 1712 ( floor                                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ numeric_floor _null_ _null_ _null_ ));
-DESCR("nearest integer <= value");
-DATA(insert OID = 1718 ( numeric_eq                            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1700 1700" _null_ _null_ _null_ _null_ _null_ numeric_eq _null_ _null_ _null_ ));
-DATA(insert OID = 1719 ( numeric_ne                            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1700 1700" _null_ _null_ _null_ _null_ _null_ numeric_ne _null_ _null_ _null_ ));
-DATA(insert OID = 1720 ( numeric_gt                            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1700 1700" _null_ _null_ _null_ _null_ _null_ numeric_gt _null_ _null_ _null_ ));
-DATA(insert OID = 1721 ( numeric_ge                            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1700 1700" _null_ _null_ _null_ _null_ _null_ numeric_ge _null_ _null_ _null_ ));
-DATA(insert OID = 1722 ( numeric_lt                            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1700 1700" _null_ _null_ _null_ _null_ _null_ numeric_lt _null_ _null_ _null_ ));
-DATA(insert OID = 1723 ( numeric_le                            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1700 1700" _null_ _null_ _null_ _null_ _null_ numeric_le _null_ _null_ _null_ ));
-DATA(insert OID = 1724 ( numeric_add                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_    numeric_add _null_ _null_ _null_ ));
-DATA(insert OID = 1725 ( numeric_sub                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_    numeric_sub _null_ _null_ _null_ ));
-DATA(insert OID = 1726 ( numeric_mul                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_    numeric_mul _null_ _null_ _null_ ));
-DATA(insert OID = 1727 ( numeric_div                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_    numeric_div _null_ _null_ _null_ ));
-DATA(insert OID = 1728 ( mod                                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_    numeric_mod _null_ _null_ _null_ ));
-DESCR("modulus");
-DATA(insert OID = 1729 ( numeric_mod                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_    numeric_mod _null_ _null_ _null_ ));
-DATA(insert OID = 1730 ( sqrt                                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ numeric_sqrt _null_ _null_ _null_ ));
-DESCR("square root");
-DATA(insert OID = 1731 ( numeric_sqrt                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ numeric_sqrt _null_ _null_ _null_ ));
-DESCR("square root");
-DATA(insert OID = 1732 ( exp                                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ numeric_exp _null_ _null_ _null_ ));
-DESCR("natural exponential (e^x)");
-DATA(insert OID = 1733 ( numeric_exp                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ numeric_exp _null_ _null_ _null_ ));
-DESCR("natural exponential (e^x)");
-DATA(insert OID = 1734 ( ln                                            PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ numeric_ln _null_ _null_ _null_ ));
-DESCR("natural logarithm");
-DATA(insert OID = 1735 ( numeric_ln                            PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ numeric_ln _null_ _null_ _null_ ));
-DESCR("natural logarithm");
-DATA(insert OID = 1736 ( log                                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_    numeric_log _null_ _null_ _null_ ));
-DESCR("logarithm base m of n");
-DATA(insert OID = 1737 ( numeric_log                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_    numeric_log _null_ _null_ _null_ ));
-DESCR("logarithm base m of n");
-DATA(insert OID = 1738 ( pow                                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_    numeric_power _null_ _null_ _null_ ));
-DESCR("exponentiation");
-DATA(insert OID = 2169 ( power                                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_    numeric_power _null_ _null_ _null_ ));
-DESCR("exponentiation");
-DATA(insert OID = 1739 ( numeric_power                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_    numeric_power _null_ _null_ _null_ ));
-DATA(insert OID = 3281 ( scale                                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1700" _null_ _null_ _null_ _null_ _null_ numeric_scale _null_ _null_ _null_ ));
-DESCR("number of decimal digits in the fractional part");
-DATA(insert OID = 1740 ( numeric                               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "23" _null_ _null_ _null_ _null_ _null_ int4_numeric _null_ _null_ _null_ ));
-DESCR("convert int4 to numeric");
-DATA(insert OID = 1741 ( log                                   PGNSP PGUID 14 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.log(10, $1)" _null_ _null_ _null_ ));
-DESCR("base 10 logarithm");
-DATA(insert OID = 1742 ( numeric                               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "700" _null_ _null_ _null_ _null_ _null_ float4_numeric _null_ _null_ _null_ ));
-DESCR("convert float4 to numeric");
-DATA(insert OID = 1743 ( numeric                               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "701" _null_ _null_ _null_ _null_ _null_ float8_numeric _null_ _null_ _null_ ));
-DESCR("convert float8 to numeric");
-DATA(insert OID = 1744 ( int4                                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1700" _null_ _null_ _null_ _null_ _null_ numeric_int4 _null_ _null_ _null_ ));
-DESCR("convert numeric to int4");
-DATA(insert OID = 1745 ( float4                                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 700 "1700" _null_ _null_ _null_ _null_ _null_ numeric_float4 _null_ _null_ _null_ ));
-DESCR("convert numeric to float4");
-DATA(insert OID = 1746 ( float8                                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1700" _null_ _null_ _null_ _null_ _null_ numeric_float8 _null_ _null_ _null_ ));
-DESCR("convert numeric to float8");
-DATA(insert OID = 1973 ( div                                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_    numeric_div_trunc _null_ _null_ _null_ ));
-DESCR("trunc(x/y)");
-DATA(insert OID = 1980 ( numeric_div_trunc             PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_    numeric_div_trunc _null_ _null_ _null_ ));
-DESCR("trunc(x/y)");
-DATA(insert OID = 2170 ( width_bucket                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 23 "1700 1700 1700 23" _null_ _null_ _null_ _null_ _null_ width_bucket_numeric _null_ _null_ _null_ ));
-DESCR("bucket number of operand in equal-width histogram");
-
-DATA(insert OID = 1747 ( time_pl_interval              PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1083 "1083 1186" _null_ _null_ _null_ _null_ _null_    time_pl_interval _null_ _null_ _null_ ));
-DATA(insert OID = 1748 ( time_mi_interval              PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1083 "1083 1186" _null_ _null_ _null_ _null_ _null_    time_mi_interval _null_ _null_ _null_ ));
-DATA(insert OID = 1749 ( timetz_pl_interval            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1266 "1266 1186" _null_ _null_ _null_ _null_ _null_    timetz_pl_interval _null_ _null_ _null_ ));
-DATA(insert OID = 1750 ( timetz_mi_interval            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1266 "1266 1186" _null_ _null_ _null_ _null_ _null_    timetz_mi_interval _null_ _null_ _null_ ));
-
-DATA(insert OID = 1764 ( numeric_inc                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ numeric_inc _null_ _null_ _null_ ));
-DESCR("increment by one");
-DATA(insert OID = 1766 ( numeric_smaller               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_    numeric_smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-DATA(insert OID = 1767 ( numeric_larger                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_    numeric_larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 1769 ( numeric_cmp                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "1700 1700" _null_ _null_ _null_ _null_ _null_ numeric_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3283 ( numeric_sortsupport   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ numeric_sortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-DATA(insert OID = 1771 ( numeric_uminus                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ numeric_uminus _null_ _null_ _null_ ));
-DATA(insert OID = 1779 ( int8                                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "1700" _null_ _null_ _null_ _null_ _null_ numeric_int8 _null_ _null_ _null_ ));
-DESCR("convert numeric to int8");
-DATA(insert OID = 1781 ( numeric                               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "20" _null_ _null_ _null_ _null_ _null_ int8_numeric _null_ _null_ _null_ ));
-DESCR("convert int8 to numeric");
-DATA(insert OID = 1782 ( numeric                               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "21" _null_ _null_ _null_ _null_ _null_ int2_numeric _null_ _null_ _null_ ));
-DESCR("convert int2 to numeric");
-DATA(insert OID = 1783 ( int2                                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 21 "1700" _null_ _null_ _null_ _null_ _null_ numeric_int2 _null_ _null_ _null_ ));
-DESCR("convert numeric to int2");
-
-
-DATA(insert OID = 3556 ( bool                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_bool  _null_ _null_ _null_ ));
-DESCR("convert jsonb to boolean");
-DATA(insert OID = 3449 ( numeric                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_numeric  _null_ _null_ _null_ ));
-DESCR("convert jsonb to numeric");
-DATA(insert OID = 3450 ( int2                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 21 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_int2  _null_ _null_ _null_ ));
-DESCR("convert jsonb to int2");
-DATA(insert OID = 3451 ( int4                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_int4  _null_ _null_ _null_ ));
-DESCR("convert jsonb to int4");
-DATA(insert OID = 3452 ( int8                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_int8  _null_ _null_ _null_ ));
-DESCR("convert jsonb to int8");
-DATA(insert OID = 3453 ( float4                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 700 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_float4  _null_ _null_ _null_ ));
-DESCR("convert jsonb to float4");
-DATA(insert OID = 2580 ( float8                                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_float8  _null_ _null_ _null_ ));
-DESCR("convert jsonb to float8");
-
-/* formatting */
-DATA(insert OID = 1770 ( to_char                       PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "1184 25" _null_ _null_ _null_ _null_  _null_ timestamptz_to_char _null_ _null_ _null_ ));
-DESCR("format timestamp with time zone to text");
-DATA(insert OID = 1772 ( to_char                       PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "1700 25" _null_ _null_ _null_ _null_  _null_ numeric_to_char _null_ _null_ _null_ ));
-DESCR("format numeric to text");
-DATA(insert OID = 1773 ( to_char                       PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "23 25" _null_ _null_ _null_ _null_ _null_ int4_to_char _null_ _null_ _null_ ));
-DESCR("format int4 to text");
-DATA(insert OID = 1774 ( to_char                       PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "20 25" _null_ _null_ _null_ _null_ _null_ int8_to_char _null_ _null_ _null_ ));
-DESCR("format int8 to text");
-DATA(insert OID = 1775 ( to_char                       PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "700 25" _null_ _null_ _null_ _null_ _null_ float4_to_char _null_ _null_ _null_ ));
-DESCR("format float4 to text");
-DATA(insert OID = 1776 ( to_char                       PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "701 25" _null_ _null_ _null_ _null_ _null_ float8_to_char _null_ _null_ _null_ ));
-DESCR("format float8 to text");
-DATA(insert OID = 1777 ( to_number                     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 1700 "25 25" _null_ _null_ _null_ _null_  _null_ numeric_to_number _null_ _null_ _null_ ));
-DESCR("convert text to numeric");
-DATA(insert OID = 1778 ( to_timestamp          PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 1184 "25 25" _null_ _null_ _null_ _null_  _null_ to_timestamp _null_ _null_ _null_ ));
-DESCR("convert text to timestamp with time zone");
-DATA(insert OID = 1780 ( to_date                       PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 1082 "25 25" _null_ _null_ _null_ _null_  _null_ to_date _null_ _null_ _null_ ));
-DESCR("convert text to date");
-DATA(insert OID = 1768 ( to_char                       PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "1186 25" _null_ _null_ _null_ _null_  _null_ interval_to_char _null_ _null_ _null_ ));
-DESCR("format interval to text");
-
-DATA(insert OID =  1282 ( quote_ident     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ quote_ident _null_ _null_ _null_ ));
-DESCR("quote an identifier for usage in a querystring");
-DATA(insert OID =  1283 ( quote_literal    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ quote_literal _null_ _null_ _null_ ));
-DESCR("quote a literal for usage in a querystring");
-DATA(insert OID =  1285 ( quote_literal    PGNSP PGUID 14 1 0 0 0 f f f t f s s 1 0 25 "2283" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.quote_literal($1::pg_catalog.text)" _null_ _null_ _null_ ));
-DESCR("quote a data value for usage in a querystring");
-DATA(insert OID =  1289 ( quote_nullable   PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ quote_nullable _null_ _null_ _null_ ));
-DESCR("quote a possibly-null literal for usage in a querystring");
-DATA(insert OID =  1290 ( quote_nullable   PGNSP PGUID 14 1 0 0 0 f f f f f s s 1 0 25 "2283" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.quote_nullable($1::pg_catalog.text)" _null_ _null_ _null_ ));
-DESCR("quote a possibly-null data value for usage in a querystring");
-
-DATA(insert OID = 1798 (  oidin                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 26 "2275" _null_ _null_ _null_ _null_ _null_ oidin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 1799 (  oidout                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "26" _null_ _null_ _null_ _null_ _null_ oidout _null_ _null_ _null_ ));
-DESCR("I/O");
-
-DATA(insert OID = 3058 ( concat                PGNSP PGUID 12 1 0 2276 0 f f f f f s s 1 0 25 "2276" "{2276}" "{v}" _null_ _null_ _null_ text_concat _null_ _null_ _null_ ));
-DESCR("concatenate values");
-DATA(insert OID = 3059 ( concat_ws     PGNSP PGUID 12 1 0 2276 0 f f f f f s s 2 0 25 "25 2276" "{25,2276}" "{i,v}" _null_ _null_ _null_ text_concat_ws _null_ _null_ _null_ ));
-DESCR("concatenate values with separators");
-DATA(insert OID = 3060 ( left          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25 "25 23" _null_ _null_ _null_ _null_  _null_ text_left _null_ _null_ _null_ ));
-DESCR("extract the first n characters");
-DATA(insert OID = 3061 ( right         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25 "25 23" _null_ _null_ _null_ _null_  _null_ text_right _null_ _null_ _null_ ));
-DESCR("extract the last n characters");
-DATA(insert OID = 3062 ( reverse       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_  text_reverse _null_ _null_ _null_ ));
-DESCR("reverse text");
-DATA(insert OID = 3539 ( format                PGNSP PGUID 12 1 0 2276 0 f f f f f s s 2 0 25 "25 2276" "{25,2276}" "{i,v}" _null_ _null_ _null_ text_format _null_ _null_ _null_ ));
-DESCR("format text message");
-DATA(insert OID = 3540 ( format                PGNSP PGUID 12 1 0 0 0 f f f f f s s 1 0 25 "25" _null_ _null_ _null_ _null_    _null_ text_format_nv _null_ _null_ _null_ ));
-DESCR("format text message");
-
-DATA(insert OID = 1810 (  bit_length      PGNSP PGUID 14 1 0 0 0 f f f t f i s 1 0 23 "17" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.octet_length($1) * 8" _null_ _null_ _null_ ));
-DESCR("length in bits");
-DATA(insert OID = 1811 (  bit_length      PGNSP PGUID 14 1 0 0 0 f f f t f i s 1 0 23 "25" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.octet_length($1) * 8" _null_ _null_ _null_ ));
-DESCR("length in bits");
-DATA(insert OID = 1812 (  bit_length      PGNSP PGUID 14 1 0 0 0 f f f t f i s 1 0 23 "1560" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.length($1)" _null_ _null_ _null_ ));
-DESCR("length in bits");
-
-/* Selectivity estimators for LIKE and related operators */
-DATA(insert OID = 1814 ( iclikesel                     PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_ iclikesel _null_ _null_ _null_ ));
-DESCR("restriction selectivity of ILIKE");
-DATA(insert OID = 1815 ( icnlikesel                    PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_ icnlikesel _null_ _null_ _null_ ));
-DESCR("restriction selectivity of NOT ILIKE");
-DATA(insert OID = 1816 ( iclikejoinsel         PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_  _null_ iclikejoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity of ILIKE");
-DATA(insert OID = 1817 ( icnlikejoinsel                PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_  _null_ icnlikejoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity of NOT ILIKE");
-DATA(insert OID = 1818 ( regexeqsel                    PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_ regexeqsel _null_ _null_ _null_ ));
-DESCR("restriction selectivity of regex match");
-DATA(insert OID = 1819 ( likesel                       PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_ likesel _null_ _null_ _null_ ));
-DESCR("restriction selectivity of LIKE");
-DATA(insert OID = 1820 ( icregexeqsel          PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_ icregexeqsel _null_ _null_ _null_ ));
-DESCR("restriction selectivity of case-insensitive regex match");
-DATA(insert OID = 1821 ( regexnesel                    PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_ regexnesel _null_ _null_ _null_ ));
-DESCR("restriction selectivity of regex non-match");
-DATA(insert OID = 1822 ( nlikesel                      PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_ nlikesel _null_ _null_ _null_ ));
-DESCR("restriction selectivity of NOT LIKE");
-DATA(insert OID = 1823 ( icregexnesel          PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_ icregexnesel _null_ _null_ _null_ ));
-DESCR("restriction selectivity of case-insensitive regex non-match");
-DATA(insert OID = 1824 ( regexeqjoinsel                PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_  _null_ regexeqjoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity of regex match");
-DATA(insert OID = 1825 ( likejoinsel           PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_  _null_ likejoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity of LIKE");
-DATA(insert OID = 1826 ( icregexeqjoinsel      PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_  _null_ icregexeqjoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity of case-insensitive regex match");
-DATA(insert OID = 1827 ( regexnejoinsel                PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_  _null_ regexnejoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity of regex non-match");
-DATA(insert OID = 1828 ( nlikejoinsel          PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_  _null_ nlikejoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity of NOT LIKE");
-DATA(insert OID = 1829 ( icregexnejoinsel      PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_  _null_ icregexnejoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity of case-insensitive regex non-match");
-DATA(insert OID = 3437 ( prefixsel                     PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_ prefixsel _null_ _null_ _null_ ));
-DESCR("restriction selectivity of exact prefix");
-DATA(insert OID = 3438 ( prefixjoinsel         PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_  _null_ prefixjoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity of exact prefix");
-
-/* Aggregate-related functions */
-DATA(insert OID = 1830 (  float8_avg      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1022" _null_ _null_ _null_ _null_ _null_ float8_avg _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2512 (  float8_var_pop   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1022" _null_ _null_ _null_ _null_ _null_ float8_var_pop _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 1831 (  float8_var_samp  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1022" _null_ _null_ _null_ _null_ _null_ float8_var_samp _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2513 (  float8_stddev_pop PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1022" _null_ _null_ _null_ _null_ _null_ float8_stddev_pop _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 1832 (  float8_stddev_samp   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1022" _null_ _null_ _null_ _null_ _null_ float8_stddev_samp _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 1833 (  numeric_accum    PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 1700" _null_ _null_ _null_ _null_ _null_ numeric_accum _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3341 (  numeric_combine       PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 2281" _null_ _null_ _null_ _null_ _null_ numeric_combine _null_ _null_ _null_ ));
-DESCR("aggregate combine function");
-DATA(insert OID = 2858 (  numeric_avg_accum    PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 1700" _null_ _null_ _null_ _null_ _null_ numeric_avg_accum _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3337 (  numeric_avg_combine   PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 2281" _null_ _null_ _null_ _null_ _null_ numeric_avg_combine _null_ _null_ _null_ ));
-DESCR("aggregate combine function");
-DATA(insert OID = 2740 (  numeric_avg_serialize    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "2281" _null_ _null_ _null_ _null_ _null_ numeric_avg_serialize _null_ _null_ _null_ ));
-DESCR("aggregate serial function");
-DATA(insert OID = 2741 (  numeric_avg_deserialize       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2281 "17 2281" _null_ _null_ _null_ _null_ _null_ numeric_avg_deserialize _null_ _null_ _null_ ));
-DESCR("aggregate deserial function");
-DATA(insert OID = 3335 (  numeric_serialize    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "2281" _null_ _null_ _null_ _null_ _null_ numeric_serialize _null_ _null_ _null_ ));
-DESCR("aggregate serial function");
-DATA(insert OID = 3336 (  numeric_deserialize   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2281 "17 2281" _null_ _null_ _null_ _null_ _null_ numeric_deserialize _null_ _null_ _null_ ));
-DESCR("aggregate deserial function");
-DATA(insert OID = 3548 (  numeric_accum_inv    PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 1700" _null_ _null_ _null_ _null_ _null_ numeric_accum_inv _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 1834 (  int2_accum      PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 21" _null_ _null_ _null_ _null_ _null_ int2_accum _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 1835 (  int4_accum      PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 23" _null_ _null_ _null_ _null_ _null_ int4_accum _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 1836 (  int8_accum      PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 20" _null_ _null_ _null_ _null_ _null_ int8_accum _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3338 (  numeric_poly_combine   PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 2281" _null_ _null_ _null_ _null_ _null_ numeric_poly_combine _null_ _null_ _null_ ));
-DESCR("aggregate combine function");
-DATA(insert OID = 3339 (  numeric_poly_serialize       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "2281" _null_ _null_ _null_ _null_ _null_ numeric_poly_serialize _null_ _null_ _null_ ));
-DESCR("aggregate serial function");
-DATA(insert OID = 3340 (  numeric_poly_deserialize       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2281 "17 2281" _null_ _null_ _null_ _null_ _null_ numeric_poly_deserialize _null_ _null_ _null_ ));
-DESCR("aggregate deserial function");
-DATA(insert OID = 2746 (  int8_avg_accum          PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 20" _null_ _null_ _null_ _null_ _null_ int8_avg_accum _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3567 (  int2_accum_inv   PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 21" _null_ _null_ _null_ _null_ _null_ int2_accum_inv _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3568 (  int4_accum_inv   PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 23" _null_ _null_ _null_ _null_ _null_ int4_accum_inv _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3569 (  int8_accum_inv   PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 20" _null_ _null_ _null_ _null_ _null_ int8_accum_inv _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3387 (  int8_avg_accum_inv   PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 20" _null_ _null_ _null_ _null_ _null_ int8_avg_accum_inv _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 2785 (  int8_avg_combine       PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 2281" _null_ _null_ _null_ _null_ _null_ int8_avg_combine _null_ _null_ _null_ ));
-DESCR("aggregate combine function");
-DATA(insert OID = 2786 (  int8_avg_serialize   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "2281" _null_ _null_ _null_ _null_ _null_ int8_avg_serialize _null_ _null_ _null_ ));
-DESCR("aggregate serial function");
-DATA(insert OID = 2787 (  int8_avg_deserialize   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2281 "17 2281" _null_ _null_ _null_ _null_ _null_ int8_avg_deserialize _null_ _null_ _null_ ));
-DESCR("aggregate deserial function");
-DATA(insert OID = 3324 (  int4_avg_combine       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1016 "1016 1016" _null_ _null_ _null_ _null_ _null_ int4_avg_combine _null_ _null_ _null_ ));
-DESCR("aggregate combine function");
-DATA(insert OID = 3178 (  numeric_sum     PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 1700 "2281" _null_ _null_ _null_ _null_ _null_ numeric_sum _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 1837 (  numeric_avg     PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 1700 "2281" _null_ _null_ _null_ _null_ _null_ numeric_avg _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2514 (  numeric_var_pop  PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 1700 "2281" _null_ _null_ _null_ _null_ _null_ numeric_var_pop _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 1838 (  numeric_var_samp PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 1700 "2281" _null_ _null_ _null_ _null_ _null_ numeric_var_samp _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2596 (  numeric_stddev_pop PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 1700 "2281" _null_ _null_ _null_ _null_ _null_   numeric_stddev_pop _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 1839 (  numeric_stddev_samp  PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 1700 "2281" _null_ _null_ _null_ _null_ _null_ numeric_stddev_samp _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 1840 (  int2_sum                PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 20 "20 21" _null_ _null_ _null_ _null_ _null_ int2_sum _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 1841 (  int4_sum                PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 20 "20 23" _null_ _null_ _null_ _null_ _null_ int4_sum _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 1842 (  int8_sum                PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 1700 "1700 20" _null_ _null_ _null_ _null_ _null_ int8_sum _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3388 (  numeric_poly_sum        PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 1700 "2281" _null_ _null_ _null_ _null_ _null_ numeric_poly_sum _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3389 (  numeric_poly_avg        PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 1700 "2281" _null_ _null_ _null_ _null_ _null_ numeric_poly_avg _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3390 (  numeric_poly_var_pop PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 1700 "2281" _null_ _null_ _null_ _null_ _null_ numeric_poly_var_pop _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3391 (  numeric_poly_var_samp PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 1700 "2281" _null_ _null_ _null_ _null_ _null_ numeric_poly_var_samp _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3392 (  numeric_poly_stddev_pop PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 1700 "2281" _null_ _null_ _null_ _null_ _null_ numeric_poly_stddev_pop _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3393 (  numeric_poly_stddev_samp     PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 1700 "2281" _null_ _null_ _null_ _null_ _null_ numeric_poly_stddev_samp _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-
-DATA(insert OID = 1843 (  interval_accum   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1187 "1187 1186" _null_ _null_ _null_ _null_ _null_ interval_accum _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3325 (  interval_combine      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1187 "1187 1187" _null_ _null_ _null_ _null_ _null_ interval_combine _null_ _null_ _null_ ));
-DESCR("aggregate combine function");
-DATA(insert OID = 3549 (  interval_accum_inv   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1187 "1187 1186" _null_ _null_ _null_ _null_ _null_ interval_accum_inv _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 1844 (  interval_avg    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1186 "1187" _null_ _null_ _null_ _null_ _null_ interval_avg _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 1962 (  int2_avg_accum   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1016 "1016 21" _null_ _null_ _null_ _null_ _null_ int2_avg_accum _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 1963 (  int4_avg_accum   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1016 "1016 23" _null_ _null_ _null_ _null_ _null_ int4_avg_accum _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3570 (  int2_avg_accum_inv   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1016 "1016 21" _null_ _null_ _null_ _null_ _null_ int2_avg_accum_inv _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3571 (  int4_avg_accum_inv   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1016 "1016 23" _null_ _null_ _null_ _null_ _null_ int4_avg_accum_inv _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 1964 (  int8_avg                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "1016" _null_ _null_ _null_ _null_ _null_ int8_avg _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3572 (  int2int4_sum    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "1016" _null_ _null_ _null_ _null_ _null_ int2int4_sum _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2805 (  int8inc_float8_float8                PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 20 "20 701 701" _null_ _null_ _null_ _null_ _null_ int8inc_float8_float8 _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 2806 (  float8_regr_accum                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1022 "1022 701 701" _null_ _null_ _null_ _null_ _null_ float8_regr_accum _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3342 (  float8_regr_combine          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1022 "1022 1022" _null_ _null_ _null_ _null_ _null_ float8_regr_combine _null_ _null_ _null_ ));
-DESCR("aggregate combine function");
-DATA(insert OID = 2807 (  float8_regr_sxx                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1022" _null_ _null_ _null_ _null_ _null_ float8_regr_sxx _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2808 (  float8_regr_syy                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1022" _null_ _null_ _null_ _null_ _null_ float8_regr_syy _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2809 (  float8_regr_sxy                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1022" _null_ _null_ _null_ _null_ _null_ float8_regr_sxy _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2810 (  float8_regr_avgx                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1022" _null_ _null_ _null_ _null_ _null_ float8_regr_avgx _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2811 (  float8_regr_avgy                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1022" _null_ _null_ _null_ _null_ _null_ float8_regr_avgy _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2812 (  float8_regr_r2                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1022" _null_ _null_ _null_ _null_ _null_ float8_regr_r2 _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2813 (  float8_regr_slope                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1022" _null_ _null_ _null_ _null_ _null_ float8_regr_slope _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2814 (  float8_regr_intercept                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1022" _null_ _null_ _null_ _null_ _null_ float8_regr_intercept _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2815 (  float8_covar_pop                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1022" _null_ _null_ _null_ _null_ _null_ float8_covar_pop _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2816 (  float8_covar_samp                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1022" _null_ _null_ _null_ _null_ _null_ float8_covar_samp _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2817 (  float8_corr                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "1022" _null_ _null_ _null_ _null_ _null_ float8_corr _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-
-DATA(insert OID = 3535 (  string_agg_transfn           PGNSP PGUID 12 1 0 0 0 f f f f f i s 3 0 2281 "2281 25 25" _null_ _null_ _null_ _null_ _null_ string_agg_transfn _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3536 (  string_agg_finalfn           PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 25 "2281" _null_ _null_ _null_ _null_ _null_ string_agg_finalfn _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3538 (  string_agg                           PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 25 "25 25" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("concatenate aggregate input into a string");
-DATA(insert OID = 3543 (  bytea_string_agg_transfn     PGNSP PGUID 12 1 0 0 0 f f f f f i s 3 0 2281 "2281 17 17" _null_ _null_ _null_ _null_ _null_ bytea_string_agg_transfn _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3544 (  bytea_string_agg_finalfn     PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 17 "2281" _null_ _null_ _null_ _null_ _null_ bytea_string_agg_finalfn _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3545 (  string_agg                           PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 17 "17 17" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("concatenate aggregate input into a bytea");
-
-/* To ASCII conversion */
-DATA(insert OID = 1845 ( to_ascii      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ to_ascii_default _null_ _null_ _null_ ));
-DESCR("encode text from DB encoding to ASCII text");
-DATA(insert OID = 1846 ( to_ascii      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25 "25 23" _null_ _null_ _null_ _null_ _null_ to_ascii_enc _null_ _null_ _null_ ));
-DESCR("encode text from encoding to ASCII text");
-DATA(insert OID = 1847 ( to_ascii      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25 "25 19" _null_ _null_ _null_ _null_ _null_ to_ascii_encname _null_ _null_ _null_ ));
-DESCR("encode text from encoding to ASCII text");
-
-DATA(insert OID = 1848 ( interval_pl_time      PGNSP PGUID 14 1 0 0 0 f f f t f i s 2 0 1083 "1186 1083" _null_ _null_ _null_ _null_ _null_ "select $2 + $1" _null_ _null_ _null_ ));
-
-DATA(insert OID = 1850 (  int28eq                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 20" _null_ _null_ _null_ _null_ _null_ int28eq _null_ _null_ _null_ ));
-DATA(insert OID = 1851 (  int28ne                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 20" _null_ _null_ _null_ _null_ _null_ int28ne _null_ _null_ _null_ ));
-DATA(insert OID = 1852 (  int28lt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 20" _null_ _null_ _null_ _null_ _null_ int28lt _null_ _null_ _null_ ));
-DATA(insert OID = 1853 (  int28gt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 20" _null_ _null_ _null_ _null_ _null_ int28gt _null_ _null_ _null_ ));
-DATA(insert OID = 1854 (  int28le                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 20" _null_ _null_ _null_ _null_ _null_ int28le _null_ _null_ _null_ ));
-DATA(insert OID = 1855 (  int28ge                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "21 20" _null_ _null_ _null_ _null_ _null_ int28ge _null_ _null_ _null_ ));
-
-DATA(insert OID = 1856 (  int82eq                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 21" _null_ _null_ _null_ _null_ _null_ int82eq _null_ _null_ _null_ ));
-DATA(insert OID = 1857 (  int82ne                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 21" _null_ _null_ _null_ _null_ _null_ int82ne _null_ _null_ _null_ ));
-DATA(insert OID = 1858 (  int82lt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 21" _null_ _null_ _null_ _null_ _null_ int82lt _null_ _null_ _null_ ));
-DATA(insert OID = 1859 (  int82gt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 21" _null_ _null_ _null_ _null_ _null_ int82gt _null_ _null_ _null_ ));
-DATA(insert OID = 1860 (  int82le                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 21" _null_ _null_ _null_ _null_ _null_ int82le _null_ _null_ _null_ ));
-DATA(insert OID = 1861 (  int82ge                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "20 21" _null_ _null_ _null_ _null_ _null_ int82ge _null_ _null_ _null_ ));
-
-DATA(insert OID = 1892 (  int2and                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 21 "21 21" _null_ _null_ _null_ _null_ _null_ int2and _null_ _null_ _null_ ));
-DATA(insert OID = 1893 (  int2or                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 21 "21 21" _null_ _null_ _null_ _null_ _null_ int2or _null_ _null_ _null_ ));
-DATA(insert OID = 1894 (  int2xor                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 21 "21 21" _null_ _null_ _null_ _null_ _null_ int2xor _null_ _null_ _null_ ));
-DATA(insert OID = 1895 (  int2not                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 21 "21" _null_ _null_ _null_ _null_ _null_ int2not _null_ _null_ _null_ ));
-DATA(insert OID = 1896 (  int2shl                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 21 "21 23" _null_ _null_ _null_ _null_ _null_ int2shl _null_ _null_ _null_ ));
-DATA(insert OID = 1897 (  int2shr                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 21 "21 23" _null_ _null_ _null_ _null_ _null_ int2shr _null_ _null_ _null_ ));
-
-DATA(insert OID = 1898 (  int4and                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 23" _null_ _null_ _null_ _null_ _null_ int4and _null_ _null_ _null_ ));
-DATA(insert OID = 1899 (  int4or                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 23" _null_ _null_ _null_ _null_ _null_ int4or _null_ _null_ _null_ ));
-DATA(insert OID = 1900 (  int4xor                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 23" _null_ _null_ _null_ _null_ _null_ int4xor _null_ _null_ _null_ ));
-DATA(insert OID = 1901 (  int4not                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ int4not _null_ _null_ _null_ ));
-DATA(insert OID = 1902 (  int4shl                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 23" _null_ _null_ _null_ _null_ _null_ int4shl _null_ _null_ _null_ ));
-DATA(insert OID = 1903 (  int4shr                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 23" _null_ _null_ _null_ _null_ _null_ int4shr _null_ _null_ _null_ ));
-
-DATA(insert OID = 1904 (  int8and                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 20" _null_ _null_ _null_ _null_ _null_ int8and _null_ _null_ _null_ ));
-DATA(insert OID = 1905 (  int8or                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 20" _null_ _null_ _null_ _null_ _null_ int8or _null_ _null_ _null_ ));
-DATA(insert OID = 1906 (  int8xor                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 20" _null_ _null_ _null_ _null_ _null_ int8xor _null_ _null_ _null_ ));
-DATA(insert OID = 1907 (  int8not                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "20" _null_ _null_ _null_ _null_ _null_ int8not _null_ _null_ _null_ ));
-DATA(insert OID = 1908 (  int8shl                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 23" _null_ _null_ _null_ _null_ _null_ int8shl _null_ _null_ _null_ ));
-DATA(insert OID = 1909 (  int8shr                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "20 23" _null_ _null_ _null_ _null_ _null_ int8shr _null_ _null_ _null_ ));
-
-DATA(insert OID = 1910 (  int8up                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "20" _null_ _null_ _null_ _null_ _null_ int8up _null_ _null_ _null_ ));
-DATA(insert OID = 1911 (  int2up                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 21 "21" _null_ _null_ _null_ _null_ _null_ int2up _null_ _null_ _null_ ));
-DATA(insert OID = 1912 (  int4up                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ int4up _null_ _null_ _null_ ));
-DATA(insert OID = 1913 (  float4up                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 700 "700" _null_ _null_ _null_ _null_ _null_ float4up _null_ _null_ _null_ ));
-DATA(insert OID = 1914 (  float8up                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ float8up _null_ _null_ _null_ ));
-DATA(insert OID = 1915 (  numeric_uplus    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ numeric_uplus _null_ _null_ _null_ ));
-
-DATA(insert OID = 1922 (  has_table_privilege             PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 25 25" _null_ _null_ _null_ _null_ _null_    has_table_privilege_name_name _null_ _null_ _null_ ));
-DESCR("user privilege on relation by username, rel name");
-DATA(insert OID = 1923 (  has_table_privilege             PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 26 25" _null_ _null_ _null_ _null_ _null_    has_table_privilege_name_id _null_ _null_ _null_ ));
-DESCR("user privilege on relation by username, rel oid");
-DATA(insert OID = 1924 (  has_table_privilege             PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 25 25" _null_ _null_ _null_ _null_ _null_    has_table_privilege_id_name _null_ _null_ _null_ ));
-DESCR("user privilege on relation by user oid, rel name");
-DATA(insert OID = 1925 (  has_table_privilege             PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 26 25" _null_ _null_ _null_ _null_ _null_    has_table_privilege_id_id _null_ _null_ _null_ ));
-DESCR("user privilege on relation by user oid, rel oid");
-DATA(insert OID = 1926 (  has_table_privilege             PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ has_table_privilege_name _null_ _null_ _null_ ));
-DESCR("current user privilege on relation by rel name");
-DATA(insert OID = 1927 (  has_table_privilege             PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "26 25" _null_ _null_ _null_ _null_ _null_ has_table_privilege_id _null_ _null_ _null_ ));
-DESCR("current user privilege on relation by rel oid");
-
-DATA(insert OID = 2181 (  has_sequence_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 25 25" _null_ _null_ _null_ _null_ _null_    has_sequence_privilege_name_name _null_ _null_ _null_ ));
-DESCR("user privilege on sequence by username, seq name");
-DATA(insert OID = 2182 (  has_sequence_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 26 25" _null_ _null_ _null_ _null_ _null_    has_sequence_privilege_name_id _null_ _null_ _null_ ));
-DESCR("user privilege on sequence by username, seq oid");
-DATA(insert OID = 2183 (  has_sequence_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 25 25" _null_ _null_ _null_ _null_ _null_    has_sequence_privilege_id_name _null_ _null_ _null_ ));
-DESCR("user privilege on sequence by user oid, seq name");
-DATA(insert OID = 2184 (  has_sequence_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 26 25" _null_ _null_ _null_ _null_ _null_    has_sequence_privilege_id_id _null_ _null_ _null_ ));
-DESCR("user privilege on sequence by user oid, seq oid");
-DATA(insert OID = 2185 (  has_sequence_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ has_sequence_privilege_name _null_ _null_ _null_ ));
-DESCR("current user privilege on sequence by seq name");
-DATA(insert OID = 2186 (  has_sequence_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "26 25" _null_ _null_ _null_ _null_ _null_ has_sequence_privilege_id _null_ _null_ _null_ ));
-DESCR("current user privilege on sequence by seq oid");
-
-DATA(insert OID = 3012 (  has_column_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 16 "19 25 25 25" _null_ _null_ _null_ _null_ _null_ has_column_privilege_name_name_name _null_ _null_ _null_ ));
-DESCR("user privilege on column by username, rel name, col name");
-DATA(insert OID = 3013 (  has_column_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 16 "19 25 21 25" _null_ _null_ _null_ _null_ _null_ has_column_privilege_name_name_attnum _null_ _null_ _null_ ));
-DESCR("user privilege on column by username, rel name, col attnum");
-DATA(insert OID = 3014 (  has_column_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 16 "19 26 25 25" _null_ _null_ _null_ _null_ _null_ has_column_privilege_name_id_name _null_ _null_ _null_ ));
-DESCR("user privilege on column by username, rel oid, col name");
-DATA(insert OID = 3015 (  has_column_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 16 "19 26 21 25" _null_ _null_ _null_ _null_ _null_ has_column_privilege_name_id_attnum _null_ _null_ _null_ ));
-DESCR("user privilege on column by username, rel oid, col attnum");
-DATA(insert OID = 3016 (  has_column_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 16 "26 25 25 25" _null_ _null_ _null_ _null_ _null_ has_column_privilege_id_name_name _null_ _null_ _null_ ));
-DESCR("user privilege on column by user oid, rel name, col name");
-DATA(insert OID = 3017 (  has_column_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 16 "26 25 21 25" _null_ _null_ _null_ _null_ _null_ has_column_privilege_id_name_attnum _null_ _null_ _null_ ));
-DESCR("user privilege on column by user oid, rel name, col attnum");
-DATA(insert OID = 3018 (  has_column_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 16 "26 26 25 25" _null_ _null_ _null_ _null_ _null_ has_column_privilege_id_id_name _null_ _null_ _null_ ));
-DESCR("user privilege on column by user oid, rel oid, col name");
-DATA(insert OID = 3019 (  has_column_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 16 "26 26 21 25" _null_ _null_ _null_ _null_ _null_ has_column_privilege_id_id_attnum _null_ _null_ _null_ ));
-DESCR("user privilege on column by user oid, rel oid, col attnum");
-DATA(insert OID = 3020 (  has_column_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "25 25 25" _null_ _null_ _null_ _null_ _null_ has_column_privilege_name_name _null_ _null_ _null_ ));
-DESCR("current user privilege on column by rel name, col name");
-DATA(insert OID = 3021 (  has_column_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "25 21 25" _null_ _null_ _null_ _null_ _null_ has_column_privilege_name_attnum _null_ _null_ _null_ ));
-DESCR("current user privilege on column by rel name, col attnum");
-DATA(insert OID = 3022 (  has_column_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 25 25" _null_ _null_ _null_ _null_ _null_ has_column_privilege_id_name _null_ _null_ _null_ ));
-DESCR("current user privilege on column by rel oid, col name");
-DATA(insert OID = 3023 (  has_column_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 21 25" _null_ _null_ _null_ _null_ _null_ has_column_privilege_id_attnum _null_ _null_ _null_ ));
-DESCR("current user privilege on column by rel oid, col attnum");
-
-DATA(insert OID = 3024 (  has_any_column_privilege        PGNSP PGUID 12 10 0 0 0 f f f t f s s 3 0 16 "19 25 25" _null_ _null_ _null_ _null_ _null_ has_any_column_privilege_name_name _null_ _null_ _null_ ));
-DESCR("user privilege on any column by username, rel name");
-DATA(insert OID = 3025 (  has_any_column_privilege        PGNSP PGUID 12 10 0 0 0 f f f t f s s 3 0 16 "19 26 25" _null_ _null_ _null_ _null_ _null_ has_any_column_privilege_name_id _null_ _null_ _null_ ));
-DESCR("user privilege on any column by username, rel oid");
-DATA(insert OID = 3026 (  has_any_column_privilege        PGNSP PGUID 12 10 0 0 0 f f f t f s s 3 0 16 "26 25 25" _null_ _null_ _null_ _null_ _null_ has_any_column_privilege_id_name _null_ _null_ _null_ ));
-DESCR("user privilege on any column by user oid, rel name");
-DATA(insert OID = 3027 (  has_any_column_privilege        PGNSP PGUID 12 10 0 0 0 f f f t f s s 3 0 16 "26 26 25" _null_ _null_ _null_ _null_ _null_ has_any_column_privilege_id_id _null_ _null_ _null_ ));
-DESCR("user privilege on any column by user oid, rel oid");
-DATA(insert OID = 3028 (  has_any_column_privilege        PGNSP PGUID 12 10 0 0 0 f f f t f s s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ has_any_column_privilege_name _null_ _null_ _null_ ));
-DESCR("current user privilege on any column by rel name");
-DATA(insert OID = 3029 (  has_any_column_privilege        PGNSP PGUID 12 10 0 0 0 f f f t f s s 2 0 16 "26 25" _null_ _null_ _null_ _null_ _null_ has_any_column_privilege_id _null_ _null_ _null_ ));
-DESCR("current user privilege on any column by rel oid");
-
-DATA(insert OID = 3355 (  pg_ndistinct_in      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3361 "2275" _null_ _null_ _null_ _null_ _null_ pg_ndistinct_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3356 (  pg_ndistinct_out     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "3361" _null_ _null_ _null_ _null_ _null_ pg_ndistinct_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3357 (  pg_ndistinct_recv PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 3361 "2281" _null_ _null_ _null_ _null_ _null_ pg_ndistinct_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3358 (  pg_ndistinct_send PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 17 "3361" _null_ _null_ _null_ _null_ _null_ pg_ndistinct_send _null_ _null_ _null_ ));
-DESCR("I/O");
-
-DATA(insert OID = 3404 (  pg_dependencies_in   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3402 "2275" _null_ _null_ _null_ _null_ _null_ pg_dependencies_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3405 (  pg_dependencies_out  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "3402" _null_ _null_ _null_ _null_ _null_ pg_dependencies_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3406 (  pg_dependencies_recv PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 3402 "2281" _null_ _null_ _null_ _null_ _null_ pg_dependencies_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3407 (  pg_dependencies_send PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 17 "3402" _null_ _null_ _null_ _null_ _null_ pg_dependencies_send _null_ _null_ _null_ ));
-DESCR("I/O");
-
-DATA(insert OID = 1928 (  pg_stat_get_numscans                 PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_numscans _null_ _null_ _null_ ));
-DESCR("statistics: number of scans done for table/index");
-DATA(insert OID = 1929 (  pg_stat_get_tuples_returned  PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_tuples_returned _null_ _null_ _null_ ));
-DESCR("statistics: number of tuples read by seqscan");
-DATA(insert OID = 1930 (  pg_stat_get_tuples_fetched   PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_tuples_fetched _null_ _null_ _null_ ));
-DESCR("statistics: number of tuples fetched by idxscan");
-DATA(insert OID = 1931 (  pg_stat_get_tuples_inserted  PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_tuples_inserted _null_ _null_ _null_ ));
-DESCR("statistics: number of tuples inserted");
-DATA(insert OID = 1932 (  pg_stat_get_tuples_updated   PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_tuples_updated _null_ _null_ _null_ ));
-DESCR("statistics: number of tuples updated");
-DATA(insert OID = 1933 (  pg_stat_get_tuples_deleted   PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_tuples_deleted _null_ _null_ _null_ ));
-DESCR("statistics: number of tuples deleted");
-DATA(insert OID = 1972 (  pg_stat_get_tuples_hot_updated PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_tuples_hot_updated _null_ _null_ _null_ ));
-DESCR("statistics: number of tuples hot updated");
-DATA(insert OID = 2878 (  pg_stat_get_live_tuples      PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_live_tuples _null_ _null_ _null_ ));
-DESCR("statistics: number of live tuples");
-DATA(insert OID = 2879 (  pg_stat_get_dead_tuples      PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_dead_tuples _null_ _null_ _null_ ));
-DESCR("statistics: number of dead tuples");
-DATA(insert OID = 3177 (  pg_stat_get_mod_since_analyze PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_mod_since_analyze _null_ _null_ _null_ ));
-DESCR("statistics: number of tuples changed since last analyze");
-DATA(insert OID = 1934 (  pg_stat_get_blocks_fetched   PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_blocks_fetched _null_ _null_ _null_ ));
-DESCR("statistics: number of blocks fetched");
-DATA(insert OID = 1935 (  pg_stat_get_blocks_hit               PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_blocks_hit _null_ _null_ _null_ ));
-DESCR("statistics: number of blocks found in cache");
-DATA(insert OID = 2781 (  pg_stat_get_last_vacuum_time PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 1184 "26" _null_ _null_ _null_ _null_ _null_   pg_stat_get_last_vacuum_time _null_ _null_ _null_ ));
-DESCR("statistics: last manual vacuum time for a table");
-DATA(insert OID = 2782 (  pg_stat_get_last_autovacuum_time PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 1184 "26" _null_ _null_ _null_ _null_ _null_       pg_stat_get_last_autovacuum_time _null_ _null_ _null_ ));
-DESCR("statistics: last auto vacuum time for a table");
-DATA(insert OID = 2783 (  pg_stat_get_last_analyze_time PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 1184 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_last_analyze_time _null_ _null_ _null_ ));
-DESCR("statistics: last manual analyze time for a table");
-DATA(insert OID = 2784 (  pg_stat_get_last_autoanalyze_time PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 1184 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_last_autoanalyze_time _null_ _null_ _null_ ));
-DESCR("statistics: last auto analyze time for a table");
-DATA(insert OID = 3054 ( pg_stat_get_vacuum_count PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_vacuum_count _null_ _null_ _null_ ));
-DESCR("statistics: number of manual vacuums for a table");
-DATA(insert OID = 3055 ( pg_stat_get_autovacuum_count PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_autovacuum_count _null_ _null_ _null_ ));
-DESCR("statistics: number of auto vacuums for a table");
-DATA(insert OID = 3056 ( pg_stat_get_analyze_count PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_analyze_count _null_ _null_ _null_ ));
-DESCR("statistics: number of manual analyzes for a table");
-DATA(insert OID = 3057 ( pg_stat_get_autoanalyze_count PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_autoanalyze_count _null_ _null_ _null_ ));
-DESCR("statistics: number of auto analyzes for a table");
-DATA(insert OID = 1936 (  pg_stat_get_backend_idset            PGNSP PGUID 12 1 100 0 0 f f f t t s r 0 0 23 "" _null_ _null_ _null_ _null_ _null_ pg_stat_get_backend_idset _null_ _null_ _null_ ));
-DESCR("statistics: currently active backend IDs");
-DATA(insert OID = 2022 (  pg_stat_get_activity                 PGNSP PGUID 12 1 100 0 0 f f f f t s r 1 0 2249 "23" "{23,26,23,26,25,25,25,25,25,1184,1184,1184,1184,869,25,23,28,28,25,16,25,25,23,16,25}" "{i,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}" "{pid,datid,pid,usesysid,application_name,state,query,wait_event_type,wait_event,xact_start,query_start,backend_start,state_change,client_addr,client_hostname,client_port,backend_xid,backend_xmin,backend_type,ssl,sslversion,sslcipher,sslbits,sslcompression,sslclientdn}" _null_ _null_ pg_stat_get_activity _null_ _null_ _null_ ));
-DESCR("statistics: information about currently active backends");
-DATA(insert OID = 3318 (  pg_stat_get_progress_info                      PGNSP PGUID 12 1 100 0 0 f f f t t s r 1 0 2249 "25" "{25,23,26,26,20,20,20,20,20,20,20,20,20,20}" "{i,o,o,o,o,o,o,o,o,o,o,o,o,o}" "{cmdtype,pid,datid,relid,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10}" _null_ _null_ pg_stat_get_progress_info _null_ _null_ _null_ ));
-DESCR("statistics: information about progress of backends running maintenance command");
-DATA(insert OID = 3099 (  pg_stat_get_wal_senders      PGNSP PGUID 12 1 10 0 0 f f f f t s r 0 0 2249 "" "{23,25,3220,3220,3220,3220,1186,1186,1186,23,25}" "{o,o,o,o,o,o,o,o,o,o,o}" "{pid,state,sent_lsn,write_lsn,flush_lsn,replay_lsn,write_lag,flush_lag,replay_lag,sync_priority,sync_state}" _null_ _null_ pg_stat_get_wal_senders _null_ _null_ _null_ ));
-DESCR("statistics: information about currently active replication");
-DATA(insert OID = 3317 (  pg_stat_get_wal_receiver     PGNSP PGUID 12 1 0 0 0 f f f f f s r 0 0 2249 "" "{23,25,3220,23,3220,23,1184,1184,3220,1184,25,25,23,25}" "{o,o,o,o,o,o,o,o,o,o,o,o,o,o}" "{pid,status,receive_start_lsn,receive_start_tli,received_lsn,received_tli,last_msg_send_time,last_msg_receipt_time,latest_end_lsn,latest_end_time,slot_name,sender_host,sender_port,conninfo}" _null_ _null_ pg_stat_get_wal_receiver _null_ _null_ _null_ ));
-DESCR("statistics: information about WAL receiver");
-DATA(insert OID = 6118 (  pg_stat_get_subscription     PGNSP PGUID 12 1 0 0 0 f f f f f s r 1 0 2249 "26" "{26,26,26,23,3220,1184,1184,3220,1184}" "{i,o,o,o,o,o,o,o,o}" "{subid,subid,relid,pid,received_lsn,last_msg_send_time,last_msg_receipt_time,latest_end_lsn,latest_end_time}" _null_ _null_ pg_stat_get_subscription _null_ _null_ _null_ ));
-DESCR("statistics: information about subscription");
-DATA(insert OID = 2026 (  pg_backend_pid                               PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 23 "" _null_ _null_ _null_ _null_ _null_ pg_backend_pid _null_ _null_ _null_ ));
-DESCR("statistics: current backend PID");
-DATA(insert OID = 1937 (  pg_stat_get_backend_pid              PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ pg_stat_get_backend_pid _null_ _null_ _null_ ));
-DESCR("statistics: PID of backend");
-DATA(insert OID = 1938 (  pg_stat_get_backend_dbid             PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 26 "23" _null_ _null_ _null_ _null_ _null_ pg_stat_get_backend_dbid _null_ _null_ _null_ ));
-DESCR("statistics: database ID of backend");
-DATA(insert OID = 1939 (  pg_stat_get_backend_userid   PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 26 "23" _null_ _null_ _null_ _null_ _null_ pg_stat_get_backend_userid _null_ _null_ _null_ ));
-DESCR("statistics: user ID of backend");
-DATA(insert OID = 1940 (  pg_stat_get_backend_activity PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 25 "23" _null_ _null_ _null_ _null_ _null_ pg_stat_get_backend_activity _null_ _null_ _null_ ));
-DESCR("statistics: current query of backend");
-DATA(insert OID = 2788 (  pg_stat_get_backend_wait_event_type  PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 25 "23" _null_ _null_ _null_ _null_ _null_ pg_stat_get_backend_wait_event_type _null_ _null_ _null_ ));
-DESCR("statistics: wait event type on which backend is currently waiting");
-DATA(insert OID = 2853 (  pg_stat_get_backend_wait_event       PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 25 "23" _null_ _null_ _null_ _null_ _null_ pg_stat_get_backend_wait_event _null_ _null_ _null_ ));
-DESCR("statistics: wait event on which backend is currently waiting");
-DATA(insert OID = 2094 (  pg_stat_get_backend_activity_start PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 1184 "23" _null_ _null_ _null_ _null_ _null_ pg_stat_get_backend_activity_start _null_ _null_ _null_ ));
-DESCR("statistics: start time for current query of backend");
-DATA(insert OID = 2857 (  pg_stat_get_backend_xact_start PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 1184 "23" _null_ _null_ _null_ _null_ _null_ pg_stat_get_backend_xact_start _null_ _null_ _null_ ));
-DESCR("statistics: start time for backend's current transaction");
-DATA(insert OID = 1391 ( pg_stat_get_backend_start PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 1184 "23" _null_ _null_ _null_ _null_ _null_ pg_stat_get_backend_start _null_ _null_ _null_ ));
-DESCR("statistics: start time for current backend session");
-DATA(insert OID = 1392 ( pg_stat_get_backend_client_addr PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 869 "23" _null_ _null_ _null_ _null_ _null_ pg_stat_get_backend_client_addr _null_ _null_ _null_ ));
-DESCR("statistics: address of client connected to backend");
-DATA(insert OID = 1393 ( pg_stat_get_backend_client_port PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ pg_stat_get_backend_client_port _null_ _null_ _null_ ));
-DESCR("statistics: port number of client connected to backend");
-DATA(insert OID = 1941 (  pg_stat_get_db_numbackends   PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 23 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_numbackends _null_ _null_ _null_ ));
-DESCR("statistics: number of backends in database");
-DATA(insert OID = 1942 (  pg_stat_get_db_xact_commit   PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_xact_commit _null_ _null_ _null_ ));
-DESCR("statistics: transactions committed");
-DATA(insert OID = 1943 (  pg_stat_get_db_xact_rollback PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_xact_rollback _null_ _null_ _null_ ));
-DESCR("statistics: transactions rolled back");
-DATA(insert OID = 1944 (  pg_stat_get_db_blocks_fetched PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_blocks_fetched _null_ _null_ _null_ ));
-DESCR("statistics: blocks fetched for database");
-DATA(insert OID = 1945 (  pg_stat_get_db_blocks_hit            PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_blocks_hit _null_ _null_ _null_ ));
-DESCR("statistics: blocks found in cache for database");
-DATA(insert OID = 2758 (  pg_stat_get_db_tuples_returned PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_tuples_returned _null_ _null_ _null_ ));
-DESCR("statistics: tuples returned for database");
-DATA(insert OID = 2759 (  pg_stat_get_db_tuples_fetched PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_tuples_fetched _null_ _null_ _null_ ));
-DESCR("statistics: tuples fetched for database");
-DATA(insert OID = 2760 (  pg_stat_get_db_tuples_inserted PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_tuples_inserted _null_ _null_ _null_ ));
-DESCR("statistics: tuples inserted in database");
-DATA(insert OID = 2761 (  pg_stat_get_db_tuples_updated PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_tuples_updated _null_ _null_ _null_ ));
-DESCR("statistics: tuples updated in database");
-DATA(insert OID = 2762 (  pg_stat_get_db_tuples_deleted PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_tuples_deleted _null_ _null_ _null_ ));
-DESCR("statistics: tuples deleted in database");
-DATA(insert OID = 3065 (  pg_stat_get_db_conflict_tablespace PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_conflict_tablespace _null_ _null_ _null_ ));
-DESCR("statistics: recovery conflicts in database caused by drop tablespace");
-DATA(insert OID = 3066 (  pg_stat_get_db_conflict_lock PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_conflict_lock _null_ _null_ _null_ ));
-DESCR("statistics: recovery conflicts in database caused by relation lock");
-DATA(insert OID = 3067 (  pg_stat_get_db_conflict_snapshot PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_conflict_snapshot _null_ _null_ _null_ ));
-DESCR("statistics: recovery conflicts in database caused by snapshot expiry");
-DATA(insert OID = 3068 (  pg_stat_get_db_conflict_bufferpin PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_conflict_bufferpin _null_ _null_ _null_ ));
-DESCR("statistics: recovery conflicts in database caused by shared buffer pin");
-DATA(insert OID = 3069 (  pg_stat_get_db_conflict_startup_deadlock PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_conflict_startup_deadlock _null_ _null_ _null_ ));
-DESCR("statistics: recovery conflicts in database caused by buffer deadlock");
-DATA(insert OID = 3070 (  pg_stat_get_db_conflict_all PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_conflict_all _null_ _null_ _null_ ));
-DESCR("statistics: recovery conflicts in database");
-DATA(insert OID = 3152 (  pg_stat_get_db_deadlocks PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_deadlocks _null_ _null_ _null_ ));
-DESCR("statistics: deadlocks detected in database");
-DATA(insert OID = 3074 (  pg_stat_get_db_stat_reset_time PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 1184 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_stat_reset_time _null_ _null_ _null_ ));
-DESCR("statistics: last reset for a database");
-DATA(insert OID = 3150 (  pg_stat_get_db_temp_files PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_temp_files _null_ _null_ _null_ ));
-DESCR("statistics: number of temporary files written");
-DATA(insert OID = 3151 (  pg_stat_get_db_temp_bytes PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_temp_bytes _null_ _null_ _null_ ));
-DESCR("statistics: number of bytes in temporary files written");
-DATA(insert OID = 2844 (  pg_stat_get_db_blk_read_time PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 701 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_blk_read_time _null_ _null_ _null_ ));
-DESCR("statistics: block read time, in milliseconds");
-DATA(insert OID = 2845 (  pg_stat_get_db_blk_write_time PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 701 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_db_blk_write_time _null_ _null_ _null_ ));
-DESCR("statistics: block write time, in milliseconds");
-DATA(insert OID = 3195 (  pg_stat_get_archiver         PGNSP PGUID 12 1 0 0 0 f f f f f s r 0 0 2249 "" "{20,25,1184,20,25,1184,1184}" "{o,o,o,o,o,o,o}" "{archived_count,last_archived_wal,last_archived_time,failed_count,last_failed_wal,last_failed_time,stats_reset}" _null_ _null_ pg_stat_get_archiver _null_ _null_ _null_ ));
-DESCR("statistics: information about WAL archiver");
-DATA(insert OID = 2769 ( pg_stat_get_bgwriter_timed_checkpoints PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 20 "" _null_ _null_ _null_ _null_ _null_ pg_stat_get_bgwriter_timed_checkpoints _null_ _null_ _null_ ));
-DESCR("statistics: number of timed checkpoints started by the bgwriter");
-DATA(insert OID = 2770 ( pg_stat_get_bgwriter_requested_checkpoints PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 20 "" _null_ _null_ _null_ _null_ _null_ pg_stat_get_bgwriter_requested_checkpoints _null_ _null_ _null_ ));
-DESCR("statistics: number of backend requested checkpoints started by the bgwriter");
-DATA(insert OID = 2771 ( pg_stat_get_bgwriter_buf_written_checkpoints PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 20 "" _null_ _null_ _null_ _null_ _null_ pg_stat_get_bgwriter_buf_written_checkpoints _null_ _null_ _null_ ));
-DESCR("statistics: number of buffers written by the bgwriter during checkpoints");
-DATA(insert OID = 2772 ( pg_stat_get_bgwriter_buf_written_clean PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 20 "" _null_ _null_ _null_ _null_ _null_ pg_stat_get_bgwriter_buf_written_clean _null_ _null_ _null_ ));
-DESCR("statistics: number of buffers written by the bgwriter for cleaning dirty buffers");
-DATA(insert OID = 2773 ( pg_stat_get_bgwriter_maxwritten_clean PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 20 "" _null_ _null_ _null_ _null_ _null_ pg_stat_get_bgwriter_maxwritten_clean _null_ _null_ _null_ ));
-DESCR("statistics: number of times the bgwriter stopped processing when it had written too many buffers while cleaning");
-DATA(insert OID = 3075 ( pg_stat_get_bgwriter_stat_reset_time PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 1184 "" _null_ _null_ _null_ _null_ _null_ pg_stat_get_bgwriter_stat_reset_time _null_ _null_ _null_ ));
-DESCR("statistics: last reset for the bgwriter");
-DATA(insert OID = 3160 ( pg_stat_get_checkpoint_write_time PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 701 "" _null_ _null_ _null_ _null_ _null_ pg_stat_get_checkpoint_write_time _null_ _null_ _null_ ));
-DESCR("statistics: checkpoint time spent writing buffers to disk, in milliseconds");
-DATA(insert OID = 3161 ( pg_stat_get_checkpoint_sync_time PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 701 "" _null_ _null_ _null_ _null_ _null_ pg_stat_get_checkpoint_sync_time _null_ _null_ _null_ ));
-DESCR("statistics: checkpoint time spent synchronizing buffers to disk, in milliseconds");
-DATA(insert OID = 2775 ( pg_stat_get_buf_written_backend PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 20 "" _null_ _null_ _null_ _null_ _null_ pg_stat_get_buf_written_backend _null_ _null_ _null_ ));
-DESCR("statistics: number of buffers written by backends");
-DATA(insert OID = 3063 ( pg_stat_get_buf_fsync_backend PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 20 "" _null_ _null_ _null_ _null_ _null_ pg_stat_get_buf_fsync_backend _null_ _null_ _null_ ));
-DESCR("statistics: number of backend buffer writes that did their own fsync");
-DATA(insert OID = 2859 ( pg_stat_get_buf_alloc                 PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 20 "" _null_ _null_ _null_ _null_ _null_ pg_stat_get_buf_alloc _null_ _null_ _null_ ));
-DESCR("statistics: number of buffer allocations");
-
-DATA(insert OID = 2978 (  pg_stat_get_function_calls           PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_function_calls _null_ _null_ _null_ ));
-DESCR("statistics: number of function calls");
-DATA(insert OID = 2979 (  pg_stat_get_function_total_time      PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 701 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_function_total_time _null_ _null_ _null_ ));
-DESCR("statistics: total execution time of function, in milliseconds");
-DATA(insert OID = 2980 (  pg_stat_get_function_self_time       PGNSP PGUID 12 1 0 0 0 f f f t f s r 1 0 701 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_function_self_time _null_ _null_ _null_ ));
-DESCR("statistics: self execution time of function, in milliseconds");
-
-DATA(insert OID = 3037 (  pg_stat_get_xact_numscans                            PGNSP PGUID 12 1 0 0 0 f f f t f v r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_xact_numscans _null_ _null_ _null_ ));
-DESCR("statistics: number of scans done for table/index in current transaction");
-DATA(insert OID = 3038 (  pg_stat_get_xact_tuples_returned             PGNSP PGUID 12 1 0 0 0 f f f t f v r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_xact_tuples_returned _null_ _null_ _null_ ));
-DESCR("statistics: number of tuples read by seqscan in current transaction");
-DATA(insert OID = 3039 (  pg_stat_get_xact_tuples_fetched              PGNSP PGUID 12 1 0 0 0 f f f t f v r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_xact_tuples_fetched _null_ _null_ _null_ ));
-DESCR("statistics: number of tuples fetched by idxscan in current transaction");
-DATA(insert OID = 3040 (  pg_stat_get_xact_tuples_inserted             PGNSP PGUID 12 1 0 0 0 f f f t f v r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_xact_tuples_inserted _null_ _null_ _null_ ));
-DESCR("statistics: number of tuples inserted in current transaction");
-DATA(insert OID = 3041 (  pg_stat_get_xact_tuples_updated              PGNSP PGUID 12 1 0 0 0 f f f t f v r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_xact_tuples_updated _null_ _null_ _null_ ));
-DESCR("statistics: number of tuples updated in current transaction");
-DATA(insert OID = 3042 (  pg_stat_get_xact_tuples_deleted              PGNSP PGUID 12 1 0 0 0 f f f t f v r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_xact_tuples_deleted _null_ _null_ _null_ ));
-DESCR("statistics: number of tuples deleted in current transaction");
-DATA(insert OID = 3043 (  pg_stat_get_xact_tuples_hot_updated  PGNSP PGUID 12 1 0 0 0 f f f t f v r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_xact_tuples_hot_updated _null_ _null_ _null_ ));
-DESCR("statistics: number of tuples hot updated in current transaction");
-DATA(insert OID = 3044 (  pg_stat_get_xact_blocks_fetched              PGNSP PGUID 12 1 0 0 0 f f f t f v r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_xact_blocks_fetched _null_ _null_ _null_ ));
-DESCR("statistics: number of blocks fetched in current transaction");
-DATA(insert OID = 3045 (  pg_stat_get_xact_blocks_hit                  PGNSP PGUID 12 1 0 0 0 f f f t f v r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_xact_blocks_hit _null_ _null_ _null_ ));
-DESCR("statistics: number of blocks found in cache in current transaction");
-DATA(insert OID = 3046 (  pg_stat_get_xact_function_calls              PGNSP PGUID 12 1 0 0 0 f f f t f v r 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_xact_function_calls _null_ _null_ _null_ ));
-DESCR("statistics: number of function calls in current transaction");
-DATA(insert OID = 3047 (  pg_stat_get_xact_function_total_time PGNSP PGUID 12 1 0 0 0 f f f t f v r 1 0 701 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_xact_function_total_time _null_ _null_ _null_ ));
-DESCR("statistics: total execution time of function in current transaction, in milliseconds");
-DATA(insert OID = 3048 (  pg_stat_get_xact_function_self_time  PGNSP PGUID 12 1 0 0 0 f f f t f v r 1 0 701 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_get_xact_function_self_time _null_ _null_ _null_ ));
-DESCR("statistics: self execution time of function in current transaction, in milliseconds");
-
-DATA(insert OID = 3788 (  pg_stat_get_snapshot_timestamp PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 1184 "" _null_ _null_ _null_ _null_ _null_   pg_stat_get_snapshot_timestamp _null_ _null_ _null_ ));
-DESCR("statistics: timestamp of the current statistics snapshot");
-DATA(insert OID = 2230 (  pg_stat_clear_snapshot               PGNSP PGUID 12 1 0 0 0 f f f f f v r 0 0 2278 "" _null_ _null_ _null_ _null_ _null_ pg_stat_clear_snapshot _null_ _null_ _null_ ));
-DESCR("statistics: discard current transaction's statistics snapshot");
-DATA(insert OID = 2274 (  pg_stat_reset                                        PGNSP PGUID 12 1 0 0 0 f f f f f v s 0 0 2278 "" _null_ _null_ _null_ _null_ _null_ pg_stat_reset _null_ _null_ _null_ ));
-DESCR("statistics: reset collected statistics for current database");
-DATA(insert OID = 3775 (  pg_stat_reset_shared                 PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 2278 "25" _null_ _null_ _null_ _null_ _null_ pg_stat_reset_shared _null_ _null_ _null_ ));
-DESCR("statistics: reset collected statistics shared across the cluster");
-DATA(insert OID = 3776 (  pg_stat_reset_single_table_counters  PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 2278 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_reset_single_table_counters _null_ _null_ _null_ ));
-DESCR("statistics: reset collected statistics for a single table or index in the current database");
-DATA(insert OID = 3777 (  pg_stat_reset_single_function_counters       PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 2278 "26" _null_ _null_ _null_ _null_ _null_ pg_stat_reset_single_function_counters _null_ _null_ _null_ ));
-DESCR("statistics: reset collected statistics for a single function in the current database");
-
-DATA(insert OID = 3163 (  pg_trigger_depth                             PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 23 "" _null_ _null_ _null_ _null_ _null_ pg_trigger_depth _null_ _null_ _null_ ));
-DESCR("current trigger depth");
-
-DATA(insert OID = 3778 ( pg_tablespace_location PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 25 "26" _null_ _null_ _null_ _null_ _null_ pg_tablespace_location _null_ _null_ _null_ ));
-DESCR("tablespace location");
-
-DATA(insert OID = 1946 (  encode                                               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25 "17 25" _null_ _null_ _null_ _null_ _null_ binary_encode _null_ _null_ _null_ ));
-DESCR("convert bytea value into some ascii-only text string");
-DATA(insert OID = 1947 (  decode                                               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 17 "25 25" _null_ _null_ _null_ _null_ _null_ binary_decode _null_ _null_ _null_ ));
-DESCR("convert ascii-encoded text string into bytea value");
-
-DATA(insert OID = 1948 (  byteaeq                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "17 17" _null_ _null_ _null_ _null_ _null_ byteaeq _null_ _null_ _null_ ));
-DATA(insert OID = 1949 (  bytealt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "17 17" _null_ _null_ _null_ _null_ _null_ bytealt _null_ _null_ _null_ ));
-DATA(insert OID = 1950 (  byteale                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "17 17" _null_ _null_ _null_ _null_ _null_ byteale _null_ _null_ _null_ ));
-DATA(insert OID = 1951 (  byteagt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "17 17" _null_ _null_ _null_ _null_ _null_ byteagt _null_ _null_ _null_ ));
-DATA(insert OID = 1952 (  byteage                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "17 17" _null_ _null_ _null_ _null_ _null_ byteage _null_ _null_ _null_ ));
-DATA(insert OID = 1953 (  byteane                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "17 17" _null_ _null_ _null_ _null_ _null_ byteane _null_ _null_ _null_ ));
-DATA(insert OID = 1954 (  byteacmp                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "17 17" _null_ _null_ _null_ _null_ _null_ byteacmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3331 (  bytea_sortsupport PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ bytea_sortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-
-DATA(insert OID = 3917 (  timestamp_transform PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ timestamp_transform _null_ _null_ _null_ ));
-DESCR("transform a timestamp length coercion");
-DATA(insert OID = 3944 (  time_transform   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ time_transform _null_ _null_ _null_ ));
-DESCR("transform a time length coercion");
-
-DATA(insert OID = 1961 (  timestamp               PGNSP PGUID 12 1 0 0 timestamp_transform f f f t f i s 2 0 1114 "1114 23" _null_ _null_ _null_ _null_ _null_ timestamp_scale _null_ _null_ _null_ ));
-DESCR("adjust timestamp precision");
-
-DATA(insert OID = 1965 (  oidlarger               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 26 "26 26" _null_ _null_ _null_ _null_ _null_ oidlarger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 1966 (  oidsmaller      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 26 "26 26" _null_ _null_ _null_ _null_ _null_ oidsmaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-
-DATA(insert OID = 1967 (  timestamptz     PGNSP PGUID 12 1 0 0 timestamp_transform f f f t f i s 2 0 1184 "1184 23" _null_ _null_ _null_ _null_ _null_ timestamptz_scale _null_ _null_ _null_ ));
-DESCR("adjust timestamptz precision");
-DATA(insert OID = 1968 (  time                    PGNSP PGUID 12 1 0 0 time_transform f f f t f i s 2 0 1083 "1083 23" _null_ _null_ _null_ _null_ _null_ time_scale _null_ _null_ _null_ ));
-DESCR("adjust time precision");
-DATA(insert OID = 1969 (  timetz                  PGNSP PGUID 12 1 0 0 time_transform f f f t f i s 2 0 1266 "1266 23" _null_ _null_ _null_ _null_ _null_ timetz_scale _null_ _null_ _null_ ));
-DESCR("adjust time with time zone precision");
-
-DATA(insert OID = 2003 (  textanycat      PGNSP PGUID 14 1 0 0 0 f f f t f s s 2 0 25 "25 2776" _null_ _null_ _null_ _null_ _null_ "select $1 || $2::pg_catalog.text" _null_ _null_ _null_ ));
-DATA(insert OID = 2004 (  anytextcat      PGNSP PGUID 14 1 0 0 0 f f f t f s s 2 0 25 "2776 25" _null_ _null_ _null_ _null_ _null_ "select $1::pg_catalog.text || $2" _null_ _null_ _null_ ));
-
-DATA(insert OID = 2005 (  bytealike               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "17 17" _null_ _null_ _null_ _null_ _null_ bytealike _null_ _null_ _null_ ));
-DATA(insert OID = 2006 (  byteanlike      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "17 17" _null_ _null_ _null_ _null_ _null_ byteanlike _null_ _null_ _null_ ));
-DATA(insert OID = 2007 (  like                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "17 17" _null_ _null_ _null_ _null_ _null_ bytealike _null_ _null_ _null_ ));
-DESCR("matches LIKE expression");
-DATA(insert OID = 2008 (  notlike                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "17 17" _null_ _null_ _null_ _null_ _null_ byteanlike _null_ _null_ _null_ ));
-DESCR("does not match LIKE expression");
-DATA(insert OID = 2009 (  like_escape     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 17 "17 17" _null_ _null_ _null_ _null_ _null_ like_escape_bytea _null_ _null_ _null_ ));
-DESCR("convert LIKE pattern to use backslash escapes");
-DATA(insert OID = 2010 (  length                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "17" _null_ _null_ _null_ _null_ _null_ byteaoctetlen _null_ _null_ _null_ ));
-DESCR("octet length");
-DATA(insert OID = 2011 (  byteacat                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 17 "17 17" _null_ _null_ _null_ _null_ _null_ byteacat _null_ _null_ _null_ ));
-DATA(insert OID = 2012 (  substring               PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 17 "17 23 23" _null_ _null_ _null_ _null_ _null_    bytea_substr _null_ _null_ _null_ ));
-DESCR("extract portion of string");
-DATA(insert OID = 2013 (  substring               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 17 "17 23" _null_ _null_ _null_ _null_ _null_ bytea_substr_no_len _null_ _null_ _null_ ));
-DESCR("extract portion of string");
-DATA(insert OID = 2085 (  substr                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 17 "17 23 23" _null_ _null_ _null_ _null_ _null_    bytea_substr _null_ _null_ _null_ ));
-DESCR("extract portion of string");
-DATA(insert OID = 2086 (  substr                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 17 "17 23" _null_ _null_ _null_ _null_ _null_ bytea_substr_no_len _null_ _null_ _null_ ));
-DESCR("extract portion of string");
-DATA(insert OID = 2014 (  position                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "17 17" _null_ _null_ _null_ _null_ _null_ byteapos _null_ _null_ _null_ ));
-DESCR("position of substring");
-DATA(insert OID = 2015 (  btrim                           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 17 "17 17" _null_ _null_ _null_ _null_ _null_ byteatrim _null_ _null_ _null_ ));
-DESCR("trim both ends of string");
-
-DATA(insert OID = 2019 (  time                         PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 1083 "1184" _null_ _null_ _null_ _null_ _null_ timestamptz_time _null_ _null_ _null_ ));
-DESCR("convert timestamp with time zone to time");
-DATA(insert OID = 2020 (  date_trunc           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1114 "25 1114" _null_ _null_ _null_ _null_ _null_ timestamp_trunc _null_ _null_ _null_ ));
-DESCR("truncate timestamp to specified units");
-DATA(insert OID = 2021 (  date_part                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "25 1114" _null_ _null_ _null_ _null_ _null_ timestamp_part _null_ _null_ _null_ ));
-DESCR("extract field from timestamp");
-DATA(insert OID = 2023 (  timestamp                    PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 1114 "702" _null_ _null_ _null_ _null_ _null_ abstime_timestamp _null_ _null_ _null_ ));
-DESCR("convert abstime to timestamp");
-DATA(insert OID = 2024 (  timestamp                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1114 "1082" _null_ _null_ _null_ _null_ _null_ date_timestamp _null_ _null_ _null_ ));
-DESCR("convert date to timestamp");
-DATA(insert OID = 2025 (  timestamp                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1114 "1082 1083" _null_ _null_ _null_ _null_ _null_    datetime_timestamp _null_ _null_ _null_ ));
-DESCR("convert date and time to timestamp");
-DATA(insert OID = 2027 (  timestamp                    PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 1114 "1184" _null_ _null_ _null_ _null_ _null_ timestamptz_timestamp _null_ _null_ _null_ ));
-DESCR("convert timestamp with time zone to timestamp");
-DATA(insert OID = 2028 (  timestamptz          PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 1184 "1114" _null_ _null_ _null_ _null_ _null_ timestamp_timestamptz _null_ _null_ _null_ ));
-DESCR("convert timestamp to timestamp with time zone");
-DATA(insert OID = 2029 (  date                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1082 "1114" _null_ _null_ _null_ _null_ _null_ timestamp_date _null_ _null_ _null_ ));
-DESCR("convert timestamp to date");
-DATA(insert OID = 2030 (  abstime                      PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 702 "1114" _null_ _null_ _null_ _null_ _null_ timestamp_abstime _null_ _null_ _null_ ));
-DESCR("convert timestamp to abstime");
-DATA(insert OID = 2031 (  timestamp_mi         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1186 "1114 1114" _null_ _null_ _null_ _null_ _null_    timestamp_mi _null_ _null_ _null_ ));
-DATA(insert OID = 2032 (  timestamp_pl_interval PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1114 "1114 1186" _null_ _null_ _null_ _null_ _null_   timestamp_pl_interval _null_ _null_ _null_ ));
-DATA(insert OID = 2033 (  timestamp_mi_interval PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1114 "1114 1186" _null_ _null_ _null_ _null_ _null_   timestamp_mi_interval _null_ _null_ _null_ ));
-DATA(insert OID = 2035 (  timestamp_smaller PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1114 "1114 1114" _null_ _null_ _null_ _null_ _null_       timestamp_smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-DATA(insert OID = 2036 (  timestamp_larger     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1114 "1114 1114" _null_ _null_ _null_ _null_ _null_    timestamp_larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 2037 (  timezone                     PGNSP PGUID 12 1 0 0 0 f f f t f v s 2 0 1266 "25 1266" _null_ _null_ _null_ _null_ _null_ timetz_zone _null_ _null_ _null_ ));
-DESCR("adjust time with time zone to new zone");
-DATA(insert OID = 2038 (  timezone                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1266 "1186 1266" _null_ _null_ _null_ _null_ _null_    timetz_izone _null_ _null_ _null_ ));
-DESCR("adjust time with time zone to new zone");
-DATA(insert OID = 2039 (  timestamp_hash       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "1114" _null_ _null_ _null_ _null_ _null_ timestamp_hash _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 3411 (  timestamp_hash_extended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "1114 20" _null_ _null_ _null_ _null_ _null_ timestamp_hash_extended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 2041 ( overlaps                      PGNSP PGUID 12 1 0 0 0 f f f f f i s 4 0 16 "1114 1114 1114 1114" _null_ _null_ _null_ _null_ _null_    overlaps_timestamp _null_ _null_ _null_ ));
-DESCR("intervals overlap?");
-DATA(insert OID = 2042 ( overlaps                      PGNSP PGUID 14 1 0 0 0 f f f f f i s 4 0 16 "1114 1186 1114 1186" _null_ _null_ _null_ _null_ _null_ "select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))" _null_ _null_ _null_ ));
-DESCR("intervals overlap?");
-DATA(insert OID = 2043 ( overlaps                      PGNSP PGUID 14 1 0 0 0 f f f f f i s 4 0 16 "1114 1114 1114 1186" _null_ _null_ _null_ _null_ _null_ "select ($1, $2) overlaps ($3, ($3 + $4))" _null_ _null_ _null_ ));
-DESCR("intervals overlap?");
-DATA(insert OID = 2044 ( overlaps                      PGNSP PGUID 14 1 0 0 0 f f f f f i s 4 0 16 "1114 1186 1114 1114" _null_ _null_ _null_ _null_ _null_ "select ($1, ($1 + $2)) overlaps ($3, $4)" _null_ _null_ _null_ ));
-DESCR("intervals overlap?");
-DATA(insert OID = 2045 (  timestamp_cmp                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "1114 1114" _null_ _null_ _null_ _null_ _null_ timestamp_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3137 (  timestamp_sortsupport PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ timestamp_sortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-
-DATA(insert OID = 4134 (  in_range                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "1114 1114 1186 16 16" _null_ _null_ _null_ _null_ _null_ in_range_timestamp_interval _null_ _null_ _null_ ));
-DESCR("window RANGE support");
-DATA(insert OID = 4135 (  in_range                     PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 16 "1184 1184 1186 16 16" _null_ _null_ _null_ _null_ _null_ in_range_timestamptz_interval _null_ _null_ _null_ ));
-DESCR("window RANGE support");
-DATA(insert OID = 4136 (  in_range                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "1186 1186 1186 16 16" _null_ _null_ _null_ _null_ _null_ in_range_interval_interval _null_ _null_ _null_ ));
-DESCR("window RANGE support");
-DATA(insert OID = 4137 (  in_range                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "1083 1083 1186 16 16" _null_ _null_ _null_ _null_ _null_ in_range_time_interval _null_ _null_ _null_ ));
-DESCR("window RANGE support");
-DATA(insert OID = 4138 (  in_range                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "1266 1266 1186 16 16" _null_ _null_ _null_ _null_ _null_ in_range_timetz_interval _null_ _null_ _null_ ));
-DESCR("window RANGE support");
-
-DATA(insert OID = 2046 (  time                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1083 "1266" _null_ _null_ _null_ _null_ _null_ timetz_time _null_ _null_ _null_ ));
-DESCR("convert time with time zone to time");
-DATA(insert OID = 2047 (  timetz                       PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 1266 "1083" _null_ _null_ _null_ _null_ _null_ time_timetz _null_ _null_ _null_ ));
-DESCR("convert time to time with time zone");
-DATA(insert OID = 2048 (  isfinite                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "1114" _null_ _null_ _null_ _null_ _null_ timestamp_finite _null_ _null_ _null_ ));
-DESCR("finite timestamp?");
-DATA(insert OID = 2049 ( to_char                       PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "1114 25" _null_ _null_ _null_ _null_  _null_ timestamp_to_char _null_ _null_ _null_ ));
-DESCR("format timestamp to text");
-DATA(insert OID = 2052 (  timestamp_eq         PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1114 1114" _null_ _null_ _null_ _null_ _null_ timestamp_eq _null_ _null_ _null_ ));
-DATA(insert OID = 2053 (  timestamp_ne         PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1114 1114" _null_ _null_ _null_ _null_ _null_ timestamp_ne _null_ _null_ _null_ ));
-DATA(insert OID = 2054 (  timestamp_lt         PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1114 1114" _null_ _null_ _null_ _null_ _null_ timestamp_lt _null_ _null_ _null_ ));
-DATA(insert OID = 2055 (  timestamp_le         PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1114 1114" _null_ _null_ _null_ _null_ _null_ timestamp_le _null_ _null_ _null_ ));
-DATA(insert OID = 2056 (  timestamp_ge         PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1114 1114" _null_ _null_ _null_ _null_ _null_ timestamp_ge _null_ _null_ _null_ ));
-DATA(insert OID = 2057 (  timestamp_gt         PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "1114 1114" _null_ _null_ _null_ _null_ _null_ timestamp_gt _null_ _null_ _null_ ));
-DATA(insert OID = 2058 (  age                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1186 "1114 1114" _null_ _null_ _null_ _null_ _null_    timestamp_age _null_ _null_ _null_ ));
-DESCR("date difference preserving months and years");
-DATA(insert OID = 2059 (  age                          PGNSP PGUID 14 1 0 0 0 f f f t f s s 1 0 1186 "1114" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.age(cast(current_date as timestamp without time zone), $1)" _null_ _null_ _null_ ));
-DESCR("date difference from today preserving months and years");
-
-DATA(insert OID = 2069 (  timezone                     PGNSP PGUID 12 1 0 0 timestamp_zone_transform f f f t f i s 2 0 1184 "25 1114" _null_ _null_ _null_ _null_ _null_ timestamp_zone _null_ _null_ _null_ ));
-DESCR("adjust timestamp to new time zone");
-DATA(insert OID = 2070 (  timezone                     PGNSP PGUID 12 1 0 0 timestamp_izone_transform f f f t f i s 2 0 1184 "1186 1114" _null_ _null_ _null_ _null_ _null_    timestamp_izone _null_ _null_ _null_ ));
-DESCR("adjust timestamp to new time zone");
-DATA(insert OID = 2071 (  date_pl_interval     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1114 "1082 1186" _null_ _null_ _null_ _null_ _null_    date_pl_interval _null_ _null_ _null_ ));
-DATA(insert OID = 2072 (  date_mi_interval     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1114 "1082 1186" _null_ _null_ _null_ _null_ _null_    date_mi_interval _null_ _null_ _null_ ));
-
-DATA(insert OID = 2073 (  substring                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25 "25 25" _null_ _null_ _null_ _null_ _null_ textregexsubstr _null_ _null_ _null_ ));
-DESCR("extract text matching regular expression");
-DATA(insert OID = 2074 (  substring                    PGNSP PGUID 14 1 0 0 0 f f f t f i s 3 0 25 "25 25 25" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.substring($1, pg_catalog.similar_escape($2, $3))" _null_ _null_ _null_ ));
-DESCR("extract text matching SQL99 regular expression");
-
-DATA(insert OID = 2075 (  bit                          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1560 "20 23" _null_ _null_ _null_ _null_ _null_        bitfromint8 _null_ _null_ _null_ ));
-DESCR("convert int8 to bitstring");
-DATA(insert OID = 2076 (  int8                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "1560" _null_ _null_ _null_ _null_ _null_ bittoint8 _null_ _null_ _null_ ));
-DESCR("convert bitstring to int8");
-
-DATA(insert OID = 2077 (  current_setting      PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ show_config_by_name _null_ _null_ _null_ ));
-DESCR("SHOW X as a function");
-DATA(insert OID = 3294 (  current_setting      PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "25 16" _null_ _null_ _null_ _null_ _null_ show_config_by_name_missing_ok _null_ _null_ _null_ ));
-DESCR("SHOW X as a function, optionally no error for missing variable");
-DATA(insert OID = 2078 (  set_config           PGNSP PGUID 12 1 0 0 0 f f f f f v u 3 0 25 "25 25 16" _null_ _null_ _null_ _null_ _null_ set_config_by_name _null_ _null_ _null_ ));
-DESCR("SET X as a function");
-DATA(insert OID = 2084 (  pg_show_all_settings PGNSP PGUID 12 1 1000 0 0 f f f t t s s 0 0 2249 "" "{25,25,25,25,25,25,25,25,25,25,25,1009,25,25,25,23,16}" "{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}" "{name,setting,unit,category,short_desc,extra_desc,context,vartype,source,min_val,max_val,enumvals,boot_val,reset_val,sourcefile,sourceline,pending_restart}" _null_ _null_ show_all_settings _null_ _null_ _null_ ));
-DESCR("SHOW ALL as a function");
-DATA(insert OID = 3329 (  pg_show_all_file_settings PGNSP PGUID 12 1 1000 0 0 f f f t t v s 0 0 2249 "" "{25,23,23,25,25,16,25}" "{o,o,o,o,o,o,o}" "{sourcefile,sourceline,seqno,name,setting,applied,error}" _null_ _null_ show_all_file_settings _null_ _null_ _null_ ));
-DESCR("show config file settings");
-DATA(insert OID = 3401 (  pg_hba_file_rules PGNSP PGUID 12 1 1000 0 0 f f f t t v s 0 0 2249 "" "{23,25,1009,1009,25,25,25,1009,25}" "{o,o,o,o,o,o,o,o,o}" "{line_number,type,database,user_name,address,netmask,auth_method,options,error}" _null_ _null_ pg_hba_file_rules _null_ _null_ _null_ ));
-DESCR("show pg_hba.conf rules");
-DATA(insert OID = 1371 (  pg_lock_status   PGNSP PGUID 12 1 1000 0 0 f f f t t v s 0 0 2249 "" "{25,26,26,23,21,25,28,26,26,21,25,23,25,16,16}" "{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}" "{locktype,database,relation,page,tuple,virtualxid,transactionid,classid,objid,objsubid,virtualtransaction,pid,mode,granted,fastpath}" _null_ _null_ pg_lock_status _null_ _null_ _null_ ));
-DESCR("view system lock information");
-DATA(insert OID = 2561 (  pg_blocking_pids PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 1007 "23" _null_ _null_ _null_ _null_ _null_ pg_blocking_pids _null_ _null_ _null_ ));
-DESCR("get array of PIDs of sessions blocking specified backend PID from acquiring a heavyweight lock");
-DATA(insert OID = 3376 (  pg_safe_snapshot_blocking_pids PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 1007 "23" _null_ _null_ _null_ _null_ _null_ pg_safe_snapshot_blocking_pids _null_ _null_ _null_ ));
-DESCR("get array of PIDs of sessions blocking specified backend PID from acquiring a safe snapshot");
-DATA(insert OID = 3378 (  pg_isolation_test_session_is_blocked PGNSP PGUID 12 1 0 0 0 f f f t f v s 2 0 16 "23 1007" _null_ _null_ _null_ _null_ _null_ pg_isolation_test_session_is_blocked _null_ _null_ _null_ ));
-DESCR("isolationtester support function");
-DATA(insert OID = 1065 (  pg_prepared_xact PGNSP PGUID 12 1 1000 0 0 f f f t t v s 0 0 2249 "" "{28,25,1184,26,26}" "{o,o,o,o,o}" "{transaction,gid,prepared,ownerid,dbid}" _null_ _null_ pg_prepared_xact _null_ _null_ _null_ ));
-DESCR("view two-phase transactions");
-DATA(insert OID = 3819 (  pg_get_multixact_members PGNSP PGUID 12 1 1000 0 0 f f f t t v s 1 0 2249 "28" "{28,28,25}" "{i,o,o}" "{multixid,xid,mode}" _null_ _null_ pg_get_multixact_members _null_ _null_ _null_ ));
-DESCR("view members of a multixactid");
-
-DATA(insert OID = 3581 ( pg_xact_commit_timestamp PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 1184 "28" _null_ _null_ _null_ _null_ _null_ pg_xact_commit_timestamp _null_ _null_ _null_ ));
-DESCR("get commit timestamp of a transaction");
-
-DATA(insert OID = 3583 ( pg_last_committed_xact PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2249 "" "{28,1184}" "{o,o}" "{xid,timestamp}" _null_ _null_ pg_last_committed_xact _null_ _null_ _null_ ));
-DESCR("get transaction Id and commit timestamp of latest transaction commit");
-
-DATA(insert OID = 3537 (  pg_describe_object           PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 25 "26 26 23" _null_ _null_ _null_ _null_ _null_ pg_describe_object _null_ _null_ _null_ ));
-DESCR("get identification of SQL object");
-
-DATA(insert OID = 3839 (  pg_identify_object           PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 2249 "26 26 23" "{26,26,23,25,25,25,25}" "{i,i,i,o,o,o,o}" "{classid,objid,objsubid,type,schema,name,identity}" _null_ _null_ pg_identify_object _null_ _null_ _null_ ));
-DESCR("get machine-parseable identification of SQL object");
-
-DATA(insert OID = 3382 (  pg_identify_object_as_address PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 2249 "26 26 23" "{26,26,23,25,1009,1009}" "{i,i,i,o,o,o}" "{classid,objid,objsubid,type,object_names,object_args}" _null_ _null_ pg_identify_object_as_address _null_ _null_ _null_ ));
-DESCR("get identification of SQL object for pg_get_object_address()");
-
-DATA(insert OID = 3954 (  pg_get_object_address    PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 2249 "25 1009 1009" "{25,1009,1009,26,26,23}" "{i,i,i,o,o,o}" "{type,name,args,classid,objid,objsubid}" _null_ _null_ pg_get_object_address _null_ _null_ _null_ ));
-DESCR("get OID-based object address from name/args arrays");
-
-DATA(insert OID = 2079 (  pg_table_is_visible          PGNSP PGUID 12 10 0 0 0 f f f t f s s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_ pg_table_is_visible _null_ _null_ _null_ ));
-DESCR("is table visible in search path?");
-DATA(insert OID = 2080 (  pg_type_is_visible           PGNSP PGUID 12 10 0 0 0 f f f t f s s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_ pg_type_is_visible _null_ _null_ _null_ ));
-DESCR("is type visible in search path?");
-DATA(insert OID = 2081 (  pg_function_is_visible       PGNSP PGUID 12 10 0 0 0 f f f t f s s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_ pg_function_is_visible _null_ _null_ _null_ ));
-DESCR("is function visible in search path?");
-DATA(insert OID = 2082 (  pg_operator_is_visible       PGNSP PGUID 12 10 0 0 0 f f f t f s s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_ pg_operator_is_visible _null_ _null_ _null_ ));
-DESCR("is operator visible in search path?");
-DATA(insert OID = 2083 (  pg_opclass_is_visible                PGNSP PGUID 12 10 0 0 0 f f f t f s s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_ pg_opclass_is_visible _null_ _null_ _null_ ));
-DESCR("is opclass visible in search path?");
-DATA(insert OID = 3829 (  pg_opfamily_is_visible       PGNSP PGUID 12 10 0 0 0 f f f t f s s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_ pg_opfamily_is_visible _null_ _null_ _null_ ));
-DESCR("is opfamily visible in search path?");
-DATA(insert OID = 2093 (  pg_conversion_is_visible     PGNSP PGUID 12 10 0 0 0 f f f t f s s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_ pg_conversion_is_visible _null_ _null_ _null_ ));
-DESCR("is conversion visible in search path?");
-DATA(insert OID = 3403 (  pg_statistics_obj_is_visible PGNSP PGUID 12 10 0 0 0 f f f t f s s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_ pg_statistics_obj_is_visible _null_ _null_ _null_ ));
-DESCR("is statistics object visible in search path?");
-DATA(insert OID = 3756 (  pg_ts_parser_is_visible      PGNSP PGUID 12 10 0 0 0 f f f t f s s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_ pg_ts_parser_is_visible _null_ _null_ _null_ ));
-DESCR("is text search parser visible in search path?");
-DATA(insert OID = 3757 (  pg_ts_dict_is_visible                PGNSP PGUID 12 10 0 0 0 f f f t f s s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_ pg_ts_dict_is_visible _null_ _null_ _null_ ));
-DESCR("is text search dictionary visible in search path?");
-DATA(insert OID = 3768 (  pg_ts_template_is_visible PGNSP PGUID 12 10 0 0 0 f f f t f s s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_ pg_ts_template_is_visible _null_ _null_ _null_ ));
-DESCR("is text search template visible in search path?");
-DATA(insert OID = 3758 (  pg_ts_config_is_visible      PGNSP PGUID 12 10 0 0 0 f f f t f s s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_ pg_ts_config_is_visible _null_ _null_ _null_ ));
-DESCR("is text search configuration visible in search path?");
-DATA(insert OID = 3815 (  pg_collation_is_visible      PGNSP PGUID 12 10 0 0 0 f f f t f s s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_ pg_collation_is_visible _null_ _null_ _null_ ));
-DESCR("is collation visible in search path?");
-
-DATA(insert OID = 2854 (  pg_my_temp_schema                    PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 26 "" _null_ _null_ _null_ _null_ _null_ pg_my_temp_schema _null_ _null_ _null_ ));
-DESCR("get OID of current session's temp schema, if any");
-DATA(insert OID = 2855 (  pg_is_other_temp_schema      PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_ pg_is_other_temp_schema _null_ _null_ _null_ ));
-DESCR("is schema another session's temp schema?");
-
-DATA(insert OID = 2171 ( pg_cancel_backend             PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 16 "23" _null_ _null_ _null_ _null_ _null_ pg_cancel_backend _null_ _null_ _null_ ));
-DESCR("cancel a server process' current query");
-DATA(insert OID = 2096 ( pg_terminate_backend          PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 16 "23" _null_ _null_ _null_ _null_ _null_ pg_terminate_backend _null_ _null_ _null_ ));
-DESCR("terminate a server process");
-DATA(insert OID = 2172 ( pg_start_backup               PGNSP PGUID 12 1 0 0 0 f f f t f v r 3 0 3220 "25 16 16" _null_ _null_ _null_ _null_ _null_ pg_start_backup _null_ _null_ _null_ ));
-DESCR("prepare for taking an online backup");
-DATA(insert OID = 2173 ( pg_stop_backup                        PGNSP PGUID 12 1 0 0 0 f f f t f v r 0 0 3220 "" _null_ _null_ _null_ _null_ _null_ pg_stop_backup _null_ _null_ _null_ ));
-DESCR("finish taking an online backup");
-DATA(insert OID = 2739 ( pg_stop_backup                        PGNSP PGUID 12 1 1 0 0 f f f t t v r 2 0 2249 "16 16" "{16,16,3220,25,25}" "{i,i,o,o,o}" "{exclusive,wait_for_archive,lsn,labelfile,spcmapfile}" _null_ _null_ pg_stop_backup_v2 _null_ _null_ _null_ ));
-DESCR("finish taking an online backup");
-DATA(insert OID = 3813 ( pg_is_in_backup               PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 16 "" _null_ _null_ _null_ _null_ _null_ pg_is_in_backup _null_ _null_ _null_ ));
-DESCR("true if server is in online backup");
-DATA(insert OID = 3814 ( pg_backup_start_time          PGNSP PGUID 12 1 0 0 0 f f f t f s s 0 0 1184 "" _null_ _null_ _null_ _null_ _null_ pg_backup_start_time _null_ _null_ _null_ ));
-DESCR("start time of an online backup");
-DATA(insert OID = 2848 ( pg_switch_wal                 PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 3220 "" _null_ _null_ _null_ _null_ _null_ pg_switch_wal _null_ _null_ _null_ ));
-DESCR("switch to new wal file");
-DATA(insert OID = 3098 ( pg_create_restore_point       PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 3220 "25" _null_ _null_ _null_ _null_ _null_ pg_create_restore_point _null_ _null_ _null_ ));
-DESCR("create a named restore point");
-DATA(insert OID = 2849 ( pg_current_wal_lsn PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 3220 "" _null_ _null_ _null_ _null_ _null_ pg_current_wal_lsn _null_ _null_ _null_ ));
-DESCR("current wal write location");
-DATA(insert OID = 2852 ( pg_current_wal_insert_lsn PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 3220 "" _null_ _null_ _null_ _null_ _null_ pg_current_wal_insert_lsn _null_ _null_ _null_ ));
-DESCR("current wal insert location");
-DATA(insert OID = 3330 ( pg_current_wal_flush_lsn PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 3220 "" _null_ _null_ _null_ _null_ _null_ pg_current_wal_flush_lsn _null_ _null_ _null_ ));
-DESCR("current wal flush location");
-DATA(insert OID = 2850 ( pg_walfile_name_offset PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2249 "3220" "{3220,25,23}" "{i,o,o}" "{lsn,file_name,file_offset}" _null_ _null_ pg_walfile_name_offset _null_ _null_ _null_ ));
-DESCR("wal filename and byte offset, given a wal location");
-DATA(insert OID = 2851 ( pg_walfile_name                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "3220" _null_ _null_ _null_ _null_ _null_ pg_walfile_name _null_ _null_ _null_ ));
-DESCR("wal filename, given a wal location");
-
-DATA(insert OID = 3165 ( pg_wal_lsn_diff               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "3220 3220" _null_ _null_ _null_ _null_ _null_ pg_wal_lsn_diff _null_ _null_ _null_ ));
-DESCR("difference in bytes, given two wal locations");
-
-DATA(insert OID = 3809 ( pg_export_snapshot            PGNSP PGUID 12 1 0 0 0 f f f t f v u 0 0 25 "" _null_ _null_ _null_ _null_ _null_ pg_export_snapshot _null_ _null_ _null_ ));
-DESCR("export a snapshot");
-
-DATA(insert OID = 3810 (  pg_is_in_recovery            PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 16 "" _null_ _null_ _null_ _null_ _null_ pg_is_in_recovery _null_ _null_ _null_ ));
-DESCR("true if server is in recovery");
-
-DATA(insert OID = 3820 ( pg_last_wal_receive_lsn       PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 3220 "" _null_ _null_ _null_ _null_ _null_ pg_last_wal_receive_lsn _null_ _null_ _null_ ));
-DESCR("current wal flush location");
-DATA(insert OID = 3821 ( pg_last_wal_replay_lsn PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 3220 "" _null_ _null_ _null_ _null_ _null_ pg_last_wal_replay_lsn _null_ _null_ _null_ ));
-DESCR("last wal replay location");
-DATA(insert OID = 3830 ( pg_last_xact_replay_timestamp PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 1184 "" _null_ _null_ _null_ _null_ _null_ pg_last_xact_replay_timestamp _null_ _null_ _null_ ));
-DESCR("timestamp of last replay xact");
-
-DATA(insert OID = 3071 ( pg_wal_replay_pause           PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2278 "" _null_ _null_ _null_ _null_ _null_ pg_wal_replay_pause _null_ _null_ _null_ ));
-DESCR("pause wal replay");
-DATA(insert OID = 3072 ( pg_wal_replay_resume          PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2278 "" _null_ _null_ _null_ _null_ _null_ pg_wal_replay_resume _null_ _null_ _null_ ));
-DESCR("resume wal replay, if it was paused");
-DATA(insert OID = 3073 ( pg_is_wal_replay_paused       PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 16 "" _null_ _null_ _null_ _null_ _null_ pg_is_wal_replay_paused _null_ _null_ _null_ ));
-DESCR("true if wal replay is paused");
-
-DATA(insert OID = 2621 ( pg_reload_conf                        PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 16 "" _null_ _null_ _null_ _null_ _null_ pg_reload_conf _null_ _null_ _null_ ));
-DESCR("reload configuration files");
-DATA(insert OID = 2622 ( pg_rotate_logfile             PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 16 "" _null_ _null_ _null_ _null_ _null_ pg_rotate_logfile_v2 _null_ _null_ _null_ ));
-DESCR("rotate log file");
-DATA(insert OID = 4099 ( pg_rotate_logfile_old         PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 16 "" _null_ _null_ _null_ _null_ _null_ pg_rotate_logfile _null_ _null_ _null_ ));
-DESCR("rotate log file - old version for adminpack 1.0");
-DATA(insert OID = 3800 ( pg_current_logfile                            PGNSP PGUID 12 1 0 0 0 f f f f f v s 0 0 25 "" _null_ _null_ _null_ _null_ _null_ pg_current_logfile _null_ _null_ _null_ ));
-DESCR("current logging collector file location");
-DATA(insert OID = 3801 ( pg_current_logfile                            PGNSP PGUID 12 1 0 0 0 f f f f f v s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ pg_current_logfile_1arg _null_ _null_ _null_ ));
-DESCR("current logging collector file location");
-
-DATA(insert OID = 2623 ( pg_stat_file          PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 2249 "25" "{25,20,1184,1184,1184,1184,16}" "{i,o,o,o,o,o,o}" "{filename,size,access,modification,change,creation,isdir}" _null_ _null_ pg_stat_file_1arg _null_ _null_ _null_ ));
-DESCR("get information about file");
-DATA(insert OID = 3307 ( pg_stat_file          PGNSP PGUID 12 1 0 0 0 f f f t f v s 2 0 2249 "25 16" "{25,16,20,1184,1184,1184,1184,16}" "{i,i,o,o,o,o,o,o}" "{filename,missing_ok,size,access,modification,change,creation,isdir}" _null_ _null_ pg_stat_file _null_ _null_ _null_ ));
-DESCR("get information about file");
-DATA(insert OID = 2624 ( pg_read_file          PGNSP PGUID 12 1 0 0 0 f f f t f v s 3 0 25 "25 20 20" _null_ _null_ _null_ _null_ _null_ pg_read_file_off_len _null_ _null_ _null_ ));
-DESCR("read text from a file");
-DATA(insert OID = 3293 ( pg_read_file          PGNSP PGUID 12 1 0 0 0 f f f t f v s 4 0 25 "25 20 20 16" _null_ _null_ _null_ _null_ _null_ pg_read_file_v2 _null_ _null_ _null_ ));
-DESCR("read text from a file");
-DATA(insert OID = 4100 ( pg_read_file_old              PGNSP PGUID 12 1 0 0 0 f f f t f v s 3 0 25 "25 20 20" _null_ _null_ _null_ _null_ _null_ pg_read_file _null_ _null_ _null_ ));
-DESCR("read text from a file - old version for adminpack 1.0");
-DATA(insert OID = 3826 ( pg_read_file          PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ pg_read_file_all _null_ _null_ _null_ ));
-DESCR("read text from a file");
-DATA(insert OID = 3827 ( pg_read_binary_file   PGNSP PGUID 12 1 0 0 0 f f f t f v s 3 0 17 "25 20 20" _null_ _null_ _null_ _null_ _null_ pg_read_binary_file_off_len _null_ _null_ _null_ ));
-DESCR("read bytea from a file");
-DATA(insert OID = 3295 ( pg_read_binary_file   PGNSP PGUID 12 1 0 0 0 f f f t f v s 4 0 17 "25 20 20 16" _null_ _null_ _null_ _null_ _null_ pg_read_binary_file _null_ _null_ _null_ ));
-DESCR("read bytea from a file");
-DATA(insert OID = 3828 ( pg_read_binary_file   PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 17 "25" _null_ _null_ _null_ _null_ _null_ pg_read_binary_file_all _null_ _null_ _null_ ));
-DESCR("read bytea from a file");
-DATA(insert OID = 2625 ( pg_ls_dir                     PGNSP PGUID 12 1 1000 0 0 f f f t t v s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ pg_ls_dir_1arg _null_ _null_ _null_ ));
-DESCR("list all files in a directory");
-DATA(insert OID = 3297 ( pg_ls_dir                     PGNSP PGUID 12 1 1000 0 0 f f f t t v s 3 0 25 "25 16 16" _null_ _null_ _null_ _null_ _null_ pg_ls_dir _null_ _null_ _null_ ));
-DESCR("list all files in a directory");
-DATA(insert OID = 2626 ( pg_sleep                      PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 2278 "701" _null_ _null_ _null_ _null_ _null_ pg_sleep _null_ _null_ _null_ ));
-DESCR("sleep for the specified time in seconds");
-DATA(insert OID = 3935 ( pg_sleep_for                  PGNSP PGUID 14 1 0 0 0 f f f t f v s 1 0 2278 "1186" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.pg_sleep(extract(epoch from pg_catalog.clock_timestamp() operator(pg_catalog.+) $1) operator(pg_catalog.-) extract(epoch from pg_catalog.clock_timestamp()))" _null_ _null_ _null_ ));
-DESCR("sleep for the specified interval");
-DATA(insert OID = 3936 ( pg_sleep_until                        PGNSP PGUID 14 1 0 0 0 f f f t f v s 1 0 2278 "1184" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.pg_sleep(extract(epoch from $1) operator(pg_catalog.-) extract(epoch from pg_catalog.clock_timestamp()))" _null_ _null_ _null_ ));
-DESCR("sleep until the specified time");
-DATA(insert OID = 315 (  pg_jit_available      PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 16 "" _null_ _null_ _null_ _null_ _null_ pg_jit_available _null_ _null_ _null_ ));
-DESCR("Is JIT compilation available in this session?");
-
-DATA(insert OID = 2971 (  text                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "16" _null_ _null_ _null_ _null_ _null_ booltext _null_ _null_ _null_ ));
-DESCR("convert boolean to text");
-
-/* Aggregates (moved here from pg_aggregate for 7.3) */
-
-DATA(insert OID = 2100 (  avg                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "20" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("the average (arithmetic mean) as numeric of all bigint values");
-DATA(insert OID = 2101 (  avg                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "23" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("the average (arithmetic mean) as numeric of all integer values");
-DATA(insert OID = 2102 (  avg                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "21" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("the average (arithmetic mean) as numeric of all smallint values");
-DATA(insert OID = 2103 (  avg                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("the average (arithmetic mean) as numeric of all numeric values");
-DATA(insert OID = 2104 (  avg                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("the average (arithmetic mean) as float8 of all float4 values");
-DATA(insert OID = 2105 (  avg                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("the average (arithmetic mean) as float8 of all float8 values");
-DATA(insert OID = 2106 (  avg                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1186 "1186" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("the average (arithmetic mean) as interval of all interval values");
-
-DATA(insert OID = 2107 (  sum                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "20" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sum as numeric across all bigint input values");
-DATA(insert OID = 2108 (  sum                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 20 "23" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sum as bigint across all integer input values");
-DATA(insert OID = 2109 (  sum                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 20 "21" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sum as bigint across all smallint input values");
-DATA(insert OID = 2110 (  sum                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 700 "700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sum as float4 across all float4 input values");
-DATA(insert OID = 2111 (  sum                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sum as float8 across all float8 input values");
-DATA(insert OID = 2112 (  sum                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 790 "790" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sum as money across all money input values");
-DATA(insert OID = 2113 (  sum                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1186 "1186" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sum as interval across all interval input values");
-DATA(insert OID = 2114 (  sum                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sum as numeric across all numeric input values");
-
-DATA(insert OID = 2115 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 20 "20" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all bigint input values");
-DATA(insert OID = 2116 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all integer input values");
-DATA(insert OID = 2117 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 21 "21" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all smallint input values");
-DATA(insert OID = 2118 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 26 "26" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all oid input values");
-DATA(insert OID = 2119 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 700 "700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all float4 input values");
-DATA(insert OID = 2120 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all float8 input values");
-DATA(insert OID = 2121 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 702 "702" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all abstime input values");
-DATA(insert OID = 2122 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1082 "1082" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all date input values");
-DATA(insert OID = 2123 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1083 "1083" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all time input values");
-DATA(insert OID = 2124 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1266 "1266" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all time with time zone input values");
-DATA(insert OID = 2125 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 790 "790" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all money input values");
-DATA(insert OID = 2126 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1114 "1114" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all timestamp input values");
-DATA(insert OID = 2127 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1184 "1184" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all timestamp with time zone input values");
-DATA(insert OID = 2128 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1186 "1186" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all interval input values");
-DATA(insert OID = 2129 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all text input values");
-DATA(insert OID = 2130 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all numeric input values");
-DATA(insert OID = 2050 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 2277 "2277" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all anyarray input values");
-DATA(insert OID = 2244 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1042 "1042" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all bpchar input values");
-DATA(insert OID = 2797 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 27 "27" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all tid input values");
-DATA(insert OID = 3564 (  max                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 869 "869" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all inet input values");
-
-DATA(insert OID = 2131 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 20 "20" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all bigint input values");
-DATA(insert OID = 2132 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all integer input values");
-DATA(insert OID = 2133 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 21 "21" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all smallint input values");
-DATA(insert OID = 2134 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 26 "26" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all oid input values");
-DATA(insert OID = 2135 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 700 "700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all float4 input values");
-DATA(insert OID = 2136 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all float8 input values");
-DATA(insert OID = 2137 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 702 "702" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all abstime input values");
-DATA(insert OID = 2138 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1082 "1082" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all date input values");
-DATA(insert OID = 2139 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1083 "1083" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all time input values");
-DATA(insert OID = 2140 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1266 "1266" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all time with time zone input values");
-DATA(insert OID = 2141 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 790 "790" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all money input values");
-DATA(insert OID = 2142 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1114 "1114" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all timestamp input values");
-DATA(insert OID = 2143 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1184 "1184" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all timestamp with time zone input values");
-DATA(insert OID = 2144 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1186 "1186" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all interval input values");
-DATA(insert OID = 2145 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all text values");
-DATA(insert OID = 2146 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all numeric input values");
-DATA(insert OID = 2051 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 2277 "2277" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all anyarray input values");
-DATA(insert OID = 2245 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1042 "1042" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all bpchar input values");
-DATA(insert OID = 2798 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 27 "27" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all tid input values");
-DATA(insert OID = 3565 (  min                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 869 "869" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all inet input values");
-
-/* count has two forms: count(any) and count(*) */
-DATA(insert OID = 2147 (  count                                PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 20 "2276" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("number of input rows for which the input expression is not null");
-DATA(insert OID = 2803 (  count                                PGNSP PGUID 12 1 0 0 0 a f f f f i s 0 0 20 "" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("number of input rows");
-
-DATA(insert OID = 2718 (  var_pop                      PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "20" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("population variance of bigint input values (square of the population standard deviation)");
-DATA(insert OID = 2719 (  var_pop                      PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "23" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("population variance of integer input values (square of the population standard deviation)");
-DATA(insert OID = 2720 (  var_pop                      PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "21" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("population variance of smallint input values (square of the population standard deviation)");
-DATA(insert OID = 2721 (  var_pop                      PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("population variance of float4 input values (square of the population standard deviation)");
-DATA(insert OID = 2722 (  var_pop                      PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("population variance of float8 input values (square of the population standard deviation)");
-DATA(insert OID = 2723 (  var_pop                      PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("population variance of numeric input values (square of the population standard deviation)");
-
-DATA(insert OID = 2641 (  var_samp                     PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "20" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sample variance of bigint input values (square of the sample standard deviation)");
-DATA(insert OID = 2642 (  var_samp                     PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "23" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sample variance of integer input values (square of the sample standard deviation)");
-DATA(insert OID = 2643 (  var_samp                     PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "21" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sample variance of smallint input values (square of the sample standard deviation)");
-DATA(insert OID = 2644 (  var_samp                     PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sample variance of float4 input values (square of the sample standard deviation)");
-
-DATA(insert OID = 2645 (  var_samp                     PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sample variance of float8 input values (square of the sample standard deviation)");
-DATA(insert OID = 2646 (  var_samp                     PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sample variance of numeric input values (square of the sample standard deviation)");
-
-DATA(insert OID = 2148 (  variance                     PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "20" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("historical alias for var_samp");
-DATA(insert OID = 2149 (  variance                     PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "23" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("historical alias for var_samp");
-DATA(insert OID = 2150 (  variance                     PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "21" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("historical alias for var_samp");
-DATA(insert OID = 2151 (  variance                     PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("historical alias for var_samp");
-DATA(insert OID = 2152 (  variance                     PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("historical alias for var_samp");
-DATA(insert OID = 2153 (  variance                     PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("historical alias for var_samp");
-
-DATA(insert OID = 2724 (  stddev_pop           PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "20" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("population standard deviation of bigint input values");
-DATA(insert OID = 2725 (  stddev_pop           PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "23" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("population standard deviation of integer input values");
-DATA(insert OID = 2726 (  stddev_pop           PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "21" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("population standard deviation of smallint input values");
-DATA(insert OID = 2727 (  stddev_pop           PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("population standard deviation of float4 input values");
-DATA(insert OID = 2728 (  stddev_pop           PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("population standard deviation of float8 input values");
-DATA(insert OID = 2729 (  stddev_pop           PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("population standard deviation of numeric input values");
-
-DATA(insert OID = 2712 (  stddev_samp          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "20" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sample standard deviation of bigint input values");
-DATA(insert OID = 2713 (  stddev_samp          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "23" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sample standard deviation of integer input values");
-DATA(insert OID = 2714 (  stddev_samp          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "21" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sample standard deviation of smallint input values");
-DATA(insert OID = 2715 (  stddev_samp          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sample standard deviation of float4 input values");
-DATA(insert OID = 2716 (  stddev_samp          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sample standard deviation of float8 input values");
-DATA(insert OID = 2717 (  stddev_samp          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sample standard deviation of numeric input values");
-
-DATA(insert OID = 2154 (  stddev                       PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "20" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("historical alias for stddev_samp");
-DATA(insert OID = 2155 (  stddev                       PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "23" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("historical alias for stddev_samp");
-DATA(insert OID = 2156 (  stddev                       PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "21" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("historical alias for stddev_samp");
-DATA(insert OID = 2157 (  stddev                       PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("historical alias for stddev_samp");
-DATA(insert OID = 2158 (  stddev                       PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 701 "701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("historical alias for stddev_samp");
-DATA(insert OID = 2159 (  stddev                       PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("historical alias for stddev_samp");
-
-DATA(insert OID = 2818 (  regr_count           PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 20 "701 701" _null_ _null_ _null_ _null_  _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("number of input rows in which both expressions are not null");
-DATA(insert OID = 2819 (  regr_sxx                     PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sum of squares of the independent variable (sum(X^2) - sum(X)^2/N)");
-DATA(insert OID = 2820 (  regr_syy                     PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sum of squares of the dependent variable (sum(Y^2) - sum(Y)^2/N)");
-DATA(insert OID = 2821 (  regr_sxy                     PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sum of products of independent times dependent variable (sum(X*Y) - sum(X) * sum(Y)/N)");
-DATA(insert OID = 2822 (  regr_avgx                    PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("average of the independent variable (sum(X)/N)");
-DATA(insert OID = 2823 (  regr_avgy                    PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("average of the dependent variable (sum(Y)/N)");
-DATA(insert OID = 2824 (  regr_r2                      PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("square of the correlation coefficient");
-DATA(insert OID = 2825 (  regr_slope           PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("slope of the least-squares-fit linear equation determined by the (X, Y) pairs");
-DATA(insert OID = 2826 (  regr_intercept       PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("y-intercept of the least-squares-fit linear equation determined by the (X, Y) pairs");
-
-DATA(insert OID = 2827 (  covar_pop                    PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("population covariance");
-DATA(insert OID = 2828 (  covar_samp           PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("sample covariance");
-DATA(insert OID = 2829 (  corr                         PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("correlation coefficient");
-
-DATA(insert OID = 2160 ( text_pattern_lt        PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ text_pattern_lt _null_ _null_ _null_ ));
-DATA(insert OID = 2161 ( text_pattern_le        PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ text_pattern_le _null_ _null_ _null_ ));
-DATA(insert OID = 2163 ( text_pattern_ge        PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ text_pattern_ge _null_ _null_ _null_ ));
-DATA(insert OID = 2164 ( text_pattern_gt        PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ text_pattern_gt _null_ _null_ _null_ ));
-DATA(insert OID = 2166 ( bttext_pattern_cmp  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "25 25" _null_ _null_ _null_ _null_ _null_ bttext_pattern_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3332 ( bttext_pattern_sortsupport PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ bttext_pattern_sortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-
-DATA(insert OID = 2174 ( bpchar_pattern_lt       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1042 1042" _null_ _null_ _null_ _null_ _null_ bpchar_pattern_lt _null_ _null_ _null_ ));
-DATA(insert OID = 2175 ( bpchar_pattern_le       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1042 1042" _null_ _null_ _null_ _null_ _null_ bpchar_pattern_le _null_ _null_ _null_ ));
-DATA(insert OID = 2177 ( bpchar_pattern_ge       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1042 1042" _null_ _null_ _null_ _null_ _null_ bpchar_pattern_ge _null_ _null_ _null_ ));
-DATA(insert OID = 2178 ( bpchar_pattern_gt       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1042 1042" _null_ _null_ _null_ _null_ _null_ bpchar_pattern_gt _null_ _null_ _null_ ));
-DATA(insert OID = 2180 ( btbpchar_pattern_cmp PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "1042 1042" _null_ _null_ _null_ _null_ _null_ btbpchar_pattern_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3333 ( btbpchar_pattern_sortsupport PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ btbpchar_pattern_sortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-
-DATA(insert OID = 2188 ( btint48cmp                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 20" _null_ _null_ _null_ _null_ _null_ btint48cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 2189 ( btint84cmp                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "20 23" _null_ _null_ _null_ _null_ _null_ btint84cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 2190 ( btint24cmp                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "21 23" _null_ _null_ _null_ _null_ _null_ btint24cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 2191 ( btint42cmp                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "23 21" _null_ _null_ _null_ _null_ _null_ btint42cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 2192 ( btint28cmp                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "21 20" _null_ _null_ _null_ _null_ _null_ btint28cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 2193 ( btint82cmp                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "20 21" _null_ _null_ _null_ _null_ _null_ btint82cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 2194 ( btfloat48cmp          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "700 701" _null_ _null_ _null_ _null_ _null_ btfloat48cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 2195 ( btfloat84cmp          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "701 700" _null_ _null_ _null_ _null_ _null_ btfloat84cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-
-DATA(insert OID = 2212 (  regprocedurein       PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2202 "2275" _null_ _null_ _null_ _null_ _null_ regprocedurein _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2213 (  regprocedureout      PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "2202" _null_ _null_ _null_ _null_ _null_ regprocedureout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2214 (  regoperin                    PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2203 "2275" _null_ _null_ _null_ _null_ _null_ regoperin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2215 (  regoperout           PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "2203" _null_ _null_ _null_ _null_ _null_ regoperout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3492 (  to_regoper           PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2203 "25" _null_ _null_ _null_ _null_ _null_ to_regoper _null_ _null_ _null_ ));
-DESCR("convert operator name to regoper");
-DATA(insert OID = 3476 (  to_regoperator       PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2204 "25" _null_ _null_ _null_ _null_ _null_ to_regoperator _null_ _null_ _null_ ));
-DESCR("convert operator name to regoperator");
-DATA(insert OID = 2216 (  regoperatorin                PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2204 "2275" _null_ _null_ _null_ _null_ _null_ regoperatorin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2217 (  regoperatorout       PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "2204" _null_ _null_ _null_ _null_ _null_ regoperatorout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2218 (  regclassin           PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2205 "2275" _null_ _null_ _null_ _null_ _null_ regclassin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2219 (  regclassout          PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "2205" _null_ _null_ _null_ _null_ _null_ regclassout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3495 (  to_regclass          PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2205 "25" _null_ _null_ _null_ _null_ _null_ to_regclass _null_ _null_ _null_ ));
-DESCR("convert classname to regclass");
-DATA(insert OID = 2220 (  regtypein                    PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2206 "2275" _null_ _null_ _null_ _null_ _null_ regtypein _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2221 (  regtypeout           PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "2206" _null_ _null_ _null_ _null_ _null_ regtypeout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3493 (  to_regtype           PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2206 "25" _null_ _null_ _null_ _null_ _null_ to_regtype _null_ _null_ _null_ ));
-DESCR("convert type name to regtype");
-DATA(insert OID = 1079 (  regclass                     PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2205 "25" _null_ _null_ _null_ _null_ _null_ text_regclass _null_ _null_ _null_ ));
-DESCR("convert text to regclass");
-
-DATA(insert OID = 4098 (  regrolein                    PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 4096 "2275" _null_ _null_ _null_ _null_ _null_ regrolein _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 4092 (  regroleout           PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "4096" _null_ _null_ _null_ _null_ _null_ regroleout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 4093 (  to_regrole           PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 4096 "25" _null_ _null_ _null_ _null_ _null_ to_regrole _null_ _null_ _null_ ));
-DESCR("convert role name to regrole");
-
-DATA(insert OID = 4084 (  regnamespacein       PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 4089 "2275" _null_ _null_ _null_ _null_ _null_ regnamespacein _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 4085 (  regnamespaceout      PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "4089" _null_ _null_ _null_ _null_ _null_ regnamespaceout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 4086 (  to_regnamespace      PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 4089 "25" _null_ _null_ _null_ _null_ _null_ to_regnamespace _null_ _null_ _null_ ));
-DESCR("convert namespace name to regnamespace");
-
-DATA(insert OID = 1268 (  parse_ident          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1009 "25 16" _null_ _null_ "{str,strict}" _null_ _null_ parse_ident _null_ _null_ _null_ ));
-DESCR("parse qualified identifier to array of identifiers");
-
-DATA(insert OID = 2246 ( fmgr_internal_validator PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2278 "26" _null_ _null_ _null_ _null_ _null_ fmgr_internal_validator _null_ _null_ _null_ ));
-DESCR("(internal)");
-DATA(insert OID = 2247 ( fmgr_c_validator      PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2278 "26" _null_ _null_ _null_ _null_ _null_ fmgr_c_validator _null_ _null_ _null_ ));
-DESCR("(internal)");
-DATA(insert OID = 2248 ( fmgr_sql_validator PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2278 "26" _null_ _null_ _null_ _null_ _null_ fmgr_sql_validator _null_ _null_ _null_ ));
-DESCR("(internal)");
-
-DATA(insert OID = 2250 (  has_database_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 25 25" _null_ _null_ _null_ _null_ _null_    has_database_privilege_name_name _null_ _null_ _null_ ));
-DESCR("user privilege on database by username, database name");
-DATA(insert OID = 2251 (  has_database_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 26 25" _null_ _null_ _null_ _null_ _null_    has_database_privilege_name_id _null_ _null_ _null_ ));
-DESCR("user privilege on database by username, database oid");
-DATA(insert OID = 2252 (  has_database_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 25 25" _null_ _null_ _null_ _null_ _null_    has_database_privilege_id_name _null_ _null_ _null_ ));
-DESCR("user privilege on database by user oid, database name");
-DATA(insert OID = 2253 (  has_database_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 26 25" _null_ _null_ _null_ _null_ _null_    has_database_privilege_id_id _null_ _null_ _null_ ));
-DESCR("user privilege on database by user oid, database oid");
-DATA(insert OID = 2254 (  has_database_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ has_database_privilege_name _null_ _null_ _null_ ));
-DESCR("current user privilege on database by database name");
-DATA(insert OID = 2255 (  has_database_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "26 25" _null_ _null_ _null_ _null_ _null_ has_database_privilege_id _null_ _null_ _null_ ));
-DESCR("current user privilege on database by database oid");
-
-DATA(insert OID = 2256 (  has_function_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 25 25" _null_ _null_ _null_ _null_ _null_    has_function_privilege_name_name _null_ _null_ _null_ ));
-DESCR("user privilege on function by username, function name");
-DATA(insert OID = 2257 (  has_function_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 26 25" _null_ _null_ _null_ _null_ _null_    has_function_privilege_name_id _null_ _null_ _null_ ));
-DESCR("user privilege on function by username, function oid");
-DATA(insert OID = 2258 (  has_function_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 25 25" _null_ _null_ _null_ _null_ _null_    has_function_privilege_id_name _null_ _null_ _null_ ));
-DESCR("user privilege on function by user oid, function name");
-DATA(insert OID = 2259 (  has_function_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 26 25" _null_ _null_ _null_ _null_ _null_    has_function_privilege_id_id _null_ _null_ _null_ ));
-DESCR("user privilege on function by user oid, function oid");
-DATA(insert OID = 2260 (  has_function_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ has_function_privilege_name _null_ _null_ _null_ ));
-DESCR("current user privilege on function by function name");
-DATA(insert OID = 2261 (  has_function_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "26 25" _null_ _null_ _null_ _null_ _null_ has_function_privilege_id _null_ _null_ _null_ ));
-DESCR("current user privilege on function by function oid");
-
-DATA(insert OID = 2262 (  has_language_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 25 25" _null_ _null_ _null_ _null_ _null_    has_language_privilege_name_name _null_ _null_ _null_ ));
-DESCR("user privilege on language by username, language name");
-DATA(insert OID = 2263 (  has_language_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 26 25" _null_ _null_ _null_ _null_ _null_    has_language_privilege_name_id _null_ _null_ _null_ ));
-DESCR("user privilege on language by username, language oid");
-DATA(insert OID = 2264 (  has_language_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 25 25" _null_ _null_ _null_ _null_ _null_    has_language_privilege_id_name _null_ _null_ _null_ ));
-DESCR("user privilege on language by user oid, language name");
-DATA(insert OID = 2265 (  has_language_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 26 25" _null_ _null_ _null_ _null_ _null_    has_language_privilege_id_id _null_ _null_ _null_ ));
-DESCR("user privilege on language by user oid, language oid");
-DATA(insert OID = 2266 (  has_language_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ has_language_privilege_name _null_ _null_ _null_ ));
-DESCR("current user privilege on language by language name");
-DATA(insert OID = 2267 (  has_language_privilege                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "26 25" _null_ _null_ _null_ _null_ _null_ has_language_privilege_id _null_ _null_ _null_ ));
-DESCR("current user privilege on language by language oid");
-
-DATA(insert OID = 2268 (  has_schema_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 25 25" _null_ _null_ _null_ _null_ _null_    has_schema_privilege_name_name _null_ _null_ _null_ ));
-DESCR("user privilege on schema by username, schema name");
-DATA(insert OID = 2269 (  has_schema_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 26 25" _null_ _null_ _null_ _null_ _null_    has_schema_privilege_name_id _null_ _null_ _null_ ));
-DESCR("user privilege on schema by username, schema oid");
-DATA(insert OID = 2270 (  has_schema_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 25 25" _null_ _null_ _null_ _null_ _null_    has_schema_privilege_id_name _null_ _null_ _null_ ));
-DESCR("user privilege on schema by user oid, schema name");
-DATA(insert OID = 2271 (  has_schema_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 26 25" _null_ _null_ _null_ _null_ _null_    has_schema_privilege_id_id _null_ _null_ _null_ ));
-DESCR("user privilege on schema by user oid, schema oid");
-DATA(insert OID = 2272 (  has_schema_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ has_schema_privilege_name _null_ _null_ _null_ ));
-DESCR("current user privilege on schema by schema name");
-DATA(insert OID = 2273 (  has_schema_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "26 25" _null_ _null_ _null_ _null_ _null_ has_schema_privilege_id _null_ _null_ _null_ ));
-DESCR("current user privilege on schema by schema oid");
-
-DATA(insert OID = 2390 (  has_tablespace_privilege                PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 25 25" _null_ _null_ _null_ _null_ _null_    has_tablespace_privilege_name_name _null_ _null_ _null_ ));
-DESCR("user privilege on tablespace by username, tablespace name");
-DATA(insert OID = 2391 (  has_tablespace_privilege                PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 26 25" _null_ _null_ _null_ _null_ _null_    has_tablespace_privilege_name_id _null_ _null_ _null_ ));
-DESCR("user privilege on tablespace by username, tablespace oid");
-DATA(insert OID = 2392 (  has_tablespace_privilege                PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 25 25" _null_ _null_ _null_ _null_ _null_    has_tablespace_privilege_id_name _null_ _null_ _null_ ));
-DESCR("user privilege on tablespace by user oid, tablespace name");
-DATA(insert OID = 2393 (  has_tablespace_privilege                PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 26 25" _null_ _null_ _null_ _null_ _null_    has_tablespace_privilege_id_id _null_ _null_ _null_ ));
-DESCR("user privilege on tablespace by user oid, tablespace oid");
-DATA(insert OID = 2394 (  has_tablespace_privilege                PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ has_tablespace_privilege_name _null_ _null_ _null_ ));
-DESCR("current user privilege on tablespace by tablespace name");
-DATA(insert OID = 2395 (  has_tablespace_privilege                PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "26 25" _null_ _null_ _null_ _null_ _null_ has_tablespace_privilege_id _null_ _null_ _null_ ));
-DESCR("current user privilege on tablespace by tablespace oid");
-
-DATA(insert OID = 3000 (  has_foreign_data_wrapper_privilege              PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 25 25" _null_ _null_ _null_ _null_ _null_    has_foreign_data_wrapper_privilege_name_name _null_ _null_ _null_ ));
-DESCR("user privilege on foreign data wrapper by username, foreign data wrapper name");
-DATA(insert OID = 3001 (  has_foreign_data_wrapper_privilege              PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 26 25" _null_ _null_ _null_ _null_ _null_    has_foreign_data_wrapper_privilege_name_id _null_ _null_ _null_ ));
-DESCR("user privilege on foreign data wrapper by username, foreign data wrapper oid");
-DATA(insert OID = 3002 (  has_foreign_data_wrapper_privilege              PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 25 25" _null_ _null_ _null_ _null_ _null_    has_foreign_data_wrapper_privilege_id_name _null_ _null_ _null_ ));
-DESCR("user privilege on foreign data wrapper by user oid, foreign data wrapper name");
-DATA(insert OID = 3003 (  has_foreign_data_wrapper_privilege              PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 26 25" _null_ _null_ _null_ _null_ _null_    has_foreign_data_wrapper_privilege_id_id _null_ _null_ _null_ ));
-DESCR("user privilege on foreign data wrapper by user oid, foreign data wrapper oid");
-DATA(insert OID = 3004 (  has_foreign_data_wrapper_privilege              PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ has_foreign_data_wrapper_privilege_name _null_ _null_ _null_ ));
-DESCR("current user privilege on foreign data wrapper by foreign data wrapper name");
-DATA(insert OID = 3005 (  has_foreign_data_wrapper_privilege              PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "26 25" _null_ _null_ _null_ _null_ _null_ has_foreign_data_wrapper_privilege_id _null_ _null_ _null_ ));
-DESCR("current user privilege on foreign data wrapper by foreign data wrapper oid");
-
-DATA(insert OID = 3006 (  has_server_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 25 25" _null_ _null_ _null_ _null_ _null_    has_server_privilege_name_name _null_ _null_ _null_ ));
-DESCR("user privilege on server by username, server name");
-DATA(insert OID = 3007 (  has_server_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 26 25" _null_ _null_ _null_ _null_ _null_    has_server_privilege_name_id _null_ _null_ _null_ ));
-DESCR("user privilege on server by username, server oid");
-DATA(insert OID = 3008 (  has_server_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 25 25" _null_ _null_ _null_ _null_ _null_    has_server_privilege_id_name _null_ _null_ _null_ ));
-DESCR("user privilege on server by user oid, server name");
-DATA(insert OID = 3009 (  has_server_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 26 25" _null_ _null_ _null_ _null_ _null_    has_server_privilege_id_id _null_ _null_ _null_ ));
-DESCR("user privilege on server by user oid, server oid");
-DATA(insert OID = 3010 (  has_server_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ has_server_privilege_name _null_ _null_ _null_ ));
-DESCR("current user privilege on server by server name");
-DATA(insert OID = 3011 (  has_server_privilege            PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "26 25" _null_ _null_ _null_ _null_ _null_ has_server_privilege_id _null_ _null_ _null_ ));
-DESCR("current user privilege on server by server oid");
-
-DATA(insert OID = 3138 (  has_type_privilege              PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 25 25" _null_ _null_ _null_ _null_ _null_    has_type_privilege_name_name _null_ _null_ _null_ ));
-DESCR("user privilege on type by username, type name");
-DATA(insert OID = 3139 (  has_type_privilege              PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 26 25" _null_ _null_ _null_ _null_ _null_    has_type_privilege_name_id _null_ _null_ _null_ ));
-DESCR("user privilege on type by username, type oid");
-DATA(insert OID = 3140 (  has_type_privilege              PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 25 25" _null_ _null_ _null_ _null_ _null_    has_type_privilege_id_name _null_ _null_ _null_ ));
-DESCR("user privilege on type by user oid, type name");
-DATA(insert OID = 3141 (  has_type_privilege              PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 26 25" _null_ _null_ _null_ _null_ _null_    has_type_privilege_id_id _null_ _null_ _null_ ));
-DESCR("user privilege on type by user oid, type oid");
-DATA(insert OID = 3142 (  has_type_privilege              PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ has_type_privilege_name _null_ _null_ _null_ ));
-DESCR("current user privilege on type by type name");
-DATA(insert OID = 3143 (  has_type_privilege              PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "26 25" _null_ _null_ _null_ _null_ _null_ has_type_privilege_id _null_ _null_ _null_ ));
-DESCR("current user privilege on type by type oid");
-
-DATA(insert OID = 2705 (  pg_has_role          PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 19 25" _null_ _null_ _null_ _null_ _null_ pg_has_role_name_name _null_ _null_ _null_ ));
-DESCR("user privilege on role by username, role name");
-DATA(insert OID = 2706 (  pg_has_role          PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "19 26 25" _null_ _null_ _null_ _null_ _null_ pg_has_role_name_id _null_ _null_ _null_ ));
-DESCR("user privilege on role by username, role oid");
-DATA(insert OID = 2707 (  pg_has_role          PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 19 25" _null_ _null_ _null_ _null_ _null_ pg_has_role_id_name _null_ _null_ _null_ ));
-DESCR("user privilege on role by user oid, role name");
-DATA(insert OID = 2708 (  pg_has_role          PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 16 "26 26 25" _null_ _null_ _null_ _null_ _null_ pg_has_role_id_id _null_ _null_ _null_ ));
-DESCR("user privilege on role by user oid, role oid");
-DATA(insert OID = 2709 (  pg_has_role          PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "19 25" _null_ _null_ _null_ _null_ _null_ pg_has_role_name _null_ _null_ _null_ ));
-DESCR("current user privilege on role by role name");
-DATA(insert OID = 2710 (  pg_has_role          PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "26 25" _null_ _null_ _null_ _null_ _null_ pg_has_role_id _null_ _null_ _null_ ));
-DESCR("current user privilege on role by role oid");
-
-DATA(insert OID = 1269 (  pg_column_size               PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 23 "2276" _null_ _null_ _null_ _null_ _null_ pg_column_size _null_ _null_ _null_ ));
-DESCR("bytes required to store the value, perhaps with compression");
-DATA(insert OID = 2322 ( pg_tablespace_size            PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_tablespace_size_oid _null_ _null_ _null_ ));
-DESCR("total disk space usage for the specified tablespace");
-DATA(insert OID = 2323 ( pg_tablespace_size            PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 20 "19" _null_ _null_ _null_ _null_ _null_ pg_tablespace_size_name _null_ _null_ _null_ ));
-DESCR("total disk space usage for the specified tablespace");
-DATA(insert OID = 2324 ( pg_database_size              PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 20 "26" _null_ _null_ _null_ _null_ _null_ pg_database_size_oid _null_ _null_ _null_ ));
-DESCR("total disk space usage for the specified database");
-DATA(insert OID = 2168 ( pg_database_size              PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 20 "19" _null_ _null_ _null_ _null_ _null_ pg_database_size_name _null_ _null_ _null_ ));
-DESCR("total disk space usage for the specified database");
-DATA(insert OID = 2325 ( pg_relation_size              PGNSP PGUID 14 1 0 0 0 f f f t f v s 1 0 20 "2205" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.pg_relation_size($1, ''main'')" _null_ _null_ _null_ ));
-DESCR("disk space usage for the main fork of the specified table or index");
-DATA(insert OID = 2332 ( pg_relation_size              PGNSP PGUID 12 1 0 0 0 f f f t f v s 2 0 20 "2205 25" _null_ _null_ _null_ _null_ _null_ pg_relation_size _null_ _null_ _null_ ));
-DESCR("disk space usage for the specified fork of a table or index");
-DATA(insert OID = 2286 ( pg_total_relation_size PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 20 "2205" _null_ _null_ _null_ _null_ _null_ pg_total_relation_size _null_ _null_ _null_ ));
-DESCR("total disk space usage for the specified table and associated indexes");
-DATA(insert OID = 2288 ( pg_size_pretty                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "20" _null_ _null_ _null_ _null_ _null_ pg_size_pretty _null_ _null_ _null_ ));
-DESCR("convert a long int to a human readable text using size units");
-DATA(insert OID = 3166 ( pg_size_pretty                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "1700" _null_ _null_ _null_ _null_ _null_ pg_size_pretty_numeric _null_ _null_ _null_ ));
-DESCR("convert a numeric to a human readable text using size units");
-DATA(insert OID = 3334 ( pg_size_bytes                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "25" _null_ _null_ _null_ _null_ _null_ pg_size_bytes _null_ _null_ _null_ ));
-DESCR("convert a size in human-readable format with size units into bytes");
-DATA(insert OID = 2997 ( pg_table_size                 PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 20 "2205" _null_ _null_ _null_ _null_ _null_ pg_table_size _null_ _null_ _null_ ));
-DESCR("disk space usage for the specified table, including TOAST, free space and visibility map");
-DATA(insert OID = 2998 ( pg_indexes_size               PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 20 "2205" _null_ _null_ _null_ _null_ _null_ pg_indexes_size _null_ _null_ _null_ ));
-DESCR("disk space usage for all indexes attached to the specified table");
-DATA(insert OID = 2999 ( pg_relation_filenode  PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 26 "2205" _null_ _null_ _null_ _null_ _null_ pg_relation_filenode _null_ _null_ _null_ ));
-DESCR("filenode identifier of relation");
-DATA(insert OID = 3454 ( pg_filenode_relation PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 2205 "26 26" _null_ _null_ _null_ _null_ _null_ pg_filenode_relation _null_ _null_ _null_ ));
-DESCR("relation OID for filenode and tablespace");
-DATA(insert OID = 3034 ( pg_relation_filepath  PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 25 "2205" _null_ _null_ _null_ _null_ _null_ pg_relation_filepath _null_ _null_ _null_ ));
-DESCR("file path of relation");
-
-DATA(insert OID = 2316 ( postgresql_fdw_validator PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1009 26" _null_ _null_ _null_ _null_ _null_ postgresql_fdw_validator _null_ _null_ _null_));
-DESCR("(internal)");
-
-DATA(insert OID = 2290 (  record_in                    PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 2249 "2275 26 23" _null_ _null_ _null_ _null_ _null_ record_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2291 (  record_out           PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "2249" _null_ _null_ _null_ _null_ _null_ record_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2292 (  cstring_in           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "2275" _null_ _null_ _null_ _null_ _null_ cstring_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2293 (  cstring_out          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "2275" _null_ _null_ _null_ _null_ _null_ cstring_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2294 (  any_in                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2276 "2275" _null_ _null_ _null_ _null_ _null_ any_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2295 (  any_out                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "2276" _null_ _null_ _null_ _null_ _null_ any_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2296 (  anyarray_in          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2277 "2275" _null_ _null_ _null_ _null_ _null_ anyarray_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2297 (  anyarray_out         PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "2277" _null_ _null_ _null_ _null_ _null_ anyarray_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2298 (  void_in                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2275" _null_ _null_ _null_ _null_ _null_ void_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2299 (  void_out                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "2278" _null_ _null_ _null_ _null_ _null_ void_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2300 (  trigger_in           PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 2279 "2275" _null_ _null_ _null_ _null_ _null_ trigger_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2301 (  trigger_out          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "2279" _null_ _null_ _null_ _null_ _null_ trigger_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3594 (  event_trigger_in     PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 3838 "2275" _null_ _null_ _null_ _null_ _null_ event_trigger_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3595 (  event_trigger_out PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "3838" _null_ _null_ _null_ _null_ _null_ event_trigger_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2302 (  language_handler_in  PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 2280 "2275" _null_ _null_ _null_ _null_ _null_ language_handler_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2303 (  language_handler_out PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "2280" _null_ _null_ _null_ _null_ _null_ language_handler_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2304 (  internal_in          PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 2281 "2275" _null_ _null_ _null_ _null_ _null_ internal_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2305 (  internal_out         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "2281" _null_ _null_ _null_ _null_ _null_ internal_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2306 (  opaque_in                    PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 2282 "2275" _null_ _null_ _null_ _null_ _null_ opaque_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2307 (  opaque_out           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "2282" _null_ _null_ _null_ _null_ _null_ opaque_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2312 (  anyelement_in                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2283 "2275" _null_ _null_ _null_ _null_ _null_ anyelement_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2313 (  anyelement_out       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "2283" _null_ _null_ _null_ _null_ _null_ anyelement_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2398 (  shell_in                     PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 2282 "2275" _null_ _null_ _null_ _null_ _null_ shell_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2399 (  shell_out                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "2282" _null_ _null_ _null_ _null_ _null_ shell_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2597 (  domain_in                    PGNSP PGUID 12 1 0 0 0 f f f f f s s 3 0 2276 "2275 26 23" _null_ _null_ _null_ _null_ _null_ domain_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2598 (  domain_recv          PGNSP PGUID 12 1 0 0 0 f f f f f s s 3 0 2276 "2281 26 23" _null_ _null_ _null_ _null_ _null_ domain_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2777 (  anynonarray_in       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2776 "2275" _null_ _null_ _null_ _null_ _null_ anynonarray_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2778 (  anynonarray_out      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "2776" _null_ _null_ _null_ _null_ _null_ anynonarray_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3116 (  fdw_handler_in       PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 3115 "2275" _null_ _null_ _null_ _null_ _null_ fdw_handler_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3117 (  fdw_handler_out      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "3115" _null_ _null_ _null_ _null_ _null_ fdw_handler_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 326  (  index_am_handler_in  PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 325 "2275" _null_ _null_ _null_ _null_ _null_ index_am_handler_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 327  (  index_am_handler_out PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "325" _null_ _null_ _null_ _null_ _null_ index_am_handler_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3311 (  tsm_handler_in       PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 3310 "2275" _null_ _null_ _null_ _null_ _null_ tsm_handler_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3312 (  tsm_handler_out      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "3310" _null_ _null_ _null_ _null_ _null_ tsm_handler_out _null_ _null_ _null_ ));
-DESCR("I/O");
-
-/* tablesample method handlers */
-DATA(insert OID = 3313 (  bernoulli                    PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 3310 "2281" _null_ _null_ _null_ _null_ _null_ tsm_bernoulli_handler _null_ _null_ _null_ ));
-DESCR("BERNOULLI tablesample method handler");
-DATA(insert OID = 3314 (  system                       PGNSP PGUID 12 1 0 0 0 f f f t f v s 1 0 3310 "2281" _null_ _null_ _null_ _null_ _null_ tsm_system_handler _null_ _null_ _null_ ));
-DESCR("SYSTEM tablesample method handler");
-
-/* cryptographic */
-DATA(insert OID =  2311 (  md5    PGNSP PGUID 12 1 0 0 0 f f t t f i s 1 0 25 "25" _null_ _null_ _null_ _null_ _null_ md5_text _null_ _null_ _null_ ));
-DESCR("MD5 hash");
-DATA(insert OID =  2321 (  md5    PGNSP PGUID 12 1 0 0 0 f f t t f i s 1 0 25 "17" _null_ _null_ _null_ _null_ _null_ md5_bytea _null_ _null_ _null_ ));
-DESCR("MD5 hash");
-DATA(insert OID =  3419 (  sha224  PGNSP PGUID 12 1 0 0 0 f f t t f i s 1 0 17 "17" _null_ _null_ _null_ _null_ _null_ sha224_bytea _null_ _null_ _null_ ));
-DESCR("SHA-224 hash");
-DATA(insert OID =  3420 (  sha256  PGNSP PGUID 12 1 0 0 0 f f t t f i s 1 0 17 "17" _null_ _null_ _null_ _null_ _null_ sha256_bytea _null_ _null_ _null_ ));
-DESCR("SHA-256 hash");
-DATA(insert OID =  3421 (  sha384  PGNSP PGUID 12 1 0 0 0 f f t t f i s 1 0 17 "17" _null_ _null_ _null_ _null_ _null_ sha384_bytea _null_ _null_ _null_ ));
-DESCR("SHA-384 hash");
-DATA(insert OID =  3422 (  sha512  PGNSP PGUID 12 1 0 0 0 f f t t f i s 1 0 17 "17" _null_ _null_ _null_ _null_ _null_ sha512_bytea _null_ _null_ _null_ ));
-DESCR("SHA-512 hash");
-
-/* crosstype operations for date vs. timestamp and timestamptz */
-DATA(insert OID = 2338 (  date_lt_timestamp               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1082 1114" _null_ _null_ _null_ _null_ _null_ date_lt_timestamp _null_ _null_ _null_ ));
-DATA(insert OID = 2339 (  date_le_timestamp               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1082 1114" _null_ _null_ _null_ _null_ _null_ date_le_timestamp _null_ _null_ _null_ ));
-DATA(insert OID = 2340 (  date_eq_timestamp               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1082 1114" _null_ _null_ _null_ _null_ _null_ date_eq_timestamp _null_ _null_ _null_ ));
-DATA(insert OID = 2341 (  date_gt_timestamp               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1082 1114" _null_ _null_ _null_ _null_ _null_ date_gt_timestamp _null_ _null_ _null_ ));
-DATA(insert OID = 2342 (  date_ge_timestamp               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1082 1114" _null_ _null_ _null_ _null_ _null_ date_ge_timestamp _null_ _null_ _null_ ));
-DATA(insert OID = 2343 (  date_ne_timestamp               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1082 1114" _null_ _null_ _null_ _null_ _null_ date_ne_timestamp _null_ _null_ _null_ ));
-DATA(insert OID = 2344 (  date_cmp_timestamp      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "1082 1114" _null_ _null_ _null_ _null_ _null_ date_cmp_timestamp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-
-DATA(insert OID = 2351 (  date_lt_timestamptz     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1082 1184" _null_ _null_ _null_ _null_ _null_ date_lt_timestamptz _null_ _null_ _null_ ));
-DATA(insert OID = 2352 (  date_le_timestamptz     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1082 1184" _null_ _null_ _null_ _null_ _null_ date_le_timestamptz _null_ _null_ _null_ ));
-DATA(insert OID = 2353 (  date_eq_timestamptz     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1082 1184" _null_ _null_ _null_ _null_ _null_ date_eq_timestamptz _null_ _null_ _null_ ));
-DATA(insert OID = 2354 (  date_gt_timestamptz     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1082 1184" _null_ _null_ _null_ _null_ _null_ date_gt_timestamptz _null_ _null_ _null_ ));
-DATA(insert OID = 2355 (  date_ge_timestamptz     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1082 1184" _null_ _null_ _null_ _null_ _null_ date_ge_timestamptz _null_ _null_ _null_ ));
-DATA(insert OID = 2356 (  date_ne_timestamptz     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1082 1184" _null_ _null_ _null_ _null_ _null_ date_ne_timestamptz _null_ _null_ _null_ ));
-DATA(insert OID = 2357 (  date_cmp_timestamptz    PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 23 "1082 1184" _null_ _null_ _null_ _null_ _null_ date_cmp_timestamptz _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-
-DATA(insert OID = 2364 (  timestamp_lt_date               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1114 1082" _null_ _null_ _null_ _null_ _null_ timestamp_lt_date _null_ _null_ _null_ ));
-DATA(insert OID = 2365 (  timestamp_le_date               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1114 1082" _null_ _null_ _null_ _null_ _null_ timestamp_le_date _null_ _null_ _null_ ));
-DATA(insert OID = 2366 (  timestamp_eq_date               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1114 1082" _null_ _null_ _null_ _null_ _null_ timestamp_eq_date _null_ _null_ _null_ ));
-DATA(insert OID = 2367 (  timestamp_gt_date               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1114 1082" _null_ _null_ _null_ _null_ _null_ timestamp_gt_date _null_ _null_ _null_ ));
-DATA(insert OID = 2368 (  timestamp_ge_date               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1114 1082" _null_ _null_ _null_ _null_ _null_ timestamp_ge_date _null_ _null_ _null_ ));
-DATA(insert OID = 2369 (  timestamp_ne_date               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "1114 1082" _null_ _null_ _null_ _null_ _null_ timestamp_ne_date _null_ _null_ _null_ ));
-DATA(insert OID = 2370 (  timestamp_cmp_date      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "1114 1082" _null_ _null_ _null_ _null_ _null_ timestamp_cmp_date _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-
-DATA(insert OID = 2377 (  timestamptz_lt_date     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1184 1082" _null_ _null_ _null_ _null_ _null_ timestamptz_lt_date _null_ _null_ _null_ ));
-DATA(insert OID = 2378 (  timestamptz_le_date     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1184 1082" _null_ _null_ _null_ _null_ _null_ timestamptz_le_date _null_ _null_ _null_ ));
-DATA(insert OID = 2379 (  timestamptz_eq_date     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1184 1082" _null_ _null_ _null_ _null_ _null_ timestamptz_eq_date _null_ _null_ _null_ ));
-DATA(insert OID = 2380 (  timestamptz_gt_date     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1184 1082" _null_ _null_ _null_ _null_ _null_ timestamptz_gt_date _null_ _null_ _null_ ));
-DATA(insert OID = 2381 (  timestamptz_ge_date     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1184 1082" _null_ _null_ _null_ _null_ _null_ timestamptz_ge_date _null_ _null_ _null_ ));
-DATA(insert OID = 2382 (  timestamptz_ne_date     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1184 1082" _null_ _null_ _null_ _null_ _null_ timestamptz_ne_date _null_ _null_ _null_ ));
-DATA(insert OID = 2383 (  timestamptz_cmp_date    PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 23 "1184 1082" _null_ _null_ _null_ _null_ _null_ timestamptz_cmp_date _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-
-/* crosstype operations for timestamp vs. timestamptz */
-DATA(insert OID = 2520 (  timestamp_lt_timestamptz     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1114 1184" _null_ _null_ _null_ _null_ _null_ timestamp_lt_timestamptz _null_ _null_ _null_ ));
-DATA(insert OID = 2521 (  timestamp_le_timestamptz     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1114 1184" _null_ _null_ _null_ _null_ _null_ timestamp_le_timestamptz _null_ _null_ _null_ ));
-DATA(insert OID = 2522 (  timestamp_eq_timestamptz     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1114 1184" _null_ _null_ _null_ _null_ _null_ timestamp_eq_timestamptz _null_ _null_ _null_ ));
-DATA(insert OID = 2523 (  timestamp_gt_timestamptz     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1114 1184" _null_ _null_ _null_ _null_ _null_ timestamp_gt_timestamptz _null_ _null_ _null_ ));
-DATA(insert OID = 2524 (  timestamp_ge_timestamptz     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1114 1184" _null_ _null_ _null_ _null_ _null_ timestamp_ge_timestamptz _null_ _null_ _null_ ));
-DATA(insert OID = 2525 (  timestamp_ne_timestamptz     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1114 1184" _null_ _null_ _null_ _null_ _null_ timestamp_ne_timestamptz _null_ _null_ _null_ ));
-DATA(insert OID = 2526 (  timestamp_cmp_timestamptz PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 23 "1114 1184" _null_ _null_ _null_ _null_ _null_ timestamp_cmp_timestamptz _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-
-DATA(insert OID = 2527 (  timestamptz_lt_timestamp     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1184 1114" _null_ _null_ _null_ _null_ _null_ timestamptz_lt_timestamp _null_ _null_ _null_ ));
-DATA(insert OID = 2528 (  timestamptz_le_timestamp     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1184 1114" _null_ _null_ _null_ _null_ _null_ timestamptz_le_timestamp _null_ _null_ _null_ ));
-DATA(insert OID = 2529 (  timestamptz_eq_timestamp     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1184 1114" _null_ _null_ _null_ _null_ _null_ timestamptz_eq_timestamp _null_ _null_ _null_ ));
-DATA(insert OID = 2530 (  timestamptz_gt_timestamp     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1184 1114" _null_ _null_ _null_ _null_ _null_ timestamptz_gt_timestamp _null_ _null_ _null_ ));
-DATA(insert OID = 2531 (  timestamptz_ge_timestamp     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1184 1114" _null_ _null_ _null_ _null_ _null_ timestamptz_ge_timestamp _null_ _null_ _null_ ));
-DATA(insert OID = 2532 (  timestamptz_ne_timestamp     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 16 "1184 1114" _null_ _null_ _null_ _null_ _null_ timestamptz_ne_timestamp _null_ _null_ _null_ ));
-DATA(insert OID = 2533 (  timestamptz_cmp_timestamp PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 23 "1184 1114" _null_ _null_ _null_ _null_ _null_ timestamptz_cmp_timestamp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-
-
-/* send/receive functions */
-DATA(insert OID = 2400 (  array_recv              PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 2277 "2281 26 23" _null_ _null_ _null_ _null_  _null_ array_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2401 (  array_send              PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 17 "2277" _null_ _null_ _null_ _null_ _null_        array_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2402 (  record_recv             PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 2249 "2281 26 23" _null_ _null_ _null_ _null_  _null_ record_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2403 (  record_send             PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 17 "2249" _null_ _null_ _null_ _null_  _null_ record_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2404 (  int2recv                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 21 "2281" _null_ _null_ _null_ _null_ _null_        int2recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2405 (  int2send                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "21" _null_ _null_ _null_ _null_ _null_ int2send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2406 (  int4recv                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "2281" _null_ _null_ _null_ _null_ _null_        int4recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2407 (  int4send                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "23" _null_ _null_ _null_ _null_ _null_ int4send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2408 (  int8recv                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 20 "2281" _null_ _null_ _null_ _null_ _null_        int8recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2409 (  int8send                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "20" _null_ _null_ _null_ _null_ _null_ int8send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2410 (  int2vectorrecv          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 22 "2281" _null_ _null_ _null_ _null_ _null_        int2vectorrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2411 (  int2vectorsend          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "22" _null_ _null_ _null_ _null_ _null_ int2vectorsend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2412 (  bytearecv                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "2281" _null_ _null_ _null_ _null_ _null_        bytearecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2413 (  byteasend                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "17" _null_ _null_ _null_ _null_ _null_ byteasend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2414 (  textrecv                        PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 25 "2281" _null_ _null_ _null_ _null_ _null_        textrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2415 (  textsend                        PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 17 "25" _null_ _null_ _null_ _null_ _null_ textsend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2416 (  unknownrecv             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 705 "2281" _null_ _null_ _null_ _null_ _null_ unknownrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2417 (  unknownsend             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "705" _null_ _null_ _null_ _null_ _null_ unknownsend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2418 (  oidrecv                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 26 "2281" _null_ _null_ _null_ _null_ _null_        oidrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2419 (  oidsend                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "26" _null_ _null_ _null_ _null_ _null_ oidsend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2420 (  oidvectorrecv                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 30 "2281" _null_ _null_ _null_ _null_ _null_        oidvectorrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2421 (  oidvectorsend                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "30" _null_ _null_ _null_ _null_ _null_ oidvectorsend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2422 (  namerecv                        PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 19 "2281" _null_ _null_ _null_ _null_ _null_        namerecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2423 (  namesend                        PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 17 "19" _null_ _null_ _null_ _null_ _null_ namesend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2424 (  float4recv              PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 700 "2281" _null_ _null_ _null_ _null_ _null_ float4recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2425 (  float4send              PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "700" _null_ _null_ _null_ _null_ _null_ float4send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2426 (  float8recv              PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 701 "2281" _null_ _null_ _null_ _null_ _null_ float8recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2427 (  float8send              PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "701" _null_ _null_ _null_ _null_ _null_ float8send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2428 (  point_recv              PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 600 "2281" _null_ _null_ _null_ _null_ _null_ point_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2429 (  point_send              PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "600" _null_ _null_ _null_ _null_ _null_ point_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2430 (  bpcharrecv              PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 1042 "2281 26 23" _null_ _null_ _null_ _null_  _null_ bpcharrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2431 (  bpcharsend              PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 17 "1042" _null_ _null_ _null_ _null_ _null_        bpcharsend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2432 (  varcharrecv             PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 1043 "2281 26 23" _null_ _null_ _null_ _null_  _null_ varcharrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2433 (  varcharsend             PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 17 "1043" _null_ _null_ _null_ _null_ _null_        varcharsend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2434 (  charrecv                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 18 "2281" _null_ _null_ _null_ _null_ _null_        charrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2435 (  charsend                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "18" _null_ _null_ _null_ _null_ _null_ charsend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2436 (  boolrecv                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "2281" _null_ _null_ _null_ _null_ _null_        boolrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2437 (  boolsend                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "16" _null_ _null_ _null_ _null_ _null_ boolsend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2438 (  tidrecv                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 27 "2281" _null_ _null_ _null_ _null_ _null_        tidrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2439 (  tidsend                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "27" _null_ _null_ _null_ _null_ _null_ tidsend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2440 (  xidrecv                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 28 "2281" _null_ _null_ _null_ _null_ _null_        xidrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2441 (  xidsend                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "28" _null_ _null_ _null_ _null_ _null_ xidsend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2442 (  cidrecv                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 29 "2281" _null_ _null_ _null_ _null_ _null_        cidrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2443 (  cidsend                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "29" _null_ _null_ _null_ _null_ _null_ cidsend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2444 (  regprocrecv             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 24 "2281" _null_ _null_ _null_ _null_ _null_        regprocrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2445 (  regprocsend             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "24" _null_ _null_ _null_ _null_ _null_ regprocsend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2446 (  regprocedurerecv        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2202 "2281" _null_ _null_ _null_ _null_ _null_ regprocedurerecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2447 (  regproceduresend        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "2202" _null_ _null_ _null_ _null_ _null_        regproceduresend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2448 (  regoperrecv             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2203 "2281" _null_ _null_ _null_ _null_ _null_ regoperrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2449 (  regopersend             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "2203" _null_ _null_ _null_ _null_ _null_        regopersend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2450 (  regoperatorrecv         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2204 "2281" _null_ _null_ _null_ _null_ _null_ regoperatorrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2451 (  regoperatorsend         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "2204" _null_ _null_ _null_ _null_ _null_        regoperatorsend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2452 (  regclassrecv            PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2205 "2281" _null_ _null_ _null_ _null_ _null_ regclassrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2453 (  regclasssend            PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "2205" _null_ _null_ _null_ _null_ _null_        regclasssend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2454 (  regtyperecv             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2206 "2281" _null_ _null_ _null_ _null_ _null_ regtyperecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2455 (  regtypesend             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "2206" _null_ _null_ _null_ _null_ _null_        regtypesend _null_ _null_ _null_ ));
-DESCR("I/O");
-
-DATA(insert OID = 4094 (  regrolerecv             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 4096 "2281" _null_ _null_ _null_ _null_ _null_      regrolerecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 4095 (  regrolesend             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "4096" _null_ _null_ _null_ _null_ _null_        regrolesend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 4087 (  regnamespacerecv        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 4089 "2281" _null_ _null_ _null_ _null_ _null_ regnamespacerecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 4088 (  regnamespacesend        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "4089" _null_ _null_ _null_ _null_ _null_        regnamespacesend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2456 (  bit_recv                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1560 "2281 26 23" _null_ _null_ _null_ _null_  _null_ bit_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2457 (  bit_send                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "1560" _null_ _null_ _null_ _null_ _null_        bit_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2458 (  varbit_recv             PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1562 "2281 26 23" _null_ _null_ _null_ _null_  _null_ varbit_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2459 (  varbit_send             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "1562" _null_ _null_ _null_ _null_ _null_        varbit_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2460 (  numeric_recv            PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1700 "2281 26 23" _null_ _null_ _null_ _null_  _null_ numeric_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2461 (  numeric_send            PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "1700" _null_ _null_ _null_ _null_ _null_        numeric_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2462 (  abstimerecv             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 702 "2281" _null_ _null_ _null_ _null_ _null_ abstimerecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2463 (  abstimesend             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "702" _null_ _null_ _null_ _null_ _null_ abstimesend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2464 (  reltimerecv             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 703 "2281" _null_ _null_ _null_ _null_ _null_ reltimerecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2465 (  reltimesend             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "703" _null_ _null_ _null_ _null_ _null_ reltimesend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2466 (  tintervalrecv                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 704 "2281" _null_ _null_ _null_ _null_ _null_ tintervalrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2467 (  tintervalsend                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "704" _null_ _null_ _null_ _null_ _null_ tintervalsend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2468 (  date_recv                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 1082 "2281" _null_ _null_ _null_ _null_ _null_ date_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2469 (  date_send                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "1082" _null_ _null_ _null_ _null_ _null_        date_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2470 (  time_recv                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1083 "2281 26 23" _null_ _null_ _null_ _null_  _null_ time_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2471 (  time_send                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "1083" _null_ _null_ _null_ _null_ _null_        time_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2472 (  timetz_recv             PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1266 "2281 26 23" _null_ _null_ _null_ _null_  _null_ timetz_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2473 (  timetz_send             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "1266" _null_ _null_ _null_ _null_ _null_        timetz_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2474 (  timestamp_recv          PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1114 "2281 26 23" _null_ _null_ _null_ _null_  _null_ timestamp_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2475 (  timestamp_send          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "1114" _null_ _null_ _null_ _null_ _null_        timestamp_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2476 (  timestamptz_recv        PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1184 "2281 26 23" _null_ _null_ _null_ _null_  _null_ timestamptz_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2477 (  timestamptz_send        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "1184" _null_ _null_ _null_ _null_ _null_        timestamptz_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2478 (  interval_recv                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1186 "2281 26 23" _null_ _null_ _null_ _null_  _null_ interval_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2479 (  interval_send                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "1186" _null_ _null_ _null_ _null_ _null_        interval_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2480 (  lseg_recv                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 601 "2281" _null_ _null_ _null_ _null_ _null_ lseg_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2481 (  lseg_send                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "601" _null_ _null_ _null_ _null_ _null_ lseg_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2482 (  path_recv                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 602 "2281" _null_ _null_ _null_ _null_ _null_ path_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2483 (  path_send                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "602" _null_ _null_ _null_ _null_ _null_ path_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2484 (  box_recv                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 603 "2281" _null_ _null_ _null_ _null_ _null_ box_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2485 (  box_send                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "603" _null_ _null_ _null_ _null_ _null_ box_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2486 (  poly_recv                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 604 "2281" _null_ _null_ _null_ _null_ _null_ poly_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2487 (  poly_send                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "604" _null_ _null_ _null_ _null_ _null_ poly_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2488 (  line_recv                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 628 "2281" _null_ _null_ _null_ _null_ _null_ line_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2489 (  line_send                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "628" _null_ _null_ _null_ _null_ _null_ line_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2490 (  circle_recv             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 718 "2281" _null_ _null_ _null_ _null_ _null_ circle_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2491 (  circle_send             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "718" _null_ _null_ _null_ _null_ _null_ circle_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2492 (  cash_recv                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 790 "2281" _null_ _null_ _null_ _null_ _null_ cash_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2493 (  cash_send                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "790" _null_ _null_ _null_ _null_ _null_ cash_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2494 (  macaddr_recv            PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 829 "2281" _null_ _null_ _null_ _null_ _null_ macaddr_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2495 (  macaddr_send            PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "829" _null_ _null_ _null_ _null_ _null_ macaddr_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2496 (  inet_recv                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 869 "2281" _null_ _null_ _null_ _null_ _null_ inet_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2497 (  inet_send                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "869" _null_ _null_ _null_ _null_ _null_ inet_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2498 (  cidr_recv                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 650 "2281" _null_ _null_ _null_ _null_ _null_ cidr_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2499 (  cidr_send                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "650" _null_ _null_ _null_ _null_ _null_ cidr_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2500 (  cstring_recv            PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "2281" _null_ _null_ _null_ _null_ _null_ cstring_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2501 (  cstring_send            PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 17 "2275" _null_ _null_ _null_ _null_ _null_        cstring_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2502 (  anyarray_recv                   PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2277 "2281" _null_ _null_ _null_ _null_ _null_ anyarray_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2503 (  anyarray_send                   PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 17 "2277" _null_ _null_ _null_ _null_ _null_        anyarray_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3120 (  void_recv                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ void_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3121 (  void_send                       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "2278" _null_ _null_ _null_ _null_ _null_        void_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3446 (  macaddr8_recv                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 774 "2281" _null_ _null_ _null_ _null_ _null_ macaddr8_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3447 (  macaddr8_send                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "774" _null_ _null_ _null_ _null_ _null_ macaddr8_send _null_ _null_ _null_ ));
-DESCR("I/O");
-
-/* System-view support functions with pretty-print option */
-DATA(insert OID = 2504 (  pg_get_ruledef          PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "26 16" _null_ _null_ _null_ _null_ _null_ pg_get_ruledef_ext _null_ _null_ _null_ ));
-DESCR("source text of a rule with pretty-print option");
-DATA(insert OID = 2505 (  pg_get_viewdef          PGNSP PGUID 12 1 0 0 0 f f f t f s r 2 0 25 "25 16" _null_ _null_ _null_ _null_ _null_ pg_get_viewdef_name_ext _null_ _null_ _null_ ));
-DESCR("select statement of a view with pretty-print option");
-DATA(insert OID = 2506 (  pg_get_viewdef          PGNSP PGUID 12 1 0 0 0 f f f t f s r 2 0 25 "26 16" _null_ _null_ _null_ _null_ _null_ pg_get_viewdef_ext _null_ _null_ _null_ ));
-DESCR("select statement of a view with pretty-print option");
-DATA(insert OID = 3159 (  pg_get_viewdef          PGNSP PGUID 12 1 0 0 0 f f f t f s r 2 0 25 "26 23" _null_ _null_ _null_ _null_ _null_ pg_get_viewdef_wrap _null_ _null_ _null_ ));
-DESCR("select statement of a view with pretty-printing and specified line wrapping");
-DATA(insert OID = 2507 (  pg_get_indexdef         PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 25 "26 23 16" _null_ _null_ _null_ _null_ _null_    pg_get_indexdef_ext _null_ _null_ _null_ ));
-DESCR("index description (full create statement or single expression) with pretty-print option");
-DATA(insert OID = 2508 (  pg_get_constraintdef PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "26 16" _null_ _null_ _null_ _null_ _null_ pg_get_constraintdef_ext _null_ _null_ _null_ ));
-DESCR("constraint description with pretty-print option");
-DATA(insert OID = 2509 (  pg_get_expr             PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 25 "194 26 16" _null_ _null_ _null_ _null_ _null_ pg_get_expr_ext _null_ _null_ _null_ ));
-DESCR("deparse an encoded expression with pretty-print option");
-DATA(insert OID = 2510 (  pg_prepared_statement PGNSP PGUID 12 1 1000 0 0 f f f t t s r 0 0 2249 "" "{25,25,1184,2211,16}" "{o,o,o,o,o}" "{name,statement,prepare_time,parameter_types,from_sql}" _null_ _null_ pg_prepared_statement _null_ _null_ _null_ ));
-DESCR("get the prepared statements for this session");
-DATA(insert OID = 2511 (  pg_cursor PGNSP PGUID 12 1 1000 0 0 f f f t t s r 0 0 2249 "" "{25,25,16,16,16,1184}" "{o,o,o,o,o,o}" "{name,statement,is_holdable,is_binary,is_scrollable,creation_time}" _null_ _null_ pg_cursor _null_ _null_ _null_ ));
-DESCR("get the open cursors for this session");
-DATA(insert OID = 2599 (  pg_timezone_abbrevs  PGNSP PGUID 12 1 1000 0 0 f f f t t s s 0 0 2249 "" "{25,1186,16}" "{o,o,o}" "{abbrev,utc_offset,is_dst}" _null_ _null_ pg_timezone_abbrevs _null_ _null_ _null_ ));
-DESCR("get the available time zone abbreviations");
-DATA(insert OID = 2856 (  pg_timezone_names            PGNSP PGUID 12 1 1000 0 0 f f f t t s s 0 0 2249 "" "{25,25,1186,16}" "{o,o,o,o}" "{name,abbrev,utc_offset,is_dst}" _null_ _null_ pg_timezone_names _null_ _null_ _null_ ));
-DESCR("get the available time zone names");
-DATA(insert OID = 2730 (  pg_get_triggerdef            PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 25 "26 16" _null_ _null_ _null_ _null_ _null_ pg_get_triggerdef_ext _null_ _null_ _null_ ));
-DESCR("trigger description with pretty-print option");
-
-/* asynchronous notifications */
-DATA(insert OID = 3035 (  pg_listening_channels PGNSP PGUID 12 1 10 0 0 f f f t t s r 0 0 25 "" _null_ _null_ _null_ _null_ _null_ pg_listening_channels _null_ _null_ _null_ ));
-DESCR("get the channels that the current backend listens to");
-DATA(insert OID = 3036 (  pg_notify                            PGNSP PGUID 12 1 0 0 0 f f f f f v r 2 0 2278 "25 25" _null_ _null_ _null_ _null_ _null_ pg_notify _null_ _null_ _null_ ));
-DESCR("send a notification event");
-DATA(insert OID = 3296 (  pg_notification_queue_usage  PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 701 "" _null_ _null_ _null_ _null_ _null_ pg_notification_queue_usage _null_ _null_ _null_ ));
-DESCR("get the fraction of the asynchronous notification queue currently in use");
-
-/* non-persistent series generator */
-DATA(insert OID = 1066 (  generate_series PGNSP PGUID 12 1 1000 0 0 f f f t t i s 3 0 23 "23 23 23" _null_ _null_ _null_ _null_ _null_ generate_series_step_int4 _null_ _null_ _null_ ));
-DESCR("non-persistent series generator");
-DATA(insert OID = 1067 (  generate_series PGNSP PGUID 12 1 1000 0 0 f f f t t i s 2 0 23 "23 23" _null_ _null_ _null_ _null_ _null_ generate_series_int4 _null_ _null_ _null_ ));
-DESCR("non-persistent series generator");
-DATA(insert OID = 1068 (  generate_series PGNSP PGUID 12 1 1000 0 0 f f f t t i s 3 0 20 "20 20 20" _null_ _null_ _null_ _null_ _null_ generate_series_step_int8 _null_ _null_ _null_ ));
-DESCR("non-persistent series generator");
-DATA(insert OID = 1069 (  generate_series PGNSP PGUID 12 1 1000 0 0 f f f t t i s 2 0 20 "20 20" _null_ _null_ _null_ _null_ _null_ generate_series_int8 _null_ _null_ _null_ ));
-DESCR("non-persistent series generator");
-DATA(insert OID = 3259 (  generate_series PGNSP PGUID 12 1 1000 0 0 f f f t t i s 3 0 1700 "1700 1700 1700" _null_ _null_ _null_ _null_ _null_ generate_series_step_numeric _null_ _null_ _null_ ));
-DESCR("non-persistent series generator");
-DATA(insert OID = 3260 (  generate_series PGNSP PGUID 12 1 1000 0 0 f f f t t i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_ generate_series_numeric _null_ _null_ _null_ ));
-DESCR("non-persistent series generator");
-DATA(insert OID = 938  (  generate_series PGNSP PGUID 12 1 1000 0 0 f f f t t i s 3 0 1114 "1114 1114 1186" _null_ _null_ _null_ _null_ _null_ generate_series_timestamp _null_ _null_ _null_ ));
-DESCR("non-persistent series generator");
-DATA(insert OID = 939  (  generate_series PGNSP PGUID 12 1 1000 0 0 f f f t t s s 3 0 1184 "1184 1184 1186" _null_ _null_ _null_ _null_ _null_ generate_series_timestamptz _null_ _null_ _null_ ));
-DESCR("non-persistent series generator");
-
-/* boolean aggregates */
-DATA(insert OID = 2515 ( booland_statefunc                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "16 16" _null_ _null_ _null_ _null_ _null_ booland_statefunc _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 2516 ( boolor_statefunc                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "16 16" _null_ _null_ _null_ _null_ _null_ boolor_statefunc _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3496 ( bool_accum                                       PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 16" _null_ _null_ _null_ _null_ _null_ bool_accum _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3497 ( bool_accum_inv                                   PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 16" _null_ _null_ _null_ _null_ _null_ bool_accum_inv _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3498 ( bool_alltrue                             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "2281" _null_ _null_ _null_ _null_ _null_ bool_alltrue _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3499 ( bool_anytrue                             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "2281" _null_ _null_ _null_ _null_ _null_ bool_anytrue _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 2517 ( bool_and                                         PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 16 "16" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("boolean-and aggregate");
-/* ANY, SOME? These names conflict with subquery operators. See doc. */
-DATA(insert OID = 2518 ( bool_or                                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 16 "16" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("boolean-or aggregate");
-DATA(insert OID = 2519 ( every                                            PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 16 "16" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("boolean-and aggregate");
-
-/* bitwise integer aggregates */
-DATA(insert OID = 2236 ( bit_and                                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 21 "21" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("bitwise-and smallint aggregate");
-DATA(insert OID = 2237 ( bit_or                                                   PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 21 "21" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("bitwise-or smallint aggregate");
-DATA(insert OID = 2238 ( bit_and                                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("bitwise-and integer aggregate");
-DATA(insert OID = 2239 ( bit_or                                                   PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("bitwise-or integer aggregate");
-DATA(insert OID = 2240 ( bit_and                                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 20 "20" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("bitwise-and bigint aggregate");
-DATA(insert OID = 2241 ( bit_or                                                   PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 20 "20" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("bitwise-or bigint aggregate");
-DATA(insert OID = 2242 ( bit_and                                          PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1560 "1560" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("bitwise-and bit aggregate");
-DATA(insert OID = 2243 ( bit_or                                                   PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 1560 "1560" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("bitwise-or bit aggregate");
-
-/* formerly-missing interval + datetime operators */
-DATA(insert OID = 2546 ( interval_pl_date                      PGNSP PGUID 14 1 0 0 0 f f f t f i s 2 0 1114 "1186 1082" _null_ _null_ _null_ _null_ _null_ "select $2 + $1" _null_ _null_ _null_ ));
-DATA(insert OID = 2547 ( interval_pl_timetz                    PGNSP PGUID 14 1 0 0 0 f f f t f i s 2 0 1266 "1186 1266" _null_ _null_ _null_ _null_ _null_ "select $2 + $1" _null_ _null_ _null_ ));
-DATA(insert OID = 2548 ( interval_pl_timestamp         PGNSP PGUID 14 1 0 0 0 f f f t f i s 2 0 1114 "1186 1114" _null_ _null_ _null_ _null_ _null_ "select $2 + $1" _null_ _null_ _null_ ));
-DATA(insert OID = 2549 ( interval_pl_timestamptz       PGNSP PGUID 14 1 0 0 0 f f f t f s s 2 0 1184 "1186 1184" _null_ _null_ _null_ _null_ _null_ "select $2 + $1" _null_ _null_ _null_ ));
-DATA(insert OID = 2550 ( integer_pl_date                       PGNSP PGUID 14 1 0 0 0 f f f t f i s 2 0 1082 "23 1082" _null_ _null_ _null_ _null_ _null_ "select $2 + $1" _null_ _null_ _null_ ));
-
-DATA(insert OID = 2556 ( pg_tablespace_databases       PGNSP PGUID 12 1 1000 0 0 f f f t t s s 1 0 26 "26" _null_ _null_ _null_ _null_ _null_ pg_tablespace_databases _null_ _null_ _null_ ));
-DESCR("get OIDs of databases in a tablespace");
-
-DATA(insert OID = 2557 ( bool                             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "23" _null_ _null_ _null_ _null_ _null_ int4_bool _null_ _null_ _null_ ));
-DESCR("convert int4 to boolean");
-DATA(insert OID = 2558 ( int4                             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "16" _null_ _null_ _null_ _null_ _null_ bool_int4 _null_ _null_ _null_ ));
-DESCR("convert boolean to int4");
-DATA(insert OID = 2559 ( lastval                          PGNSP PGUID 12 1 0 0 0 f f f t f v u 0 0 20 "" _null_ _null_ _null_ _null_ _null_    lastval _null_ _null_ _null_ ));
-DESCR("current value from last used sequence");
-
-/* start time function */
-DATA(insert OID = 2560 (  pg_postmaster_start_time     PGNSP PGUID 12 1 0 0 0 f f f t f s s 0 0 1184 "" _null_ _null_ _null_ _null_ _null_ pg_postmaster_start_time _null_ _null_ _null_ ));
-DESCR("postmaster start time");
-/* config reload time function */
-DATA(insert OID = 2034 (  pg_conf_load_time                    PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 1184 "" _null_ _null_ _null_ _null_ _null_ pg_conf_load_time _null_ _null_ _null_ ));
-DESCR("configuration load time");
-
-/* new functions for Y-direction rtree opclasses */
-DATA(insert OID = 2562 (  box_below               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_below _null_ _null_ _null_ ));
-DATA(insert OID = 2563 (  box_overbelow    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_overbelow _null_ _null_ _null_ ));
-DATA(insert OID = 2564 (  box_overabove    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_overabove _null_ _null_ _null_ ));
-DATA(insert OID = 2565 (  box_above               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "603 603" _null_ _null_ _null_ _null_ _null_ box_above _null_ _null_ _null_ ));
-DATA(insert OID = 2566 (  poly_below      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "604 604" _null_ _null_ _null_ _null_ _null_ poly_below _null_ _null_ _null_ ));
-DATA(insert OID = 2567 (  poly_overbelow   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "604 604" _null_ _null_ _null_ _null_ _null_ poly_overbelow _null_ _null_ _null_ ));
-DATA(insert OID = 2568 (  poly_overabove   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "604 604" _null_ _null_ _null_ _null_ _null_ poly_overabove _null_ _null_ _null_ ));
-DATA(insert OID = 2569 (  poly_above      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "604 604" _null_ _null_ _null_ _null_ _null_ poly_above _null_ _null_ _null_ ));
-DATA(insert OID = 2587 (  circle_overbelow             PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_overbelow _null_ _null_ _null_ ));
-DATA(insert OID = 2588 (  circle_overabove             PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "718 718" _null_ _null_ _null_ _null_  _null_ circle_overabove _null_ _null_ _null_ ));
-
-/* support functions for GiST r-tree emulation */
-DATA(insert OID = 2578 (  gist_box_consistent  PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "2281 603 21 26 2281" _null_ _null_ _null_ _null_ _null_    gist_box_consistent _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 2581 (  gist_box_penalty             PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 2281 "2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gist_box_penalty _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 2582 (  gist_box_picksplit   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2281 "2281 2281" _null_ _null_ _null_ _null_ _null_    gist_box_picksplit _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 2583 (  gist_box_union               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 603 "2281 2281" _null_ _null_ _null_ _null_ _null_ gist_box_union _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 2584 (  gist_box_same                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 2281 "603 603 2281" _null_ _null_ _null_ _null_ _null_ gist_box_same _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 2585 (  gist_poly_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "2281 604 21 26 2281" _null_ _null_ _null_ _null_ _null_    gist_poly_consistent _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 2586 (  gist_poly_compress   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ gist_poly_compress _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 2591 (  gist_circle_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "2281 718 21 26 2281" _null_ _null_ _null_ _null_ _null_ gist_circle_consistent _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 2592 (  gist_circle_compress PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ gist_circle_compress _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 1030 (  gist_point_compress  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ gist_point_compress _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 3282 (  gist_point_fetch     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ gist_point_fetch _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 2179 (  gist_point_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "2281 600 21 26 2281" _null_ _null_ _null_ _null_ _null_   gist_point_consistent _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 3064 (  gist_point_distance  PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 701 "2281 600 21 26 2281" _null_ _null_ _null_ _null_ _null_ gist_point_distance _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 3280 (  gist_circle_distance PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 701 "2281 718 21 26 2281" _null_ _null_ _null_ _null_ _null_ gist_circle_distance _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 3288 (  gist_poly_distance   PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 701 "2281 604 21 26 2281" _null_ _null_ _null_ _null_ _null_ gist_poly_distance _null_ _null_ _null_ ));
-DESCR("GiST support");
-
-/* GIN array support */
-DATA(insert OID = 2743 (  ginarrayextract       PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 2281 "2277 2281 2281" _null_ _null_ _null_ _null_ _null_ ginarrayextract _null_ _null_ _null_ ));
-DESCR("GIN array support");
-DATA(insert OID = 2774 (  ginqueryarrayextract PGNSP PGUID 12 1 0 0 0 f f f t f i s 7 0 2281 "2277 2281 21 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ ginqueryarrayextract _null_ _null_ _null_ ));
-DESCR("GIN array support");
-DATA(insert OID = 2744 (  ginarrayconsistent   PGNSP PGUID 12 1 0 0 0 f f f t f i s 8 0 16 "2281 21 2277 23 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ ginarrayconsistent _null_ _null_ _null_ ));
-DESCR("GIN array support");
-DATA(insert OID = 3920 (  ginarraytriconsistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 7 0 18 "2281 21 2277 23 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ ginarraytriconsistent _null_ _null_ _null_ ));
-DESCR("GIN array support");
-DATA(insert OID = 3076 (  ginarrayextract       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2281 "2277 2281" _null_ _null_ _null_ _null_ _null_ ginarrayextract_2args _null_ _null_ _null_ ));
-DESCR("GIN array support (obsolete)");
-
-/* overlap/contains/contained */
-DATA(insert OID = 2747 (  arrayoverlap            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2277 2277" _null_ _null_ _null_ _null_ _null_ arrayoverlap _null_ _null_ _null_ ));
-DATA(insert OID = 2748 (  arraycontains                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2277 2277" _null_ _null_ _null_ _null_ _null_ arraycontains _null_ _null_ _null_ ));
-DATA(insert OID = 2749 (  arraycontained          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2277 2277" _null_ _null_ _null_ _null_ _null_ arraycontained _null_ _null_ _null_ ));
-
-/* BRIN minmax */
-DATA(insert OID = 3383 ( brin_minmax_opcinfo   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ brin_minmax_opcinfo _null_ _null_ _null_ ));
-DESCR("BRIN minmax support");
-DATA(insert OID = 3384 ( brin_minmax_add_value PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 16 "2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ brin_minmax_add_value _null_ _null_ _null_ ));
-DESCR("BRIN minmax support");
-DATA(insert OID = 3385 ( brin_minmax_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 16 "2281 2281 2281" _null_ _null_ _null_ _null_ _null_ brin_minmax_consistent _null_ _null_ _null_ ));
-DESCR("BRIN minmax support");
-DATA(insert OID = 3386 ( brin_minmax_union             PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 16 "2281 2281 2281" _null_ _null_ _null_ _null_ _null_ brin_minmax_union _null_ _null_ _null_ ));
-DESCR("BRIN minmax support");
-
-/* BRIN inclusion */
-DATA(insert OID = 4105 ( brin_inclusion_opcinfo PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ brin_inclusion_opcinfo _null_ _null_ _null_ ));
-DESCR("BRIN inclusion support");
-DATA(insert OID = 4106 ( brin_inclusion_add_value PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 16 "2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ brin_inclusion_add_value _null_ _null_ _null_ ));
-DESCR("BRIN inclusion support");
-DATA(insert OID = 4107 ( brin_inclusion_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 16 "2281 2281 2281" _null_ _null_ _null_ _null_ _null_ brin_inclusion_consistent _null_ _null_ _null_ ));
-DESCR("BRIN inclusion support");
-DATA(insert OID = 4108 ( brin_inclusion_union  PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 16 "2281 2281 2281" _null_ _null_ _null_ _null_ _null_ brin_inclusion_union _null_ _null_ _null_ ));
-DESCR("BRIN inclusion support");
-
-/* userlock replacements */
-DATA(insert OID = 2880 (  pg_advisory_lock                             PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 2278 "20" _null_ _null_ _null_ _null_ _null_ pg_advisory_lock_int8 _null_ _null_ _null_ ));
-DESCR("obtain exclusive advisory lock");
-DATA(insert OID = 3089 (  pg_advisory_xact_lock                                PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 2278 "20" _null_ _null_ _null_ _null_ _null_ pg_advisory_xact_lock_int8 _null_ _null_ _null_ ));
-DESCR("obtain exclusive advisory lock");
-DATA(insert OID = 2881 (  pg_advisory_lock_shared              PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 2278 "20" _null_ _null_ _null_ _null_ _null_ pg_advisory_lock_shared_int8 _null_ _null_ _null_ ));
-DESCR("obtain shared advisory lock");
-DATA(insert OID = 3090 (  pg_advisory_xact_lock_shared         PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 2278 "20" _null_ _null_ _null_ _null_ _null_ pg_advisory_xact_lock_shared_int8 _null_ _null_ _null_ ));
-DESCR("obtain shared advisory lock");
-DATA(insert OID = 2882 (  pg_try_advisory_lock                 PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 16 "20" _null_ _null_ _null_ _null_ _null_ pg_try_advisory_lock_int8 _null_ _null_ _null_ ));
-DESCR("obtain exclusive advisory lock if available");
-DATA(insert OID = 3091 (  pg_try_advisory_xact_lock                    PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 16 "20" _null_ _null_ _null_ _null_ _null_ pg_try_advisory_xact_lock_int8 _null_ _null_ _null_ ));
-DESCR("obtain exclusive advisory lock if available");
-DATA(insert OID = 2883 (  pg_try_advisory_lock_shared  PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 16 "20" _null_ _null_ _null_ _null_ _null_ pg_try_advisory_lock_shared_int8 _null_ _null_ _null_ ));
-DESCR("obtain shared advisory lock if available");
-DATA(insert OID = 3092 (  pg_try_advisory_xact_lock_shared     PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 16 "20" _null_ _null_ _null_ _null_ _null_ pg_try_advisory_xact_lock_shared_int8 _null_ _null_ _null_ ));
-DESCR("obtain shared advisory lock if available");
-DATA(insert OID = 2884 (  pg_advisory_unlock                   PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 16 "20" _null_ _null_ _null_ _null_ _null_ pg_advisory_unlock_int8 _null_ _null_ _null_ ));
-DESCR("release exclusive advisory lock");
-DATA(insert OID = 2885 (  pg_advisory_unlock_shared            PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 16 "20" _null_ _null_ _null_ _null_ _null_ pg_advisory_unlock_shared_int8 _null_ _null_ _null_ ));
-DESCR("release shared advisory lock");
-DATA(insert OID = 2886 (  pg_advisory_lock                             PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 2278 "23 23" _null_ _null_ _null_ _null_ _null_ pg_advisory_lock_int4 _null_ _null_ _null_ ));
-DESCR("obtain exclusive advisory lock");
-DATA(insert OID = 3093 (  pg_advisory_xact_lock                                PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 2278 "23 23" _null_ _null_ _null_ _null_ _null_ pg_advisory_xact_lock_int4 _null_ _null_ _null_ ));
-DESCR("obtain exclusive advisory lock");
-DATA(insert OID = 2887 (  pg_advisory_lock_shared              PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 2278 "23 23" _null_ _null_ _null_ _null_ _null_ pg_advisory_lock_shared_int4 _null_ _null_ _null_ ));
-DESCR("obtain shared advisory lock");
-DATA(insert OID = 3094 (  pg_advisory_xact_lock_shared         PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 2278 "23 23" _null_ _null_ _null_ _null_ _null_ pg_advisory_xact_lock_shared_int4 _null_ _null_ _null_ ));
-DESCR("obtain shared advisory lock");
-DATA(insert OID = 2888 (  pg_try_advisory_lock                 PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 16 "23 23" _null_ _null_ _null_ _null_ _null_ pg_try_advisory_lock_int4 _null_ _null_ _null_ ));
-DESCR("obtain exclusive advisory lock if available");
-DATA(insert OID = 3095 (  pg_try_advisory_xact_lock                    PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 16 "23 23" _null_ _null_ _null_ _null_ _null_ pg_try_advisory_xact_lock_int4 _null_ _null_ _null_ ));
-DESCR("obtain exclusive advisory lock if available");
-DATA(insert OID = 2889 (  pg_try_advisory_lock_shared  PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 16 "23 23" _null_ _null_ _null_ _null_ _null_ pg_try_advisory_lock_shared_int4 _null_ _null_ _null_ ));
-DESCR("obtain shared advisory lock if available");
-DATA(insert OID = 3096 (  pg_try_advisory_xact_lock_shared     PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 16 "23 23" _null_ _null_ _null_ _null_ _null_ pg_try_advisory_xact_lock_shared_int4 _null_ _null_ _null_ ));
-DESCR("obtain shared advisory lock if available");
-DATA(insert OID = 2890 (  pg_advisory_unlock                   PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 16 "23 23" _null_ _null_ _null_ _null_ _null_ pg_advisory_unlock_int4 _null_ _null_ _null_ ));
-DESCR("release exclusive advisory lock");
-DATA(insert OID = 2891 (  pg_advisory_unlock_shared            PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 16 "23 23" _null_ _null_ _null_ _null_ _null_ pg_advisory_unlock_shared_int4 _null_ _null_ _null_ ));
-DESCR("release shared advisory lock");
-DATA(insert OID = 2892 (  pg_advisory_unlock_all               PGNSP PGUID 12 1 0 0 0 f f f t f v u 0 0 2278 "" _null_ _null_ _null_ _null_ _null_ pg_advisory_unlock_all _null_ _null_ _null_ ));
-DESCR("release all advisory locks");
-
-/* XML support */
-DATA(insert OID = 2893 (  xml_in                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 142 "2275" _null_ _null_ _null_ _null_ _null_ xml_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2894 (  xml_out                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "142" _null_ _null_ _null_ _null_ _null_ xml_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2895 (  xmlcomment      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 142 "25" _null_ _null_ _null_ _null_ _null_ xmlcomment _null_ _null_ _null_ ));
-DESCR("generate XML comment");
-DATA(insert OID = 2896 (  xml                     PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 142 "25" _null_ _null_ _null_ _null_ _null_ texttoxml _null_ _null_ _null_ ));
-DESCR("perform a non-validating parse of a character string to produce an XML value");
-DATA(insert OID = 2897 (  xmlvalidate     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "142 25" _null_ _null_ _null_ _null_ _null_ xmlvalidate _null_ _null_ _null_ ));
-DESCR("validate an XML value");
-DATA(insert OID = 2898 (  xml_recv                PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 142 "2281" _null_ _null_ _null_ _null_ _null_ xml_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2899 (  xml_send                PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 17 "142" _null_ _null_ _null_ _null_ _null_ xml_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2900 (  xmlconcat2      PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 142 "142 142" _null_ _null_ _null_ _null_ _null_ xmlconcat2 _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 2901 (  xmlagg                  PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 142 "142" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("concatenate XML values");
-DATA(insert OID = 2922 (  text                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "142" _null_ _null_ _null_ _null_ _null_ xmltotext _null_ _null_ _null_ ));
-DESCR("serialize an XML value to a character string");
-
-DATA(insert OID = 2923 (  table_to_xml                           PGNSP PGUID 12 100 0 0 0 f f f t f s r 4 0 142 "2205 16 16 25" _null_ _null_ "{tbl,nulls,tableforest,targetns}" _null_ _null_ table_to_xml _null_ _null_ _null_ ));
-DESCR("map table contents to XML");
-DATA(insert OID = 2924 (  query_to_xml                           PGNSP PGUID 12 100 0 0 0 f f f t f v u 4 0 142 "25 16 16 25" _null_ _null_ "{query,nulls,tableforest,targetns}" _null_ _null_ query_to_xml _null_ _null_ _null_ ));
-DESCR("map query result to XML");
-DATA(insert OID = 2925 (  cursor_to_xml                                  PGNSP PGUID 12 100 0 0 0 f f f t f v u 5 0 142 "1790 23 16 16 25" _null_ _null_ "{cursor,count,nulls,tableforest,targetns}" _null_ _null_ cursor_to_xml _null_ _null_ _null_ ));
-DESCR("map rows from cursor to XML");
-DATA(insert OID = 2926 (  table_to_xmlschema             PGNSP PGUID 12 100 0 0 0 f f f t f s r 4 0 142 "2205 16 16 25" _null_ _null_ "{tbl,nulls,tableforest,targetns}" _null_ _null_ table_to_xmlschema _null_ _null_ _null_ ));
-DESCR("map table structure to XML Schema");
-DATA(insert OID = 2927 (  query_to_xmlschema             PGNSP PGUID 12 100 0 0 0 f f f t f v u 4 0 142 "25 16 16 25" _null_ _null_ "{query,nulls,tableforest,targetns}" _null_ _null_ query_to_xmlschema _null_ _null_ _null_ ));
-DESCR("map query result structure to XML Schema");
-DATA(insert OID = 2928 (  cursor_to_xmlschema            PGNSP PGUID 12 100 0 0 0 f f f t f v u 4 0 142 "1790 16 16 25" _null_ _null_ "{cursor,nulls,tableforest,targetns}" _null_ _null_ cursor_to_xmlschema _null_ _null_ _null_ ));
-DESCR("map cursor structure to XML Schema");
-DATA(insert OID = 2929 (  table_to_xml_and_xmlschema  PGNSP PGUID 12 100 0 0 0 f f f t f s r 4 0 142 "2205 16 16 25" _null_ _null_ "{tbl,nulls,tableforest,targetns}" _null_ _null_ table_to_xml_and_xmlschema _null_ _null_ _null_ ));
-DESCR("map table contents and structure to XML and XML Schema");
-DATA(insert OID = 2930 (  query_to_xml_and_xmlschema  PGNSP PGUID 12 100 0 0 0 f f f t f v u 4 0 142 "25 16 16 25" _null_ _null_ "{query,nulls,tableforest,targetns}" _null_ _null_ query_to_xml_and_xmlschema _null_ _null_ _null_ ));
-DESCR("map query result and structure to XML and XML Schema");
-
-DATA(insert OID = 2933 (  schema_to_xml                                  PGNSP PGUID 12 100 0 0 0 f f f t f s r 4 0 142 "19 16 16 25" _null_ _null_ "{schema,nulls,tableforest,targetns}" _null_ _null_ schema_to_xml _null_ _null_ _null_ ));
-DESCR("map schema contents to XML");
-DATA(insert OID = 2934 (  schema_to_xmlschema            PGNSP PGUID 12 100 0 0 0 f f f t f s r 4 0 142 "19 16 16 25" _null_ _null_ "{schema,nulls,tableforest,targetns}" _null_ _null_ schema_to_xmlschema _null_ _null_ _null_ ));
-DESCR("map schema structure to XML Schema");
-DATA(insert OID = 2935 (  schema_to_xml_and_xmlschema PGNSP PGUID 12 100 0 0 0 f f f t f s r 4 0 142 "19 16 16 25" _null_ _null_ "{schema,nulls,tableforest,targetns}" _null_ _null_ schema_to_xml_and_xmlschema _null_ _null_ _null_ ));
-DESCR("map schema contents and structure to XML and XML Schema");
-
-DATA(insert OID = 2936 (  database_to_xml                        PGNSP PGUID 12 100 0 0 0 f f f t f s r 3 0 142 "16 16 25" _null_ _null_ "{nulls,tableforest,targetns}" _null_ _null_ database_to_xml _null_ _null_ _null_ ));
-DESCR("map database contents to XML");
-DATA(insert OID = 2937 (  database_to_xmlschema                  PGNSP PGUID 12 100 0 0 0 f f f t f s r 3 0 142 "16 16 25" _null_ _null_ "{nulls,tableforest,targetns}" _null_ _null_ database_to_xmlschema _null_ _null_ _null_ ));
-DESCR("map database structure to XML Schema");
-DATA(insert OID = 2938 (  database_to_xml_and_xmlschema PGNSP PGUID 12 100 0 0 0 f f f t f s r 3 0 142 "16 16 25" _null_ _null_ "{nulls,tableforest,targetns}" _null_ _null_ database_to_xml_and_xmlschema _null_ _null_ _null_ ));
-DESCR("map database contents and structure to XML and XML Schema");
-
-DATA(insert OID = 2931 (  xpath                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 143 "25 142 1009" _null_ _null_ _null_ _null_ _null_ xpath _null_ _null_ _null_ ));
-DESCR("evaluate XPath expression, with namespaces support");
-DATA(insert OID = 2932 (  xpath                 PGNSP PGUID 14 1 0 0 0 f f f t f i s 2 0 143 "25 142" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.xpath($1, $2, ''{}''::pg_catalog.text[])" _null_ _null_ _null_ ));
-DESCR("evaluate XPath expression");
-
-DATA(insert OID = 2614 (  xmlexists  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "25 142" _null_ _null_ _null_ _null_ _null_ xmlexists _null_ _null_ _null_ ));
-DESCR("test XML value against XPath expression");
-
-DATA(insert OID = 3049 (  xpath_exists  PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 16 "25 142 1009" _null_ _null_ _null_ _null_ _null_ xpath_exists _null_ _null_ _null_ ));
-DESCR("test XML value against XPath expression, with namespace support");
-DATA(insert OID = 3050 (  xpath_exists  PGNSP PGUID 14 1 0 0 0 f f f t f i s 2 0 16 "25 142" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.xpath_exists($1, $2, ''{}''::pg_catalog.text[])" _null_ _null_ _null_ ));
-DESCR("test XML value against XPath expression");
-DATA(insert OID = 3051 (  xml_is_well_formed                    PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 16 "25" _null_ _null_ _null_ _null_ _null_ xml_is_well_formed _null_ _null_ _null_ ));
-DESCR("determine if a string is well formed XML");
-DATA(insert OID = 3052 (  xml_is_well_formed_document   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "25" _null_ _null_ _null_ _null_ _null_ xml_is_well_formed_document _null_ _null_ _null_ ));
-DESCR("determine if a string is well formed XML document");
-DATA(insert OID = 3053 (  xml_is_well_formed_content    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "25" _null_ _null_ _null_ _null_ _null_ xml_is_well_formed_content _null_ _null_ _null_ ));
-DESCR("determine if a string is well formed XML content");
-
-/* json */
-DATA(insert OID = 321 (  json_in                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 114 "2275" _null_ _null_ _null_ _null_ _null_ json_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 322 (  json_out                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "114" _null_ _null_ _null_ _null_ _null_ json_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 323 (  json_recv                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 114 "2281" _null_ _null_ _null_ _null_ _null_ json_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 324 (  json_send                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "114" _null_ _null_ _null_ _null_ _null_ json_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3153 (  array_to_json    PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 114 "2277" _null_ _null_ _null_ _null_ _null_ array_to_json _null_ _null_ _null_ ));
-DESCR("map array to json");
-DATA(insert OID = 3154 (  array_to_json    PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 114 "2277 16" _null_ _null_ _null_ _null_ _null_ array_to_json_pretty _null_ _null_ _null_ ));
-DESCR("map array to json with optional pretty printing");
-DATA(insert OID = 3155 (  row_to_json     PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 114 "2249" _null_ _null_ _null_ _null_ _null_ row_to_json _null_ _null_ _null_ ));
-DESCR("map row to json");
-DATA(insert OID = 3156 (  row_to_json     PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 114 "2249 16" _null_ _null_ _null_ _null_ _null_ row_to_json_pretty _null_ _null_ _null_ ));
-DESCR("map row to json with optional pretty printing");
-DATA(insert OID = 3173 (  json_agg_transfn      PGNSP PGUID 12 1 0 0 0 f f f f f s s 2 0 2281 "2281 2283" _null_ _null_ _null_ _null_ _null_ json_agg_transfn _null_ _null_ _null_ ));
-DESCR("json aggregate transition function");
-DATA(insert OID = 3174 (  json_agg_finalfn      PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 114 "2281" _null_ _null_ _null_ _null_ _null_ json_agg_finalfn _null_ _null_ _null_ ));
-DESCR("json aggregate final function");
-DATA(insert OID = 3175 (  json_agg                PGNSP PGUID 12 1 0 0 0 a f f f f s s 1 0 114 "2283" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("aggregate input into json");
-DATA(insert OID = 3180 (  json_object_agg_transfn       PGNSP PGUID 12 1 0 0 0 f f f f f s s 3 0 2281 "2281 2276 2276" _null_ _null_ _null_ _null_ _null_ json_object_agg_transfn _null_ _null_ _null_ ));
-DESCR("json object aggregate transition function");
-DATA(insert OID = 3196 (  json_object_agg_finalfn       PGNSP PGUID 12 1 0 0 0 f f f f f i s 1 0 114 "2281" _null_ _null_ _null_ _null_ _null_ json_object_agg_finalfn _null_ _null_ _null_ ));
-DESCR("json object aggregate final function");
-DATA(insert OID = 3197 (  json_object_agg                 PGNSP PGUID 12 1 0 0 0 a f f f f s s 2 0 114 "2276 2276" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("aggregate input into a json object");
-DATA(insert OID = 3198 (  json_build_array        PGNSP PGUID 12 1 0 2276 0 f f f f f s s 1 0 114 "2276" "{2276}" "{v}" _null_ _null_ _null_ json_build_array _null_ _null_ _null_ ));
-DESCR("build a json array from any inputs");
-DATA(insert OID = 3199 (  json_build_array        PGNSP PGUID 12 1 0 0 0 f f f f f s s 0 0 114  "" _null_ _null_ _null_ _null_ _null_ json_build_array_noargs _null_ _null_ _null_ ));
-DESCR("build an empty json array");
-DATA(insert OID = 3200 (  json_build_object    PGNSP PGUID 12 1 0 2276 0 f f f f f s s 1 0 114 "2276" "{2276}" "{v}" _null_ _null_ _null_ json_build_object _null_ _null_ _null_ ));
-DESCR("build a json object from pairwise key/value inputs");
-DATA(insert OID = 3201 (  json_build_object    PGNSP PGUID 12 1 0 0 0 f f f f f s s 0 0 114  "" _null_ _null_ _null_ _null_ _null_ json_build_object_noargs _null_ _null_ _null_ ));
-DESCR("build an empty json object");
-DATA(insert OID = 3202 (  json_object   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 114 "1009" _null_ _null_ _null_ _null_ _null_ json_object _null_ _null_ _null_ ));
-DESCR("map text array of key value pairs to json object");
-DATA(insert OID = 3203 (  json_object   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 114 "1009 1009" _null_ _null_ _null_ _null_ _null_ json_object_two_arg _null_ _null_ _null_ ));
-DESCR("map text arrays of keys and values to json object");
-DATA(insert OID = 3176 (  to_json         PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 114 "2283" _null_ _null_ _null_ _null_ _null_ to_json _null_ _null_ _null_ ));
-DESCR("map input to json");
-DATA(insert OID = 3261 (  json_strip_nulls        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 114 "114" _null_ _null_ _null_ _null_ _null_ json_strip_nulls _null_ _null_ _null_ ));
-DESCR("remove object fields with null values from json");
-
-DATA(insert OID = 3947 (  json_object_field                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 114 "114 25" _null_ _null_ "{from_json, field_name}" _null_ _null_ json_object_field _null_ _null_ _null_ ));
-DATA(insert OID = 3948 (  json_object_field_text       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25  "114 25" _null_ _null_ "{from_json, field_name}" _null_ _null_ json_object_field_text _null_ _null_ _null_ ));
-DATA(insert OID = 3949 (  json_array_element           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 114 "114 23" _null_ _null_ "{from_json, element_index}" _null_ _null_ json_array_element _null_ _null_ _null_ ));
-DATA(insert OID = 3950 (  json_array_element_text      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25  "114 23" _null_ _null_ "{from_json, element_index}" _null_ _null_ json_array_element_text _null_ _null_ _null_ ));
-DATA(insert OID = 3951 (  json_extract_path                    PGNSP PGUID 12 1 0 25 0 f f f t f i s 2 0 114 "114 1009" "{114,1009}" "{i,v}" "{from_json,path_elems}" _null_ _null_ json_extract_path _null_ _null_ _null_ ));
-DESCR("get value from json with path elements");
-DATA(insert OID = 3953 (  json_extract_path_text       PGNSP PGUID 12 1 0 25 0 f f f t f i s 2 0 25 "114 1009" "{114,1009}" "{i,v}" "{from_json,path_elems}" _null_ _null_ json_extract_path_text _null_ _null_ _null_ ));
-DESCR("get value from json as text with path elements");
-DATA(insert OID = 3955 (  json_array_elements          PGNSP PGUID 12 1 100 0 0 f f f t t i s 1 0 114 "114" "{114,114}" "{i,o}" "{from_json,value}" _null_ _null_ json_array_elements _null_ _null_ _null_ ));
-DESCR("key value pairs of a json object");
-DATA(insert OID = 3969 (  json_array_elements_text     PGNSP PGUID 12 1 100 0 0 f f f t t i s 1 0 25 "114" "{114,25}" "{i,o}" "{from_json,value}" _null_ _null_ json_array_elements_text _null_ _null_ _null_ ));
-DESCR("elements of json array");
-DATA(insert OID = 3956 (  json_array_length                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "114" _null_ _null_ _null_ _null_ _null_ json_array_length _null_ _null_ _null_ ));
-DESCR("length of json array");
-DATA(insert OID = 3957 (  json_object_keys                     PGNSP PGUID 12 1 100 0 0 f f f t t i s 1 0 25 "114" _null_ _null_ _null_ _null_ _null_ json_object_keys _null_ _null_ _null_ ));
-DESCR("get json object keys");
-DATA(insert OID = 3958 (  json_each                               PGNSP PGUID 12 1 100 0 0 f f f t t i s 1 0 2249 "114" "{114,25,114}" "{i,o,o}" "{from_json,key,value}" _null_ _null_ json_each _null_ _null_ _null_ ));
-DESCR("key value pairs of a json object");
-DATA(insert OID = 3959 (  json_each_text                  PGNSP PGUID 12 1 100 0 0 f f f t t i s 1 0 2249 "114" "{114,25,25}" "{i,o,o}" "{from_json,key,value}" _null_ _null_ json_each_text _null_ _null_ _null_ ));
-DESCR("key value pairs of a json object");
-DATA(insert OID = 3960 (  json_populate_record    PGNSP PGUID 12 1 0 0 0 f f f f f s s 3 0 2283 "2283 114 16" _null_ _null_ _null_ _null_ _null_ json_populate_record _null_ _null_ _null_ ));
-DESCR("get record fields from a json object");
-DATA(insert OID = 3961 (  json_populate_recordset  PGNSP PGUID 12 1 100 0 0 f f f f t s s 3 0 2283 "2283 114 16" _null_ _null_ _null_ _null_ _null_ json_populate_recordset _null_ _null_ _null_ ));
-DESCR("get set of records with fields from a json array of objects");
-DATA(insert OID = 3204 (  json_to_record                  PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2249 "114" _null_ _null_ _null_ _null_ _null_ json_to_record _null_ _null_ _null_ ));
-DESCR("get record fields from a json object");
-DATA(insert OID = 3205 (  json_to_recordset               PGNSP PGUID 12 1 100 0 0 f f f f t s s 1 0 2249 "114" _null_ _null_ _null_ _null_ _null_ json_to_recordset _null_ _null_ _null_ ));
-DESCR("get set of records with fields from a json array of objects");
-DATA(insert OID = 3968 (  json_typeof                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "114" _null_ _null_ _null_ _null_ _null_ json_typeof _null_ _null_ _null_ ));
-DESCR("get the type of a json value");
-
-/* uuid */
-DATA(insert OID = 2952 (  uuid_in                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2950 "2275" _null_ _null_ _null_ _null_ _null_ uuid_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2953 (  uuid_out                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "2950" _null_ _null_ _null_ _null_ _null_ uuid_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2954 (  uuid_lt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "2950 2950" _null_ _null_ _null_ _null_ _null_ uuid_lt _null_ _null_ _null_ ));
-DATA(insert OID = 2955 (  uuid_le                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "2950 2950" _null_ _null_ _null_ _null_ _null_ uuid_le _null_ _null_ _null_ ));
-DATA(insert OID = 2956 (  uuid_eq                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "2950 2950" _null_ _null_ _null_ _null_ _null_ uuid_eq _null_ _null_ _null_ ));
-DATA(insert OID = 2957 (  uuid_ge                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "2950 2950" _null_ _null_ _null_ _null_ _null_ uuid_ge _null_ _null_ _null_ ));
-DATA(insert OID = 2958 (  uuid_gt                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "2950 2950" _null_ _null_ _null_ _null_ _null_ uuid_gt _null_ _null_ _null_ ));
-DATA(insert OID = 2959 (  uuid_ne                 PGNSP PGUID 12 1 0 0 0 f f t t f i s 2 0 16 "2950 2950" _null_ _null_ _null_ _null_ _null_ uuid_ne _null_ _null_ _null_ ));
-DATA(insert OID = 2960 (  uuid_cmp                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "2950 2950" _null_ _null_ _null_ _null_ _null_ uuid_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3300 (  uuid_sortsupport PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ uuid_sortsupport _null_ _null_ _null_ ));
-DESCR("sort support");
-DATA(insert OID = 2961 (  uuid_recv               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2950 "2281" _null_ _null_ _null_ _null_ _null_ uuid_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2962 (  uuid_send               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "2950" _null_ _null_ _null_ _null_ _null_ uuid_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2963 (  uuid_hash               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "2950" _null_ _null_ _null_ _null_ _null_ uuid_hash _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 3412 (  uuid_hash_extended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "2950 20" _null_ _null_ _null_ _null_ _null_ uuid_hash_extended _null_ _null_ _null_ ));
-DESCR("hash");
-
-/* pg_lsn */
-DATA(insert OID = 3229 (  pg_lsn_in            PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3220 "2275" _null_ _null_ _null_ _null_ _null_ pg_lsn_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3230 (  pg_lsn_out           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "3220" _null_ _null_ _null_ _null_ _null_ pg_lsn_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3231 (  pg_lsn_lt            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3220 3220" _null_ _null_ _null_ _null_ _null_ pg_lsn_lt _null_ _null_ _null_ ));
-DATA(insert OID = 3232 (  pg_lsn_le            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3220 3220" _null_ _null_ _null_ _null_ _null_ pg_lsn_le _null_ _null_ _null_ ));
-DATA(insert OID = 3233 (  pg_lsn_eq            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3220 3220" _null_ _null_ _null_ _null_ _null_ pg_lsn_eq _null_ _null_ _null_ ));
-DATA(insert OID = 3234 (  pg_lsn_ge            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3220 3220" _null_ _null_ _null_ _null_ _null_ pg_lsn_ge _null_ _null_ _null_ ));
-DATA(insert OID = 3235 (  pg_lsn_gt            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3220 3220" _null_ _null_ _null_ _null_ _null_ pg_lsn_gt _null_ _null_ _null_ ));
-DATA(insert OID = 3236 (  pg_lsn_ne            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3220 3220" _null_ _null_ _null_ _null_ _null_ pg_lsn_ne _null_ _null_ _null_ ));
-DATA(insert OID = 3237 (  pg_lsn_mi            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1700 "3220 3220" _null_ _null_ _null_ _null_ _null_ pg_lsn_mi _null_ _null_ _null_ ));
-DATA(insert OID = 3238 (  pg_lsn_recv  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3220 "2281" _null_ _null_ _null_ _null_ _null_ pg_lsn_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3239 (  pg_lsn_send  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "3220" _null_ _null_ _null_ _null_ _null_ pg_lsn_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3251 (  pg_lsn_cmp   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "3220 3220" _null_ _null_ _null_ _null_ _null_ pg_lsn_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3252 (  pg_lsn_hash  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "3220" _null_ _null_ _null_ _null_ _null_ pg_lsn_hash _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 3413 (  pg_lsn_hash_extended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "3220 20" _null_ _null_ _null_ _null_ _null_ pg_lsn_hash_extended _null_ _null_ _null_ ));
-DESCR("hash");
-
-/* enum related procs */
-DATA(insert OID = 3504 (  anyenum_in   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3500 "2275" _null_ _null_ _null_ _null_ _null_ anyenum_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3505 (  anyenum_out  PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "3500" _null_ _null_ _null_ _null_ _null_ anyenum_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3506 (  enum_in              PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 3500 "2275 26" _null_ _null_ _null_ _null_ _null_ enum_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3507 (  enum_out             PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "3500" _null_ _null_ _null_ _null_ _null_ enum_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3508 (  enum_eq              PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3500 3500" _null_ _null_ _null_ _null_ _null_ enum_eq _null_ _null_ _null_ ));
-DATA(insert OID = 3509 (  enum_ne              PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3500 3500" _null_ _null_ _null_ _null_ _null_ enum_ne _null_ _null_ _null_ ));
-DATA(insert OID = 3510 (  enum_lt              PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3500 3500" _null_ _null_ _null_ _null_ _null_ enum_lt _null_ _null_ _null_ ));
-DATA(insert OID = 3511 (  enum_gt              PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3500 3500" _null_ _null_ _null_ _null_ _null_ enum_gt _null_ _null_ _null_ ));
-DATA(insert OID = 3512 (  enum_le              PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3500 3500" _null_ _null_ _null_ _null_ _null_ enum_le _null_ _null_ _null_ ));
-DATA(insert OID = 3513 (  enum_ge              PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3500 3500" _null_ _null_ _null_ _null_ _null_ enum_ge _null_ _null_ _null_ ));
-DATA(insert OID = 3514 (  enum_cmp             PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "3500 3500" _null_ _null_ _null_ _null_ _null_ enum_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3515 (  hashenum             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "3500" _null_ _null_ _null_ _null_ _null_ hashenum _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 3414 (  hashenumextended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "3500 20" _null_ _null_ _null_ _null_ _null_ hashenumextended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 3524 (  enum_smaller PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3500 "3500 3500" _null_ _null_ _null_ _null_ _null_ enum_smaller _null_ _null_ _null_ ));
-DESCR("smaller of two");
-DATA(insert OID = 3525 (  enum_larger  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3500 "3500 3500" _null_ _null_ _null_ _null_ _null_ enum_larger _null_ _null_ _null_ ));
-DESCR("larger of two");
-DATA(insert OID = 3526 (  max                  PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 3500 "3500" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("maximum value of all enum input values");
-DATA(insert OID = 3527 (  min                  PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 3500 "3500" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("minimum value of all enum input values");
-DATA(insert OID = 3528 (  enum_first   PGNSP PGUID 12 1 0 0 0 f f f f f s s 1 0 3500 "3500" _null_ _null_ _null_ _null_ _null_ enum_first _null_ _null_ _null_ ));
-DESCR("first value of the input enum type");
-DATA(insert OID = 3529 (  enum_last            PGNSP PGUID 12 1 0 0 0 f f f f f s s 1 0 3500 "3500" _null_ _null_ _null_ _null_ _null_ enum_last _null_ _null_ _null_ ));
-DESCR("last value of the input enum type");
-DATA(insert OID = 3530 (  enum_range   PGNSP PGUID 12 1 0 0 0 f f f f f s s 2 0 2277 "3500 3500" _null_ _null_ _null_ _null_ _null_ enum_range_bounds _null_ _null_ _null_ ));
-DESCR("range between the two given enum values, as an ordered array");
-DATA(insert OID = 3531 (  enum_range   PGNSP PGUID 12 1 0 0 0 f f f f f s s 1 0 2277 "3500" _null_ _null_ _null_ _null_ _null_ enum_range_all _null_ _null_ _null_ ));
-DESCR("range of the given enum type, as an ordered array");
-DATA(insert OID = 3532 (  enum_recv            PGNSP PGUID 12 1 0 0 0 f f f t f s s 2 0 3500 "2281 26" _null_ _null_ _null_ _null_ _null_ enum_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3533 (  enum_send            PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 17 "3500" _null_ _null_ _null_ _null_ _null_ enum_send _null_ _null_ _null_ ));
-DESCR("I/O");
-
-/* text search stuff */
-DATA(insert OID =  3610 (  tsvectorin                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3614 "2275" _null_ _null_ _null_ _null_ _null_ tsvectorin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  3639 (  tsvectorrecv                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3614 "2281" _null_ _null_ _null_ _null_ _null_ tsvectorrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  3611 (  tsvectorout                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "3614" _null_ _null_ _null_ _null_ _null_ tsvectorout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  3638 (  tsvectorsend                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "3614" _null_ _null_ _null_ _null_ _null_ tsvectorsend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  3612 (  tsqueryin                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3615 "2275" _null_ _null_ _null_ _null_ _null_ tsqueryin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  3641 (  tsqueryrecv                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3615 "2281" _null_ _null_ _null_ _null_ _null_ tsqueryrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  3613 (  tsqueryout                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "3615" _null_ _null_ _null_ _null_ _null_ tsqueryout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  3640 (  tsquerysend                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "3615" _null_ _null_ _null_ _null_ _null_ tsquerysend _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  3646 (  gtsvectorin                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3642 "2275" _null_ _null_ _null_ _null_ _null_ gtsvectorin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  3647 (  gtsvectorout                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "3642" _null_ _null_ _null_ _null_ _null_ gtsvectorout _null_ _null_ _null_ ));
-DESCR("I/O");
-
-DATA(insert OID = 3616 (  tsvector_lt                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3614 3614" _null_ _null_ _null_ _null_ _null_ tsvector_lt _null_ _null_ _null_ ));
-DATA(insert OID = 3617 (  tsvector_le                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3614 3614" _null_ _null_ _null_ _null_ _null_ tsvector_le _null_ _null_ _null_ ));
-DATA(insert OID = 3618 (  tsvector_eq                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3614 3614" _null_ _null_ _null_ _null_ _null_ tsvector_eq _null_ _null_ _null_ ));
-DATA(insert OID = 3619 (  tsvector_ne                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3614 3614" _null_ _null_ _null_ _null_ _null_ tsvector_ne _null_ _null_ _null_ ));
-DATA(insert OID = 3620 (  tsvector_ge                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3614 3614" _null_ _null_ _null_ _null_ _null_ tsvector_ge _null_ _null_ _null_ ));
-DATA(insert OID = 3621 (  tsvector_gt                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3614 3614" _null_ _null_ _null_ _null_ _null_ tsvector_gt _null_ _null_ _null_ ));
-DATA(insert OID = 3622 (  tsvector_cmp                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "3614 3614" _null_ _null_ _null_ _null_ _null_ tsvector_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-
-DATA(insert OID = 3711 (  length                               PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "3614" _null_ _null_ _null_ _null_ _null_ tsvector_length _null_ _null_ _null_ ));
-DESCR("number of lexemes");
-DATA(insert OID = 3623 (  strip                                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3614 "3614" _null_ _null_ _null_ _null_ _null_ tsvector_strip _null_ _null_ _null_ ));
-DESCR("strip position information");
-DATA(insert OID = 3624 (  setweight                            PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3614 "3614 18" _null_ _null_ _null_ _null_ _null_ tsvector_setweight _null_ _null_ _null_ ));
-DESCR("set given weight for whole tsvector");
-DATA(insert OID = 3320 (  setweight                            PGNSP PGUID 12 1 0      0 0 f f f t f i s 3 0 3614 "3614 18 1009" _null_ _null_ _null_ _null_ _null_ tsvector_setweight_by_filter _null_ _null_ _null_ ));
-DESCR("set given weight for given lexemes");
-DATA(insert OID = 3625 (  tsvector_concat              PGNSP PGUID 12 1 0      0 0 f f f t f i s 2 0 3614 "3614 3614" _null_ _null_ _null_ _null_ _null_ tsvector_concat _null_ _null_ _null_ ));
-DATA(insert OID = 3321 (  ts_delete                            PGNSP PGUID 12 1 0      0 0 f f f t f i s 2 0 3614 "3614 25" _null_ _null_ _null_ _null_ _null_ tsvector_delete_str _null_ _null_ _null_ ));
-DESCR("delete lexeme");
-DATA(insert OID = 3323 (  ts_delete                            PGNSP PGUID 12 1 0      0 0 f f f t f i s 2 0 3614 "3614 1009" _null_ _null_ _null_ _null_ _null_ tsvector_delete_arr _null_ _null_ _null_ ));
-DESCR("delete given lexemes");
-DATA(insert OID = 3322 (  unnest                               PGNSP PGUID 12 1 10 0 0 f f f t t i s 1 0 2249 "3614" "{3614,25,1005,1009}" "{i,o,o,o}" "{tsvector,lexeme,positions,weights}"  _null_ _null_ tsvector_unnest _null_ _null_ _null_ ));
-DESCR("expand tsvector to set of rows");
-DATA(insert OID = 3326 (  tsvector_to_array            PGNSP PGUID 12 1 0      0 0 f f f t f i s 1 0 1009 "3614" _null_ _null_ _null_ _null_ _null_ tsvector_to_array _null_ _null_ _null_ ));
-DESCR("convert tsvector to array of lexemes");
-DATA(insert OID = 3327 (  array_to_tsvector            PGNSP PGUID 12 1 0      0 0 f f f t f i s 1 0 3614 "1009" _null_ _null_ _null_ _null_ _null_ array_to_tsvector _null_ _null_ _null_ ));
-DESCR("build tsvector from array of lexemes");
-DATA(insert OID = 3319 (  ts_filter                            PGNSP PGUID 12 1 0      0 0 f f f t f i s 2 0 3614 "3614 1002" _null_ _null_ _null_ _null_ _null_ tsvector_filter _null_ _null_ _null_ ));
-DESCR("delete lexemes that do not have one of the given weights");
-
-DATA(insert OID = 3634 (  ts_match_vq                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3614 3615" _null_ _null_ _null_ _null_ _null_ ts_match_vq _null_ _null_ _null_ ));
-DATA(insert OID = 3635 (  ts_match_qv                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3615 3614" _null_ _null_ _null_ _null_ _null_ ts_match_qv _null_ _null_ _null_ ));
-DATA(insert OID = 3760 (  ts_match_tt                  PGNSP PGUID 12 100 0 0 0 f f f t f s s 2 0 16 "25 25" _null_ _null_ _null_ _null_ _null_ ts_match_tt _null_ _null_ _null_ ));
-DATA(insert OID = 3761 (  ts_match_tq                  PGNSP PGUID 12 100 0 0 0 f f f t f s s 2 0 16 "25 3615" _null_ _null_ _null_ _null_ _null_ ts_match_tq _null_ _null_ _null_ ));
-
-DATA(insert OID = 3648 (  gtsvector_compress   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ gtsvector_compress _null_ _null_ _null_ ));
-DESCR("GiST tsvector support");
-DATA(insert OID = 3649 (  gtsvector_decompress PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ gtsvector_decompress _null_ _null_ _null_ ));
-DESCR("GiST tsvector support");
-DATA(insert OID = 3650 (  gtsvector_picksplit  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2281 "2281 2281" _null_ _null_ _null_ _null_ _null_ gtsvector_picksplit _null_ _null_ _null_ ));
-DESCR("GiST tsvector support");
-DATA(insert OID = 3651 (  gtsvector_union              PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3642 "2281 2281" _null_ _null_ _null_ _null_ _null_ gtsvector_union _null_ _null_ _null_ ));
-DESCR("GiST tsvector support");
-DATA(insert OID = 3652 (  gtsvector_same               PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 2281 "3642 3642 2281" _null_ _null_ _null_ _null_ _null_ gtsvector_same _null_ _null_ _null_ ));
-DESCR("GiST tsvector support");
-DATA(insert OID = 3653 (  gtsvector_penalty            PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 2281 "2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gtsvector_penalty _null_ _null_ _null_ ));
-DESCR("GiST tsvector support");
-DATA(insert OID = 3654 (  gtsvector_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "2281 3614 21 26 2281" _null_ _null_ _null_ _null_ _null_ gtsvector_consistent _null_ _null_ _null_ ));
-DESCR("GiST tsvector support");
-DATA(insert OID = 3790 (  gtsvector_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "2281 3642 23 26 2281" _null_ _null_ _null_ _null_ _null_ gtsvector_consistent_oldsig _null_ _null_ _null_ ));
-DESCR("GiST tsvector support (obsolete)");
-
-DATA(insert OID = 3656 (  gin_extract_tsvector PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 2281 "3614 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_tsvector _null_ _null_ _null_ ));
-DESCR("GIN tsvector support");
-DATA(insert OID = 3657 (  gin_extract_tsquery  PGNSP PGUID 12 1 0 0 0 f f f t f i s 7 0 2281 "3614 2281 21 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_tsquery _null_ _null_ _null_ ));
-DESCR("GIN tsvector support");
-DATA(insert OID = 3658 (  gin_tsquery_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 8 0 16 "2281 21 3614 23 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_tsquery_consistent _null_ _null_ _null_ ));
-DESCR("GIN tsvector support");
-DATA(insert OID = 3921 (  gin_tsquery_triconsistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 7 0 18 "2281 21 3614 23 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_tsquery_triconsistent _null_ _null_ _null_ ));
-DESCR("GIN tsvector support");
-DATA(insert OID = 3724 (  gin_cmp_tslexeme             PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "25 25" _null_ _null_ _null_ _null_ _null_ gin_cmp_tslexeme _null_ _null_ _null_ ));
-DESCR("GIN tsvector support");
-DATA(insert OID = 2700 (  gin_cmp_prefix               PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 23 "25 25 21 2281" _null_ _null_ _null_ _null_ _null_ gin_cmp_prefix _null_ _null_ _null_ ));
-DESCR("GIN tsvector support");
-DATA(insert OID = 3077 (  gin_extract_tsvector PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2281 "3614 2281" _null_ _null_ _null_ _null_ _null_    gin_extract_tsvector_2args _null_ _null_ _null_ ));
-DESCR("GIN tsvector support (obsolete)");
-DATA(insert OID = 3087 (  gin_extract_tsquery  PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 2281 "3615 2281 21 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_tsquery_5args _null_ _null_ _null_ ));
-DESCR("GIN tsvector support (obsolete)");
-DATA(insert OID = 3088 (  gin_tsquery_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 6 0 16 "2281 21 3615 23 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_tsquery_consistent_6args _null_ _null_ _null_ ));
-DESCR("GIN tsvector support (obsolete)");
-DATA(insert OID = 3791 (  gin_extract_tsquery  PGNSP PGUID 12 1 0 0 0 f f f t f i s 7 0 2281 "3615 2281 21 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_tsquery_oldsig _null_ _null_ _null_ ));
-DESCR("GIN tsvector support (obsolete)");
-DATA(insert OID = 3792 (  gin_tsquery_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 8 0 16 "2281 21 3615 23 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_tsquery_consistent_oldsig _null_ _null_ _null_ ));
-DESCR("GIN tsvector support (obsolete)");
-
-DATA(insert OID = 3789 (  gin_clean_pending_list PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 20 "2205" _null_ _null_ _null_ _null_ _null_ gin_clean_pending_list _null_ _null_ _null_ ));
-DESCR("clean up GIN pending list");
-
-DATA(insert OID = 3662 (  tsquery_lt                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3615 3615" _null_ _null_ _null_ _null_ _null_ tsquery_lt _null_ _null_ _null_ ));
-DATA(insert OID = 3663 (  tsquery_le                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3615 3615" _null_ _null_ _null_ _null_ _null_ tsquery_le _null_ _null_ _null_ ));
-DATA(insert OID = 3664 (  tsquery_eq                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3615 3615" _null_ _null_ _null_ _null_ _null_ tsquery_eq _null_ _null_ _null_ ));
-DATA(insert OID = 3665 (  tsquery_ne                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3615 3615" _null_ _null_ _null_ _null_ _null_ tsquery_ne _null_ _null_ _null_ ));
-DATA(insert OID = 3666 (  tsquery_ge                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3615 3615" _null_ _null_ _null_ _null_ _null_ tsquery_ge _null_ _null_ _null_ ));
-DATA(insert OID = 3667 (  tsquery_gt                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3615 3615" _null_ _null_ _null_ _null_ _null_ tsquery_gt _null_ _null_ _null_ ));
-DATA(insert OID = 3668 (  tsquery_cmp                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "3615 3615" _null_ _null_ _null_ _null_ _null_ tsquery_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-
-DATA(insert OID = 3669 (  tsquery_and          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3615 "3615 3615" _null_ _null_ _null_ _null_ _null_ tsquery_and _null_ _null_ _null_ ));
-DATA(insert OID = 3670 (  tsquery_or           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3615 "3615 3615" _null_ _null_ _null_ _null_ _null_ tsquery_or _null_ _null_ _null_ ));
-DATA(insert OID = 5003 (  tsquery_phrase       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3615 "3615 3615" _null_ _null_ _null_ _null_ _null_ tsquery_phrase _null_ _null_ _null_ ));
-DATA(insert OID = 5004 (  tsquery_phrase       PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 3615 "3615 3615 23" _null_ _null_ _null_ _null_ _null_ tsquery_phrase_distance _null_ _null_ _null_ ));
-DESCR("phrase-concatenate with distance");
-DATA(insert OID = 3671 (  tsquery_not          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3615 "3615" _null_ _null_ _null_ _null_ _null_ tsquery_not _null_ _null_ _null_ ));
-
-DATA(insert OID = 3691 (  tsq_mcontains                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3615 3615" _null_ _null_ _null_ _null_ _null_ tsq_mcontains _null_ _null_ _null_ ));
-DATA(insert OID = 3692 (  tsq_mcontained       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3615 3615" _null_ _null_ _null_ _null_ _null_ tsq_mcontained _null_ _null_ _null_ ));
-
-DATA(insert OID = 3672 (  numnode                      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "3615" _null_ _null_ _null_ _null_ _null_ tsquery_numnode _null_ _null_ _null_ ));
-DESCR("number of nodes");
-DATA(insert OID = 3673 (  querytree                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "3615" _null_ _null_ _null_ _null_ _null_ tsquerytree _null_ _null_ _null_ ));
-DESCR("show real useful query for GiST index");
-
-DATA(insert OID = 3684 (  ts_rewrite           PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 3615 "3615 3615 3615" _null_ _null_ _null_ _null_ _null_ tsquery_rewrite _null_ _null_ _null_ ));
-DESCR("rewrite tsquery");
-DATA(insert OID = 3685 (  ts_rewrite           PGNSP PGUID 12 100 0 0 0 f f f t f v u 2 0 3615 "3615 25" _null_ _null_ _null_ _null_ _null_ tsquery_rewrite_query _null_ _null_ _null_ ));
-DESCR("rewrite tsquery");
-
-DATA(insert OID = 3695 (  gtsquery_compress                            PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ gtsquery_compress _null_ _null_ _null_ ));
-DESCR("GiST tsquery support");
-DATA(insert OID = 3697 (  gtsquery_picksplit                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2281 "2281 2281" _null_ _null_ _null_ _null_ _null_ gtsquery_picksplit _null_ _null_ _null_ ));
-DESCR("GiST tsquery support");
-DATA(insert OID = 3698 (  gtsquery_union                               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "2281 2281" _null_ _null_ _null_ _null_ _null_ gtsquery_union _null_ _null_ _null_ ));
-DESCR("GiST tsquery support");
-DATA(insert OID = 3699 (  gtsquery_same                                        PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 2281 "20 20 2281" _null_ _null_ _null_ _null_ _null_ gtsquery_same _null_ _null_ _null_ ));
-DESCR("GiST tsquery support");
-DATA(insert OID = 3700 (  gtsquery_penalty                             PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 2281 "2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gtsquery_penalty _null_ _null_ _null_ ));
-DESCR("GiST tsquery support");
-DATA(insert OID = 3701 (  gtsquery_consistent                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "2281 3615 21 26 2281" _null_ _null_ _null_ _null_ _null_ gtsquery_consistent _null_ _null_ _null_ ));
-DESCR("GiST tsquery support");
-DATA(insert OID = 3793 (  gtsquery_consistent                  PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "2281 2281 23 26 2281" _null_ _null_ _null_ _null_ _null_ gtsquery_consistent_oldsig _null_ _null_ _null_ ));
-DESCR("GiST tsquery support (obsolete)");
-
-DATA(insert OID = 3686 (  tsmatchsel           PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_ tsmatchsel _null_ _null_ _null_ ));
-DESCR("restriction selectivity of tsvector @@ tsquery");
-DATA(insert OID = 3687 (  tsmatchjoinsel       PGNSP PGUID 12 1 0 0 0 f f f t f s s 5 0 701 "2281 26 2281 21 2281" _null_ _null_ _null_ _null_ _null_ tsmatchjoinsel _null_ _null_ _null_ ));
-DESCR("join selectivity of tsvector @@ tsquery");
-DATA(insert OID = 3688 (  ts_typanalyze                PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 16 "2281" _null_ _null_ _null_ _null_ _null_ ts_typanalyze _null_ _null_ _null_ ));
-DESCR("tsvector typanalyze");
-
-DATA(insert OID = 3689 (  ts_stat              PGNSP PGUID 12 10 10000 0 0 f f f t t v u 1 0 2249 "25" "{25,25,23,23}" "{i,o,o,o}" "{query,word,ndoc,nentry}" _null_ _null_ ts_stat1 _null_ _null_ _null_ ));
-DESCR("statistics of tsvector column");
-DATA(insert OID = 3690 (  ts_stat              PGNSP PGUID 12 10 10000 0 0 f f f t t v u 2 0 2249 "25 25" "{25,25,25,23,23}" "{i,i,o,o,o}" "{query,weights,word,ndoc,nentry}" _null_ _null_ ts_stat2 _null_ _null_ _null_ ));
-DESCR("statistics of tsvector column");
-
-DATA(insert OID = 3703 (  ts_rank              PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 700 "1021 3614 3615 23" _null_ _null_ _null_ _null_ _null_ ts_rank_wttf _null_ _null_ _null_ ));
-DESCR("relevance");
-DATA(insert OID = 3704 (  ts_rank              PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 700 "1021 3614 3615" _null_ _null_ _null_ _null_ _null_ ts_rank_wtt _null_ _null_ _null_ ));
-DESCR("relevance");
-DATA(insert OID = 3705 (  ts_rank              PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 700 "3614 3615 23" _null_ _null_ _null_ _null_ _null_ ts_rank_ttf _null_ _null_ _null_ ));
-DESCR("relevance");
-DATA(insert OID = 3706 (  ts_rank              PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 700 "3614 3615" _null_ _null_ _null_ _null_ _null_ ts_rank_tt _null_ _null_ _null_ ));
-DESCR("relevance");
-DATA(insert OID = 3707 (  ts_rank_cd   PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 700 "1021 3614 3615 23" _null_ _null_ _null_ _null_ _null_ ts_rankcd_wttf _null_ _null_ _null_ ));
-DESCR("relevance");
-DATA(insert OID = 3708 (  ts_rank_cd   PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 700 "1021 3614 3615" _null_ _null_ _null_ _null_ _null_ ts_rankcd_wtt _null_ _null_ _null_ ));
-DESCR("relevance");
-DATA(insert OID = 3709 (  ts_rank_cd   PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 700 "3614 3615 23" _null_ _null_ _null_ _null_ _null_ ts_rankcd_ttf _null_ _null_ _null_ ));
-DESCR("relevance");
-DATA(insert OID = 3710 (  ts_rank_cd   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 700 "3614 3615" _null_ _null_ _null_ _null_ _null_ ts_rankcd_tt _null_ _null_ _null_ ));
-DESCR("relevance");
-
-DATA(insert OID = 3713 (  ts_token_type PGNSP PGUID 12 1 16 0 0 f f f t t i s 1 0 2249 "26" "{26,23,25,25}" "{i,o,o,o}" "{parser_oid,tokid,alias,description}" _null_ _null_ ts_token_type_byid _null_ _null_ _null_ ));
-DESCR("get parser's token types");
-DATA(insert OID = 3714 (  ts_token_type PGNSP PGUID 12 1 16 0 0 f f f t t s s 1 0 2249 "25" "{25,23,25,25}" "{i,o,o,o}" "{parser_name,tokid,alias,description}" _null_ _null_ ts_token_type_byname _null_ _null_ _null_ ));
-DESCR("get parser's token types");
-DATA(insert OID = 3715 (  ts_parse             PGNSP PGUID 12 1 1000 0 0 f f f t t i s 2 0 2249 "26 25" "{26,25,23,25}" "{i,i,o,o}" "{parser_oid,txt,tokid,token}" _null_ _null_ ts_parse_byid _null_ _null_ _null_ ));
-DESCR("parse text to tokens");
-DATA(insert OID = 3716 (  ts_parse             PGNSP PGUID 12 1 1000 0 0 f f f t t s s 2 0 2249 "25 25" "{25,25,23,25}" "{i,i,o,o}" "{parser_name,txt,tokid,token}" _null_ _null_ ts_parse_byname _null_ _null_ _null_ ));
-DESCR("parse text to tokens");
-
-DATA(insert OID = 3717 (  prsd_start           PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2281 "2281 23" _null_ _null_ _null_ _null_ _null_ prsd_start _null_ _null_ _null_ ));
-DESCR("(internal)");
-DATA(insert OID = 3718 (  prsd_nexttoken       PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 2281 "2281 2281 2281" _null_ _null_ _null_ _null_ _null_ prsd_nexttoken _null_ _null_ _null_ ));
-DESCR("(internal)");
-DATA(insert OID = 3719 (  prsd_end                     PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2278 "2281" _null_ _null_ _null_ _null_ _null_ prsd_end _null_ _null_ _null_ ));
-DESCR("(internal)");
-DATA(insert OID = 3720 (  prsd_headline                PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 2281 "2281 2281 3615" _null_ _null_ _null_ _null_ _null_ prsd_headline _null_ _null_ _null_ ));
-DESCR("(internal)");
-DATA(insert OID = 3721 (  prsd_lextype         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ prsd_lextype _null_ _null_ _null_ ));
-DESCR("(internal)");
-
-DATA(insert OID = 3723 (  ts_lexize                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 1009 "3769 25" _null_ _null_ _null_ _null_ _null_ ts_lexize _null_ _null_ _null_ ));
-DESCR("normalize one word by dictionary");
-
-DATA(insert OID = 3725 (  dsimple_init         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ dsimple_init _null_ _null_ _null_ ));
-DESCR("(internal)");
-DATA(insert OID = 3726 (  dsimple_lexize       PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 2281 "2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ dsimple_lexize _null_ _null_ _null_ ));
-DESCR("(internal)");
-
-DATA(insert OID = 3728 (  dsynonym_init                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ dsynonym_init _null_ _null_ _null_ ));
-DESCR("(internal)");
-DATA(insert OID = 3729 (  dsynonym_lexize      PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 2281 "2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ dsynonym_lexize _null_ _null_ _null_ ));
-DESCR("(internal)");
-
-DATA(insert OID = 3731 (  dispell_init         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ dispell_init _null_ _null_ _null_ ));
-DESCR("(internal)");
-DATA(insert OID = 3732 (  dispell_lexize       PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 2281 "2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ dispell_lexize _null_ _null_ _null_ ));
-DESCR("(internal)");
-
-DATA(insert OID = 3740 (  thesaurus_init       PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2281 "2281" _null_ _null_ _null_ _null_ _null_ thesaurus_init _null_ _null_ _null_ ));
-DESCR("(internal)");
-DATA(insert OID = 3741 (  thesaurus_lexize     PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 2281 "2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ thesaurus_lexize _null_ _null_ _null_ ));
-DESCR("(internal)");
-
-DATA(insert OID = 3743 (  ts_headline  PGNSP PGUID 12 100 0 0 0 f f f t f i s 4 0 25 "3734 25 3615 25" _null_ _null_ _null_ _null_ _null_ ts_headline_byid_opt _null_ _null_ _null_ ));
-DESCR("generate headline");
-DATA(insert OID = 3744 (  ts_headline  PGNSP PGUID 12 100 0 0 0 f f f t f i s 3 0 25 "3734 25 3615" _null_ _null_ _null_ _null_ _null_ ts_headline_byid _null_ _null_ _null_ ));
-DESCR("generate headline");
-DATA(insert OID = 3754 (  ts_headline  PGNSP PGUID 12 100 0 0 0 f f f t f s s 3 0 25 "25 3615 25" _null_ _null_ _null_ _null_ _null_ ts_headline_opt _null_ _null_ _null_ ));
-DESCR("generate headline");
-DATA(insert OID = 3755 (  ts_headline  PGNSP PGUID 12 100 0 0 0 f f f t f s s 2 0 25 "25 3615" _null_ _null_ _null_ _null_ _null_ ts_headline _null_ _null_ _null_ ));
-DESCR("generate headline");
-
-DATA(insert OID = 4201 (  ts_headline  PGNSP PGUID 12 100 0 0 0 f f f t f i s 4 0 3802 "3734 3802 3615 25" _null_ _null_ _null_ _null_ _null_ ts_headline_jsonb_byid_opt _null_ _null_ _null_ ));
-DESCR("generate headline from jsonb");
-DATA(insert OID = 4202 (  ts_headline  PGNSP PGUID 12 100 0 0 0 f f f t f i s 3 0 3802 "3734 3802 3615" _null_ _null_ _null_ _null_ _null_ ts_headline_jsonb_byid _null_ _null_ _null_ ));
-DESCR("generate headline from jsonb");
-DATA(insert OID = 4203 (  ts_headline  PGNSP PGUID 12 100 0 0 0 f f f t f s s 3 0 3802 "3802 3615 25" _null_ _null_ _null_ _null_ _null_ ts_headline_jsonb_opt _null_ _null_ _null_ ));
-DESCR("generate headline from jsonb");
-DATA(insert OID = 4204 (  ts_headline  PGNSP PGUID 12 100 0 0 0 f f f t f s s 2 0 3802 "3802 3615" _null_ _null_ _null_ _null_ _null_ ts_headline_jsonb _null_ _null_ _null_ ));
-DESCR("generate headline from jsonb");
-
-DATA(insert OID = 4205 (  ts_headline  PGNSP PGUID 12 100 0 0 0 f f f t f i s 4 0 114 "3734 114 3615 25" _null_ _null_ _null_ _null_ _null_ ts_headline_json_byid_opt _null_ _null_ _null_ ));
-DESCR("generate headline from json");
-DATA(insert OID = 4206 (  ts_headline  PGNSP PGUID 12 100 0 0 0 f f f t f i s 3 0 114 "3734 114 3615" _null_ _null_ _null_ _null_ _null_ ts_headline_json_byid _null_ _null_ _null_ ));
-DESCR("generate headline from json");
-DATA(insert OID = 4207 (  ts_headline  PGNSP PGUID 12 100 0 0 0 f f f t f s s 3 0 114 "114 3615 25" _null_ _null_ _null_ _null_ _null_ ts_headline_json_opt _null_ _null_ _null_ ));
-DESCR("generate headline from json");
-DATA(insert OID = 4208 (  ts_headline  PGNSP PGUID 12 100 0 0 0 f f f t f s s 2 0 114 "114 3615" _null_ _null_ _null_ _null_ _null_ ts_headline_json _null_ _null_ _null_ ));
-DESCR("generate headline from json");
-
-DATA(insert OID = 3745 (  to_tsvector          PGNSP PGUID 12 100 0 0 0 f f f t f i s 2 0 3614 "3734 25" _null_ _null_ _null_ _null_ _null_ to_tsvector_byid _null_ _null_ _null_ ));
-DESCR("transform to tsvector");
-DATA(insert OID = 3746 (  to_tsquery           PGNSP PGUID 12 100 0 0 0 f f f t f i s 2 0 3615 "3734 25" _null_ _null_ _null_ _null_ _null_ to_tsquery_byid _null_ _null_ _null_ ));
-DESCR("make tsquery");
-DATA(insert OID = 3747 (  plainto_tsquery      PGNSP PGUID 12 100 0 0 0 f f f t f i s 2 0 3615 "3734 25" _null_ _null_ _null_ _null_ _null_ plainto_tsquery_byid _null_ _null_ _null_ ));
-DESCR("transform to tsquery");
-DATA(insert OID = 5006 (  phraseto_tsquery     PGNSP PGUID 12 100 0 0 0 f f f t f i s 2 0 3615 "3734 25" _null_ _null_ _null_ _null_ _null_ phraseto_tsquery_byid _null_ _null_ _null_ ));
-DESCR("transform to tsquery");
-DATA(insert OID = 8889 (  websearch_to_tsquery PGNSP PGUID 12 100 0 0 0 f f f  t f i s 2 0 3615 "3734 25" _null_ _null_ _null_ _null_ _null_ websearch_to_tsquery_byid _null_ _null_ _null_ ));
-DESCR("transform to tsquery");
-DATA(insert OID = 3749 (  to_tsvector          PGNSP PGUID 12 100 0 0 0 f f f t f s s 1 0 3614 "25" _null_ _null_ _null_ _null_ _null_ to_tsvector _null_ _null_ _null_ ));
-DESCR("transform to tsvector");
-DATA(insert OID = 3750 (  to_tsquery           PGNSP PGUID 12 100 0 0 0 f f f t f s s 1 0 3615 "25" _null_ _null_ _null_ _null_ _null_ to_tsquery _null_ _null_ _null_ ));
-DESCR("make tsquery");
-DATA(insert OID = 3751 (  plainto_tsquery      PGNSP PGUID 12 100 0 0 0 f f f t f s s 1 0 3615 "25" _null_ _null_ _null_ _null_ _null_ plainto_tsquery _null_ _null_ _null_ ));
-DESCR("transform to tsquery");
-DATA(insert OID = 5001 (  phraseto_tsquery     PGNSP PGUID 12 100 0 0 0 f f f t f s s 1 0 3615 "25" _null_ _null_ _null_ _null_ _null_ phraseto_tsquery _null_ _null_ _null_ ));
-DESCR("transform to tsquery");
-DATA(insert OID = 8890 (  websearch_to_tsquery PGNSP PGUID 12 100 0 0 0 f f f t f s s 1 0 3615 "25" _null_ _null_ _null_ _null_ _null_ websearch_to_tsquery _null_ _null_ _null_ ));
-DESCR("transform to tsquery");
-DATA(insert OID = 4209 (  to_tsvector          PGNSP PGUID 12 100 0 0 0 f f f t f s s 1 0 3614 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_string_to_tsvector _null_ _null_ _null_ ));
-DESCR("transform string values from jsonb to tsvector");
-DATA(insert OID = 4213 (  jsonb_to_tsvector            PGNSP PGUID 12 100 0 0 0 f f f t f s s 2 0 3614 "3802 3802" _null_ _null_ _null_ _null_ _null_ jsonb_to_tsvector _null_ _null_ _null_ ));
-DESCR("transform specified values from jsonb to tsvector");
-DATA(insert OID = 4210 (  to_tsvector          PGNSP PGUID 12 100 0 0 0 f f f t f s s 1 0 3614 "114" _null_ _null_ _null_ _null_ _null_ json_string_to_tsvector _null_ _null_ _null_ ));
-DESCR("transform string values from json to tsvector");
-DATA(insert OID = 4215 (  json_to_tsvector             PGNSP PGUID 12 100 0 0 0 f f f t f s s 2 0 3614 "114 3802" _null_ _null_ _null_ _null_ _null_ json_to_tsvector _null_ _null_ _null_ ));
-DESCR("transform specified values from json to tsvector");
-DATA(insert OID = 4211 (  to_tsvector          PGNSP PGUID 12 100 0 0 0 f f f t f i s 2 0 3614 "3734 3802" _null_ _null_ _null_ _null_ _null_ jsonb_string_to_tsvector_byid _null_ _null_ _null_ ));
-DESCR("transform string values from jsonb to tsvector");
-DATA(insert OID = 4214 (  jsonb_to_tsvector            PGNSP PGUID 12 100 0 0 0 f f f t f i s 3 0 3614 "3734 3802 3802" _null_ _null_ _null_ _null_ _null_ jsonb_to_tsvector_byid _null_ _null_ _null_ ));
-DESCR("transform specified values from jsonb to tsvector");
-DATA(insert OID = 4212 (  to_tsvector          PGNSP PGUID 12 100 0 0 0 f f f t f i s 2 0 3614 "3734 114" _null_ _null_ _null_ _null_ _null_ json_string_to_tsvector_byid _null_ _null_ _null_ ));
-DESCR("transform string values from json to tsvector");
-DATA(insert OID = 4216 (  json_to_tsvector             PGNSP PGUID 12 100 0 0 0 f f f t f i s 3 0 3614 "3734 114 3802" _null_ _null_ _null_ _null_ _null_ json_to_tsvector_byid _null_ _null_ _null_ ));
-DESCR("transform specified values from json to tsvector");
-
-DATA(insert OID = 3752 (  tsvector_update_trigger                      PGNSP PGUID 12 1 0 0 0 f f f f f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ tsvector_update_trigger_byid _null_ _null_ _null_ ));
-DESCR("trigger for automatic update of tsvector column");
-DATA(insert OID = 3753 (  tsvector_update_trigger_column       PGNSP PGUID 12 1 0 0 0 f f f f f v s 0 0 2279 "" _null_ _null_ _null_ _null_ _null_ tsvector_update_trigger_bycolumn _null_ _null_ _null_ ));
-DESCR("trigger for automatic update of tsvector column");
-
-DATA(insert OID = 3759 (  get_current_ts_config PGNSP PGUID 12 1 0 0 0 f f f t f s s 0 0 3734 "" _null_ _null_ _null_ _null_ _null_ get_current_ts_config _null_ _null_ _null_ ));
-DESCR("get current tsearch configuration");
-
-DATA(insert OID = 3736 (  regconfigin          PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 3734 "2275" _null_ _null_ _null_ _null_ _null_ regconfigin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3737 (  regconfigout         PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "3734" _null_ _null_ _null_ _null_ _null_ regconfigout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3738 (  regconfigrecv                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3734 "2281" _null_ _null_ _null_ _null_ _null_ regconfigrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3739 (  regconfigsend                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "3734" _null_ _null_ _null_ _null_ _null_ regconfigsend _null_ _null_ _null_ ));
-DESCR("I/O");
-
-DATA(insert OID = 3771 (  regdictionaryin      PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 3769 "2275" _null_ _null_ _null_ _null_ _null_ regdictionaryin _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3772 (  regdictionaryout     PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "3769" _null_ _null_ _null_ _null_ _null_ regdictionaryout _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3773 (  regdictionaryrecv PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3769 "2281" _null_ _null_ _null_ _null_ _null_ regdictionaryrecv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3774 (  regdictionarysend PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "3769" _null_ _null_ _null_ _null_ _null_ regdictionarysend _null_ _null_ _null_ ));
-DESCR("I/O");
-
-/* jsonb */
-DATA(insert OID =  3806 (  jsonb_in                    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3802 "2275" _null_ _null_ _null_ _null_ _null_ jsonb_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  3805 (  jsonb_recv          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3802 "2281" _null_ _null_ _null_ _null_ _null_ jsonb_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  3804 (  jsonb_out           PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2275 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID =  3803 (  jsonb_send          PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 17 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_send _null_ _null_ _null_ ));
-DESCR("I/O");
-
-DATA(insert OID = 3263 (  jsonb_object  PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3802 "1009" _null_ _null_ _null_ _null_ _null_ jsonb_object _null_ _null_ _null_ ));
-DESCR("map text array of key value pairs to jsonb object");
-DATA(insert OID = 3264 (  jsonb_object  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3802 "1009 1009" _null_ _null_ _null_ _null_ _null_ jsonb_object_two_arg _null_ _null_ _null_ ));
-DESCR("map text array of key value pairs to jsonb object");
-DATA(insert OID = 3787 (  to_jsonb        PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 3802 "2283" _null_ _null_ _null_ _null_ _null_ to_jsonb _null_ _null_ _null_ ));
-DESCR("map input to jsonb");
-DATA(insert OID = 3265 (  jsonb_agg_transfn  PGNSP PGUID 12 1 0 0 0 f f f f f s s 2 0 2281 "2281 2283" _null_ _null_ _null_ _null_ _null_ jsonb_agg_transfn _null_ _null_ _null_ ));
-DESCR("jsonb aggregate transition function");
-DATA(insert OID = 3266 (  jsonb_agg_finalfn  PGNSP PGUID 12 1 0 0 0 f f f f f s s 1 0 3802 "2281" _null_ _null_ _null_ _null_ _null_ jsonb_agg_finalfn _null_ _null_ _null_ ));
-DESCR("jsonb aggregate final function");
-DATA(insert OID = 3267 (  jsonb_agg               PGNSP PGUID 12 1 0 0 0 a f f f f s s 1 0 3802 "2283" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("aggregate input into jsonb");
-DATA(insert OID = 3268 (  jsonb_object_agg_transfn      PGNSP PGUID 12 1 0 0 0 f f f f f s s 3 0 2281 "2281 2276 2276" _null_ _null_ _null_ _null_ _null_ jsonb_object_agg_transfn _null_ _null_ _null_ ));
-DESCR("jsonb object aggregate transition function");
-DATA(insert OID = 3269 (  jsonb_object_agg_finalfn      PGNSP PGUID 12 1 0 0 0 f f f f f s s 1 0 3802 "2281" _null_ _null_ _null_ _null_ _null_ jsonb_object_agg_finalfn _null_ _null_ _null_ ));
-DESCR("jsonb object aggregate final function");
-DATA(insert OID = 3270 (  jsonb_object_agg                PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 3802 "2276 2276" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("aggregate inputs into jsonb object");
-DATA(insert OID = 3271 (  jsonb_build_array    PGNSP PGUID 12 1 0 2276 0 f f f f f s s 1 0 3802 "2276" "{2276}" "{v}" _null_ _null_ _null_ jsonb_build_array _null_ _null_ _null_ ));
-DESCR("build a jsonb array from any inputs");
-DATA(insert OID = 3272 (  jsonb_build_array    PGNSP PGUID 12 1 0 0 0 f f f f f s s 0 0 3802   "" _null_ _null_ _null_ _null_ _null_ jsonb_build_array_noargs _null_ _null_ _null_ ));
-DESCR("build an empty jsonb array");
-DATA(insert OID = 3273 (  jsonb_build_object   PGNSP PGUID 12 1 0 2276 0 f f f f f s s 1 0 3802 "2276" "{2276}" "{v}" _null_ _null_ _null_ jsonb_build_object _null_ _null_ _null_ ));
-DESCR("build a jsonb object from pairwise key/value inputs");
-DATA(insert OID = 3274 (  jsonb_build_object   PGNSP PGUID 12 1 0 0 0 f f f f f s s 0 0 3802  "" _null_ _null_ _null_ _null_ _null_ jsonb_build_object_noargs _null_ _null_ _null_ ));
-DESCR("build an empty jsonb object");
-DATA(insert OID = 3262 (  jsonb_strip_nulls    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3802 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_strip_nulls _null_ _null_ _null_ ));
-DESCR("remove object fields with null values from jsonb");
-
-DATA(insert OID = 3478 (  jsonb_object_field                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3802 "3802 25" _null_ _null_ "{from_json, field_name}" _null_ _null_ jsonb_object_field _null_ _null_ _null_ ));
-DATA(insert OID = 3214 (  jsonb_object_field_text      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25  "3802 25" _null_ _null_ "{from_json, field_name}" _null_ _null_ jsonb_object_field_text _null_ _null_ _null_ ));
-DATA(insert OID = 3215 (  jsonb_array_element          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3802 "3802 23" _null_ _null_ "{from_json, element_index}" _null_ _null_ jsonb_array_element _null_ _null_ _null_ ));
-DATA(insert OID = 3216 (  jsonb_array_element_text     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 25  "3802 23" _null_ _null_ "{from_json, element_index}" _null_ _null_ jsonb_array_element_text _null_ _null_ _null_ ));
-DATA(insert OID = 3217 (  jsonb_extract_path                   PGNSP PGUID 12 1 0 25 0 f f f t f i s 2 0 3802 "3802 1009" "{3802,1009}" "{i,v}" "{from_json,path_elems}" _null_ _null_ jsonb_extract_path _null_ _null_ _null_ ));
-DESCR("get value from jsonb with path elements");
-DATA(insert OID = 3940 (  jsonb_extract_path_text      PGNSP PGUID 12 1 0 25 0 f f f t f i s 2 0 25 "3802 1009" "{3802,1009}" "{i,v}" "{from_json,path_elems}" _null_ _null_ jsonb_extract_path_text _null_ _null_ _null_ ));
-DESCR("get value from jsonb as text with path elements");
-DATA(insert OID = 3219 (  jsonb_array_elements         PGNSP PGUID 12 1 100 0 0 f f f t t i s 1 0 3802 "3802" "{3802,3802}" "{i,o}" "{from_json,value}" _null_ _null_ jsonb_array_elements _null_ _null_ _null_ ));
-DESCR("elements of a jsonb array");
-DATA(insert OID = 3465 (  jsonb_array_elements_text PGNSP PGUID 12 1 100 0 0 f f f t t i s 1 0 25 "3802" "{3802,25}" "{i,o}" "{from_json,value}" _null_ _null_ jsonb_array_elements_text _null_ _null_ _null_ ));
-DESCR("elements of jsonb array");
-DATA(insert OID = 3207 (  jsonb_array_length                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_array_length _null_ _null_ _null_ ));
-DESCR("length of jsonb array");
-DATA(insert OID = 3931 (  jsonb_object_keys                    PGNSP PGUID 12 1 100 0 0 f f f t t i s 1 0 25 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_object_keys _null_ _null_ _null_ ));
-DESCR("get jsonb object keys");
-DATA(insert OID = 3208 (  jsonb_each                              PGNSP PGUID 12 1 100 0 0 f f f t t i s 1 0 2249 "3802" "{3802,25,3802}" "{i,o,o}" "{from_json,key,value}" _null_ _null_ jsonb_each _null_ _null_ _null_ ));
-DESCR("key value pairs of a jsonb object");
-DATA(insert OID = 3932 (  jsonb_each_text                 PGNSP PGUID 12 1 100 0 0 f f f t t i s 1 0 2249 "3802" "{3802,25,25}" "{i,o,o}" "{from_json,key,value}" _null_ _null_ jsonb_each_text _null_ _null_ _null_ ));
-DESCR("key value pairs of a jsonb object");
-DATA(insert OID = 3209 (  jsonb_populate_record    PGNSP PGUID 12 1 0 0 0 f f f f f s s 2 0 2283 "2283 3802" _null_ _null_ _null_ _null_ _null_ jsonb_populate_record _null_ _null_ _null_ ));
-DESCR("get record fields from a jsonb object");
-DATA(insert OID = 3475 (  jsonb_populate_recordset     PGNSP PGUID 12 1 100 0 0 f f f f t s s 2 0 2283 "2283 3802" _null_ _null_ _null_ _null_ _null_ jsonb_populate_recordset _null_ _null_ _null_ ));
-DESCR("get set of records with fields from a jsonb array of objects");
-DATA(insert OID = 3490 (  jsonb_to_record                      PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2249 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_to_record _null_ _null_ _null_ ));
-DESCR("get record fields from a jsonb object");
-DATA(insert OID = 3491 (  jsonb_to_recordset           PGNSP PGUID 12 1 100 0 0 f f f f t s s 1 0 2249 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_to_recordset _null_ _null_ _null_ ));
-DESCR("get set of records with fields from a jsonb array of objects");
-DATA(insert OID = 3210 (  jsonb_typeof                         PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_typeof _null_ _null_ _null_ ));
-DESCR("get the type of a jsonb value");
-DATA(insert OID = 4038 (  jsonb_ne                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3802 3802" _null_ _null_ _null_ _null_ _null_ jsonb_ne _null_ _null_ _null_ ));
-DATA(insert OID = 4039 (  jsonb_lt                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3802 3802" _null_ _null_ _null_ _null_ _null_ jsonb_lt _null_ _null_ _null_ ));
-DATA(insert OID = 4040 (  jsonb_gt                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3802 3802" _null_ _null_ _null_ _null_ _null_ jsonb_gt _null_ _null_ _null_ ));
-DATA(insert OID = 4041 (  jsonb_le                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3802 3802" _null_ _null_ _null_ _null_ _null_ jsonb_le _null_ _null_ _null_ ));
-DATA(insert OID = 4042 (  jsonb_ge                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3802 3802" _null_ _null_ _null_ _null_ _null_ jsonb_ge _null_ _null_ _null_ ));
-DATA(insert OID = 4043 (  jsonb_eq                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3802 3802" _null_ _null_ _null_ _null_ _null_ jsonb_eq _null_ _null_ _null_ ));
-DATA(insert OID = 4044 (  jsonb_cmp               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "3802 3802" _null_ _null_ _null_ _null_ _null_ jsonb_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 4045 (  jsonb_hash      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_hash _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 3416 (  jsonb_hash_extended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "3802 20" _null_ _null_ _null_ _null_ _null_ jsonb_hash_extended _null_ _null_ _null_ ));
-DESCR("hash");
-DATA(insert OID = 4046 (  jsonb_contains   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3802 3802" _null_ _null_ _null_ _null_ _null_ jsonb_contains _null_ _null_ _null_ ));
-DATA(insert OID = 4047 (  jsonb_exists  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3802 25" _null_ _null_ _null_ _null_ _null_ jsonb_exists _null_ _null_ _null_ ));
-DATA(insert OID = 4048 (  jsonb_exists_any      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3802 1009" _null_ _null_ _null_ _null_ _null_ jsonb_exists_any _null_ _null_ _null_ ));
-DATA(insert OID = 4049 (  jsonb_exists_all      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3802 1009" _null_ _null_ _null_ _null_ _null_ jsonb_exists_all _null_ _null_ _null_ ));
-DATA(insert OID = 4050 (  jsonb_contained      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3802 3802" _null_ _null_ _null_ _null_ _null_ jsonb_contained _null_ _null_ _null_ ));
-DATA(insert OID = 3480 (  gin_compare_jsonb  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "25 25" _null_ _null_ _null_ _null_ _null_ gin_compare_jsonb _null_ _null_ _null_ ));
-DESCR("GIN support");
-DATA(insert OID = 3482 (  gin_extract_jsonb  PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 2281 "3802 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_jsonb _null_ _null_ _null_ ));
-DESCR("GIN support");
-DATA(insert OID = 3483 (  gin_extract_jsonb_query  PGNSP PGUID 12 1 0 0 0 f f f t f i s 7 0 2281 "3802 2281 21 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_jsonb_query _null_ _null_ _null_ ));
-DESCR("GIN support");
-DATA(insert OID = 3484 (  gin_consistent_jsonb PGNSP PGUID 12 1 0 0 0 f f f t f i s 8 0 16 "2281 21 3802 23 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_consistent_jsonb _null_ _null_ _null_ ));
-DESCR("GIN support");
-DATA(insert OID = 3488 (  gin_triconsistent_jsonb      PGNSP PGUID 12 1 0 0 0 f f f t f i s 7 0 18 "2281 21 3802 23 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_triconsistent_jsonb _null_ _null_ _null_ ));
-DESCR("GIN support");
-DATA(insert OID = 3485 (  gin_extract_jsonb_path  PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 2281 "3802 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_jsonb_path _null_ _null_ _null_ ));
-DESCR("GIN support");
-DATA(insert OID = 3486 (  gin_extract_jsonb_query_path PGNSP PGUID 12 1 0 0 0 f f f t f i s 7 0 2281 "3802 2281 21 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_jsonb_query_path _null_ _null_ _null_ ));
-DESCR("GIN support");
-DATA(insert OID = 3487 (  gin_consistent_jsonb_path  PGNSP PGUID 12 1 0 0 0 f f f t f i s 8 0 16 "2281 21 3802 23 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_consistent_jsonb_path _null_ _null_ _null_ ));
-DESCR("GIN support");
-DATA(insert OID = 3489 (  gin_triconsistent_jsonb_path PGNSP PGUID 12 1 0 0 0 f f f t f i s 7 0 18 "2281 21 3802 23 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_triconsistent_jsonb_path _null_ _null_ _null_ ));
-DESCR("GIN support");
-DATA(insert OID = 3301 (  jsonb_concat    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3802 "3802 3802" _null_ _null_ _null_ _null_ _null_ jsonb_concat _null_ _null_ _null_ ));
-DATA(insert OID = 3302 (  jsonb_delete    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3802 "3802 25" _null_ _null_ _null_ _null_ _null_ jsonb_delete _null_ _null_ _null_ ));
-DATA(insert OID = 3303 (  jsonb_delete    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3802 "3802 23" _null_ _null_ _null_ _null_ _null_ jsonb_delete_idx _null_ _null_ _null_ ));
-DATA(insert OID = 3343 ( jsonb_delete     PGNSP PGUID 12 1 0 25 0 f f f t f i s 2 0 3802 "3802 1009" "{3802,1009}" "{i,v}" "{from_json,path_elems}" _null_ _null_ jsonb_delete_array _null_ _null_ _null_ ));
-DATA(insert OID = 3304 (  jsonb_delete_path    PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3802 "3802 1009" _null_ _null_ _null_ _null_ _null_ jsonb_delete_path _null_ _null_ _null_ ));
-DATA(insert OID = 3305 (  jsonb_set    PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 3802 "3802 1009 3802 16" _null_ _null_ _null_ _null_ _null_ jsonb_set _null_ _null_ _null_ ));
-DESCR("Set part of a jsonb");
-DATA(insert OID = 3306 (  jsonb_pretty    PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 25 "3802" _null_ _null_ _null_ _null_ _null_ jsonb_pretty _null_ _null_ _null_ ));
-DESCR("Indented text from jsonb");
-DATA(insert OID = 3579 (  jsonb_insert   PGNSP PGUID 12 1 0 0 0 f f f t f i s 4 0 3802 "3802 1009 3802 16" _null_ _null_ _null_ _null_ _null_ jsonb_insert _null_ _null_ _null_ ));
-DESCR("Insert value into a jsonb");
-/* txid */
-DATA(insert OID = 2939 (  txid_snapshot_in                     PGNSP PGUID 12 1  0 0 0 f f f t f i s 1 0 2970 "2275" _null_ _null_ _null_ _null_ _null_ txid_snapshot_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2940 (  txid_snapshot_out                    PGNSP PGUID 12 1  0 0 0 f f f t f i s 1 0 2275 "2970" _null_ _null_ _null_ _null_ _null_ txid_snapshot_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2941 (  txid_snapshot_recv           PGNSP PGUID 12 1  0 0 0 f f f t f i s 1 0 2970 "2281" _null_ _null_ _null_ _null_ _null_ txid_snapshot_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2942 (  txid_snapshot_send           PGNSP PGUID 12 1  0 0 0 f f f t f i s 1 0 17 "2970" _null_ _null_ _null_ _null_ _null_ txid_snapshot_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 2943 (  txid_current                         PGNSP PGUID 12 1  0 0 0 f f f t f s u 0 0 20 "" _null_ _null_ _null_ _null_ _null_ txid_current _null_ _null_ _null_ ));
-DESCR("get current transaction ID");
-DATA(insert OID = 3348 (  txid_current_if_assigned     PGNSP PGUID 12 1  0 0 0 f f f t f s u 0 0 20 "" _null_ _null_ _null_ _null_ _null_ txid_current_if_assigned _null_ _null_ _null_ ));
-DESCR("get current transaction ID");
-DATA(insert OID = 2944 (  txid_current_snapshot                PGNSP PGUID 12 1  0 0 0 f f f t f s s 0 0 2970 "" _null_ _null_ _null_ _null_ _null_ txid_current_snapshot _null_ _null_ _null_ ));
-DESCR("get current snapshot");
-DATA(insert OID = 2945 (  txid_snapshot_xmin           PGNSP PGUID 12 1  0 0 0 f f f t f i s 1 0 20 "2970" _null_ _null_ _null_ _null_ _null_ txid_snapshot_xmin _null_ _null_ _null_ ));
-DESCR("get xmin of snapshot");
-DATA(insert OID = 2946 (  txid_snapshot_xmax           PGNSP PGUID 12 1  0 0 0 f f f t f i s 1 0 20 "2970" _null_ _null_ _null_ _null_ _null_ txid_snapshot_xmax _null_ _null_ _null_ ));
-DESCR("get xmax of snapshot");
-DATA(insert OID = 2947 (  txid_snapshot_xip                    PGNSP PGUID 12 1 50 0 0 f f f t t i s 1 0 20 "2970" _null_ _null_ _null_ _null_ _null_ txid_snapshot_xip _null_ _null_ _null_ ));
-DESCR("get set of in-progress txids in snapshot");
-DATA(insert OID = 2948 (  txid_visible_in_snapshot     PGNSP PGUID 12 1  0 0 0 f f f t f i s 2 0 16 "20 2970" _null_ _null_ _null_ _null_ _null_ txid_visible_in_snapshot _null_ _null_ _null_ ));
-DESCR("is txid visible in snapshot?");
-DATA(insert OID = 3360 (  txid_status                          PGNSP PGUID 12 1  0 0 0 f f f t f v s 1 0 25 "20" _null_ _null_ _null_ _null_ _null_ txid_status _null_ _null_ _null_ ));
-DESCR("commit status of transaction");
-
-/* record comparison using normal comparison rules */
-DATA(insert OID = 2981 (  record_eq               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2249 2249" _null_ _null_ _null_ _null_ _null_ record_eq _null_ _null_ _null_ ));
-DATA(insert OID = 2982 (  record_ne               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2249 2249" _null_ _null_ _null_ _null_ _null_ record_ne _null_ _null_ _null_ ));
-DATA(insert OID = 2983 (  record_lt               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2249 2249" _null_ _null_ _null_ _null_ _null_ record_lt _null_ _null_ _null_ ));
-DATA(insert OID = 2984 (  record_gt               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2249 2249" _null_ _null_ _null_ _null_ _null_ record_gt _null_ _null_ _null_ ));
-DATA(insert OID = 2985 (  record_le               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2249 2249" _null_ _null_ _null_ _null_ _null_ record_le _null_ _null_ _null_ ));
-DATA(insert OID = 2986 (  record_ge               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2249 2249" _null_ _null_ _null_ _null_ _null_ record_ge _null_ _null_ _null_ ));
-DATA(insert OID = 2987 (  btrecordcmp     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "2249 2249" _null_ _null_ _null_ _null_ _null_ btrecordcmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-
-/* record comparison using raw byte images */
-DATA(insert OID = 3181 (  record_image_eq         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2249 2249" _null_ _null_ _null_ _null_ _null_ record_image_eq _null_ _null_ _null_ ));
-DATA(insert OID = 3182 (  record_image_ne         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2249 2249" _null_ _null_ _null_ _null_ _null_ record_image_ne _null_ _null_ _null_ ));
-DATA(insert OID = 3183 (  record_image_lt         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2249 2249" _null_ _null_ _null_ _null_ _null_ record_image_lt _null_ _null_ _null_ ));
-DATA(insert OID = 3184 (  record_image_gt         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2249 2249" _null_ _null_ _null_ _null_ _null_ record_image_gt _null_ _null_ _null_ ));
-DATA(insert OID = 3185 (  record_image_le         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2249 2249" _null_ _null_ _null_ _null_ _null_ record_image_le _null_ _null_ _null_ ));
-DATA(insert OID = 3186 (  record_image_ge         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2249 2249" _null_ _null_ _null_ _null_ _null_ record_image_ge _null_ _null_ _null_ ));
-DATA(insert OID = 3187 (  btrecordimagecmp        PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "2249 2249" _null_ _null_ _null_ _null_ _null_ btrecordimagecmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater based on byte images");
-
-/* Extensions */
-DATA(insert OID = 3082 (  pg_available_extensions              PGNSP PGUID 12 10 100 0 0 f f f t t s s 0 0 2249 "" "{19,25,25}" "{o,o,o}" "{name,default_version,comment}" _null_ _null_ pg_available_extensions _null_ _null_ _null_ ));
-DESCR("list available extensions");
-DATA(insert OID = 3083 (  pg_available_extension_versions      PGNSP PGUID 12 10 100 0 0 f f f t t s s 0 0 2249 "" "{19,25,16,16,19,1003,25}" "{o,o,o,o,o,o,o}" "{name,version,superuser,relocatable,schema,requires,comment}" _null_ _null_ pg_available_extension_versions _null_ _null_ _null_ ));
-DESCR("list available extension versions");
-DATA(insert OID = 3084 (  pg_extension_update_paths            PGNSP PGUID 12 10 100 0 0 f f f t t s s 1 0 2249 "19" "{19,25,25,25}" "{i,o,o,o}" "{name,source,target,path}" _null_ _null_ pg_extension_update_paths _null_ _null_ _null_ ));
-DESCR("list an extension's version update paths");
-DATA(insert OID = 3086 (  pg_extension_config_dump             PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 2278 "2205 25" _null_ _null_ _null_ _null_ _null_ pg_extension_config_dump _null_ _null_ _null_ ));
-DESCR("flag an extension's table contents to be emitted by pg_dump");
-
-/* SQL-spec window functions */
-DATA(insert OID = 3100 (  row_number   PGNSP PGUID 12 1 0 0 0 w f f f f i s 0 0 20 "" _null_ _null_ _null_ _null_ _null_ window_row_number _null_ _null_ _null_ ));
-DESCR("row number within partition");
-DATA(insert OID = 3101 (  rank                 PGNSP PGUID 12 1 0 0 0 w f f f f i s 0 0 20 "" _null_ _null_ _null_ _null_ _null_ window_rank _null_ _null_ _null_ ));
-DESCR("integer rank with gaps");
-DATA(insert OID = 3102 (  dense_rank   PGNSP PGUID 12 1 0 0 0 w f f f f i s 0 0 20 "" _null_ _null_ _null_ _null_ _null_ window_dense_rank _null_ _null_ _null_ ));
-DESCR("integer rank without gaps");
-DATA(insert OID = 3103 (  percent_rank PGNSP PGUID 12 1 0 0 0 w f f f f i s 0 0 701 "" _null_ _null_ _null_ _null_ _null_ window_percent_rank _null_ _null_ _null_ ));
-DESCR("fractional rank within partition");
-DATA(insert OID = 3104 (  cume_dist            PGNSP PGUID 12 1 0 0 0 w f f f f i s 0 0 701 "" _null_ _null_ _null_ _null_ _null_ window_cume_dist _null_ _null_ _null_ ));
-DESCR("fractional row number within partition");
-DATA(insert OID = 3105 (  ntile                        PGNSP PGUID 12 1 0 0 0 w f f t f i s 1 0 23 "23" _null_ _null_ _null_ _null_ _null_ window_ntile _null_ _null_ _null_ ));
-DESCR("split rows into N groups");
-DATA(insert OID = 3106 (  lag                  PGNSP PGUID 12 1 0 0 0 w f f t f i s 1 0 2283 "2283" _null_ _null_ _null_ _null_ _null_ window_lag _null_ _null_ _null_ ));
-DESCR("fetch the preceding row value");
-DATA(insert OID = 3107 (  lag                  PGNSP PGUID 12 1 0 0 0 w f f t f i s 2 0 2283 "2283 23" _null_ _null_ _null_ _null_ _null_ window_lag_with_offset _null_ _null_ _null_ ));
-DESCR("fetch the Nth preceding row value");
-DATA(insert OID = 3108 (  lag                  PGNSP PGUID 12 1 0 0 0 w f f t f i s 3 0 2283 "2283 23 2283" _null_ _null_ _null_ _null_ _null_ window_lag_with_offset_and_default _null_ _null_ _null_ ));
-DESCR("fetch the Nth preceding row value with default");
-DATA(insert OID = 3109 (  lead                 PGNSP PGUID 12 1 0 0 0 w f f t f i s 1 0 2283 "2283" _null_ _null_ _null_ _null_ _null_ window_lead _null_ _null_ _null_ ));
-DESCR("fetch the following row value");
-DATA(insert OID = 3110 (  lead                 PGNSP PGUID 12 1 0 0 0 w f f t f i s 2 0 2283 "2283 23" _null_ _null_ _null_ _null_ _null_ window_lead_with_offset _null_ _null_ _null_ ));
-DESCR("fetch the Nth following row value");
-DATA(insert OID = 3111 (  lead                 PGNSP PGUID 12 1 0 0 0 w f f t f i s 3 0 2283 "2283 23 2283" _null_ _null_ _null_ _null_ _null_ window_lead_with_offset_and_default _null_ _null_ _null_ ));
-DESCR("fetch the Nth following row value with default");
-DATA(insert OID = 3112 (  first_value  PGNSP PGUID 12 1 0 0 0 w f f t f i s 1 0 2283 "2283" _null_ _null_ _null_ _null_ _null_ window_first_value _null_ _null_ _null_ ));
-DESCR("fetch the first row value");
-DATA(insert OID = 3113 (  last_value   PGNSP PGUID 12 1 0 0 0 w f f t f i s 1 0 2283 "2283" _null_ _null_ _null_ _null_ _null_ window_last_value _null_ _null_ _null_ ));
-DESCR("fetch the last row value");
-DATA(insert OID = 3114 (  nth_value            PGNSP PGUID 12 1 0 0 0 w f f t f i s 2 0 2283 "2283 23" _null_ _null_ _null_ _null_ _null_ window_nth_value _null_ _null_ _null_ ));
-DESCR("fetch the Nth row value");
-
-/* functions for range types */
-DATA(insert OID = 3832 (  anyrange_in  PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 3831 "2275 26 23" _null_ _null_ _null_ _null_ _null_ anyrange_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3833 (  anyrange_out PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "3831" _null_ _null_ _null_ _null_ _null_ anyrange_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3834 (  range_in             PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 3831 "2275 26 23" _null_ _null_ _null_ _null_ _null_ range_in _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3835 (  range_out            PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 2275 "3831" _null_ _null_ _null_ _null_ _null_ range_out _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3836 (  range_recv   PGNSP PGUID 12 1 0 0 0 f f f t f s s 3 0 3831 "2281 26 23" _null_ _null_ _null_ _null_ _null_ range_recv _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3837 (  range_send   PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 17 "3831" _null_ _null_ _null_ _null_ _null_ range_send _null_ _null_ _null_ ));
-DESCR("I/O");
-DATA(insert OID = 3848 (  lower                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2283 "3831" _null_ _null_ _null_ _null_ _null_ range_lower _null_ _null_ _null_ ));
-DESCR("lower bound of range");
-DATA(insert OID = 3849 (  upper                PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 2283 "3831" _null_ _null_ _null_ _null_ _null_ range_upper _null_ _null_ _null_ ));
-DESCR("upper bound of range");
-DATA(insert OID = 3850 (  isempty      PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "3831" _null_ _null_ _null_ _null_ _null_ range_empty _null_ _null_ _null_ ));
-DESCR("is the range empty?");
-DATA(insert OID = 3851 (  lower_inc PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "3831" _null_ _null_ _null_ _null_ _null_ range_lower_inc _null_ _null_ _null_ ));
-DESCR("is the range's lower bound inclusive?");
-DATA(insert OID = 3852 (  upper_inc PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "3831" _null_ _null_ _null_ _null_ _null_ range_upper_inc _null_ _null_ _null_ ));
-DESCR("is the range's upper bound inclusive?");
-DATA(insert OID = 3853 (  lower_inf PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "3831" _null_ _null_ _null_ _null_ _null_ range_lower_inf _null_ _null_ _null_ ));
-DESCR("is the range's lower bound infinite?");
-DATA(insert OID = 3854 (  upper_inf PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 16 "3831" _null_ _null_ _null_ _null_ _null_ range_upper_inf _null_ _null_ _null_ ));
-DESCR("is the range's upper bound infinite?");
-DATA(insert OID = 3855 (  range_eq     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_eq _null_ _null_ _null_ ));
-DATA(insert OID = 3856 (  range_ne     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_ne _null_ _null_ _null_ ));
-DATA(insert OID = 3857 (  range_overlaps               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_overlaps _null_ _null_ _null_ ));
-DATA(insert OID = 3858 (  range_contains_elem  PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3831 2283" _null_ _null_ _null_ _null_ _null_ range_contains_elem _null_ _null_ _null_ ));
-DATA(insert OID = 3859 (  range_contains               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_contains _null_ _null_ _null_ ));
-DATA(insert OID = 3860 (  elem_contained_by_range      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2283 3831" _null_ _null_ _null_ _null_ _null_ elem_contained_by_range _null_ _null_ _null_ ));
-DATA(insert OID = 3861 (  range_contained_by   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_contained_by _null_ _null_ _null_ ));
-DATA(insert OID = 3862 (  range_adjacent               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_adjacent _null_ _null_ _null_ ));
-DATA(insert OID = 3863 (  range_before         PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_before _null_ _null_ _null_ ));
-DATA(insert OID = 3864 (  range_after          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_after _null_ _null_ _null_ ));
-DATA(insert OID = 3865 (  range_overleft       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_overleft _null_ _null_ _null_ ));
-DATA(insert OID = 3866 (  range_overright      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_overright _null_ _null_ _null_ ));
-DATA(insert OID = 3867 (  range_union          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3831 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_union _null_ _null_ _null_ ));
-DATA(insert OID = 4057 (  range_merge          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3831 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_merge _null_ _null_ _null_ ));
-DESCR("the smallest range which includes both of the given ranges");
-DATA(insert OID = 3868 (  range_intersect      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3831 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_intersect _null_ _null_ _null_ ));
-DATA(insert OID = 3869 (  range_minus          PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3831 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_minus _null_ _null_ _null_ ));
-DATA(insert OID = 3870 (  range_cmp PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 23 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_cmp _null_ _null_ _null_ ));
-DESCR("less-equal-greater");
-DATA(insert OID = 3871 (  range_lt     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_lt _null_ _null_ _null_ ));
-DATA(insert OID = 3872 (  range_le     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_le _null_ _null_ _null_ ));
-DATA(insert OID = 3873 (  range_ge     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_ge _null_ _null_ _null_ ));
-DATA(insert OID = 3874 (  range_gt     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "3831 3831" _null_ _null_ _null_ _null_ _null_ range_gt _null_ _null_ _null_ ));
-DATA(insert OID = 3875 (  range_gist_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 5 0 16 "2281 3831 21 26 2281" _null_ _null_ _null_ _null_ _null_ range_gist_consistent _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 3876 (  range_gist_union             PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 3831 "2281 2281" _null_ _null_ _null_ _null_ _null_ range_gist_union _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 3879 (  range_gist_penalty   PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 2281 "2281 2281 2281" _null_ _null_ _null_ _null_ _null_ range_gist_penalty _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 3880 (  range_gist_picksplit PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2281 "2281 2281" _null_ _null_ _null_ _null_ _null_ range_gist_picksplit _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 3881 (  range_gist_same              PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 2281 "3831 3831 2281" _null_ _null_ _null_ _null_ _null_ range_gist_same _null_ _null_ _null_ ));
-DESCR("GiST support");
-DATA(insert OID = 3902 (  hash_range                   PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 23 "3831" _null_ _null_ _null_ _null_ _null_ hash_range _null_ _null_ _null_ ));
-DESCR("hash a range");
-DATA(insert OID = 3417 (  hash_range_extended PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 20 "3831 20" _null_ _null_ _null_ _null_ _null_ hash_range_extended _null_ _null_ _null_ ));
-DESCR("hash a range");
-DATA(insert OID = 3916 (  range_typanalyze             PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 16 "2281" _null_ _null_ _null_ _null_ _null_ range_typanalyze _null_ _null_ _null_ ));
-DESCR("range typanalyze");
-DATA(insert OID = 3169 (  rangesel                             PGNSP PGUID 12 1 0 0 0 f f f t f s s 4 0 701 "2281 26 2281 23" _null_ _null_ _null_ _null_ _null_ rangesel _null_ _null_ _null_ ));
-DESCR("restriction selectivity for range operators");
-
-DATA(insert OID = 3914 (  int4range_canonical             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3904 "3904" _null_ _null_ _null_ _null_ _null_ int4range_canonical _null_ _null_ _null_ ));
-DESCR("convert an int4 range to canonical form");
-DATA(insert OID = 3928 (  int8range_canonical             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3926 "3926" _null_ _null_ _null_ _null_ _null_ int8range_canonical _null_ _null_ _null_ ));
-DESCR("convert an int8 range to canonical form");
-DATA(insert OID = 3915 (  daterange_canonical             PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 3912 "3912" _null_ _null_ _null_ _null_ _null_ daterange_canonical _null_ _null_ _null_ ));
-DESCR("convert a date range to canonical form");
-DATA(insert OID = 3922 (  int4range_subdiff               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "23 23" _null_ _null_ _null_ _null_ _null_ int4range_subdiff _null_ _null_ _null_ ));
-DESCR("float8 difference of two int4 values");
-DATA(insert OID = 3923 (  int8range_subdiff               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "20 20" _null_ _null_ _null_ _null_ _null_ int8range_subdiff _null_ _null_ _null_ ));
-DESCR("float8 difference of two int8 values");
-DATA(insert OID = 3924 (  numrange_subdiff                PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "1700 1700" _null_ _null_ _null_ _null_ _null_ numrange_subdiff _null_ _null_ _null_ ));
-DESCR("float8 difference of two numeric values");
-DATA(insert OID = 3925 (  daterange_subdiff               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "1082 1082" _null_ _null_ _null_ _null_ _null_ daterange_subdiff _null_ _null_ _null_ ));
-DESCR("float8 difference of two date values");
-DATA(insert OID = 3929 (  tsrange_subdiff                 PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "1114 1114" _null_ _null_ _null_ _null_ _null_ tsrange_subdiff _null_ _null_ _null_ ));
-DESCR("float8 difference of two timestamp values");
-DATA(insert OID = 3930 (  tstzrange_subdiff               PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 701 "1184 1184" _null_ _null_ _null_ _null_ _null_ tstzrange_subdiff _null_ _null_ _null_ ));
-DESCR("float8 difference of two timestamp with time zone values");
-
-DATA(insert OID = 3840 (  int4range PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 3904 "23 23" _null_ _null_ _null_ _null_ _null_ range_constructor2 _null_ _null_ _null_ ));
-DESCR("int4range constructor");
-DATA(insert OID = 3841 (  int4range PGNSP PGUID 12 1 0 0 0 f f f f f i s 3 0 3904 "23 23 25" _null_ _null_ _null_ _null_ _null_ range_constructor3 _null_ _null_ _null_ ));
-DESCR("int4range constructor");
-DATA(insert OID = 3844 (  numrange     PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 3906 "1700 1700" _null_ _null_ _null_ _null_ _null_ range_constructor2 _null_ _null_ _null_ ));
-DESCR("numrange constructor");
-DATA(insert OID = 3845 (  numrange     PGNSP PGUID 12 1 0 0 0 f f f f f i s 3 0 3906 "1700 1700 25" _null_ _null_ _null_ _null_ _null_ range_constructor3 _null_ _null_ _null_ ));
-DESCR("numrange constructor");
-DATA(insert OID = 3933 (  tsrange      PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 3908 "1114 1114" _null_ _null_ _null_ _null_ _null_ range_constructor2 _null_ _null_ _null_ ));
-DESCR("tsrange constructor");
-DATA(insert OID = 3934 (  tsrange      PGNSP PGUID 12 1 0 0 0 f f f f f i s 3 0 3908 "1114 1114 25" _null_ _null_ _null_ _null_ _null_ range_constructor3 _null_ _null_ _null_ ));
-DESCR("tsrange constructor");
-DATA(insert OID = 3937 (  tstzrange PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 3910 "1184 1184" _null_ _null_ _null_ _null_ _null_ range_constructor2 _null_ _null_ _null_ ));
-DESCR("tstzrange constructor");
-DATA(insert OID = 3938 (  tstzrange PGNSP PGUID 12 1 0 0 0 f f f f f i s 3 0 3910 "1184 1184 25" _null_ _null_ _null_ _null_ _null_ range_constructor3 _null_ _null_ _null_ ));
-DESCR("tstzrange constructor");
-DATA(insert OID = 3941 (  daterange PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 3912 "1082 1082" _null_ _null_ _null_ _null_ _null_ range_constructor2 _null_ _null_ _null_ ));
-DESCR("daterange constructor");
-DATA(insert OID = 3942 (  daterange PGNSP PGUID 12 1 0 0 0 f f f f f i s 3 0 3912 "1082 1082 25" _null_ _null_ _null_ _null_ _null_ range_constructor3 _null_ _null_ _null_ ));
-DESCR("daterange constructor");
-DATA(insert OID = 3945 (  int8range PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 3926 "20 20" _null_ _null_ _null_ _null_ _null_ range_constructor2 _null_ _null_ _null_ ));
-DESCR("int8range constructor");
-DATA(insert OID = 3946 (  int8range PGNSP PGUID 12 1 0 0 0 f f f f f i s 3 0 3926 "20 20 25" _null_ _null_ _null_ _null_ _null_ range_constructor3 _null_ _null_ _null_ ));
-DESCR("int8range constructor");
-
-/* date, time, timestamp constructors */
-DATA(insert OID = 3846 ( make_date     PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1082 "23 23 23" _null_ _null_ "{year,month,day}" _null_ _null_ make_date _null_ _null_ _null_ ));
-DESCR("construct date");
-DATA(insert OID = 3847 ( make_time     PGNSP PGUID 12 1 0 0 0 f f f t f i s 3 0 1083 "23 23 701" _null_ _null_ "{hour,min,sec}" _null_ _null_ make_time _null_ _null_ _null_ ));
-DESCR("construct time");
-DATA(insert OID = 3461 ( make_timestamp PGNSP PGUID 12 1 0 0 0 f f f t f i s 6 0 1114 "23 23 23 23 23 701" _null_ _null_ "{year,month,mday,hour,min,sec}" _null_ _null_ make_timestamp _null_ _null_ _null_ ));
-DESCR("construct timestamp");
-DATA(insert OID = 3462 ( make_timestamptz      PGNSP PGUID 12 1 0 0 0 f f f t f s s 6 0 1184 "23 23 23 23 23 701" _null_ _null_ "{year,month,mday,hour,min,sec}" _null_ _null_ make_timestamptz _null_ _null_ _null_ ));
-DESCR("construct timestamp with time zone");
-DATA(insert OID = 3463 ( make_timestamptz      PGNSP PGUID 12 1 0 0 0 f f f t f s s 7 0 1184 "23 23 23 23 23 701 25" _null_ _null_ "{year,month,mday,hour,min,sec,timezone}" _null_ _null_ make_timestamptz_at_timezone _null_ _null_ _null_ ));
-DESCR("construct timestamp with time zone");
-DATA(insert OID = 3464 ( make_interval PGNSP PGUID 12 1 0 0 0 f f f t f i s 7 0 1186 "23 23 23 23 23 23 701" _null_ _null_ "{years,months,weeks,days,hours,mins,secs}" _null_ _null_ make_interval _null_ _null_ _null_ ));
-DESCR("construct interval");
-
-/* spgist opclasses */
-DATA(insert OID = 4018 (  spg_quad_config      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_quad_config _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree over point");
-DATA(insert OID = 4019 (  spg_quad_choose      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_quad_choose _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree over point");
-DATA(insert OID = 4020 (  spg_quad_picksplit   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_quad_picksplit _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree over point");
-DATA(insert OID = 4021 (  spg_quad_inner_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_quad_inner_consistent _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree over point");
-DATA(insert OID = 4022 (  spg_quad_leaf_consistent     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_quad_leaf_consistent _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree and k-d tree over point");
-
-DATA(insert OID = 4023 (  spg_kd_config PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_kd_config _null_ _null_ _null_ ));
-DESCR("SP-GiST support for k-d tree over point");
-DATA(insert OID = 4024 (  spg_kd_choose PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_kd_choose _null_ _null_ _null_ ));
-DESCR("SP-GiST support for k-d tree over point");
-DATA(insert OID = 4025 (  spg_kd_picksplit     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_kd_picksplit _null_ _null_ _null_ ));
-DESCR("SP-GiST support for k-d tree over point");
-DATA(insert OID = 4026 (  spg_kd_inner_consistent      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_kd_inner_consistent _null_ _null_ _null_ ));
-DESCR("SP-GiST support for k-d tree over point");
-
-DATA(insert OID = 4027 (  spg_text_config      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_text_config _null_ _null_ _null_ ));
-DESCR("SP-GiST support for radix tree over text");
-DATA(insert OID = 4028 (  spg_text_choose      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_text_choose _null_ _null_ _null_ ));
-DESCR("SP-GiST support for radix tree over text");
-DATA(insert OID = 4029 (  spg_text_picksplit   PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_text_picksplit _null_ _null_ _null_ ));
-DESCR("SP-GiST support for radix tree over text");
-DATA(insert OID = 4030 (  spg_text_inner_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_text_inner_consistent _null_ _null_ _null_ ));
-DESCR("SP-GiST support for radix tree over text");
-DATA(insert OID = 4031 (  spg_text_leaf_consistent     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_text_leaf_consistent _null_ _null_ _null_ ));
-DESCR("SP-GiST support for radix tree over text");
-
-DATA(insert OID = 3469 (  spg_range_quad_config PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_range_quad_config _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree over range");
-DATA(insert OID = 3470 (  spg_range_quad_choose PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_range_quad_choose _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree over range");
-DATA(insert OID = 3471 (  spg_range_quad_picksplit     PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_range_quad_picksplit _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree over range");
-DATA(insert OID = 3472 (  spg_range_quad_inner_consistent      PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_range_quad_inner_consistent _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree over range");
-DATA(insert OID = 3473 (  spg_range_quad_leaf_consistent       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_range_quad_leaf_consistent _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree over range");
-
-DATA(insert OID = 5012 (  spg_box_quad_config PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_box_quad_config _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree over box");
-DATA(insert OID = 5013 (  spg_box_quad_choose PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_box_quad_choose _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree over box");
-DATA(insert OID = 5014 (  spg_box_quad_picksplit       PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_box_quad_picksplit _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree over box");
-DATA(insert OID = 5015 (  spg_box_quad_inner_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_box_quad_inner_consistent _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree over box");
-DATA(insert OID = 5016 (  spg_box_quad_leaf_consistent PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 16 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_box_quad_leaf_consistent _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree over box");
-
-DATA(insert OID = 5010 (  spg_bbox_quad_config PGNSP PGUID 12 1 0 0 0 f f f t f i s 2 0 2278 "2281 2281" _null_ _null_ _null_ _null_  _null_ spg_bbox_quad_config _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree over 2-D types represented by their bounding boxes");
-DATA(insert OID = 5011 (  spg_poly_quad_compress PGNSP PGUID 12 1 0 0 0 f f f t f i s 1 0 603 "604" _null_ _null_ _null_ _null_  _null_ spg_poly_quad_compress _null_ _null_ _null_ ));
-DESCR("SP-GiST support for quad tree over polygons");
-
-/* replication slots */
-DATA(insert OID = 3779 (  pg_create_physical_replication_slot PGNSP PGUID 12 1 0 0 0 f f f t f v u 3 0 2249 "19 16 16" "{19,16,16,19,3220}" "{i,i,i,o,o}" "{slot_name,immediately_reserve,temporary,slot_name,lsn}" _null_ _null_ pg_create_physical_replication_slot _null_ _null_ _null_ ));
-DESCR("create a physical replication slot");
-DATA(insert OID = 3780 (  pg_drop_replication_slot PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 2278 "19" _null_ _null_ _null_ _null_ _null_ pg_drop_replication_slot _null_ _null_ _null_ ));
-DESCR("drop a replication slot");
-DATA(insert OID = 3781 (  pg_get_replication_slots     PGNSP PGUID 12 1 10 0 0 f f f f t s s 0 0 2249 "" "{19,19,25,26,16,16,23,28,28,3220,3220}" "{o,o,o,o,o,o,o,o,o,o,o}" "{slot_name,plugin,slot_type,datoid,temporary,active,active_pid,xmin,catalog_xmin,restart_lsn,confirmed_flush_lsn}" _null_ _null_ pg_get_replication_slots _null_ _null_ _null_ ));
-DESCR("information about replication slots currently in use");
-DATA(insert OID = 3786 (  pg_create_logical_replication_slot PGNSP PGUID 12 1 0 0 0 f f f t f v u 3 0 2249 "19 19 16" "{19,19,16,25,3220}" "{i,i,i,o,o}" "{slot_name,plugin,temporary,slot_name,lsn}" _null_ _null_ pg_create_logical_replication_slot _null_ _null_ _null_ ));
-DESCR("set up a logical replication slot");
-DATA(insert OID = 3782 (  pg_logical_slot_get_changes PGNSP PGUID 12 1000 1000 25 0 f f f f t v u 4 0 2249 "19 3220 23 1009" "{19,3220,23,1009,3220,28,25}" "{i,i,i,v,o,o,o}" "{slot_name,upto_lsn,upto_nchanges,options,lsn,xid,data}" _null_ _null_ pg_logical_slot_get_changes _null_ _null_ _null_ ));
-DESCR("get changes from replication slot");
-DATA(insert OID = 3783 (  pg_logical_slot_get_binary_changes PGNSP PGUID 12 1000 1000 25 0 f f f f t v u 4 0 2249 "19 3220 23 1009" "{19,3220,23,1009,3220,28,17}" "{i,i,i,v,o,o,o}" "{slot_name,upto_lsn,upto_nchanges,options,lsn,xid,data}" _null_ _null_ pg_logical_slot_get_binary_changes _null_ _null_ _null_ ));
-DESCR("get binary changes from replication slot");
-DATA(insert OID = 3784 (  pg_logical_slot_peek_changes PGNSP PGUID 12 1000 1000 25 0 f f f f t v u 4 0 2249 "19 3220 23 1009" "{19,3220,23,1009,3220,28,25}" "{i,i,i,v,o,o,o}" "{slot_name,upto_lsn,upto_nchanges,options,lsn,xid,data}" _null_ _null_ pg_logical_slot_peek_changes _null_ _null_ _null_ ));
-DESCR("peek at changes from replication slot");
-DATA(insert OID = 3785 (  pg_logical_slot_peek_binary_changes PGNSP PGUID 12 1000 1000 25 0 f f f f t v u 4 0 2249 "19 3220 23 1009" "{19,3220,23,1009,3220,28,17}" "{i,i,i,v,o,o,o}" "{slot_name,upto_lsn,upto_nchanges,options,lsn,xid,data}" _null_ _null_ pg_logical_slot_peek_binary_changes _null_ _null_ _null_ ));
-DESCR("peek at binary changes from replication slot");
-DATA(insert OID = 3878 (  pg_replication_slot_advance PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 2249 "19 3220" "{19,3220,19,3220}" "{i,i,o,o}" "{slot_name,upto_lsn,slot_name,end_lsn}" _null_ _null_ pg_replication_slot_advance _null_ _null_ _null_ ));
-DESCR("advance logical replication slot");
-DATA(insert OID = 3577 (  pg_logical_emit_message PGNSP PGUID 12 1 0 0 0 f f f t f v u 3 0 3220 "16 25 25" _null_ _null_ _null_ _null_ _null_ pg_logical_emit_message_text _null_ _null_ _null_ ));
-DESCR("emit a textual logical decoding message");
-DATA(insert OID = 3578 (  pg_logical_emit_message PGNSP PGUID 12 1 0 0 0 f f f t f v u 3 0 3220 "16 25 17" _null_ _null_ _null_ _null_ _null_ pg_logical_emit_message_bytea _null_ _null_ _null_ ));
-DESCR("emit a binary logical decoding message");
-
-/* event triggers */
-DATA(insert OID = 3566 (  pg_event_trigger_dropped_objects             PGNSP PGUID 12 10 100 0 0 f f f t t s r 0 0 2249 "" "{26,26,23,16,16,16,25,25,25,25,1009,1009}" "{o,o,o,o,o,o,o,o,o,o,o,o}" "{classid, objid, objsubid, original, normal, is_temporary, object_type, schema_name, object_name, object_identity, address_names, address_args}" _null_ _null_ pg_event_trigger_dropped_objects _null_ _null_ _null_ ));
-DESCR("list objects dropped by the current command");
-DATA(insert OID = 4566 (  pg_event_trigger_table_rewrite_oid   PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 26 "" "{26}" "{o}" "{oid}" _null_ _null_ pg_event_trigger_table_rewrite_oid _null_ _null_ _null_ ));
-DESCR("return Oid of the table getting rewritten");
-DATA(insert OID = 4567 (  pg_event_trigger_table_rewrite_reason PGNSP PGUID 12 1 0 0 0 f f f t f s r 0 0 23 "" _null_ _null_ _null_ _null_ _null_ pg_event_trigger_table_rewrite_reason _null_ _null_ _null_ ));
-DESCR("return reason code for table getting rewritten");
-DATA(insert OID = 4568 (  pg_event_trigger_ddl_commands                        PGNSP PGUID 12 10 100 0 0 f f f t t s r 0 0 2249 "" "{26,26,23,25,25,25,25,16,32}" "{o,o,o,o,o,o,o,o,o}" "{classid, objid, objsubid, command_tag, object_type, schema_name, object_identity, in_extension, command}" _null_ _null_ pg_event_trigger_ddl_commands _null_ _null_ _null_ ));
-DESCR("list DDL actions being executed by the current command");
-
-/* generic transition functions for ordered-set aggregates */
-DATA(insert OID = 3970 ( ordered_set_transition                        PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2281 "2281 2276" _null_ _null_ _null_ _null_ _null_ ordered_set_transition _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-DATA(insert OID = 3971 ( ordered_set_transition_multi  PGNSP PGUID 12 1 0 2276 0 f f f f f i s 2 0 2281 "2281 2276" "{2281,2276}" "{i,v}" _null_ _null_ _null_ ordered_set_transition_multi _null_ _null_ _null_ ));
-DESCR("aggregate transition function");
-
-/* inverse distribution aggregates (and their support functions) */
-DATA(insert OID = 3972 ( percentile_disc               PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 2283 "701 2283" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("discrete percentile");
-DATA(insert OID = 3973 ( percentile_disc_final PGNSP PGUID 12 1 0 0 0 f f f f f i s 3 0 2283 "2281 701 2283" _null_ _null_ _null_ _null_ _null_ percentile_disc_final _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3974 ( percentile_cont               PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 701 "701 701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("continuous distribution percentile");
-DATA(insert OID = 3975 ( percentile_cont_float8_final  PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 701 "2281 701" _null_ _null_ _null_ _null_ _null_ percentile_cont_float8_final _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3976 ( percentile_cont               PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 1186 "701 1186" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("continuous distribution percentile");
-DATA(insert OID = 3977 ( percentile_cont_interval_final PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 1186 "2281 701" _null_ _null_ _null_ _null_ _null_ percentile_cont_interval_final _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3978 ( percentile_disc               PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 2277 "1022 2283" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("multiple discrete percentiles");
-DATA(insert OID = 3979 ( percentile_disc_multi_final   PGNSP PGUID 12 1 0 0 0 f f f f f i s 3 0 2277 "2281 1022 2283" _null_ _null_ _null_ _null_ _null_ percentile_disc_multi_final _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3980 ( percentile_cont               PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 1022 "1022 701" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("multiple continuous percentiles");
-DATA(insert OID = 3981 ( percentile_cont_float8_multi_final PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 1022 "2281 1022" _null_ _null_ _null_ _null_ _null_ percentile_cont_float8_multi_final _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3982 ( percentile_cont               PGNSP PGUID 12 1 0 0 0 a f f f f i s 2 0 1187 "1022 1186" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("multiple continuous percentiles");
-DATA(insert OID = 3983 ( percentile_cont_interval_multi_final  PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 1187 "2281 1022" _null_ _null_ _null_ _null_ _null_ percentile_cont_interval_multi_final _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3984 ( mode                                  PGNSP PGUID 12 1 0 0 0 a f f f f i s 1 0 2283 "2283" _null_ _null_ _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("most common value");
-DATA(insert OID = 3985 ( mode_final                            PGNSP PGUID 12 1 0 0 0 f f f f f i s 2 0 2283 "2281 2283" _null_ _null_ _null_ _null_ _null_    mode_final _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-
-/* hypothetical-set aggregates (and their support functions) */
-DATA(insert OID = 3986 ( rank                          PGNSP PGUID 12 1 0 2276 0 a f f f f i s 1 0 20 "2276" "{2276}" "{v}" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("rank of hypothetical row");
-DATA(insert OID = 3987 ( rank_final                    PGNSP PGUID 12 1 0 2276 0 f f f f f i s 2 0 20 "2281 2276" "{2281,2276}" "{i,v}" _null_ _null_ _null_ hypothetical_rank_final _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3988 ( percent_rank          PGNSP PGUID 12 1 0 2276 0 a f f f f i s 1 0 701 "2276" "{2276}" "{v}" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("fractional rank of hypothetical row");
-DATA(insert OID = 3989 ( percent_rank_final PGNSP PGUID 12 1 0 2276 0 f f f f f i s 2 0 701 "2281 2276" "{2281,2276}" "{i,v}" _null_ _null_ _null_ hypothetical_percent_rank_final _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3990 ( cume_dist                     PGNSP PGUID 12 1 0 2276 0 a f f f f i s 1 0 701 "2276" "{2276}" "{v}" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("cumulative distribution of hypothetical row");
-DATA(insert OID = 3991 ( cume_dist_final       PGNSP PGUID 12 1 0 2276 0 f f f f f i s 2 0 701 "2281 2276" "{2281,2276}" "{i,v}" _null_ _null_ _null_ hypothetical_cume_dist_final _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-DATA(insert OID = 3992 ( dense_rank                    PGNSP PGUID 12 1 0 2276 0 a f f f f i s 1 0 20 "2276" "{2276}" "{v}" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ ));
-DESCR("rank of hypothetical row without gaps");
-DATA(insert OID = 3993 ( dense_rank_final      PGNSP PGUID 12 1 0 2276 0 f f f f f i s 2 0 20 "2281 2276" "{2281,2276}" "{i,v}" _null_ _null_ _null_ hypothetical_dense_rank_final _null_ _null_ _null_ ));
-DESCR("aggregate final function");
-
-/* pg_upgrade support */
-DATA(insert OID = 3582 ( binary_upgrade_set_next_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f t f v r 1 0 2278 "26" _null_ _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_type_oid _null_ _null_ _null_ ));
-DESCR("for use by pg_upgrade");
-DATA(insert OID = 3584 ( binary_upgrade_set_next_array_pg_type_oid PGNSP PGUID 12 1 0 0 0 f f f t f v r 1 0 2278 "26" _null_ _null_ _null_ _null_ _null_ binary_upgrade_set_next_array_pg_type_oid _null_ _null_ _null_ ));
-DESCR("for use by pg_upgrade");
-DATA(insert OID = 3585 ( binary_upgrade_set_next_toast_pg_type_oid PGNSP PGUID 12 1 0 0 0 f f f t f v r 1 0 2278 "26" _null_ _null_ _null_ _null_ _null_ binary_upgrade_set_next_toast_pg_type_oid _null_ _null_ _null_ ));
-DESCR("for use by pg_upgrade");
-DATA(insert OID = 3586 ( binary_upgrade_set_next_heap_pg_class_oid PGNSP PGUID 12 1 0 0 0 f f f t f v r 1 0 2278 "26" _null_ _null_ _null_ _null_ _null_ binary_upgrade_set_next_heap_pg_class_oid _null_ _null_ _null_ ));
-DESCR("for use by pg_upgrade");
-DATA(insert OID = 3587 ( binary_upgrade_set_next_index_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f t f v r 1 0 2278 "26" _null_ _null_ _null_ _null_ _null_ binary_upgrade_set_next_index_pg_class_oid _null_ _null_ _null_ ));
-DESCR("for use by pg_upgrade");
-DATA(insert OID = 3588 ( binary_upgrade_set_next_toast_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f t f v r 1 0 2278 "26" _null_ _null_ _null_ _null_ _null_ binary_upgrade_set_next_toast_pg_class_oid _null_ _null_ _null_ ));
-DESCR("for use by pg_upgrade");
-DATA(insert OID = 3589 ( binary_upgrade_set_next_pg_enum_oid PGNSP PGUID  12 1 0 0 0 f f f t f v r 1 0 2278 "26" _null_ _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_enum_oid _null_ _null_ _null_ ));
-DESCR("for use by pg_upgrade");
-DATA(insert OID = 3590 ( binary_upgrade_set_next_pg_authid_oid PGNSP PGUID     12 1 0 0 0 f f f t f v r 1 0 2278 "26" _null_ _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_authid_oid _null_ _null_ _null_ ));
-DESCR("for use by pg_upgrade");
-DATA(insert OID = 3591 ( binary_upgrade_create_empty_extension PGNSP PGUID     12 1 0 0 0 f f f f f v u 7 0 2278 "25 25 16 25 1028 1009 1009" _null_ _null_ _null_ _null_ _null_ binary_upgrade_create_empty_extension _null_ _null_ _null_ ));
-DESCR("for use by pg_upgrade");
-DATA(insert OID = 4083 ( binary_upgrade_set_record_init_privs PGNSP PGUID      12 1 0 0 0 f f f t f v r 1 0 2278 "16" _null_ _null_ _null_ _null_ _null_ binary_upgrade_set_record_init_privs _null_ _null_ _null_ ));
-DESCR("for use by pg_upgrade");
-
-/* replication/origin.h */
-DATA(insert OID = 6003 ( pg_replication_origin_create PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 26 "25" _null_ _null_ _null_ _null_ _null_ pg_replication_origin_create _null_ _null_ _null_ ));
-DESCR("create a replication origin");
-
-DATA(insert OID = 6004 ( pg_replication_origin_drop PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 2278 "25" _null_ _null_ _null_ _null_ _null_ pg_replication_origin_drop _null_ _null_ _null_ ));
-DESCR("drop replication origin identified by its name");
-
-DATA(insert OID = 6005 ( pg_replication_origin_oid PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 26 "25" _null_ _null_ _null_ _null_ _null_ pg_replication_origin_oid _null_ _null_ _null_ ));
-DESCR("translate the replication origin's name to its id");
-
-DATA(insert OID = 6006 ( pg_replication_origin_session_setup PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 2278 "25" _null_ _null_ _null_ _null_ _null_ pg_replication_origin_session_setup _null_ _null_ _null_ ));
-DESCR("configure session to maintain replication progress tracking for the passed in origin");
-
-DATA(insert OID = 6007 ( pg_replication_origin_session_reset PGNSP PGUID 12 1 0 0 0 f f f t f v u 0 0 2278 "" _null_ _null_ _null_ _null_ _null_ pg_replication_origin_session_reset _null_ _null_ _null_ ));
-DESCR("teardown configured replication progress tracking");
-
-DATA(insert OID = 6008 ( pg_replication_origin_session_is_setup PGNSP PGUID 12 1 0 0 0 f f f t f v r 0 0 16 "" _null_ _null_ _null_ _null_ _null_ pg_replication_origin_session_is_setup _null_ _null_ _null_ ));
-DESCR("is a replication origin configured in this session");
-
-DATA(insert OID = 6009 ( pg_replication_origin_session_progress PGNSP PGUID 12 1 0 0 0 f f f t f v u 1 0 3220 "16" _null_ _null_ _null_ _null_ _null_ pg_replication_origin_session_progress _null_ _null_ _null_ ));
-DESCR("get the replication progress of the current session");
-
-DATA(insert OID = 6010 ( pg_replication_origin_xact_setup PGNSP PGUID 12 1 0 0 0 f f f t f v r 2 0 2278 "3220 1184" _null_ _null_ _null_ _null_ _null_ pg_replication_origin_xact_setup _null_ _null_ _null_ ));
-DESCR("setup the transaction's origin lsn and timestamp");
-
-DATA(insert OID = 6011 ( pg_replication_origin_xact_reset PGNSP PGUID 12 1 0 0 0 f f f t f v r 0 0 2278 "" _null_ _null_ _null_ _null_ _null_ pg_replication_origin_xact_reset _null_ _null_ _null_ ));
-DESCR("reset the transaction's origin lsn and timestamp");
-
-DATA(insert OID = 6012 ( pg_replication_origin_advance PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 2278 "25 3220" _null_ _null_ _null_ _null_ _null_ pg_replication_origin_advance _null_ _null_ _null_ ));
-DESCR("advance replication identifier to specific location");
-
-DATA(insert OID = 6013 ( pg_replication_origin_progress PGNSP PGUID 12 1 0 0 0 f f f t f v u 2 0 3220 "25 16" _null_ _null_ _null_ _null_ _null_ pg_replication_origin_progress _null_ _null_ _null_ ));
-DESCR("get an individual replication origin's replication progress");
-
-DATA(insert OID = 6014 ( pg_show_replication_origin_status PGNSP PGUID 12 1 100 0 0 f f f f t v r 0 0 2249 "" "{26,25,3220,3220}" "{o,o,o,o}" "{local_id, external_id, remote_lsn, local_lsn}" _null_ _null_ pg_show_replication_origin_status _null_ _null_ _null_ ));
-DESCR("get progress for all replication origins");
-
-/* publications */
-DATA(insert OID = 6119 ( pg_get_publication_tables     PGNSP PGUID 12 1 1000 0 0 f f f t t s s 1 0 26 "25" "{25,26}" "{i,o}" "{pubname,relid}" _null_ _null_ pg_get_publication_tables _null_ _null_ _null_ ));
-DESCR("get OIDs of tables in a publication");
-DATA(insert OID = 6121 ( pg_relation_is_publishable PGNSP PGUID 12 1   0 0 0 f f f t f s s 1 0 16 "2205" _null_ _null_ _null_ _null_ _null_ pg_relation_is_publishable _null_ _null_ _null_ ));
-DESCR("returns whether a relation can be part of a publication");
-
-/* rls */
-DATA(insert OID = 3298 (  row_security_active     PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 16 "26" _null_ _null_ _null_ _null_ _null_  row_security_active _null_ _null_ _null_ ));
-DESCR("row security for current context active on table by table oid");
-DATA(insert OID = 3299 (  row_security_active     PGNSP PGUID 12 1 0 0 0 f f f t f s s 1 0 16 "25" _null_ _null_ _null_ _null_ _null_  row_security_active_name _null_ _null_ _null_ ));
-DESCR("row security for current context active on table by table name");
-
-/* pg_config */
-DATA(insert OID = 3400 ( pg_config PGNSP PGUID 12 1 23 0 0 f f f t t i r 0 0 2249 "" "{25,25}" "{o,o}" "{name,setting}" _null_ _null_ pg_config _null_ _null_ _null_ ));
-DESCR("pg_config binary as a function");
-
-/* pg_controldata related functions */
-DATA(insert OID = 3441 ( pg_control_system PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2249 "" "{23,23,20,1184}" "{o,o,o,o}" "{pg_control_version,catalog_version_no,system_identifier,pg_control_last_modified}" _null_ _null_ pg_control_system _null_ _null_ _null_ ));
-DESCR("pg_controldata general state information as a function");
-
-DATA(insert OID = 3442 ( pg_control_checkpoint PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2249 "" "{3220,3220,25,23,23,16,25,26,28,28,28,26,28,28,26,28,28,1184}" "{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}" "{checkpoint_lsn,redo_lsn,redo_wal_file,timeline_id,prev_timeline_id,full_page_writes,next_xid,next_oid,next_multixact_id,next_multi_offset,oldest_xid,oldest_xid_dbid,oldest_active_xid,oldest_multi_xid,oldest_multi_dbid,oldest_commit_ts_xid,newest_commit_ts_xid,checkpoint_time}" _null_ _null_ pg_control_checkpoint _null_ _null_ _null_ ));
-DESCR("pg_controldata checkpoint state information as a function");
-
-DATA(insert OID = 3443 ( pg_control_recovery PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2249 "" "{3220,23,3220,3220,16}" "{o,o,o,o,o}" "{min_recovery_end_lsn,min_recovery_end_timeline,backup_start_lsn,backup_end_lsn,end_of_backup_record_required}" _null_ _null_ pg_control_recovery _null_ _null_ _null_ ));
-DESCR("pg_controldata recovery state information as a function");
-
-DATA(insert OID = 3444 ( pg_control_init PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2249 "" "{23,23,23,23,23,23,23,23,23,16,16,23}" "{o,o,o,o,o,o,o,o,o,o,o,o}" "{max_data_alignment,database_block_size,blocks_per_segment,wal_block_size,bytes_per_wal_segment,max_identifier_length,max_index_columns,max_toast_chunk_size,large_object_chunk_size,float4_pass_by_value,float8_pass_by_value,data_page_checksum_version}" _null_ _null_ pg_control_init _null_ _null_ _null_ ));
-DESCR("pg_controldata init state information as a function");
-
-DATA(insert OID = 3996 ( pg_disable_data_checksums             PGNSP PGUID 12 1 0 0 0 f f f t f v s 0 0 2278 "" _null_ _null_ _null_ _null_ _null_ disable_data_checksums _null_ _null_ _null_ ));
-DESCR("disable data checksums");
-DATA(insert OID = 3998 ( pg_enable_data_checksums              PGNSP PGUID 12 1 0 0 0 f f f t f v s 2 0 2278 "23 23" _null_ _null_ "{cost_delay,cost_limit}" _null_ _null_ enable_data_checksums _null_ _null_ _null_ ));
-DESCR("enable data checksums");
-
-/* collation management functions */
-DATA(insert OID = 3445 ( pg_import_system_collations PGNSP PGUID 12 100 0 0 0 f f f t f v u 1 0 23 "4089" _null_ _null_ _null_ _null_ _null_ pg_import_system_collations _null_ _null_ _null_ ));
-DESCR("import collations from operating system");
-
-DATA(insert OID = 3448 ( pg_collation_actual_version PGNSP PGUID 12 100 0 0 0 f f f t f v s 1 0 25 "26" _null_ _null_ _null_ _null_ _null_ pg_collation_actual_version _null_ _null_ _null_ ));
-DESCR("get actual version of collation from operating system");
-
-/* system management/monitoring related functions */
-DATA(insert OID = 3353 (  pg_ls_logdir                          PGNSP PGUID 12 10 20 0 0 f f f t t v s 0 0 2249 "" "{25,20,1184}" "{o,o,o}" "{name,size,modification}" _null_ _null_ pg_ls_logdir _null_ _null_ _null_ ));
-DESCR("list files in the log directory");
-DATA(insert OID = 3354 (  pg_ls_waldir                          PGNSP PGUID 12 10 20 0 0 f f f t t v s 0 0 2249 "" "{25,20,1184}" "{o,o,o}" "{name,size,modification}" _null_ _null_ pg_ls_waldir _null_ _null_ _null_ ));
-DESCR("list of files in the WAL directory");
-
-/* hash partitioning constraint function */
-DATA(insert OID = 5028 ( satisfies_hash_partition PGNSP PGUID 12 1 0 2276 0 f f f f f i s 4 0 16 "26 23 23 2276" _null_ "{i,i,i,v}" _null_ _null_ _null_ satisfies_hash_partition _null_ _null_ _null_ ));
-DESCR("hash partition CHECK constraint");
+#ifdef EXPOSE_TO_CLIENT_CODE
 
 /*
  * Symbolic values for prokind column
@@ -5657,4 +170,6 @@ DESCR("hash partition CHECK constraint");
 #define PROARGMODE_VARIADIC 'v'
 #define PROARGMODE_TABLE       't'
 
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
+
 #endif                                                 /* PG_PROC_H */
index b643c489cdf748ec8fd93e25cb29cc54f3308144..9652d3452819e64c0d82035b516369167b564eb3 100644 (file)
@@ -9,8 +9,8 @@
  * src/include/catalog/pg_publication.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_PUBLICATION_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_publication_d.h"
 #include "catalog/objectaddress.h"
 
 /* ----------------
  *             pg_publication definition.  cpp turns this into
  *             typedef struct FormData_pg_publication
- *
  * ----------------
  */
-#define PublicationRelationId                  6104
-
-CATALOG(pg_publication,6104)
+CATALOG(pg_publication,6104,PublicationRelationId)
 {
        NameData        pubname;                /* name of the publication */
 
@@ -61,20 +59,6 @@ CATALOG(pg_publication,6104)
  */
 typedef FormData_pg_publication *Form_pg_publication;
 
-/* ----------------
- *             compiler constants for pg_publication
- * ----------------
- */
-
-#define Natts_pg_publication                           7
-#define Anum_pg_publication_pubname                    1
-#define Anum_pg_publication_pubowner           2
-#define Anum_pg_publication_puballtables       3
-#define Anum_pg_publication_pubinsert          4
-#define Anum_pg_publication_pubupdate          5
-#define Anum_pg_publication_pubdelete          6
-#define Anum_pg_publication_pubtruncate                7
-
 typedef struct PublicationActions
 {
        bool            pubinsert;
index 033b600cee49851d2f68b3d3ab3c0909a71ef69d..2208e424f4dbf7a7c858d4c8a3a5b68579b50965 100644 (file)
@@ -9,8 +9,8 @@
  * src/include/catalog/pg_publication_rel.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_PUBLICATION_REL_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_publication_rel_d.h"
 
 /* ----------------
  *             pg_publication_rel definition.  cpp turns this into
  *             typedef struct FormData_pg_publication_rel
- *
  * ----------------
  */
-#define PublicationRelRelationId                               6106
-
-CATALOG(pg_publication_rel,6106)
+CATALOG(pg_publication_rel,6106,PublicationRelRelationId)
 {
        Oid                     prpubid;                /* Oid of the publication */
        Oid                     prrelid;                /* Oid of the relation */
@@ -40,13 +38,4 @@ CATALOG(pg_publication_rel,6106)
  */
 typedef FormData_pg_publication_rel *Form_pg_publication_rel;
 
-/* ----------------
- *             compiler constants for pg_publication_rel
- * ----------------
- */
-
-#define Natts_pg_publication_rel                               2
-#define Anum_pg_publication_rel_prpubid                        1
-#define Anum_pg_publication_rel_prrelid                        2
-
 #endif                                                 /* PG_PUBLICATION_REL_H */
diff --git a/src/include/catalog/pg_range.dat b/src/include/catalog/pg_range.dat
new file mode 100644 (file)
index 0000000..4781ea9
--- /dev/null
@@ -0,0 +1,31 @@
+#----------------------------------------------------------------------
+#
+# pg_range.dat
+#    Initial contents of the pg_range system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_range.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+{ rngtypid => 'int4range', rngsubtype => 'int4', rngsubopc => 'btree/int4_ops',
+  rngcanonical => 'int4range_canonical', rngsubdiff => 'int4range_subdiff' },
+{ rngtypid => 'numrange', rngsubtype => 'numeric',
+  rngsubopc => 'btree/numeric_ops', rngcanonical => '-',
+  rngsubdiff => 'numrange_subdiff' },
+{ rngtypid => 'tsrange', rngsubtype => 'timestamp',
+  rngsubopc => 'btree/timestamp_ops', rngcanonical => '-',
+  rngsubdiff => 'tsrange_subdiff' },
+{ rngtypid => 'tstzrange', rngsubtype => 'timestamptz',
+  rngsubopc => 'btree/timestamptz_ops', rngcanonical => '-',
+  rngsubdiff => 'tstzrange_subdiff' },
+{ rngtypid => 'daterange', rngsubtype => 'date', rngsubopc => 'btree/date_ops',
+  rngcanonical => 'daterange_canonical', rngsubdiff => 'daterange_subdiff' },
+{ rngtypid => 'int8range', rngsubtype => 'int8', rngsubopc => 'btree/int8_ops',
+  rngcanonical => 'int8range_canonical', rngsubdiff => 'int8range_subdiff' },
+
+]
index 00d02d1712ee6939b616c9d9278912d47b66bd03..d8e16ccee75922bc37fe71a4c37bafc865aa5e93 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_range.h
  *       definition of the system "range" relation (pg_range)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
  * src/include/catalog/pg_range.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
- *
- *       XXX do NOT break up DATA() statements into multiple lines!
- *               the scripts are not as smart as you might think...
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_RANGE_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_range_d.h"
 
 /* ----------------
  *             pg_range definition.  cpp turns this into
  *             typedef struct FormData_pg_range
  * ----------------
  */
-#define RangeRelationId 3541
-
-CATALOG(pg_range,3541) BKI_WITHOUT_OIDS
+CATALOG(pg_range,3541,RangeRelationId) BKI_WITHOUT_OIDS
 {
-       Oid                     rngtypid;               /* OID of owning range type */
-       Oid                     rngsubtype;             /* OID of range's element type (subtype) */
-       Oid                     rngcollation;   /* collation for this range type, or 0 */
-       Oid                     rngsubopc;              /* subtype's btree opclass */
-       regproc         rngcanonical;   /* canonicalize range, or 0 */
-       regproc         rngsubdiff;             /* subtype difference as a float8, or 0 */
+       /* OID of owning range type */
+       Oid                     rngtypid BKI_LOOKUP(pg_type);
+
+       /* OID of range's element type (subtype) */
+       Oid                     rngsubtype BKI_LOOKUP(pg_type);
+
+       /* collation for this range type, or 0 */
+       Oid                     rngcollation BKI_DEFAULT(0);
+
+       /* subtype's btree opclass */
+       Oid                     rngsubopc BKI_LOOKUP(pg_opclass);
+
+       /* canonicalize range, or 0 */
+       regproc         rngcanonical BKI_LOOKUP(pg_proc);
+
+       /* subtype difference as a float8, or 0 */
+       regproc         rngsubdiff BKI_LOOKUP(pg_proc);
 } FormData_pg_range;
 
 /* ----------------
@@ -48,31 +54,6 @@ CATALOG(pg_range,3541) BKI_WITHOUT_OIDS
  */
 typedef FormData_pg_range *Form_pg_range;
 
-/* ----------------
- *             compiler constants for pg_range
- * ----------------
- */
-#define Natts_pg_range                                 6
-#define Anum_pg_range_rngtypid                 1
-#define Anum_pg_range_rngsubtype               2
-#define Anum_pg_range_rngcollation             3
-#define Anum_pg_range_rngsubopc                        4
-#define Anum_pg_range_rngcanonical             5
-#define Anum_pg_range_rngsubdiff               6
-
-
-/* ----------------
- *             initial contents of pg_range
- * ----------------
- */
-DATA(insert ( 3904 23  0 1978 int4range_canonical int4range_subdiff));
-DATA(insert ( 3906 1700 0 3125 - numrange_subdiff));
-DATA(insert ( 3908 1114 0 3128 - tsrange_subdiff));
-DATA(insert ( 3910 1184 0 3127 - tstzrange_subdiff));
-DATA(insert ( 3912 1082 0 3122 daterange_canonical daterange_subdiff));
-DATA(insert ( 3926 20  0 3124 int8range_canonical int8range_subdiff));
-
-
 /*
  * prototypes for functions in pg_range.c
  */
index 9656179ad41c5d8af1903aeb50a7563debed72e5..1adc3f729ac05387f13cc6793f9d9948a9be232c 100644 (file)
@@ -9,8 +9,8 @@
  * src/include/catalog/pg_replication_origin.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
@@ -18,6 +18,7 @@
 #define PG_REPLICATION_ORIGIN_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_replication_origin_d.h"
 #include "access/xlogdefs.h"
 
 /* ----------------
@@ -25,9 +26,7 @@
  *             typedef struct FormData_pg_replication_origin
  * ----------------
  */
-#define ReplicationOriginRelationId 6000
-
-CATALOG(pg_replication_origin,6000) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
+CATALOG(pg_replication_origin,6000,ReplicationOriginRelationId) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
 {
        /*
         * Locally known id that get included into WAL.
@@ -54,17 +53,4 @@ CATALOG(pg_replication_origin,6000) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
 
 typedef FormData_pg_replication_origin *Form_pg_replication_origin;
 
-/* ----------------
- *             compiler constants for pg_replication_origin
- * ----------------
- */
-#define Natts_pg_replication_origin                                    2
-#define Anum_pg_replication_origin_roident                     1
-#define Anum_pg_replication_origin_roname                      2
-
-/* ----------------
- *             pg_replication_origin has no initial contents
- * ----------------
- */
-
 #endif                                                 /* PG_REPLICATION_ORIGIN_H */
index 81f2b19a74dd173d12cf5fea31af8489340aae13..77125867b323497bf186d3a203160f3f0f940928 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_rewrite.h
  *       definition of the system "rewrite-rule" relation (pg_rewrite)
- *       along with the relation's initial contents.
  *
  * As of Postgres 7.3, the primary key for this table is <ev_class, rulename>
  * --- ie, rule names are only unique among the rules of a given table.
@@ -14,8 +13,8 @@
  * src/include/catalog/pg_rewrite.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_REWRITE_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_rewrite_d.h"
 
 /* ----------------
  *             pg_rewrite definition.  cpp turns this into
  *             typedef struct FormData_pg_rewrite
  * ----------------
  */
-#define RewriteRelationId  2618
-
-CATALOG(pg_rewrite,2618)
+CATALOG(pg_rewrite,2618,RewriteRelationId)
 {
        NameData        rulename;
        Oid                     ev_class;
@@ -52,17 +50,4 @@ CATALOG(pg_rewrite,2618)
  */
 typedef FormData_pg_rewrite *Form_pg_rewrite;
 
-/* ----------------
- *             compiler constants for pg_rewrite
- * ----------------
- */
-#define Natts_pg_rewrite                               7
-#define Anum_pg_rewrite_rulename               1
-#define Anum_pg_rewrite_ev_class               2
-#define Anum_pg_rewrite_ev_type                        3
-#define Anum_pg_rewrite_ev_enabled             4
-#define Anum_pg_rewrite_is_instead             5
-#define Anum_pg_rewrite_ev_qual                        6
-#define Anum_pg_rewrite_ev_action              7
-
 #endif                                                 /* PG_REWRITE_H */
index 70dc01ebfcf0e3f5689d05a94d3eaaaa0ebebfe4..48d454897cdf5eb70a0f67a2c5f7c542c70f2eff 100644 (file)
 #define PG_SECLABEL_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_seclabel_d.h"
 
 /* ----------------
  *             pg_seclabel definition.  cpp turns this into
  *             typedef struct FormData_pg_seclabel
  * ----------------
  */
-#define SecLabelRelationId             3596
-
-CATALOG(pg_seclabel,3596) BKI_WITHOUT_OIDS
+CATALOG(pg_seclabel,3596,SecLabelRelationId) BKI_WITHOUT_OIDS
 {
        Oid                     objoid;                 /* OID of the object itself */
        Oid                     classoid;               /* OID of table containing the object */
@@ -32,15 +31,4 @@ CATALOG(pg_seclabel,3596) BKI_WITHOUT_OIDS
 #endif
 } FormData_pg_seclabel;
 
-/* ----------------
- *             compiler constants for pg_seclabel
- * ----------------
- */
-#define Natts_pg_seclabel                      5
-#define Anum_pg_seclabel_objoid                1
-#define Anum_pg_seclabel_classoid      2
-#define Anum_pg_seclabel_objsubid      3
-#define Anum_pg_seclabel_provider      4
-#define Anum_pg_seclabel_label         5
-
 #endif                                                 /* PG_SECLABEL_H */
index a78417eaeb52a2d2e241b2516c991742df6b34c1..a13b05e8007516b1fbd9b145a22a481af532c12d 100644 (file)
 #define PG_SEQUENCE_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_sequence_d.h"
 
-#define SequenceRelationId     2224
-
-CATALOG(pg_sequence,2224) BKI_WITHOUT_OIDS
+CATALOG(pg_sequence,2224,SequenceRelationId) BKI_WITHOUT_OIDS
 {
        Oid                     seqrelid;
        Oid                     seqtypid;
@@ -27,16 +26,11 @@ CATALOG(pg_sequence,2224) BKI_WITHOUT_OIDS
        bool            seqcycle;
 } FormData_pg_sequence;
 
+/* ----------------
+ *             Form_pg_sequence corresponds to a pointer to a tuple with
+ *             the format of pg_sequence relation.
+ * ----------------
+ */
 typedef FormData_pg_sequence *Form_pg_sequence;
 
-#define Natts_pg_sequence                              8
-#define Anum_pg_sequence_seqrelid              1
-#define Anum_pg_sequence_seqtypid              2
-#define Anum_pg_sequence_seqstart              3
-#define Anum_pg_sequence_seqincrement  4
-#define Anum_pg_sequence_seqmax                        5
-#define Anum_pg_sequence_seqmin                        6
-#define Anum_pg_sequence_seqcache              7
-#define Anum_pg_sequence_seqcycle              8
-
 #endif                                                 /* PG_SEQUENCE_H */
index ae40377e4ef195a4ffc4f4aeef0eb752e14aaf44..0f8508cf26295faa83306a3813f5c9a7c0089b47 100644 (file)
@@ -2,8 +2,15 @@
  *
  * pg_shdepend.h
  *       definition of the system "shared dependency" relation (pg_shdepend)
- *       along with the relation's initial contents.
  *
+ * pg_shdepend has no preloaded contents, so there is no pg_shdepend.dat
+ * file; system-defined dependencies are loaded into it during a late stage
+ * of the initdb process.
+ *
+ * NOTE: we do not represent all possible dependency pairs in pg_shdepend;
+ * for example, there's not much value in creating an explicit dependency
+ * from a relation to its database.  Currently, only dependencies on roles
+ * are explicitly stored in pg_shdepend.
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
@@ -11,8 +18,8 @@
  * src/include/catalog/pg_shdepend.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_SHDEPEND_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_shdepend_d.h"
 
 /* ----------------
  *             pg_shdepend definition.  cpp turns this into
  *             typedef struct FormData_pg_shdepend
  * ----------------
  */
-#define SharedDependRelationId 1214
-
-CATALOG(pg_shdepend,1214) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
+CATALOG(pg_shdepend,1214,SharedDependRelationId) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
 {
        /*
         * Identification of the dependent (referencing) object.
@@ -63,28 +69,4 @@ CATALOG(pg_shdepend,1214) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
  */
 typedef FormData_pg_shdepend *Form_pg_shdepend;
 
-/* ----------------
- *             compiler constants for pg_shdepend
- * ----------------
- */
-#define Natts_pg_shdepend                      7
-#define Anum_pg_shdepend_dbid          1
-#define Anum_pg_shdepend_classid       2
-#define Anum_pg_shdepend_objid         3
-#define Anum_pg_shdepend_objsubid      4
-#define Anum_pg_shdepend_refclassid 5
-#define Anum_pg_shdepend_refobjid      6
-#define Anum_pg_shdepend_deptype       7
-
-
-/*
- * pg_shdepend has no preloaded contents; system-defined dependencies are
- * loaded into it during a late stage of the initdb process.
- *
- * NOTE: we do not represent all possible dependency pairs in pg_shdepend;
- * for example, there's not much value in creating an explicit dependency
- * from a relation to its database.  Currently, only dependencies on roles
- * are explicitly stored in pg_shdepend.
- */
-
 #endif                                                 /* PG_SHDEPEND_H */
index d4ec616f3bf54d2ea6bb2c0b892cd4daca0ed6e0..00fd0e0e54f2f656ade805ca986475b6b625f8eb 100644 (file)
@@ -4,6 +4,10 @@
  *       definition of the system "shared description" relation
  *       (pg_shdescription)
  *
+ * Because the contents of this table are taken from the *.dat files
+ * of other catalogs, there is no pg_shdescription.dat file. The initial
+ * contents are assembled by genbki.pl and loaded during initdb.
+ *
  * NOTE: an object is identified by the OID of the row that primarily
  * defines the object, plus the OID of the table that that row appears in.
  * For example, a database is identified by the OID of its pg_database row
  * src/include/catalog/pg_shdescription.h
  *
  * NOTES
- *             the genbki.pl script reads this file and generates .bki
- *             information from the DATA() statements.
- *
- *             XXX do NOT break up DATA() statements into multiple lines!
- *                     the scripts are not as smart as you might think...
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_SHDESCRIPTION_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_shdescription_d.h"
 
 /* ----------------
  *             pg_shdescription definition.    cpp turns this into
  *             typedef struct FormData_pg_shdescription
  * ----------------
  */
-#define SharedDescriptionRelationId  2396
-
-CATALOG(pg_shdescription,2396) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
+CATALOG(pg_shdescription,2396,SharedDescriptionRelationId) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
 {
        Oid                     objoid;                 /* OID of object itself */
        Oid                     classoid;               /* OID of table containing object */
@@ -55,24 +55,4 @@ CATALOG(pg_shdescription,2396) BKI_SHARED_RELATION BKI_WITHOUT_OIDS
  */
 typedef FormData_pg_shdescription * Form_pg_shdescription;
 
-/* ----------------
- *             compiler constants for pg_shdescription
- * ----------------
- */
-#define Natts_pg_shdescription                 3
-#define Anum_pg_shdescription_objoid           1
-#define Anum_pg_shdescription_classoid 2
-#define Anum_pg_shdescription_description 3
-
-/* ----------------
- *             initial contents of pg_shdescription
- * ----------------
- */
-
-/*
- *     Because the contents of this table are taken from the other *.h files,
- *     there is no initialization here.  The initial contents are extracted
- *     by genbki.pl and loaded during initdb.
- */
-
 #endif                                                 /* PG_SHDESCRIPTION_H */
index 57b854c217625f63a77a0676d2d2dbd8f676ea58..22ecf9816809fe6eb7ac30cba48a9e43449734d1 100644 (file)
@@ -1,7 +1,7 @@
 /* -------------------------------------------------------------------------
  *
  * pg_shseclabel.h
- *       definition of the system "security label" relation (pg_shseclabel)
+ *       definition of the system "shared security label" relation (pg_shseclabel)
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
 #define PG_SHSECLABEL_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_shseclabel_d.h"
 
 /* ----------------
  *             pg_shseclabel definition. cpp turns this into
  *             typedef struct FormData_pg_shseclabel
  * ----------------
  */
-#define SharedSecLabelRelationId                       3592
-#define SharedSecLabelRelation_Rowtype_Id      4066
-
-CATALOG(pg_shseclabel,3592) BKI_SHARED_RELATION BKI_ROWTYPE_OID(4066) BKI_WITHOUT_OIDS BKI_SCHEMA_MACRO
+CATALOG(pg_shseclabel,3592,SharedSecLabelRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_OID(4066,SharedSecLabelRelation_Rowtype_Id) BKI_WITHOUT_OIDS BKI_SCHEMA_MACRO
 {
        Oid                     objoid;                 /* OID of the shared object itself */
        Oid                     classoid;               /* OID of table containing the shared object */
@@ -34,14 +32,4 @@ CATALOG(pg_shseclabel,3592) BKI_SHARED_RELATION BKI_ROWTYPE_OID(4066) BKI_WITHOU
 
 typedef FormData_pg_shseclabel * Form_pg_shseclabel;
 
-/* ----------------
- *             compiler constants for pg_shseclabel
- * ----------------
- */
-#define Natts_pg_shseclabel                            4
-#define Anum_pg_shseclabel_objoid              1
-#define Anum_pg_shseclabel_classoid            2
-#define Anum_pg_shseclabel_provider            3
-#define Anum_pg_shseclabel_label               4
-
 #endif                                                 /* PG_SHSECLABEL_H */
index a5c85feffefcee2c3799a7304192d6a9d9ce91fa..d654d3db26ecc771ee68861ef5d011af0ab91b54 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_statistic.h
  *       definition of the system "statistic" relation (pg_statistic)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_statistic.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_STATISTIC_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_statistic_d.h"
 
 /* ----------------
  *             pg_statistic definition.  cpp turns this into
  *             typedef struct FormData_pg_statistic
  * ----------------
  */
-#define StatisticRelationId  2619
-
-CATALOG(pg_statistic,2619) BKI_WITHOUT_OIDS
+CATALOG(pg_statistic,2619,StatisticRelationId) BKI_WITHOUT_OIDS
 {
        /* These fields form the unique key for the entry: */
        Oid                     starelid;               /* relation containing attribute */
@@ -128,37 +126,7 @@ CATALOG(pg_statistic,2619) BKI_WITHOUT_OIDS
  */
 typedef FormData_pg_statistic *Form_pg_statistic;
 
-/* ----------------
- *             compiler constants for pg_statistic
- * ----------------
- */
-#define Natts_pg_statistic                             26
-#define Anum_pg_statistic_starelid             1
-#define Anum_pg_statistic_staattnum            2
-#define Anum_pg_statistic_stainherit   3
-#define Anum_pg_statistic_stanullfrac  4
-#define Anum_pg_statistic_stawidth             5
-#define Anum_pg_statistic_stadistinct  6
-#define Anum_pg_statistic_stakind1             7
-#define Anum_pg_statistic_stakind2             8
-#define Anum_pg_statistic_stakind3             9
-#define Anum_pg_statistic_stakind4             10
-#define Anum_pg_statistic_stakind5             11
-#define Anum_pg_statistic_staop1               12
-#define Anum_pg_statistic_staop2               13
-#define Anum_pg_statistic_staop3               14
-#define Anum_pg_statistic_staop4               15
-#define Anum_pg_statistic_staop5               16
-#define Anum_pg_statistic_stanumbers1  17
-#define Anum_pg_statistic_stanumbers2  18
-#define Anum_pg_statistic_stanumbers3  19
-#define Anum_pg_statistic_stanumbers4  20
-#define Anum_pg_statistic_stanumbers5  21
-#define Anum_pg_statistic_stavalues1   22
-#define Anum_pg_statistic_stavalues2   23
-#define Anum_pg_statistic_stavalues3   24
-#define Anum_pg_statistic_stavalues4   25
-#define Anum_pg_statistic_stavalues5   26
+#ifdef EXPOSE_TO_CLIENT_CODE
 
 /*
  * Several statistical slot "kinds" are defined by core PostgreSQL, as
@@ -289,4 +257,6 @@ typedef FormData_pg_statistic *Form_pg_statistic;
  */
 #define STATISTIC_KIND_BOUNDS_HISTOGRAM  7
 
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
+
 #endif                                                 /* PG_STATISTIC_H */
index 2f5ef78c6c73c5369739e2351ea93fc5d3e947fc..9ccfce7c7245ff19433e6c24c44f8c9e97a65166 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_statistic_ext.h
  *       definition of the system "extended statistic" relation (pg_statistic_ext)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_statistic_ext.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_STATISTIC_EXT_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_statistic_ext_d.h"
 
 /* ----------------
  *             pg_statistic_ext definition.  cpp turns this into
  *             typedef struct FormData_pg_statistic_ext
  * ----------------
  */
-#define StatisticExtRelationId 3381
-
-CATALOG(pg_statistic_ext,3381)
+CATALOG(pg_statistic_ext,3381,StatisticExtRelationId)
 {
        Oid                     stxrelid;               /* relation containing attributes */
 
@@ -60,21 +58,11 @@ CATALOG(pg_statistic_ext,3381)
  */
 typedef FormData_pg_statistic_ext *Form_pg_statistic_ext;
 
-/* ----------------
- *             compiler constants for pg_statistic_ext
- * ----------------
- */
-#define Natts_pg_statistic_ext                                 8
-#define Anum_pg_statistic_ext_stxrelid                 1
-#define Anum_pg_statistic_ext_stxname                  2
-#define Anum_pg_statistic_ext_stxnamespace             3
-#define Anum_pg_statistic_ext_stxowner                 4
-#define Anum_pg_statistic_ext_stxkeys                  5
-#define Anum_pg_statistic_ext_stxkind                  6
-#define Anum_pg_statistic_ext_stxndistinct             7
-#define Anum_pg_statistic_ext_stxdependencies  8
+#ifdef EXPOSE_TO_CLIENT_CODE
 
 #define STATS_EXT_NDISTINCT                    'd'
 #define STATS_EXT_DEPENDENCIES         'f'
 
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
+
 #endif                                                 /* PG_STATISTIC_EXT_H */
index 46d0b482320d38ab446e86a6a3872da481801bc5..93b249fc1d0263b27eb122b2a50f0e934b4a5803 100644 (file)
@@ -12,6 +12,7 @@
 #define PG_SUBSCRIPTION_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_subscription_d.h"
 #include "nodes/pg_list.h"
 
 /* ----------------
@@ -19,8 +20,6 @@
  *             typedef struct FormData_pg_subscription
  * ----------------
  */
-#define SubscriptionRelationId                 6100
-#define SubscriptionRelation_Rowtype_Id 6101
 
 /*
  * Technically, the subscriptions live inside the database, so a shared catalog
@@ -30,7 +29,7 @@
  *
  * NOTE:  When adding a column, also update system_views.sql.
  */
-CATALOG(pg_subscription,6100) BKI_SHARED_RELATION BKI_ROWTYPE_OID(6101) BKI_SCHEMA_MACRO
+CATALOG(pg_subscription,6100,SubscriptionRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_OID(6101,SubscriptionRelation_Rowtype_Id) BKI_SCHEMA_MACRO
 {
        Oid                     subdbid;                /* Database the subscription is in. */
        NameData        subname;                /* Name of the subscription */
@@ -57,21 +56,6 @@ CATALOG(pg_subscription,6100) BKI_SHARED_RELATION BKI_ROWTYPE_OID(6101) BKI_SCHE
 
 typedef FormData_pg_subscription *Form_pg_subscription;
 
-/* ----------------
- *             compiler constants for pg_subscription
- * ----------------
- */
-#define Natts_pg_subscription                                  8
-#define Anum_pg_subscription_subdbid                   1
-#define Anum_pg_subscription_subname                   2
-#define Anum_pg_subscription_subowner                  3
-#define Anum_pg_subscription_subenabled                        4
-#define Anum_pg_subscription_subconninfo               5
-#define Anum_pg_subscription_subslotname               6
-#define Anum_pg_subscription_subsynccommit             7
-#define Anum_pg_subscription_subpublications   8
-
-
 typedef struct Subscription
 {
        Oid                     oid;                    /* Oid of the subscription */
index 5cf268f181451e894be293e1feeaeb7f699db430..0543c0eee632060c6b0663c4ab43faeadcc8c5d9 100644 (file)
@@ -12,8 +12,9 @@
 #ifndef PG_SUBSCRIPTION_REL_H
 #define PG_SUBSCRIPTION_REL_H
 
-#include "access/xlogdefs.h"
 #include "catalog/genbki.h"
+#include "catalog/pg_subscription_rel_d.h"
+#include "access/xlogdefs.h"
 #include "nodes/pg_list.h"
 
 /* ----------------
@@ -21,9 +22,7 @@
  *             typedef struct FormData_pg_subscription_rel
  * ----------------
  */
-#define SubscriptionRelRelationId                      6102
-
-CATALOG(pg_subscription_rel,6102) BKI_WITHOUT_OIDS
+CATALOG(pg_subscription_rel,6102,SubscriptionRelRelationId) BKI_WITHOUT_OIDS
 {
        Oid                     srsubid;                /* Oid of subscription */
        Oid                     srrelid;                /* Oid of relation */
@@ -34,15 +33,7 @@ CATALOG(pg_subscription_rel,6102) BKI_WITHOUT_OIDS
 
 typedef FormData_pg_subscription_rel *Form_pg_subscription_rel;
 
-/* ----------------
- *             compiler constants for pg_subscription_rel
- * ----------------
- */
-#define Natts_pg_subscription_rel                              4
-#define Anum_pg_subscription_rel_srsubid               1
-#define Anum_pg_subscription_rel_srrelid               2
-#define Anum_pg_subscription_rel_srsubstate            3
-#define Anum_pg_subscription_rel_srsublsn              4
+#ifdef EXPOSE_TO_CLIENT_CODE
 
 /* ----------------
  *             substate constants
@@ -60,6 +51,8 @@ typedef FormData_pg_subscription_rel *Form_pg_subscription_rel;
 #define SUBREL_STATE_SYNCWAIT  'w' /* waiting for sync */
 #define SUBREL_STATE_CATCHUP   'c' /* catching up with apply */
 
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
+
 typedef struct SubscriptionRelState
 {
        Oid                     relid;
diff --git a/src/include/catalog/pg_tablespace.dat b/src/include/catalog/pg_tablespace.dat
new file mode 100644 (file)
index 0000000..b623a2d
--- /dev/null
@@ -0,0 +1,22 @@
+#----------------------------------------------------------------------
+#
+# pg_tablespace.dat
+#    Initial contents of the pg_tablespace system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_tablespace.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+{ oid => '1663', oid_symbol => 'DEFAULTTABLESPACE_OID',
+  spcname => 'pg_default', spcowner => 'PGUID', spcacl => '_null_',
+  spcoptions => '_null_' },
+{ oid => '1664', oid_symbol => 'GLOBALTABLESPACE_OID',
+  spcname => 'pg_global', spcowner => 'PGUID', spcacl => '_null_',
+  spcoptions => '_null_' },
+
+]
index 360fc4c0cc404e190d5846e64f6ad728fdbaf61d..4782e78e6b33948c5d784af0d7a026f1f9fd9375 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_tablespace.h
  *       definition of the system "tablespace" relation (pg_tablespace)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_tablespace.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_TABLESPACE_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_tablespace_d.h"
 
 /* ----------------
  *             pg_tablespace definition.  cpp turns this into
  *             typedef struct FormData_pg_tablespace
  * ----------------
  */
-#define TableSpaceRelationId  1213
-
-CATALOG(pg_tablespace,1213) BKI_SHARED_RELATION
+CATALOG(pg_tablespace,1213,TableSpaceRelationId) BKI_SHARED_RELATION
 {
        NameData        spcname;                /* tablespace name */
        Oid                     spcowner;               /* owner of tablespace */
@@ -46,20 +44,4 @@ CATALOG(pg_tablespace,1213) BKI_SHARED_RELATION
  */
 typedef FormData_pg_tablespace *Form_pg_tablespace;
 
-/* ----------------
- *             compiler constants for pg_tablespace
- * ----------------
- */
-
-#define Natts_pg_tablespace                            4
-#define Anum_pg_tablespace_spcname             1
-#define Anum_pg_tablespace_spcowner            2
-#define Anum_pg_tablespace_spcacl              3
-#define Anum_pg_tablespace_spcoptions  4
-
-DATA(insert OID = 1663 ( pg_default PGUID _null_ _null_ ));
-#define DEFAULTTABLESPACE_OID 1663
-DATA(insert OID = 1664 ( pg_global     PGUID _null_ _null_ ));
-#define GLOBALTABLESPACE_OID 1664
-
 #endif                                                 /* PG_TABLESPACE_H */
index d4fc4649d5916abfbd10f3c581e14b2fb52dc0ef..6059b897c663e480354a382c18d72180fdf5f241 100644 (file)
@@ -1,14 +1,17 @@
 /*-------------------------------------------------------------------------
  *
  * pg_transform.h
+ *       definition of the system "transform" relation (pg_transform)
  *
- * Copyright (c) 2012-2018, PostgreSQL Global Development Group
+ *
+ * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
  *
  * src/include/catalog/pg_transform.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_TRANSFORM_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_transform_d.h"
 
 /* ----------------
  *             pg_transform definition.  cpp turns this into
  *             typedef struct FormData_pg_transform
  * ----------------
  */
-#define TransformRelationId 3576
-
-CATALOG(pg_transform,3576)
+CATALOG(pg_transform,3576,TransformRelationId)
 {
        Oid                     trftype;
        Oid                     trflang;
@@ -32,16 +34,11 @@ CATALOG(pg_transform,3576)
        regproc         trftosql;
 } FormData_pg_transform;
 
-typedef FormData_pg_transform *Form_pg_transform;
-
 /* ----------------
- *             compiler constants for pg_transform
+ *             Form_pg_transform corresponds to a pointer to a tuple with
+ *             the format of pg_transform relation.
  * ----------------
  */
-#define Natts_pg_transform                     4
-#define Anum_pg_transform_trftype      1
-#define Anum_pg_transform_trflang      2
-#define Anum_pg_transform_trffromsql   3
-#define Anum_pg_transform_trftosql     4
+typedef FormData_pg_transform *Form_pg_transform;
 
 #endif                                                 /* PG_TRANSFORM_H */
index c80a3aa54d0e73265216e8f47f28f25fedb36690..9955e62d3a0a195e22446b1b16e1ff9a053f4316 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_trigger.h
  *       definition of the system "trigger" relation (pg_trigger)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_trigger.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
@@ -20,6 +19,7 @@
 #define PG_TRIGGER_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_trigger_d.h"
 
 /* ----------------
  *             pg_trigger definition.  cpp turns this into
@@ -31,9 +31,7 @@
  * to be associated with a deferrable constraint.
  * ----------------
  */
-#define TriggerRelationId  2620
-
-CATALOG(pg_trigger,2620)
+CATALOG(pg_trigger,2620,TriggerRelationId)
 {
        Oid                     tgrelid;                /* relation trigger is attached to */
        NameData        tgname;                 /* trigger's name */
@@ -71,28 +69,7 @@ CATALOG(pg_trigger,2620)
  */
 typedef FormData_pg_trigger *Form_pg_trigger;
 
-/* ----------------
- *             compiler constants for pg_trigger
- * ----------------
- */
-#define Natts_pg_trigger                               17
-#define Anum_pg_trigger_tgrelid                        1
-#define Anum_pg_trigger_tgname                 2
-#define Anum_pg_trigger_tgfoid                 3
-#define Anum_pg_trigger_tgtype                 4
-#define Anum_pg_trigger_tgenabled              5
-#define Anum_pg_trigger_tgisinternal   6
-#define Anum_pg_trigger_tgconstrrelid  7
-#define Anum_pg_trigger_tgconstrindid  8
-#define Anum_pg_trigger_tgconstraint   9
-#define Anum_pg_trigger_tgdeferrable   10
-#define Anum_pg_trigger_tginitdeferred 11
-#define Anum_pg_trigger_tgnargs                        12
-#define Anum_pg_trigger_tgattr                 13
-#define Anum_pg_trigger_tgargs                 14
-#define Anum_pg_trigger_tgqual                 15
-#define Anum_pg_trigger_tgoldtable             16
-#define Anum_pg_trigger_tgnewtable             17
+#ifdef EXPOSE_TO_CLIENT_CODE
 
 /* Bits within tgtype */
 #define TRIGGER_TYPE_ROW                               (1 << 0)
@@ -153,4 +130,6 @@ typedef FormData_pg_trigger *Form_pg_trigger;
 #define TRIGGER_USES_TRANSITION_TABLE(namepointer) \
        ((namepointer) != (char *) NULL)
 
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
+
 #endif                                                 /* PG_TRIGGER_H */
diff --git a/src/include/catalog/pg_ts_config.dat b/src/include/catalog/pg_ts_config.dat
new file mode 100644 (file)
index 0000000..b57db67
--- /dev/null
@@ -0,0 +1,19 @@
+#----------------------------------------------------------------------
+#
+# pg_ts_config.dat
+#    Initial contents of the pg_ts_config system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_ts_config.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+{ oid => '3748', descr => 'simple configuration',
+  cfgname => 'simple', cfgnamespace => 'PGNSP', cfgowner => 'PGUID',
+  cfgparser => '3722' },
+
+]
index 26d0843f90c2423b16efbda6acbae1252a397a07..d344bb76de81c94c8edd23236cb7caa922fe6412 100644 (file)
  * src/include/catalog/pg_ts_config.h
  *
  * NOTES
- *             the genbki.pl script reads this file and generates .bki
- *             information from the DATA() statements.
- *
- *             XXX do NOT break up DATA() statements into multiple lines!
- *                     the scripts are not as smart as you might think...
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_TS_CONFIG_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_ts_config_d.h"
 
 /* ----------------
  *             pg_ts_config definition.  cpp turns this into
  *             typedef struct FormData_pg_ts_config
  * ----------------
  */
-#define TSConfigRelationId     3602
-
-CATALOG(pg_ts_config,3602)
+CATALOG(pg_ts_config,3602,TSConfigRelationId)
 {
        NameData        cfgname;                /* name of configuration */
        Oid                     cfgnamespace;   /* name space */
@@ -40,21 +36,4 @@ CATALOG(pg_ts_config,3602)
 
 typedef FormData_pg_ts_config *Form_pg_ts_config;
 
-/* ----------------
- *             compiler constants for pg_ts_config
- * ----------------
- */
-#define Natts_pg_ts_config                             4
-#define Anum_pg_ts_config_cfgname              1
-#define Anum_pg_ts_config_cfgnamespace 2
-#define Anum_pg_ts_config_cfgowner             3
-#define Anum_pg_ts_config_cfgparser            4
-
-/* ----------------
- *             initial contents of pg_ts_config
- * ----------------
- */
-DATA(insert OID = 3748 ( simple PGNSP PGUID 3722 ));
-DESCR("simple configuration");
-
 #endif                                                 /* PG_TS_CONFIG_H */
diff --git a/src/include/catalog/pg_ts_config_map.dat b/src/include/catalog/pg_ts_config_map.dat
new file mode 100644 (file)
index 0000000..090a1ca
--- /dev/null
@@ -0,0 +1,35 @@
+#----------------------------------------------------------------------
+#
+# pg_ts_config_map.dat
+#    Initial contents of the pg_ts_config_map system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_ts_config_map.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+{ mapcfg => '3748', maptokentype => '1', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '2', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '3', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '4', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '5', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '6', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '7', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '8', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '9', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '10', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '11', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '15', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '16', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '17', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '18', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '19', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '20', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '21', mapseqno => '1', mapdict => '3765' },
+{ mapcfg => '3748', maptokentype => '22', mapseqno => '1', mapdict => '3765' },
+
+]
index a3d9e3f21f6db0ae0d949bf827e353daddec25d4..21200215c45bca55cbd1fdccd0846c6eedbc83cd 100644 (file)
  * src/include/catalog/pg_ts_config_map.h
  *
  * NOTES
- *             the genbki.pl script reads this file and generates .bki
- *             information from the DATA() statements.
- *
- *             XXX do NOT break up DATA() statements into multiple lines!
- *                     the scripts are not as smart as you might think...
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_TS_CONFIG_MAP_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_ts_config_map_d.h"
 
 /* ----------------
  *             pg_ts_config_map definition.  cpp turns this into
  *             typedef struct FormData_pg_ts_config_map
  * ----------------
  */
-#define TSConfigMapRelationId  3603
-
-CATALOG(pg_ts_config_map,3603) BKI_WITHOUT_OIDS
+CATALOG(pg_ts_config_map,3603,TSConfigMapRelationId) BKI_WITHOUT_OIDS
 {
        Oid                     mapcfg;                 /* OID of configuration owning this entry */
        int32           maptokentype;   /* token type from parser */
@@ -40,39 +36,4 @@ CATALOG(pg_ts_config_map,3603) BKI_WITHOUT_OIDS
 
 typedef FormData_pg_ts_config_map *Form_pg_ts_config_map;
 
-/* ----------------
- *             compiler constants for pg_ts_config_map
- * ----------------
- */
-#define Natts_pg_ts_config_map                         4
-#define Anum_pg_ts_config_map_mapcfg           1
-#define Anum_pg_ts_config_map_maptokentype     2
-#define Anum_pg_ts_config_map_mapseqno         3
-#define Anum_pg_ts_config_map_mapdict          4
-
-/* ----------------
- *             initial contents of pg_ts_config_map
- * ----------------
- */
-
-DATA(insert ( 3748     1       1       3765 ));
-DATA(insert ( 3748     2       1       3765 ));
-DATA(insert ( 3748     3       1       3765 ));
-DATA(insert ( 3748     4       1       3765 ));
-DATA(insert ( 3748     5       1       3765 ));
-DATA(insert ( 3748     6       1       3765 ));
-DATA(insert ( 3748     7       1       3765 ));
-DATA(insert ( 3748     8       1       3765 ));
-DATA(insert ( 3748     9       1       3765 ));
-DATA(insert ( 3748     10      1       3765 ));
-DATA(insert ( 3748     11      1       3765 ));
-DATA(insert ( 3748     15      1       3765 ));
-DATA(insert ( 3748     16      1       3765 ));
-DATA(insert ( 3748     17      1       3765 ));
-DATA(insert ( 3748     18      1       3765 ));
-DATA(insert ( 3748     19      1       3765 ));
-DATA(insert ( 3748     20      1       3765 ));
-DATA(insert ( 3748     21      1       3765 ));
-DATA(insert ( 3748     22      1       3765 ));
-
 #endif                                                 /* PG_TS_CONFIG_MAP_H */
diff --git a/src/include/catalog/pg_ts_dict.dat b/src/include/catalog/pg_ts_dict.dat
new file mode 100644 (file)
index 0000000..6852303
--- /dev/null
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_ts_dict.dat
+#    Initial contents of the pg_ts_dict system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_ts_dict.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+{ oid => '3765',
+  descr => 'simple dictionary: just lower case and check for stopword',
+  dictname => 'simple', dictnamespace => 'PGNSP', dictowner => 'PGUID',
+  dicttemplate => '3727', dictinitoption => '_null_' },
+
+]
index 1e9d10cbd4a32f6b1c660503ccb72274341c97c1..1e285adcec918e6322d67fd2688debaad9d62272 100644 (file)
  * src/include/catalog/pg_ts_dict.h
  *
  * NOTES
- *             the genbki.pl script reads this file and generates .bki
- *             information from the DATA() statements.
- *
- *             XXX do NOT break up DATA() statements into multiple lines!
- *                     the scripts are not as smart as you might think...
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_TS_DICT_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_ts_dict_d.h"
 
 /* ----------------
  *             pg_ts_dict definition.  cpp turns this into
  *             typedef struct FormData_pg_ts_dict
  * ----------------
  */
-#define TSDictionaryRelationId 3600
-
-CATALOG(pg_ts_dict,3600)
+CATALOG(pg_ts_dict,3600,TSDictionaryRelationId)
 {
        NameData        dictname;               /* dictionary name */
        Oid                     dictnamespace;  /* name space */
@@ -44,23 +40,4 @@ CATALOG(pg_ts_dict,3600)
 
 typedef FormData_pg_ts_dict *Form_pg_ts_dict;
 
-/* ----------------
- *             compiler constants for pg_ts_dict
- * ----------------
- */
-#define Natts_pg_ts_dict                               5
-#define Anum_pg_ts_dict_dictname               1
-#define Anum_pg_ts_dict_dictnamespace  2
-#define Anum_pg_ts_dict_dictowner              3
-#define Anum_pg_ts_dict_dicttemplate   4
-#define Anum_pg_ts_dict_dictinitoption 5
-
-/* ----------------
- *             initial contents of pg_ts_dict
- * ----------------
- */
-
-DATA(insert OID = 3765 ( simple PGNSP PGUID 3727 _null_));
-DESCR("simple dictionary: just lower case and check for stopword");
-
 #endif                                                 /* PG_TS_DICT_H */
diff --git a/src/include/catalog/pg_ts_parser.dat b/src/include/catalog/pg_ts_parser.dat
new file mode 100644 (file)
index 0000000..8c50770
--- /dev/null
@@ -0,0 +1,20 @@
+#----------------------------------------------------------------------
+#
+# pg_ts_parser.dat
+#    Initial contents of the pg_ts_parser system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_ts_parser.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+{ oid => '3722', descr => 'default word parser',
+  prsname => 'default', prsstart => 'prsd_start', prstoken => 'prsd_nexttoken',
+  prsend => 'prsd_end', prsheadline => 'prsd_headline',
+  prslextype => 'prsd_lextype' },
+
+]
index 7199916d367503454915ef1ac3a8507e7a875580..ccaf40bbb4169804a55c3dd980ad0f4fe5b31173 100644 (file)
  * src/include/catalog/pg_ts_parser.h
  *
  * NOTES
- *             the genbki.pl script reads this file and generates .bki
- *             information from the DATA() statements.
- *
- *             XXX do NOT break up DATA() statements into multiple lines!
- *                     the scripts are not as smart as you might think...
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_TS_PARSER_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_ts_parser_d.h"
 
 /* ----------------
  *             pg_ts_parser definition.  cpp turns this into
  *             typedef struct FormData_pg_ts_parser
  * ----------------
  */
-#define TSParserRelationId     3601
-
-CATALOG(pg_ts_parser,3601)
+CATALOG(pg_ts_parser,3601,TSParserRelationId)
 {
-       NameData        prsname;                /* parser's name */
-       Oid                     prsnamespace;   /* name space */
-       regproc         prsstart;               /* init parsing session */
-       regproc         prstoken;               /* return next token */
-       regproc         prsend;                 /* finalize parsing session */
-       regproc         prsheadline;    /* return data for headline creation */
-       regproc         prslextype;             /* return descriptions of lexeme's types */
-} FormData_pg_ts_parser;
+       /* parser's name */
+       NameData        prsname;
 
-typedef FormData_pg_ts_parser *Form_pg_ts_parser;
+       /* name space */
+       Oid                     prsnamespace BKI_DEFAULT(PGNSP);
 
-/* ----------------
- *             compiler constants for pg_ts_parser
- * ----------------
- */
-#define Natts_pg_ts_parser                                     7
-#define Anum_pg_ts_parser_prsname                      1
-#define Anum_pg_ts_parser_prsnamespace         2
-#define Anum_pg_ts_parser_prsstart                     3
-#define Anum_pg_ts_parser_prstoken                     4
-#define Anum_pg_ts_parser_prsend                       5
-#define Anum_pg_ts_parser_prsheadline          6
-#define Anum_pg_ts_parser_prslextype           7
+       /* init parsing session */
+       regproc         prsstart BKI_LOOKUP(pg_proc);
 
-/* ----------------
- *             initial contents of pg_ts_parser
- * ----------------
- */
+       /* return next token */
+       regproc         prstoken BKI_LOOKUP(pg_proc);
+
+       /* finalize parsing session */
+       regproc         prsend BKI_LOOKUP(pg_proc);
+
+       /* return data for headline creation */
+       regproc         prsheadline BKI_LOOKUP(pg_proc);
 
-DATA(insert OID = 3722 ( default PGNSP prsd_start prsd_nexttoken prsd_end prsd_headline prsd_lextype ));
-DESCR("default word parser");
+       /* return descriptions of lexeme's types */
+       regproc         prslextype BKI_LOOKUP(pg_proc);
+} FormData_pg_ts_parser;
+
+typedef FormData_pg_ts_parser *Form_pg_ts_parser;
 
 #endif                                                 /* PG_TS_PARSER_H */
diff --git a/src/include/catalog/pg_ts_template.dat b/src/include/catalog/pg_ts_template.dat
new file mode 100644 (file)
index 0000000..1322c39
--- /dev/null
@@ -0,0 +1,30 @@
+#----------------------------------------------------------------------
+#
+# pg_ts_template.dat
+#    Initial contents of the pg_ts_template system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_ts_template.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+{ oid => '3727',
+  descr => 'simple dictionary: just lower case and check for stopword',
+  tmplname => 'simple', tmplinit => 'dsimple_init',
+  tmpllexize => 'dsimple_lexize' },
+{ oid => '3730', descr => 'synonym dictionary: replace word by its synonym',
+  tmplname => 'synonym', tmplinit => 'dsynonym_init',
+  tmpllexize => 'dsynonym_lexize' },
+{ oid => '3733', descr => 'ispell dictionary',
+  tmplname => 'ispell', tmplinit => 'dispell_init',
+  tmpllexize => 'dispell_lexize' },
+{ oid => '3742',
+  descr => 'thesaurus dictionary: phrase by phrase substitution',
+  tmplname => 'thesaurus', tmplinit => 'thesaurus_init',
+  tmpllexize => 'thesaurus_lexize' },
+
+]
index a23c04e936320ecb686f928d3cab09b3d6befc07..5e66e02beff8576c790eb3501fdebd5e534f5f03 100644 (file)
  * src/include/catalog/pg_ts_template.h
  *
  * NOTES
- *             the genbki.pl script reads this file and generates .bki
- *             information from the DATA() statements.
- *
- *             XXX do NOT break up DATA() statements into multiple lines!
- *                     the scripts are not as smart as you might think...
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_TS_TEMPLATE_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_ts_template_d.h"
 
 /* ----------------
  *             pg_ts_template definition.  cpp turns this into
  *             typedef struct FormData_pg_ts_template
  * ----------------
  */
-#define TSTemplateRelationId   3764
-
-CATALOG(pg_ts_template,3764)
+CATALOG(pg_ts_template,3764,TSTemplateRelationId)
 {
-       NameData        tmplname;               /* template name */
-       Oid                     tmplnamespace;  /* name space */
-       regproc         tmplinit;               /* initialization method of dict (may be 0) */
-       regproc         tmpllexize;             /* base method of dictionary */
-} FormData_pg_ts_template;
+       /* template name */
+       NameData        tmplname;
 
-typedef FormData_pg_ts_template *Form_pg_ts_template;
+       /* name space */
+       Oid                     tmplnamespace BKI_DEFAULT(PGNSP);
 
-/* ----------------
- *             compiler constants for pg_ts_template
- * ----------------
- */
-#define Natts_pg_ts_template                           4
-#define Anum_pg_ts_template_tmplname           1
-#define Anum_pg_ts_template_tmplnamespace      2
-#define Anum_pg_ts_template_tmplinit           3
-#define Anum_pg_ts_template_tmpllexize         4
+       /* initialization method of dict (may be 0) */
+       regproc         tmplinit BKI_LOOKUP(pg_proc);
 
-/* ----------------
- *             initial contents of pg_ts_template
- * ----------------
- */
+       /* base method of dictionary */
+       regproc         tmpllexize BKI_LOOKUP(pg_proc);
+} FormData_pg_ts_template;
 
-DATA(insert OID = 3727 ( simple PGNSP dsimple_init dsimple_lexize ));
-DESCR("simple dictionary: just lower case and check for stopword");
-DATA(insert OID = 3730 ( synonym PGNSP dsynonym_init dsynonym_lexize ));
-DESCR("synonym dictionary: replace word by its synonym");
-DATA(insert OID = 3733 ( ispell PGNSP dispell_init dispell_lexize ));
-DESCR("ispell dictionary");
-DATA(insert OID = 3742 ( thesaurus PGNSP thesaurus_init thesaurus_lexize ));
-DESCR("thesaurus dictionary: phrase by phrase substitution");
+typedef FormData_pg_ts_template *Form_pg_ts_template;
 
 #endif                                                 /* PG_TS_TEMPLATE_H */
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
new file mode 100644 (file)
index 0000000..3c2c813
--- /dev/null
@@ -0,0 +1,942 @@
+#----------------------------------------------------------------------
+#
+# pg_type.dat
+#    Initial contents of the pg_type system relation.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_type.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+# For types used in the system catalogs, make sure the values here match
+# TypInfo[] in bootstrap.c.
+
+# OID symbol macro names for pg_type OIDs are generated by genbki.pl
+# according to the following rule, so you don't need to specify them
+# here:
+#  foo_bar  ->  FOO_BAROID
+# _foo_bar  ->  FOO_BARARRAYOID
+#
+# The only oid_symbol entries in this file are for names that don't match
+# this rule, and are grandfathered in.
+
+# Once upon a time these entries were ordered by OID.  Lately it's often
+# been the custom to insert new entries adjacent to related older entries.
+# Try to do one or the other though, don't just insert entries at random.
+
+# OIDS 1 - 99
+
+{ oid => '16', descr => 'boolean, \'true\'/\'false\'',
+  typname => 'bool', typlen => '1', typbyval => 't', typcategory => 'B',
+  typispreferred => 't', typarray => '_bool', typinput => 'boolin',
+  typoutput => 'boolout', typreceive => 'boolrecv', typsend => 'boolsend',
+  typalign => 'c' },
+{ oid => '17', descr => 'variable-length string, binary values escaped',
+  typname => 'bytea', typlen => '-1', typbyval => 'f', typcategory => 'U',
+  typarray => '_bytea', typinput => 'byteain', typoutput => 'byteaout',
+  typreceive => 'bytearecv', typsend => 'byteasend', typalign => 'i',
+  typstorage => 'x' },
+{ oid => '18', descr => 'single character',
+  typname => 'char', typlen => '1', typbyval => 't', typcategory => 'S',
+  typarray => '_char', typinput => 'charin', typoutput => 'charout',
+  typreceive => 'charrecv', typsend => 'charsend', typalign => 'c' },
+{ oid => '19', descr => '63-byte type for storing system identifiers',
+  typname => 'name', typlen => 'NAMEDATALEN', typbyval => 'f',
+  typcategory => 'S', typelem => 'char', typarray => '_name',
+  typinput => 'namein', typoutput => 'nameout', typreceive => 'namerecv',
+  typsend => 'namesend', typalign => 'c' },
+{ oid => '20', descr => '~18 digit integer, 8-byte storage',
+  typname => 'int8', typlen => '8', typbyval => 'FLOAT8PASSBYVAL',
+  typcategory => 'N', typarray => '_int8', typinput => 'int8in',
+  typoutput => 'int8out', typreceive => 'int8recv', typsend => 'int8send',
+  typalign => 'd' },
+{ oid => '21', descr => '-32 thousand to 32 thousand, 2-byte storage',
+  typname => 'int2', typlen => '2', typbyval => 't', typcategory => 'N',
+  typarray => '_int2', typinput => 'int2in', typoutput => 'int2out',
+  typreceive => 'int2recv', typsend => 'int2send', typalign => 's' },
+{ oid => '22', descr => 'array of int2, used in system tables',
+  typname => 'int2vector', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'int2', typarray => '_int2vector', typinput => 'int2vectorin',
+  typoutput => 'int2vectorout', typreceive => 'int2vectorrecv',
+  typsend => 'int2vectorsend', typalign => 'i' },
+{ oid => '23', descr => '-2 billion to 2 billion integer, 4-byte storage',
+  typname => 'int4', typlen => '4', typbyval => 't', typcategory => 'N',
+  typarray => '_int4', typinput => 'int4in', typoutput => 'int4out',
+  typreceive => 'int4recv', typsend => 'int4send', typalign => 'i' },
+{ oid => '24', descr => 'registered procedure',
+  typname => 'regproc', typlen => '4', typbyval => 't', typcategory => 'N',
+  typarray => '_regproc', typinput => 'regprocin', typoutput => 'regprocout',
+  typreceive => 'regprocrecv', typsend => 'regprocsend', typalign => 'i' },
+{ oid => '25', descr => 'variable-length string, no limit specified',
+  typname => 'text', typlen => '-1', typbyval => 'f', typcategory => 'S',
+  typispreferred => 't', typarray => '_text', typinput => 'textin',
+  typoutput => 'textout', typreceive => 'textrecv', typsend => 'textsend',
+  typalign => 'i', typstorage => 'x', typcollation => '100' },
+{ oid => '26', descr => 'object identifier(oid), maximum 4 billion',
+  typname => 'oid', typlen => '4', typbyval => 't', typcategory => 'N',
+  typispreferred => 't', typarray => '_oid', typinput => 'oidin',
+  typoutput => 'oidout', typreceive => 'oidrecv', typsend => 'oidsend',
+  typalign => 'i' },
+{ oid => '27', descr => '(block, offset), physical location of tuple',
+  typname => 'tid', typlen => '6', typbyval => 'f', typcategory => 'U',
+  typarray => '_tid', typinput => 'tidin', typoutput => 'tidout',
+  typreceive => 'tidrecv', typsend => 'tidsend', typalign => 's' },
+{ oid => '28', descr => 'transaction id',
+  typname => 'xid', typlen => '4', typbyval => 't', typcategory => 'U',
+  typarray => '_xid', typinput => 'xidin', typoutput => 'xidout',
+  typreceive => 'xidrecv', typsend => 'xidsend', typalign => 'i' },
+{ oid => '29', descr => 'command identifier type, sequence in transaction id',
+  typname => 'cid', typlen => '4', typbyval => 't', typcategory => 'U',
+  typarray => '_cid', typinput => 'cidin', typoutput => 'cidout',
+  typreceive => 'cidrecv', typsend => 'cidsend', typalign => 'i' },
+{ oid => '30', descr => 'array of oids, used in system tables',
+  typname => 'oidvector', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'oid', typarray => '_oidvector', typinput => 'oidvectorin',
+  typoutput => 'oidvectorout', typreceive => 'oidvectorrecv',
+  typsend => 'oidvectorsend', typalign => 'i' },
+
+# hand-built rowtype entries for bootstrapped catalogs
+# NB: OIDs assigned here must match the BKI_ROWTYPE_OID declarations
+{ oid => '71',
+  typname => 'pg_type', typlen => '-1', typbyval => 'f', typtype => 'c',
+  typcategory => 'C', typrelid => '1247', typinput => 'record_in',
+  typoutput => 'record_out', typreceive => 'record_recv',
+  typsend => 'record_send', typalign => 'd', typstorage => 'x' },
+{ oid => '75',
+  typname => 'pg_attribute', typlen => '-1', typbyval => 'f', typtype => 'c',
+  typcategory => 'C', typrelid => '1249', typinput => 'record_in',
+  typoutput => 'record_out', typreceive => 'record_recv',
+  typsend => 'record_send', typalign => 'd', typstorage => 'x' },
+{ oid => '81',
+  typname => 'pg_proc', typlen => '-1', typbyval => 'f', typtype => 'c',
+  typcategory => 'C', typrelid => '1255', typinput => 'record_in',
+  typoutput => 'record_out', typreceive => 'record_recv',
+  typsend => 'record_send', typalign => 'd', typstorage => 'x' },
+{ oid => '83',
+  typname => 'pg_class', typlen => '-1', typbyval => 'f', typtype => 'c',
+  typcategory => 'C', typrelid => '1259', typinput => 'record_in',
+  typoutput => 'record_out', typreceive => 'record_recv',
+  typsend => 'record_send', typalign => 'd', typstorage => 'x' },
+
+# OIDS 100 - 199
+
+{ oid => '114',
+  typname => 'json', typlen => '-1', typbyval => 'f', typcategory => 'U',
+  typarray => '_json', typinput => 'json_in', typoutput => 'json_out',
+  typreceive => 'json_recv', typsend => 'json_send', typalign => 'i',
+  typstorage => 'x' },
+{ oid => '142', descr => 'XML content',
+  typname => 'xml', typlen => '-1', typbyval => 'f', typcategory => 'U',
+  typarray => '_xml', typinput => 'xml_in', typoutput => 'xml_out',
+  typreceive => 'xml_recv', typsend => 'xml_send', typalign => 'i',
+  typstorage => 'x' },
+{ oid => '143',
+  typname => '_xml', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'xml', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '199',
+  typname => '_json', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'json', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '194', oid_symbol => 'PGNODETREEOID',
+  descr => 'string representing an internal node tree',
+  typname => 'pg_node_tree', typlen => '-1', typbyval => 'f',
+  typcategory => 'S', typinput => 'pg_node_tree_in',
+  typoutput => 'pg_node_tree_out', typreceive => 'pg_node_tree_recv',
+  typsend => 'pg_node_tree_send', typalign => 'i', typstorage => 'x',
+  typcollation => '100' },
+{ oid => '3361', oid_symbol => 'PGNDISTINCTOID',
+  descr => 'multivariate ndistinct coefficients',
+  typname => 'pg_ndistinct', typlen => '-1', typbyval => 'f',
+  typcategory => 'S', typinput => 'pg_ndistinct_in',
+  typoutput => 'pg_ndistinct_out', typreceive => 'pg_ndistinct_recv',
+  typsend => 'pg_ndistinct_send', typalign => 'i', typstorage => 'x',
+  typcollation => '100' },
+{ oid => '3402', oid_symbol => 'PGDEPENDENCIESOID',
+  descr => 'multivariate dependencies',
+  typname => 'pg_dependencies', typlen => '-1', typbyval => 'f',
+  typcategory => 'S', typinput => 'pg_dependencies_in',
+  typoutput => 'pg_dependencies_out', typreceive => 'pg_dependencies_recv',
+  typsend => 'pg_dependencies_send', typalign => 'i', typstorage => 'x',
+  typcollation => '100' },
+{ oid => '32', oid_symbol => 'PGDDLCOMMANDOID',
+  descr => 'internal type for passing CollectedCommand',
+  typname => 'pg_ddl_command', typlen => 'SIZEOF_POINTER', typbyval => 't',
+  typtype => 'p', typcategory => 'P', typinput => 'pg_ddl_command_in',
+  typoutput => 'pg_ddl_command_out', typreceive => 'pg_ddl_command_recv',
+  typsend => 'pg_ddl_command_send', typalign => 'ALIGNOF_POINTER' },
+
+# OIDS 200 - 299
+
+{ oid => '210', descr => 'storage manager',
+  typname => 'smgr', typlen => '2', typbyval => 't', typcategory => 'U',
+  typinput => 'smgrin', typoutput => 'smgrout', typreceive => '-',
+  typsend => '-', typalign => 's' },
+
+# OIDS 600 - 699
+
+{ oid => '600', descr => 'geometric point \'(x, y)\'',
+  typname => 'point', typlen => '16', typbyval => 'f', typcategory => 'G',
+  typelem => 'float8', typarray => '_point', typinput => 'point_in',
+  typoutput => 'point_out', typreceive => 'point_recv', typsend => 'point_send',
+  typalign => 'd' },
+{ oid => '601', descr => 'geometric line segment \'(pt1,pt2)\'',
+  typname => 'lseg', typlen => '32', typbyval => 'f', typcategory => 'G',
+  typelem => 'point', typarray => '_lseg', typinput => 'lseg_in',
+  typoutput => 'lseg_out', typreceive => 'lseg_recv', typsend => 'lseg_send',
+  typalign => 'd' },
+{ oid => '602', descr => 'geometric path \'(pt1,...)\'',
+  typname => 'path', typlen => '-1', typbyval => 'f', typcategory => 'G',
+  typarray => '_path', typinput => 'path_in', typoutput => 'path_out',
+  typreceive => 'path_recv', typsend => 'path_send', typalign => 'd',
+  typstorage => 'x' },
+{ oid => '603', descr => 'geometric box \'(lower left,upper right)\'',
+  typname => 'box', typlen => '32', typbyval => 'f', typcategory => 'G',
+  typdelim => '\073', typelem => 'point', typarray => '_box',
+  typinput => 'box_in', typoutput => 'box_out', typreceive => 'box_recv',
+  typsend => 'box_send', typalign => 'd' },
+{ oid => '604', descr => 'geometric polygon \'(pt1,...)\'',
+  typname => 'polygon', typlen => '-1', typbyval => 'f', typcategory => 'G',
+  typarray => '_polygon', typinput => 'poly_in', typoutput => 'poly_out',
+  typreceive => 'poly_recv', typsend => 'poly_send', typalign => 'd',
+  typstorage => 'x' },
+{ oid => '628', descr => 'geometric line',
+  typname => 'line', typlen => '24', typbyval => 'f', typcategory => 'G',
+  typelem => 'float8', typarray => '_line', typinput => 'line_in',
+  typoutput => 'line_out', typreceive => 'line_recv', typsend => 'line_send',
+  typalign => 'd' },
+{ oid => '629',
+  typname => '_line', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'line', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+
+# OIDS 700 - 799
+
+{ oid => '700',
+  descr => 'single-precision floating point number, 4-byte storage',
+  typname => 'float4', typlen => '4', typbyval => 'FLOAT4PASSBYVAL',
+  typcategory => 'N', typarray => '_float4', typinput => 'float4in',
+  typoutput => 'float4out', typreceive => 'float4recv', typsend => 'float4send',
+  typalign => 'i' },
+{ oid => '701',
+  descr => 'double-precision floating point number, 8-byte storage',
+  typname => 'float8', typlen => '8', typbyval => 'FLOAT8PASSBYVAL',
+  typcategory => 'N', typispreferred => 't', typarray => '_float8',
+  typinput => 'float8in', typoutput => 'float8out', typreceive => 'float8recv',
+  typsend => 'float8send', typalign => 'd' },
+{ oid => '702',
+  descr => 'absolute, limited-range date and time (Unix system time)',
+  typname => 'abstime', typlen => '4', typbyval => 't', typcategory => 'D',
+  typarray => '_abstime', typinput => 'abstimein', typoutput => 'abstimeout',
+  typreceive => 'abstimerecv', typsend => 'abstimesend', typalign => 'i' },
+{ oid => '703',
+  descr => 'relative, limited-range time interval (Unix delta time)',
+  typname => 'reltime', typlen => '4', typbyval => 't', typcategory => 'T',
+  typarray => '_reltime', typinput => 'reltimein', typoutput => 'reltimeout',
+  typreceive => 'reltimerecv', typsend => 'reltimesend', typalign => 'i' },
+{ oid => '704', descr => '(abstime,abstime), time interval',
+  typname => 'tinterval', typlen => '12', typbyval => 'f', typcategory => 'T',
+  typarray => '_tinterval', typinput => 'tintervalin',
+  typoutput => 'tintervalout', typreceive => 'tintervalrecv',
+  typsend => 'tintervalsend', typalign => 'i' },
+{ oid => '705',
+  typname => 'unknown', typlen => '-2', typbyval => 'f', typtype => 'p',
+  typcategory => 'X', typinput => 'unknownin', typoutput => 'unknownout',
+  typreceive => 'unknownrecv', typsend => 'unknownsend', typalign => 'c' },
+{ oid => '718', descr => 'geometric circle \'(center,radius)\'',
+  typname => 'circle', typlen => '24', typbyval => 'f', typcategory => 'G',
+  typarray => '_circle', typinput => 'circle_in', typoutput => 'circle_out',
+  typreceive => 'circle_recv', typsend => 'circle_send', typalign => 'd' },
+{ oid => '719',
+  typname => '_circle', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'circle', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '790', oid_symbol => 'CASHOID',
+  descr => 'monetary amounts, $d,ddd.cc',
+  typname => 'money', typlen => '8', typbyval => 'FLOAT8PASSBYVAL',
+  typcategory => 'N', typarray => '_money', typinput => 'cash_in',
+  typoutput => 'cash_out', typreceive => 'cash_recv', typsend => 'cash_send',
+  typalign => 'd' },
+{ oid => '791',
+  typname => '_money', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'money', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+
+# OIDS 800 - 899
+
+{ oid => '829', descr => 'XX:XX:XX:XX:XX:XX, MAC address',
+  typname => 'macaddr', typlen => '6', typbyval => 'f', typcategory => 'U',
+  typarray => '_macaddr', typinput => 'macaddr_in', typoutput => 'macaddr_out',
+  typreceive => 'macaddr_recv', typsend => 'macaddr_send', typalign => 'i' },
+{ oid => '869', descr => 'IP address/netmask, host address, netmask optional',
+  typname => 'inet', typlen => '-1', typbyval => 'f', typcategory => 'I',
+  typispreferred => 't', typarray => '_inet', typinput => 'inet_in',
+  typoutput => 'inet_out', typreceive => 'inet_recv', typsend => 'inet_send',
+  typalign => 'i', typstorage => 'm' },
+{ oid => '650', descr => 'network IP address/netmask, network address',
+  typname => 'cidr', typlen => '-1', typbyval => 'f', typcategory => 'I',
+  typarray => '_cidr', typinput => 'cidr_in', typoutput => 'cidr_out',
+  typreceive => 'cidr_recv', typsend => 'cidr_send', typalign => 'i',
+  typstorage => 'm' },
+{ oid => '774', descr => 'XX:XX:XX:XX:XX:XX:XX:XX, MAC address',
+  typname => 'macaddr8', typlen => '8', typbyval => 'f', typcategory => 'U',
+  typarray => '_macaddr8', typinput => 'macaddr8_in',
+  typoutput => 'macaddr8_out', typreceive => 'macaddr8_recv',
+  typsend => 'macaddr8_send', typalign => 'i' },
+
+# OIDS 1000 - 1099
+
+{ oid => '1000',
+  typname => '_bool', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'bool', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1001',
+  typname => '_bytea', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'bytea', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1002',
+  typname => '_char', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'char', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1003',
+  typname => '_name', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'name', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1005',
+  typname => '_int2', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'int2', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1006',
+  typname => '_int2vector', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'int2vector', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1007',
+  typname => '_int4', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'int4', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1008',
+  typname => '_regproc', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'regproc', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1009',
+  typname => '_text', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'text', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x',
+  typcollation => '100' },
+{ oid => '1028',
+  typname => '_oid', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'oid', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1010',
+  typname => '_tid', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'tid', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1011',
+  typname => '_xid', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'xid', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1012',
+  typname => '_cid', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'cid', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1013',
+  typname => '_oidvector', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'oidvector', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1014',
+  typname => '_bpchar', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'bpchar', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typmodin => 'bpchartypmodin', typmodout => 'bpchartypmodout',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x',
+  typcollation => '100' },
+{ oid => '1015',
+  typname => '_varchar', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'varchar', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typmodin => 'varchartypmodin', typmodout => 'varchartypmodout',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x',
+  typcollation => '100' },
+{ oid => '1016',
+  typname => '_int8', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'int8', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '1017',
+  typname => '_point', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'point', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '1018',
+  typname => '_lseg', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'lseg', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '1019',
+  typname => '_path', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'path', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '1020',
+  typname => '_box', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typdelim => '\073', typelem => 'box', typinput => 'array_in',
+  typoutput => 'array_out', typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '1021',
+  typname => '_float4', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'float4', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1022',
+  typname => '_float8', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'float8', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '1023',
+  typname => '_abstime', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'abstime', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1024',
+  typname => '_reltime', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'reltime', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1025',
+  typname => '_tinterval', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'tinterval', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1027',
+  typname => '_polygon', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'polygon', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '1033', descr => 'access control list',
+  typname => 'aclitem', typlen => '12', typbyval => 'f', typcategory => 'U',
+  typarray => '_aclitem', typinput => 'aclitemin', typoutput => 'aclitemout',
+  typreceive => '-', typsend => '-', typalign => 'i' },
+{ oid => '1034',
+  typname => '_aclitem', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'aclitem', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1040',
+  typname => '_macaddr', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'macaddr', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '775',
+  typname => '_macaddr8', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'macaddr8', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1041',
+  typname => '_inet', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'inet', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '651',
+  typname => '_cidr', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'cidr', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1263',
+  typname => '_cstring', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'cstring', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1042',
+  descr => 'char(length), blank-padded string, fixed storage length',
+  typname => 'bpchar', typlen => '-1', typbyval => 'f', typcategory => 'S',
+  typarray => '_bpchar', typinput => 'bpcharin', typoutput => 'bpcharout',
+  typreceive => 'bpcharrecv', typsend => 'bpcharsend',
+  typmodin => 'bpchartypmodin', typmodout => 'bpchartypmodout', typalign => 'i',
+  typstorage => 'x', typcollation => '100' },
+{ oid => '1043',
+  descr => 'varchar(length), non-blank-padded string, variable storage length',
+  typname => 'varchar', typlen => '-1', typbyval => 'f', typcategory => 'S',
+  typarray => '_varchar', typinput => 'varcharin', typoutput => 'varcharout',
+  typreceive => 'varcharrecv', typsend => 'varcharsend',
+  typmodin => 'varchartypmodin', typmodout => 'varchartypmodout',
+  typalign => 'i', typstorage => 'x', typcollation => '100' },
+{ oid => '1082', descr => 'date',
+  typname => 'date', typlen => '4', typbyval => 't', typcategory => 'D',
+  typarray => '_date', typinput => 'date_in', typoutput => 'date_out',
+  typreceive => 'date_recv', typsend => 'date_send', typalign => 'i' },
+{ oid => '1083', descr => 'time of day',
+  typname => 'time', typlen => '8', typbyval => 'FLOAT8PASSBYVAL',
+  typcategory => 'D', typarray => '_time', typinput => 'time_in',
+  typoutput => 'time_out', typreceive => 'time_recv', typsend => 'time_send',
+  typmodin => 'timetypmodin', typmodout => 'timetypmodout', typalign => 'd' },
+
+# OIDS 1100 - 1199
+
+{ oid => '1114', descr => 'date and time',
+  typname => 'timestamp', typlen => '8', typbyval => 'FLOAT8PASSBYVAL',
+  typcategory => 'D', typarray => '_timestamp', typinput => 'timestamp_in',
+  typoutput => 'timestamp_out', typreceive => 'timestamp_recv',
+  typsend => 'timestamp_send', typmodin => 'timestamptypmodin',
+  typmodout => 'timestamptypmodout', typalign => 'd' },
+{ oid => '1115',
+  typname => '_timestamp', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'timestamp', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typmodin => 'timestamptypmodin', typmodout => 'timestamptypmodout',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '1182',
+  typname => '_date', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'date', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1183',
+  typname => '_time', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'time', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typmodin => 'timetypmodin', typmodout => 'timetypmodout',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '1184', descr => 'date and time with time zone',
+  typname => 'timestamptz', typlen => '8', typbyval => 'FLOAT8PASSBYVAL',
+  typcategory => 'D', typispreferred => 't', typarray => '_timestamptz',
+  typinput => 'timestamptz_in', typoutput => 'timestamptz_out',
+  typreceive => 'timestamptz_recv', typsend => 'timestamptz_send',
+  typmodin => 'timestamptztypmodin', typmodout => 'timestamptztypmodout',
+  typalign => 'd' },
+{ oid => '1185',
+  typname => '_timestamptz', typlen => '-1', typbyval => 'f',
+  typcategory => 'A', typelem => 'timestamptz', typinput => 'array_in',
+  typoutput => 'array_out', typreceive => 'array_recv', typsend => 'array_send',
+  typmodin => 'timestamptztypmodin', typmodout => 'timestamptztypmodout',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '1186', descr => '@ <number> <units>, time interval',
+  typname => 'interval', typlen => '16', typbyval => 'f', typcategory => 'T',
+  typispreferred => 't', typarray => '_interval', typinput => 'interval_in',
+  typoutput => 'interval_out', typreceive => 'interval_recv',
+  typsend => 'interval_send', typmodin => 'intervaltypmodin',
+  typmodout => 'intervaltypmodout', typalign => 'd' },
+{ oid => '1187',
+  typname => '_interval', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'interval', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typmodin => 'intervaltypmodin', typmodout => 'intervaltypmodout',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+
+# OIDS 1200 - 1299
+
+{ oid => '1231',
+  typname => '_numeric', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'numeric', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typmodin => 'numerictypmodin', typmodout => 'numerictypmodout',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1266', descr => 'time of day with time zone',
+  typname => 'timetz', typlen => '12', typbyval => 'f', typcategory => 'D',
+  typarray => '_timetz', typinput => 'timetz_in', typoutput => 'timetz_out',
+  typreceive => 'timetz_recv', typsend => 'timetz_send',
+  typmodin => 'timetztypmodin', typmodout => 'timetztypmodout',
+  typalign => 'd' },
+{ oid => '1270',
+  typname => '_timetz', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'timetz', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typmodin => 'timetztypmodin', typmodout => 'timetztypmodout',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+
+# OIDS 1500 - 1599
+
+{ oid => '1560', descr => 'fixed-length bit string',
+  typname => 'bit', typlen => '-1', typbyval => 'f', typcategory => 'V',
+  typarray => '_bit', typinput => 'bit_in', typoutput => 'bit_out',
+  typreceive => 'bit_recv', typsend => 'bit_send', typmodin => 'bittypmodin',
+  typmodout => 'bittypmodout', typalign => 'i', typstorage => 'x' },
+{ oid => '1561',
+  typname => '_bit', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'bit', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typmodin => 'bittypmodin', typmodout => 'bittypmodout',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '1562', descr => 'variable-length bit string',
+  typname => 'varbit', typlen => '-1', typbyval => 'f', typcategory => 'V',
+  typispreferred => 't', typarray => '_varbit', typinput => 'varbit_in',
+  typoutput => 'varbit_out', typreceive => 'varbit_recv',
+  typsend => 'varbit_send', typmodin => 'varbittypmodin',
+  typmodout => 'varbittypmodout', typalign => 'i', typstorage => 'x' },
+{ oid => '1563',
+  typname => '_varbit', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'varbit', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typmodin => 'varbittypmodin', typmodout => 'varbittypmodout',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+
+# OIDS 1700 - 1799
+
+{ oid => '1700',
+  descr => 'numeric(precision, decimal), arbitrary precision number',
+  typname => 'numeric', typlen => '-1', typbyval => 'f', typcategory => 'N',
+  typarray => '_numeric', typinput => 'numeric_in', typoutput => 'numeric_out',
+  typreceive => 'numeric_recv', typsend => 'numeric_send',
+  typmodin => 'numerictypmodin', typmodout => 'numerictypmodout',
+  typalign => 'i', typstorage => 'm' },
+
+{ oid => '1790', descr => 'reference to cursor (portal name)',
+  typname => 'refcursor', typlen => '-1', typbyval => 'f', typcategory => 'U',
+  typarray => '_refcursor', typinput => 'textin', typoutput => 'textout',
+  typreceive => 'textrecv', typsend => 'textsend', typalign => 'i',
+  typstorage => 'x' },
+
+# OIDS 2200 - 2299
+
+{ oid => '2201',
+  typname => '_refcursor', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'refcursor', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+
+{ oid => '2202', descr => 'registered procedure (with args)',
+  typname => 'regprocedure', typlen => '4', typbyval => 't', typcategory => 'N',
+  typarray => '_regprocedure', typinput => 'regprocedurein',
+  typoutput => 'regprocedureout', typreceive => 'regprocedurerecv',
+  typsend => 'regproceduresend', typalign => 'i' },
+{ oid => '2203', descr => 'registered operator',
+  typname => 'regoper', typlen => '4', typbyval => 't', typcategory => 'N',
+  typarray => '_regoper', typinput => 'regoperin', typoutput => 'regoperout',
+  typreceive => 'regoperrecv', typsend => 'regopersend', typalign => 'i' },
+{ oid => '2204', descr => 'registered operator (with args)',
+  typname => 'regoperator', typlen => '4', typbyval => 't', typcategory => 'N',
+  typarray => '_regoperator', typinput => 'regoperatorin',
+  typoutput => 'regoperatorout', typreceive => 'regoperatorrecv',
+  typsend => 'regoperatorsend', typalign => 'i' },
+{ oid => '2205', descr => 'registered class',
+  typname => 'regclass', typlen => '4', typbyval => 't', typcategory => 'N',
+  typarray => '_regclass', typinput => 'regclassin', typoutput => 'regclassout',
+  typreceive => 'regclassrecv', typsend => 'regclasssend', typalign => 'i' },
+{ oid => '2206', descr => 'registered type',
+  typname => 'regtype', typlen => '4', typbyval => 't', typcategory => 'N',
+  typarray => '_regtype', typinput => 'regtypein', typoutput => 'regtypeout',
+  typreceive => 'regtyperecv', typsend => 'regtypesend', typalign => 'i' },
+{ oid => '4096', descr => 'registered role',
+  typname => 'regrole', typlen => '4', typbyval => 't', typcategory => 'N',
+  typarray => '_regrole', typinput => 'regrolein', typoutput => 'regroleout',
+  typreceive => 'regrolerecv', typsend => 'regrolesend', typalign => 'i' },
+{ oid => '4089', descr => 'registered namespace',
+  typname => 'regnamespace', typlen => '4', typbyval => 't', typcategory => 'N',
+  typarray => '_regnamespace', typinput => 'regnamespacein',
+  typoutput => 'regnamespaceout', typreceive => 'regnamespacerecv',
+  typsend => 'regnamespacesend', typalign => 'i' },
+{ oid => '2207',
+  typname => '_regprocedure', typlen => '-1', typbyval => 'f',
+  typcategory => 'A', typelem => 'regprocedure', typinput => 'array_in',
+  typoutput => 'array_out', typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '2208',
+  typname => '_regoper', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'regoper', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '2209',
+  typname => '_regoperator', typlen => '-1', typbyval => 'f',
+  typcategory => 'A', typelem => 'regoperator', typinput => 'array_in',
+  typoutput => 'array_out', typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '2210',
+  typname => '_regclass', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'regclass', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '2211',
+  typname => '_regtype', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'regtype', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '4097',
+  typname => '_regrole', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'regrole', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '4090',
+  typname => '_regnamespace', typlen => '-1', typbyval => 'f',
+  typcategory => 'A', typelem => 'regnamespace', typinput => 'array_in',
+  typoutput => 'array_out', typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+
+# uuid
+{ oid => '2950', descr => 'UUID datatype',
+  typname => 'uuid', typlen => '16', typbyval => 'f', typcategory => 'U',
+  typarray => '_uuid', typinput => 'uuid_in', typoutput => 'uuid_out',
+  typreceive => 'uuid_recv', typsend => 'uuid_send', typalign => 'c' },
+{ oid => '2951',
+  typname => '_uuid', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'uuid', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+
+# pg_lsn
+{ oid => '3220', oid_symbol => 'LSNOID', descr => 'PostgreSQL LSN datatype',
+  typname => 'pg_lsn', typlen => '8', typbyval => 'FLOAT8PASSBYVAL',
+  typcategory => 'U', typarray => '_pg_lsn', typinput => 'pg_lsn_in',
+  typoutput => 'pg_lsn_out', typreceive => 'pg_lsn_recv',
+  typsend => 'pg_lsn_send', typalign => 'd' },
+{ oid => '3221',
+  typname => '_pg_lsn', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'pg_lsn', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+
+# text search
+{ oid => '3614', descr => 'text representation for text search',
+  typname => 'tsvector', typlen => '-1', typbyval => 'f', typcategory => 'U',
+  typarray => '_tsvector', typinput => 'tsvectorin', typoutput => 'tsvectorout',
+  typreceive => 'tsvectorrecv', typsend => 'tsvectorsend',
+  typanalyze => 'ts_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '3642',
+  descr => 'GiST index internal text representation for text search',
+  typname => 'gtsvector', typlen => '-1', typbyval => 'f', typcategory => 'U',
+  typarray => '_gtsvector', typinput => 'gtsvectorin',
+  typoutput => 'gtsvectorout', typreceive => '-', typsend => '-',
+  typalign => 'i' },
+{ oid => '3615', descr => 'query representation for text search',
+  typname => 'tsquery', typlen => '-1', typbyval => 'f', typcategory => 'U',
+  typarray => '_tsquery', typinput => 'tsqueryin', typoutput => 'tsqueryout',
+  typreceive => 'tsqueryrecv', typsend => 'tsquerysend', typalign => 'i' },
+{ oid => '3734', descr => 'registered text search configuration',
+  typname => 'regconfig', typlen => '4', typbyval => 't', typcategory => 'N',
+  typarray => '_regconfig', typinput => 'regconfigin',
+  typoutput => 'regconfigout', typreceive => 'regconfigrecv',
+  typsend => 'regconfigsend', typalign => 'i' },
+{ oid => '3769', descr => 'registered text search dictionary',
+  typname => 'regdictionary', typlen => '4', typbyval => 't',
+  typcategory => 'N', typarray => '_regdictionary',
+  typinput => 'regdictionaryin', typoutput => 'regdictionaryout',
+  typreceive => 'regdictionaryrecv', typsend => 'regdictionarysend',
+  typalign => 'i' },
+
+{ oid => '3643',
+  typname => '_tsvector', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'tsvector', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '3644',
+  typname => '_gtsvector', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'gtsvector', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '3645',
+  typname => '_tsquery', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'tsquery', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '3735',
+  typname => '_regconfig', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'regconfig', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '3770',
+  typname => '_regdictionary', typlen => '-1', typbyval => 'f',
+  typcategory => 'A', typelem => 'regdictionary', typinput => 'array_in',
+  typoutput => 'array_out', typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+
+# jsonb
+{ oid => '3802', descr => 'Binary JSON',
+  typname => 'jsonb', typlen => '-1', typbyval => 'f', typcategory => 'U',
+  typarray => '_jsonb', typinput => 'jsonb_in', typoutput => 'jsonb_out',
+  typreceive => 'jsonb_recv', typsend => 'jsonb_send', typalign => 'i',
+  typstorage => 'x' },
+{ oid => '3807',
+  typname => '_jsonb', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'jsonb', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+
+{ oid => '2970', descr => 'txid snapshot',
+  typname => 'txid_snapshot', typlen => '-1', typbyval => 'f',
+  typcategory => 'U', typarray => '_txid_snapshot',
+  typinput => 'txid_snapshot_in', typoutput => 'txid_snapshot_out',
+  typreceive => 'txid_snapshot_recv', typsend => 'txid_snapshot_send',
+  typalign => 'd', typstorage => 'x' },
+{ oid => '2949',
+  typname => '_txid_snapshot', typlen => '-1', typbyval => 'f',
+  typcategory => 'A', typelem => 'txid_snapshot', typinput => 'array_in',
+  typoutput => 'array_out', typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+
+# range types
+{ oid => '3904', descr => 'range of integers',
+  typname => 'int4range', typlen => '-1', typbyval => 'f', typtype => 'r',
+  typcategory => 'R', typarray => '_int4range', typinput => 'range_in',
+  typoutput => 'range_out', typreceive => 'range_recv', typsend => 'range_send',
+  typanalyze => 'range_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '3905',
+  typname => '_int4range', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'int4range', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '3906', descr => 'range of numerics',
+  typname => 'numrange', typlen => '-1', typbyval => 'f', typtype => 'r',
+  typcategory => 'R', typarray => '_numrange', typinput => 'range_in',
+  typoutput => 'range_out', typreceive => 'range_recv', typsend => 'range_send',
+  typanalyze => 'range_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '3907',
+  typname => '_numrange', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'numrange', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '3908', descr => 'range of timestamps without time zone',
+  typname => 'tsrange', typlen => '-1', typbyval => 'f', typtype => 'r',
+  typcategory => 'R', typarray => '_tsrange', typinput => 'range_in',
+  typoutput => 'range_out', typreceive => 'range_recv', typsend => 'range_send',
+  typanalyze => 'range_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '3909',
+  typname => '_tsrange', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'tsrange', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '3910', descr => 'range of timestamps with time zone',
+  typname => 'tstzrange', typlen => '-1', typbyval => 'f', typtype => 'r',
+  typcategory => 'R', typarray => '_tstzrange', typinput => 'range_in',
+  typoutput => 'range_out', typreceive => 'range_recv', typsend => 'range_send',
+  typanalyze => 'range_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '3911',
+  typname => '_tstzrange', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'tstzrange', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '3912', descr => 'range of dates',
+  typname => 'daterange', typlen => '-1', typbyval => 'f', typtype => 'r',
+  typcategory => 'R', typarray => '_daterange', typinput => 'range_in',
+  typoutput => 'range_out', typreceive => 'range_recv', typsend => 'range_send',
+  typanalyze => 'range_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '3913',
+  typname => '_daterange', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'daterange', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
+{ oid => '3926', descr => 'range of bigints',
+  typname => 'int8range', typlen => '-1', typbyval => 'f', typtype => 'r',
+  typcategory => 'R', typarray => '_int8range', typinput => 'range_in',
+  typoutput => 'range_out', typreceive => 'range_recv', typsend => 'range_send',
+  typanalyze => 'range_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '3927',
+  typname => '_int8range', typlen => '-1', typbyval => 'f', typcategory => 'A',
+  typelem => 'int8range', typinput => 'array_in', typoutput => 'array_out',
+  typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+
+# pseudo-types
+# types with typtype='p' represent various special cases in the type system.
+# These cannot be used to define table columns, but are valid as function
+# argument and result types (if supported by the function's implementation
+# language).
+# Note: cstring is a borderline case; it is still considered a pseudo-type,
+# but there is now support for it in records and arrays.  Perhaps we should
+# just treat it as a regular base type?
+
+{ oid => '2249',
+  typname => 'record', typlen => '-1', typbyval => 'f', typtype => 'p',
+  typcategory => 'P', typarray => '_record', typinput => 'record_in',
+  typoutput => 'record_out', typreceive => 'record_recv',
+  typsend => 'record_send', typalign => 'd', typstorage => 'x' },
+{ oid => '2287',
+  typname => '_record', typlen => '-1', typbyval => 'f', typtype => 'p',
+  typcategory => 'P', typelem => 'record', typinput => 'array_in',
+  typoutput => 'array_out', typreceive => 'array_recv', typsend => 'array_send',
+  typanalyze => 'array_typanalyze', typalign => 'd', typstorage => 'x' },
+{ oid => '2275',
+  typname => 'cstring', typlen => '-2', typbyval => 'f', typtype => 'p',
+  typcategory => 'P', typarray => '_cstring', typinput => 'cstring_in',
+  typoutput => 'cstring_out', typreceive => 'cstring_recv',
+  typsend => 'cstring_send', typalign => 'c' },
+{ oid => '2276',
+  typname => 'any', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'any_in', typoutput => 'any_out',
+  typreceive => '-', typsend => '-', typalign => 'i' },
+{ oid => '2277',
+  typname => 'anyarray', typlen => '-1', typbyval => 'f', typtype => 'p',
+  typcategory => 'P', typinput => 'anyarray_in', typoutput => 'anyarray_out',
+  typreceive => 'anyarray_recv', typsend => 'anyarray_send', typalign => 'd',
+  typstorage => 'x' },
+{ oid => '2278',
+  typname => 'void', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'void_in', typoutput => 'void_out',
+  typreceive => 'void_recv', typsend => 'void_send', typalign => 'i' },
+{ oid => '2279',
+  typname => 'trigger', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'trigger_in', typoutput => 'trigger_out',
+  typreceive => '-', typsend => '-', typalign => 'i' },
+{ oid => '3838', oid_symbol => 'EVTTRIGGEROID',
+  typname => 'event_trigger', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'event_trigger_in',
+  typoutput => 'event_trigger_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
+{ oid => '2280',
+  typname => 'language_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'language_handler_in',
+  typoutput => 'language_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
+{ oid => '2281',
+  typname => 'internal', typlen => 'SIZEOF_POINTER', typbyval => 't',
+  typtype => 'p', typcategory => 'P', typinput => 'internal_in',
+  typoutput => 'internal_out', typreceive => '-', typsend => '-',
+  typalign => 'ALIGNOF_POINTER' },
+{ oid => '2282',
+  typname => 'opaque', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'opaque_in', typoutput => 'opaque_out',
+  typreceive => '-', typsend => '-', typalign => 'i' },
+{ oid => '2283',
+  typname => 'anyelement', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'anyelement_in',
+  typoutput => 'anyelement_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
+{ oid => '2776',
+  typname => 'anynonarray', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'anynonarray_in',
+  typoutput => 'anynonarray_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
+{ oid => '3500',
+  typname => 'anyenum', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'anyenum_in', typoutput => 'anyenum_out',
+  typreceive => '-', typsend => '-', typalign => 'i' },
+{ oid => '3115',
+  typname => 'fdw_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'fdw_handler_in',
+  typoutput => 'fdw_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
+{ oid => '325',
+  typname => 'index_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'index_am_handler_in',
+  typoutput => 'index_am_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
+{ oid => '3310',
+  typname => 'tsm_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'tsm_handler_in',
+  typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
+{ oid => '3831',
+  typname => 'anyrange', typlen => '-1', typbyval => 'f', typtype => 'p',
+  typcategory => 'P', typinput => 'anyrange_in', typoutput => 'anyrange_out',
+  typreceive => '-', typsend => '-', typalign => 'd', typstorage => 'x' },
+
+]
index 5b5b1218de9efe6b723b728972bcae4b20306c66..cf068dc7d5e8e2052a1029ad4faff06aa3cb9603 100644 (file)
@@ -2,7 +2,6 @@
  *
  * pg_type.h
  *       definition of the system "type" relation (pg_type)
- *       along with the relation's initial contents.
  *
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
@@ -11,8 +10,8 @@
  * src/include/catalog/pg_type.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
@@ -20,6 +19,7 @@
 #define PG_TYPE_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_type_d.h"
 
 /* ----------------
  *             pg_type definition.  cpp turns this into
  *             See struct FormData_pg_attribute for details.
  * ----------------
  */
-#define TypeRelationId 1247
-#define TypeRelation_Rowtype_Id  71
-
-CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71) BKI_SCHEMA_MACRO
+CATALOG(pg_type,1247,TypeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71,TypeRelation_Rowtype_Id) BKI_SCHEMA_MACRO
 {
-       NameData        typname;                /* type name */
-       Oid                     typnamespace;   /* OID of namespace containing this type */
-       Oid                     typowner;               /* type owner */
+       /* type name */
+       NameData        typname;
+
+       /* OID of namespace containing this type */
+       Oid                     typnamespace BKI_DEFAULT(PGNSP);
+
+       /* type owner */
+       Oid                     typowner BKI_DEFAULT(PGUID);
 
        /*
         * For a fixed-size type, typlen is the number of bytes we use to
@@ -66,7 +68,7 @@ CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71) BKI_SCHEMA_MACRO
         *
         * If typtype is 'c', typrelid is the OID of the class' entry in pg_class.
         */
-       char            typtype;
+       char            typtype BKI_DEFAULT(b);
 
        /*
         * typcategory and typispreferred help the parser distinguish preferred
@@ -74,19 +76,24 @@ CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71) BKI_SCHEMA_MACRO
         * character (but not \0).  The categories used for built-in types are
         * identified by the TYPCATEGORY macros below.
         */
-       char            typcategory;    /* arbitrary type classification */
 
-       bool            typispreferred; /* is type "preferred" within its category? */
+       /* arbitrary type classification */
+       char            typcategory;
+
+       /* is type "preferred" within its category? */
+       bool            typispreferred BKI_DEFAULT(f);
 
        /*
         * If typisdefined is false, the entry is only a placeholder (forward
         * reference).  We know the type name, but not yet anything else about it.
         */
-       bool            typisdefined;
+       bool            typisdefined BKI_DEFAULT(t);
 
-       char            typdelim;               /* delimiter for arrays of this type */
+       /* delimiter for arrays of this type */
+       char            typdelim BKI_DEFAULT("\054");
 
-       Oid                     typrelid;               /* 0 if not a composite type */
+       /* associated pg_class OID if a composite type, else 0 */
+       Oid                     typrelid BKI_DEFAULT(0);
 
        /*
         * If typelem is not 0 then it identifies another row in pg_type. The
@@ -99,32 +106,36 @@ CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71) BKI_SCHEMA_MACRO
         *
         * typelem != 0 and typlen == -1.
         */
-       Oid                     typelem;
+       Oid                     typelem BKI_DEFAULT(0) BKI_LOOKUP(pg_type);
 
        /*
         * If there is a "true" array type having this type as element type,
         * typarray links to it.  Zero if no associated "true" array type.
         */
-       Oid                     typarray;
+       Oid                     typarray BKI_DEFAULT(0) BKI_LOOKUP(pg_type);
 
        /*
         * I/O conversion procedures for the datatype.
         */
-       regproc         typinput;               /* text format (required) */
-       regproc         typoutput;
-       regproc         typreceive;             /* binary format (optional) */
-       regproc         typsend;
+
+       /* text format (required) */
+       regproc         typinput BKI_LOOKUP(pg_proc);
+       regproc         typoutput BKI_LOOKUP(pg_proc);
+
+       /* binary format (optional) */
+       regproc         typreceive BKI_LOOKUP(pg_proc);
+       regproc         typsend BKI_LOOKUP(pg_proc);
 
        /*
         * I/O functions for optional type modifiers.
         */
-       regproc         typmodin;
-       regproc         typmodout;
+       regproc         typmodin BKI_DEFAULT(-) BKI_LOOKUP(pg_proc);
+       regproc         typmodout BKI_DEFAULT(-) BKI_LOOKUP(pg_proc);
 
        /*
         * Custom ANALYZE procedure for the datatype (0 selects the default).
         */
-       regproc         typanalyze;
+       regproc         typanalyze BKI_DEFAULT(-) BKI_LOOKUP(pg_proc);
 
        /* ----------------
         * typalign is the alignment required when storing a value of this
@@ -162,7 +173,7 @@ CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71) BKI_SCHEMA_MACRO
         * 'm' MAIN               like 'x' but try to keep in main tuple
         * ----------------
         */
-       char            typstorage;
+       char            typstorage BKI_DEFAULT(p);
 
        /*
         * This flag represents a "NOT NULL" constraint against this datatype.
@@ -172,32 +183,32 @@ CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71) BKI_SCHEMA_MACRO
         *
         * Used primarily for domain types.
         */
-       bool            typnotnull;
+       bool            typnotnull BKI_DEFAULT(f);
 
        /*
         * Domains use typbasetype to show the base (or domain) type that the
         * domain is based on.  Zero if the type is not a domain.
         */
-       Oid                     typbasetype;
+       Oid                     typbasetype BKI_DEFAULT(0);
 
        /*
         * Domains use typtypmod to record the typmod to be applied to their base
         * type (-1 if base type does not use a typmod).  -1 if this type is not a
         * domain.
         */
-       int32           typtypmod;
+       int32           typtypmod BKI_DEFAULT(-1);
 
        /*
         * typndims is the declared number of dimensions for an array domain type
         * (i.e., typbasetype is an array type).  Otherwise zero.
         */
-       int32           typndims;
+       int32           typndims BKI_DEFAULT(0);
 
        /*
         * Collation: 0 if type cannot use collations, DEFAULT_COLLATION_OID for
         * collatable base types, possibly other OID for domains
         */
-       Oid                     typcollation;
+       Oid                     typcollation BKI_DEFAULT(0);
 
 #ifdef CATALOG_VARLEN                  /* variable-length fields start here */
 
@@ -206,7 +217,7 @@ CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71) BKI_SCHEMA_MACRO
         * a default expression for the type.  Currently this is only used for
         * domains.
         */
-       pg_node_tree typdefaultbin;
+       pg_node_tree typdefaultbin BKI_DEFAULT(_null_);
 
        /*
         * typdefault is NULL if the type has no associated default value. If
@@ -216,12 +227,12 @@ CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71) BKI_SCHEMA_MACRO
         * external representation of the type's default value, which may be fed
         * to the type's input converter to produce a constant.
         */
-       text            typdefault;
+       text            typdefault BKI_DEFAULT(_null_);
 
        /*
         * Access permissions
         */
-       aclitem         typacl[1];
+       aclitem         typacl[1] BKI_DEFAULT(_null_);
 #endif
 } FormData_pg_type;
 
@@ -232,490 +243,10 @@ CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71) BKI_SCHEMA_MACRO
  */
 typedef FormData_pg_type *Form_pg_type;
 
-/* ----------------
- *             compiler constants for pg_type
- * ----------------
- */
-#define Natts_pg_type                                  30
-#define Anum_pg_type_typname                   1
-#define Anum_pg_type_typnamespace              2
-#define Anum_pg_type_typowner                  3
-#define Anum_pg_type_typlen                            4
-#define Anum_pg_type_typbyval                  5
-#define Anum_pg_type_typtype                   6
-#define Anum_pg_type_typcategory               7
-#define Anum_pg_type_typispreferred            8
-#define Anum_pg_type_typisdefined              9
-#define Anum_pg_type_typdelim                  10
-#define Anum_pg_type_typrelid                  11
-#define Anum_pg_type_typelem                   12
-#define Anum_pg_type_typarray                  13
-#define Anum_pg_type_typinput                  14
-#define Anum_pg_type_typoutput                 15
-#define Anum_pg_type_typreceive                        16
-#define Anum_pg_type_typsend                   17
-#define Anum_pg_type_typmodin                  18
-#define Anum_pg_type_typmodout                 19
-#define Anum_pg_type_typanalyze                        20
-#define Anum_pg_type_typalign                  21
-#define Anum_pg_type_typstorage                        22
-#define Anum_pg_type_typnotnull                        23
-#define Anum_pg_type_typbasetype               24
-#define Anum_pg_type_typtypmod                 25
-#define Anum_pg_type_typndims                  26
-#define Anum_pg_type_typcollation              27
-#define Anum_pg_type_typdefaultbin             28
-#define Anum_pg_type_typdefault                        29
-#define Anum_pg_type_typacl                            30
-
-
-/* ----------------
- *             initial contents of pg_type
- * ----------------
- */
-
-/*
- * Keep the following ordered by OID so that later changes can be made more
- * easily.
- *
- * For types used in the system catalogs, make sure the values here match
- * TypInfo[] in bootstrap.c.
- */
-
-/* OIDS 1 - 99 */
-DATA(insert OID = 16 ( bool       PGNSP PGUID  1 t b B t t \054 0       0 1000 boolin boolout boolrecv boolsend - - - c p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("boolean, 'true'/'false'");
-#define BOOLOID                        16
-
-DATA(insert OID = 17 ( bytea      PGNSP PGUID -1 f b U f t \054 0      0 1001 byteain byteaout bytearecv byteasend - - - i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("variable-length string, binary values escaped");
-#define BYTEAOID               17
-
-DATA(insert OID = 18 ( char       PGNSP PGUID  1 t b S f t \054 0       0 1002 charin charout charrecv charsend - - - c p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("single character");
-#define CHAROID                        18
-
-DATA(insert OID = 19 ( name       PGNSP PGUID NAMEDATALEN f b S f t \054 0 18 1003 namein nameout namerecv namesend - - - c p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("63-byte type for storing system identifiers");
-#define NAMEOID                        19
-
-DATA(insert OID = 20 ( int8       PGNSP PGUID  8 FLOAT8PASSBYVAL b N f t \054 0         0 1016 int8in int8out int8recv int8send - - - d p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("~18 digit integer, 8-byte storage");
-#define INT8OID                        20
-
-DATA(insert OID = 21 ( int2       PGNSP PGUID  2 t b N f t \054 0       0 1005 int2in int2out int2recv int2send - - - s p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("-32 thousand to 32 thousand, 2-byte storage");
-#define INT2OID                        21
-
-DATA(insert OID = 22 ( int2vector PGNSP PGUID -1 f b A f t \054 0      21 1006 int2vectorin int2vectorout int2vectorrecv int2vectorsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("array of int2, used in system tables");
-#define INT2VECTOROID  22
-
-DATA(insert OID = 23 ( int4       PGNSP PGUID  4 t b N f t \054 0       0 1007 int4in int4out int4recv int4send - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("-2 billion to 2 billion integer, 4-byte storage");
-#define INT4OID                        23
-
-DATA(insert OID = 24 ( regproc    PGNSP PGUID  4 t b N f t \054 0       0 1008 regprocin regprocout regprocrecv regprocsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("registered procedure");
-#define REGPROCOID             24
-
-DATA(insert OID = 25 ( text       PGNSP PGUID -1 f b S t t \054 0      0 1009 textin textout textrecv textsend - - - i x f 0 -1 0 100 _null_ _null_ _null_ ));
-DESCR("variable-length string, no limit specified");
-#define TEXTOID                        25
-
-DATA(insert OID = 26 ( oid                PGNSP PGUID  4 t b N t t \054 0       0 1028 oidin oidout oidrecv oidsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("object identifier(oid), maximum 4 billion");
-#define OIDOID                 26
-
-DATA(insert OID = 27 ( tid                PGNSP PGUID  6 f b U f t \054 0       0 1010 tidin tidout tidrecv tidsend - - - s p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("(block, offset), physical location of tuple");
-#define TIDOID         27
-
-DATA(insert OID = 28 ( xid                PGNSP PGUID  4 t b U f t \054 0       0 1011 xidin xidout xidrecv xidsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("transaction id");
-#define XIDOID 28
-
-DATA(insert OID = 29 ( cid                PGNSP PGUID  4 t b U f t \054 0       0 1012 cidin cidout cidrecv cidsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("command identifier type, sequence in transaction id");
-#define CIDOID 29
-
-DATA(insert OID = 30 ( oidvector  PGNSP PGUID -1 f b A f t \054 0      26 1013 oidvectorin oidvectorout oidvectorrecv oidvectorsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("array of oids, used in system tables");
-#define OIDVECTOROID   30
-
-/* hand-built rowtype entries for bootstrapped catalogs */
-/* NB: OIDs assigned here must match the BKI_ROWTYPE_OID declarations */
-
-DATA(insert OID = 71 ( pg_type                 PGNSP PGUID -1 f c C f t \054 1247 0 0 record_in record_out record_recv record_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 75 ( pg_attribute    PGNSP PGUID -1 f c C f t \054 1249 0 0 record_in record_out record_recv record_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 81 ( pg_proc                 PGNSP PGUID -1 f c C f t \054 1255 0 0 record_in record_out record_recv record_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 83 ( pg_class                PGNSP PGUID -1 f c C f t \054 1259 0 0 record_in record_out record_recv record_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ ));
-
-/* OIDS 100 - 199 */
-DATA(insert OID = 114 ( json              PGNSP PGUID -1 f b U f t \054 0 0 199 json_in json_out json_recv json_send - - - i x f 0 -1 0 0 _null_ _null_ _null_ ));
-#define JSONOID 114
-DATA(insert OID = 142 ( xml               PGNSP PGUID -1 f b U f t \054 0 0 143 xml_in xml_out xml_recv xml_send - - - i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("XML content");
-#define XMLOID 142
-DATA(insert OID = 143 ( _xml      PGNSP PGUID -1 f b A f t \054 0 142 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 199 ( _json     PGNSP PGUID -1 f b A f t \054 0 114 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-
-DATA(insert OID = 194 ( pg_node_tree   PGNSP PGUID -1 f b S f t \054 0 0 0 pg_node_tree_in pg_node_tree_out pg_node_tree_recv pg_node_tree_send - - - i x f 0 -1 0 100 _null_ _null_ _null_ ));
-DESCR("string representing an internal node tree");
-#define PGNODETREEOID  194
-
-DATA(insert OID = 3361 ( pg_ndistinct          PGNSP PGUID -1 f b S f t \054 0 0 0 pg_ndistinct_in pg_ndistinct_out pg_ndistinct_recv pg_ndistinct_send - - - i x f 0 -1 0 100 _null_ _null_ _null_ ));
-DESCR("multivariate ndistinct coefficients");
-#define PGNDISTINCTOID 3361
-
-DATA(insert OID = 3402 ( pg_dependencies               PGNSP PGUID -1 f b S f t \054 0 0 0 pg_dependencies_in pg_dependencies_out pg_dependencies_recv pg_dependencies_send - - - i x f 0 -1 0 100 _null_ _null_ _null_ ));
-DESCR("multivariate dependencies");
-#define PGDEPENDENCIESOID      3402
-
-DATA(insert OID = 32 ( pg_ddl_command  PGNSP PGUID SIZEOF_POINTER t p P f t \054 0 0 0 pg_ddl_command_in pg_ddl_command_out pg_ddl_command_recv pg_ddl_command_send - - - ALIGNOF_POINTER p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("internal type for passing CollectedCommand");
-#define PGDDLCOMMANDOID 32
-
-/* OIDS 200 - 299 */
-
-DATA(insert OID = 210 (  smgr     PGNSP PGUID 2 t b U f t \054 0 0 0 smgrin smgrout - - - - - s p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("storage manager");
-
-/* OIDS 300 - 399 */
-
-/* OIDS 400 - 499 */
-
-/* OIDS 500 - 599 */
-
-/* OIDS 600 - 699 */
-DATA(insert OID = 600 (  point    PGNSP PGUID 16 f b G f t \054 0 701 1017 point_in point_out point_recv point_send - - - d p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("geometric point '(x, y)'");
-#define POINTOID               600
-DATA(insert OID = 601 (  lseg     PGNSP PGUID 32 f b G f t \054 0 600 1018 lseg_in lseg_out lseg_recv lseg_send - - - d p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("geometric line segment '(pt1,pt2)'");
-#define LSEGOID                        601
-DATA(insert OID = 602 (  path     PGNSP PGUID -1 f b G f t \054 0 0 1019 path_in path_out path_recv path_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("geometric path '(pt1,...)'");
-#define PATHOID                        602
-DATA(insert OID = 603 (  box      PGNSP PGUID 32 f b G f t \073 0 600 1020 box_in box_out box_recv box_send - - - d p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("geometric box '(lower left,upper right)'");
-#define BOXOID                 603
-DATA(insert OID = 604 (  polygon   PGNSP PGUID -1 f b G f t \054 0      0 1027 poly_in poly_out poly_recv poly_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("geometric polygon '(pt1,...)'");
-#define POLYGONOID             604
-
-DATA(insert OID = 628 (  line     PGNSP PGUID 24 f b G f t \054 0 701 629 line_in line_out line_recv line_send - - - d p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("geometric line");
-#define LINEOID                        628
-DATA(insert OID = 629 (  _line    PGNSP PGUID  -1 f b A f t \054 0 628 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-
-/* OIDS 700 - 799 */
-
-DATA(insert OID = 700 (  float4    PGNSP PGUID 4 FLOAT4PASSBYVAL b N f t \054 0         0 1021 float4in float4out float4recv float4send - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("single-precision floating point number, 4-byte storage");
-#define FLOAT4OID 700
-DATA(insert OID = 701 (  float8    PGNSP PGUID 8 FLOAT8PASSBYVAL b N t t \054 0         0 1022 float8in float8out float8recv float8send - - - d p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("double-precision floating point number, 8-byte storage");
-#define FLOAT8OID 701
-DATA(insert OID = 702 (  abstime   PGNSP PGUID 4 t b D f t \054 0       0 1023 abstimein abstimeout abstimerecv abstimesend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("absolute, limited-range date and time (Unix system time)");
-#define ABSTIMEOID             702
-DATA(insert OID = 703 (  reltime   PGNSP PGUID 4 t b T f t \054 0       0 1024 reltimein reltimeout reltimerecv reltimesend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("relative, limited-range time interval (Unix delta time)");
-#define RELTIMEOID             703
-DATA(insert OID = 704 (  tinterval PGNSP PGUID 12 f b T f t \054 0      0 1025 tintervalin tintervalout tintervalrecv tintervalsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("(abstime,abstime), time interval");
-#define TINTERVALOID   704
-DATA(insert OID = 705 (  unknown   PGNSP PGUID -2 f p X f t \054 0      0 0 unknownin unknownout unknownrecv unknownsend - - - c p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("");
-#define UNKNOWNOID             705
-
-DATA(insert OID = 718 (  circle    PGNSP PGUID 24 f b G f t \054 0 0 719 circle_in circle_out circle_recv circle_send - - - d p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("geometric circle '(center,radius)'");
-#define CIRCLEOID              718
-DATA(insert OID = 719 (  _circle   PGNSP PGUID -1 f b A f t \054 0  718 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 790 (  money    PGNSP PGUID   8 FLOAT8PASSBYVAL b N f t \054 0 0 791 cash_in cash_out cash_recv cash_send - - - d p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("monetary amounts, $d,ddd.cc");
-#define CASHOID 790
-DATA(insert OID = 791 (  _money    PGNSP PGUID -1 f b A f t \054 0  790 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-
-/* OIDS 800 - 899 */
-DATA(insert OID = 829 ( macaddr    PGNSP PGUID 6 f b U f t \054 0 0 1040 macaddr_in macaddr_out macaddr_recv macaddr_send - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("XX:XX:XX:XX:XX:XX, MAC address");
-#define MACADDROID 829
-DATA(insert OID = 869 ( inet      PGNSP PGUID  -1 f b I t t \054 0 0 1041 inet_in inet_out inet_recv inet_send - - - i m f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("IP address/netmask, host address, netmask optional");
-#define INETOID 869
-DATA(insert OID = 650 ( cidr      PGNSP PGUID  -1 f b I f t \054 0 0 651 cidr_in cidr_out cidr_recv cidr_send - - - i m f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("network IP address/netmask, network address");
-#define CIDROID 650
-DATA(insert OID = 774 ( macaddr8       PGNSP PGUID 8 f b U f t \054 0 0 775 macaddr8_in macaddr8_out macaddr8_recv macaddr8_send - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("XX:XX:XX:XX:XX:XX:XX:XX, MAC address");
-#define MACADDR8OID 774
-
-/* OIDS 900 - 999 */
-
-/* OIDS 1000 - 1099 */
-DATA(insert OID = 1000 (  _bool                 PGNSP PGUID -1 f b A f t \054 0        16 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1001 (  _bytea        PGNSP PGUID -1 f b A f t \054 0        17 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1002 (  _char                 PGNSP PGUID -1 f b A f t \054 0        18 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1003 (  _name                 PGNSP PGUID -1 f b A f t \054 0        19 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1005 (  _int2                 PGNSP PGUID -1 f b A f t \054 0        21 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-#define INT2ARRAYOID           1005
-DATA(insert OID = 1006 (  _int2vector PGNSP PGUID -1 f b A f t \054 0  22 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1007 (  _int4                 PGNSP PGUID -1 f b A f t \054 0        23 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-#define INT4ARRAYOID           1007
-DATA(insert OID = 1008 (  _regproc      PGNSP PGUID -1 f b A f t \054 0        24 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1009 (  _text                 PGNSP PGUID -1 f b A f t \054 0        25 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 100 _null_ _null_ _null_ ));
-#define TEXTARRAYOID           1009
-DATA(insert OID = 1028 (  _oid          PGNSP PGUID -1 f b A f t \054 0        26 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-#define OIDARRAYOID                    1028
-DATA(insert OID = 1010 (  _tid          PGNSP PGUID -1 f b A f t \054 0        27 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1011 (  _xid          PGNSP PGUID -1 f b A f t \054 0        28 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1012 (  _cid          PGNSP PGUID -1 f b A f t \054 0        29 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1013 (  _oidvector PGNSP PGUID -1 f b A f t \054 0   30 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1014 (  _bpchar       PGNSP PGUID -1 f b A f t \054 0 1042 0 array_in array_out array_recv array_send bpchartypmodin bpchartypmodout array_typanalyze i x f 0 -1 0 100 _null_ _null_ _null_ ));
-DATA(insert OID = 1015 (  _varchar      PGNSP PGUID -1 f b A f t \054 0 1043 0 array_in array_out array_recv array_send varchartypmodin varchartypmodout array_typanalyze i x f 0 -1 0 100 _null_ _null_ _null_ ));
-DATA(insert OID = 1016 (  _int8                 PGNSP PGUID -1 f b A f t \054 0        20 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1017 (  _point        PGNSP PGUID -1 f b A f t \054 0 600 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1018 (  _lseg                 PGNSP PGUID -1 f b A f t \054 0 601 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1019 (  _path                 PGNSP PGUID -1 f b A f t \054 0 602 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1020 (  _box          PGNSP PGUID -1 f b A f t \073 0 603 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1021 (  _float4       PGNSP PGUID -1 f b A f t \054 0 700 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-#define FLOAT4ARRAYOID 1021
-DATA(insert OID = 1022 (  _float8       PGNSP PGUID -1 f b A f t \054 0 701 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1023 (  _abstime      PGNSP PGUID -1 f b A f t \054 0 702 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1024 (  _reltime      PGNSP PGUID -1 f b A f t \054 0 703 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1025 (  _tinterval PGNSP PGUID -1 f b A f t \054 0 704 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1027 (  _polygon      PGNSP PGUID -1 f b A f t \054 0 604 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1033 (  aclitem       PGNSP PGUID 12 f b U f t \054 0 0 1034 aclitemin aclitemout - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("access control list");
-#define ACLITEMOID             1033
-DATA(insert OID = 1034 (  _aclitem      PGNSP PGUID -1 f b A f t \054 0 1033 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1040 (  _macaddr      PGNSP PGUID -1 f b A f t \054 0  829 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 775  (  _macaddr8  PGNSP PGUID -1 f b A f t \054 0  774 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1041 (  _inet                 PGNSP PGUID -1 f b A f t \054 0  869 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 651  (  _cidr                 PGNSP PGUID -1 f b A f t \054 0  650 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1263 (  _cstring      PGNSP PGUID -1 f b A f t \054 0 2275 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-#define CSTRINGARRAYOID                1263
-
-DATA(insert OID = 1042 ( bpchar                 PGNSP PGUID -1 f b S f t \054 0        0 1014 bpcharin bpcharout bpcharrecv bpcharsend bpchartypmodin bpchartypmodout - i x f 0 -1 0 100 _null_ _null_ _null_ ));
-DESCR("char(length), blank-padded string, fixed storage length");
-#define BPCHAROID              1042
-DATA(insert OID = 1043 ( varchar        PGNSP PGUID -1 f b S f t \054 0        0 1015 varcharin varcharout varcharrecv varcharsend varchartypmodin varchartypmodout - i x f 0 -1 0 100 _null_ _null_ _null_ ));
-DESCR("varchar(length), non-blank-padded string, variable storage length");
-#define VARCHAROID             1043
-
-DATA(insert OID = 1082 ( date           PGNSP PGUID    4 t b D f t \054 0      0 1182 date_in date_out date_recv date_send - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("date");
-#define DATEOID                        1082
-DATA(insert OID = 1083 ( time           PGNSP PGUID    8 FLOAT8PASSBYVAL b D f t \054 0        0 1183 time_in time_out time_recv time_send timetypmodin timetypmodout - d p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("time of day");
-#define TIMEOID                        1083
-
-/* OIDS 1100 - 1199 */
-DATA(insert OID = 1114 ( timestamp      PGNSP PGUID    8 FLOAT8PASSBYVAL b D f t \054 0        0 1115 timestamp_in timestamp_out timestamp_recv timestamp_send timestamptypmodin timestamptypmodout - d p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("date and time");
-#define TIMESTAMPOID   1114
-DATA(insert OID = 1115 ( _timestamp  PGNSP PGUID       -1 f b A f t \054 0 1114 0 array_in array_out array_recv array_send timestamptypmodin timestamptypmodout array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1182 ( _date          PGNSP PGUID    -1 f b A f t \054 0 1082 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1183 ( _time          PGNSP PGUID    -1 f b A f t \054 0 1083 0 array_in array_out array_recv array_send timetypmodin timetypmodout array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1184 ( timestamptz PGNSP PGUID       8 FLOAT8PASSBYVAL b D t t \054 0        0 1185 timestamptz_in timestamptz_out timestamptz_recv timestamptz_send timestamptztypmodin timestamptztypmodout - d p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("date and time with time zone");
-#define TIMESTAMPTZOID 1184
-DATA(insert OID = 1185 ( _timestamptz PGNSP PGUID -1 f b A f t \054 0  1184 0 array_in array_out array_recv array_send timestamptztypmodin timestamptztypmodout array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1186 ( interval       PGNSP PGUID 16 f b T t t \054 0        0 1187 interval_in interval_out interval_recv interval_send intervaltypmodin intervaltypmodout - d p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("@ <number> <units>, time interval");
-#define INTERVALOID            1186
-DATA(insert OID = 1187 ( _interval      PGNSP PGUID    -1 f b A f t \054 0 1186 0 array_in array_out array_recv array_send intervaltypmodin intervaltypmodout array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-
-/* OIDS 1200 - 1299 */
-DATA(insert OID = 1231 (  _numeric      PGNSP PGUID -1 f b A f t \054 0        1700 0 array_in array_out array_recv array_send numerictypmodin numerictypmodout array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1266 ( timetz                 PGNSP PGUID 12 f b D f t \054 0        0 1270 timetz_in timetz_out timetz_recv timetz_send timetztypmodin timetztypmodout - d p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("time of day with time zone");
-#define TIMETZOID              1266
-DATA(insert OID = 1270 ( _timetz        PGNSP PGUID -1 f b A f t \054 0        1266 0 array_in array_out array_recv array_send timetztypmodin timetztypmodout array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-
-/* OIDS 1500 - 1599 */
-DATA(insert OID = 1560 ( bit            PGNSP PGUID -1 f b V f t \054 0        0 1561 bit_in bit_out bit_recv bit_send bittypmodin bittypmodout - i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("fixed-length bit string");
-#define BITOID  1560
-DATA(insert OID = 1561 ( _bit           PGNSP PGUID -1 f b A f t \054 0        1560 0 array_in array_out array_recv array_send bittypmodin bittypmodout array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 1562 ( varbit                 PGNSP PGUID -1 f b V t t \054 0        0 1563 varbit_in varbit_out varbit_recv varbit_send varbittypmodin varbittypmodout - i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("variable-length bit string");
-#define VARBITOID        1562
-DATA(insert OID = 1563 ( _varbit        PGNSP PGUID -1 f b A f t \054 0        1562 0 array_in array_out array_recv array_send varbittypmodin varbittypmodout array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-
-/* OIDS 1600 - 1699 */
-
-/* OIDS 1700 - 1799 */
-DATA(insert OID = 1700 ( numeric          PGNSP PGUID -1 f b N f t \054 0      0 1231 numeric_in numeric_out numeric_recv numeric_send numerictypmodin numerictypmodout - i m f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("numeric(precision, decimal), arbitrary precision number");
-#define NUMERICOID             1700
-
-DATA(insert OID = 1790 ( refcursor        PGNSP PGUID -1 f b U f t \054 0      0 2201 textin textout textrecv textsend - - - i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("reference to cursor (portal name)");
-#define REFCURSOROID   1790
-
-/* OIDS 2200 - 2299 */
-DATA(insert OID = 2201 ( _refcursor    PGNSP PGUID -1 f b A f t \054 0 1790 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-
-DATA(insert OID = 2202 ( regprocedure  PGNSP PGUID     4 t b N f t \054 0       0 2207 regprocedurein regprocedureout regprocedurerecv regproceduresend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("registered procedure (with args)");
-#define REGPROCEDUREOID 2202
-
-DATA(insert OID = 2203 ( regoper          PGNSP PGUID  4 t b N f t \054 0       0 2208 regoperin regoperout regoperrecv regopersend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("registered operator");
-#define REGOPEROID             2203
-
-DATA(insert OID = 2204 ( regoperator   PGNSP PGUID     4 t b N f t \054 0       0 2209 regoperatorin regoperatorout regoperatorrecv regoperatorsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("registered operator (with args)");
-#define REGOPERATOROID 2204
-
-DATA(insert OID = 2205 ( regclass         PGNSP PGUID  4 t b N f t \054 0       0 2210 regclassin regclassout regclassrecv regclasssend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("registered class");
-#define REGCLASSOID            2205
-
-DATA(insert OID = 2206 ( regtype          PGNSP PGUID  4 t b N f t \054 0       0 2211 regtypein regtypeout regtyperecv regtypesend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("registered type");
-#define REGTYPEOID             2206
-
-DATA(insert OID = 4096 ( regrole          PGNSP PGUID  4 t b N f t \054 0       0 4097 regrolein regroleout regrolerecv regrolesend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("registered role");
-#define REGROLEOID             4096
-
-DATA(insert OID = 4089 ( regnamespace  PGNSP PGUID     4 t b N f t \054 0       0 4090 regnamespacein regnamespaceout regnamespacerecv regnamespacesend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("registered namespace");
-#define REGNAMESPACEOID                4089
-
-DATA(insert OID = 2207 ( _regprocedure PGNSP PGUID -1 f b A f t \054 0 2202 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 2208 ( _regoper         PGNSP PGUID -1 f b A f t \054 0 2203 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 2209 ( _regoperator  PGNSP PGUID -1 f b A f t \054 0 2204 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 2210 ( _regclass        PGNSP PGUID -1 f b A f t \054 0 2205 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 2211 ( _regtype         PGNSP PGUID -1 f b A f t \054 0 2206 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-#define REGTYPEARRAYOID 2211
-DATA(insert OID = 4097 ( _regrole         PGNSP PGUID -1 f b A f t \054 0 4096 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 4090 ( _regnamespace PGNSP PGUID -1 f b A f t \054 0 4089 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-
-/* uuid */
-DATA(insert OID = 2950 ( uuid                  PGNSP PGUID 16 f b U f t \054 0 0 2951 uuid_in uuid_out uuid_recv uuid_send - - - c p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("UUID datatype");
-#define UUIDOID 2950
-DATA(insert OID = 2951 ( _uuid                 PGNSP PGUID -1 f b A f t \054 0 2950 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-
-/* pg_lsn */
-DATA(insert OID = 3220 ( pg_lsn                        PGNSP PGUID 8 FLOAT8PASSBYVAL b U f t \054 0 0 3221 pg_lsn_in pg_lsn_out pg_lsn_recv pg_lsn_send - - - d p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("PostgreSQL LSN datatype");
-#define LSNOID                 3220
-DATA(insert OID = 3221 ( _pg_lsn                       PGNSP PGUID -1 f b A f t \054 0 3220 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-
-/* text search */
-DATA(insert OID = 3614 ( tsvector              PGNSP PGUID -1 f b U f t \054 0 0 3643 tsvectorin tsvectorout tsvectorrecv tsvectorsend - - ts_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("text representation for text search");
-#define TSVECTOROID            3614
-DATA(insert OID = 3642 ( gtsvector             PGNSP PGUID -1 f b U f t \054 0 0 3644 gtsvectorin gtsvectorout - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("GiST index internal text representation for text search");
-#define GTSVECTOROID   3642
-DATA(insert OID = 3615 ( tsquery               PGNSP PGUID -1 f b U f t \054 0 0 3645 tsqueryin tsqueryout tsqueryrecv tsquerysend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("query representation for text search");
-#define TSQUERYOID             3615
-DATA(insert OID = 3734 ( regconfig             PGNSP PGUID 4 t b N f t \054 0 0 3735 regconfigin regconfigout regconfigrecv regconfigsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("registered text search configuration");
-#define REGCONFIGOID   3734
-DATA(insert OID = 3769 ( regdictionary PGNSP PGUID 4 t b N f t \054 0 0 3770 regdictionaryin regdictionaryout regdictionaryrecv regdictionarysend - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("registered text search dictionary");
-#define REGDICTIONARYOID       3769
-
-DATA(insert OID = 3643 ( _tsvector             PGNSP PGUID -1 f b A f t \054 0 3614 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 3644 ( _gtsvector            PGNSP PGUID -1 f b A f t \054 0 3642 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 3645 ( _tsquery              PGNSP PGUID -1 f b A f t \054 0 3615 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 3735 ( _regconfig            PGNSP PGUID -1 f b A f t \054 0 3734 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 3770 ( _regdictionary PGNSP PGUID -1 f b A f t \054 0 3769 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-
-/* jsonb */
-DATA(insert OID = 3802 ( jsonb                 PGNSP PGUID -1 f b U f t \054 0 0 3807 jsonb_in jsonb_out jsonb_recv jsonb_send - - - i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("Binary JSON");
-#define JSONBOID 3802
-DATA(insert OID = 3807 ( _jsonb                        PGNSP PGUID -1 f b A f t \054 0 3802 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-
-DATA(insert OID = 2970 ( txid_snapshot PGNSP PGUID -1 f b U f t \054 0 0 2949 txid_snapshot_in txid_snapshot_out txid_snapshot_recv txid_snapshot_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("txid snapshot");
-DATA(insert OID = 2949 ( _txid_snapshot PGNSP PGUID -1 f b A f t \054 0 2970 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-
-/* range types */
-DATA(insert OID = 3904 ( int4range             PGNSP PGUID  -1 f r R f t \054 0 0 3905 range_in range_out range_recv range_send - - range_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("range of integers");
-#define INT4RANGEOID           3904
-DATA(insert OID = 3905 ( _int4range            PGNSP PGUID  -1 f b A f t \054 0 3904 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 3906 ( numrange              PGNSP PGUID  -1 f r R f t \054 0 0 3907 range_in range_out range_recv range_send - - range_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("range of numerics");
-DATA(insert OID = 3907 ( _numrange             PGNSP PGUID  -1 f b A f t \054 0 3906 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 3908 ( tsrange               PGNSP PGUID  -1 f r R f t \054 0 0 3909 range_in range_out range_recv range_send - - range_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("range of timestamps without time zone");
-DATA(insert OID = 3909 ( _tsrange              PGNSP PGUID  -1 f b A f t \054 0 3908 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 3910 ( tstzrange             PGNSP PGUID  -1 f r R f t \054 0 0 3911 range_in range_out range_recv range_send - - range_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("range of timestamps with time zone");
-DATA(insert OID = 3911 ( _tstzrange            PGNSP PGUID  -1 f b A f t \054 0 3910 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 3912 ( daterange             PGNSP PGUID  -1 f r R f t \054 0 0 3913 range_in range_out range_recv range_send - - range_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("range of dates");
-DATA(insert OID = 3913 ( _daterange            PGNSP PGUID  -1 f b A f t \054 0 3912 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ ));
-DATA(insert OID = 3926 ( int8range             PGNSP PGUID  -1 f r R f t \054 0 0 3927 range_in range_out range_recv range_send - - range_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-DESCR("range of bigints");
-DATA(insert OID = 3927 ( _int8range            PGNSP PGUID  -1 f b A f t \054 0 3926 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
+#ifdef EXPOSE_TO_CLIENT_CODE
 
 /*
- * pseudo-types
- *
- * types with typtype='p' represent various special cases in the type system.
- *
- * These cannot be used to define table columns, but are valid as function
- * argument and result types (if supported by the function's implementation
- * language).
- *
- * Note: cstring is a borderline case; it is still considered a pseudo-type,
- * but there is now support for it in records and arrays.  Perhaps we should
- * just treat it as a regular base type?
- */
-DATA(insert OID = 2249 ( record                        PGNSP PGUID -1 f p P f t \054 0 0 2287 record_in record_out record_recv record_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ ));
-#define RECORDOID              2249
-DATA(insert OID = 2287 ( _record               PGNSP PGUID -1 f p P f t \054 0 2249 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ ));
-#define RECORDARRAYOID 2287
-DATA(insert OID = 2275 ( cstring               PGNSP PGUID -2 f p P f t \054 0 0 1263 cstring_in cstring_out cstring_recv cstring_send - - - c p f 0 -1 0 0 _null_ _null_ _null_ ));
-#define CSTRINGOID             2275
-DATA(insert OID = 2276 ( any                   PGNSP PGUID  4 t p P f t \054 0 0 0 any_in any_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-#define ANYOID                 2276
-DATA(insert OID = 2277 ( anyarray              PGNSP PGUID -1 f p P f t \054 0 0 0 anyarray_in anyarray_out anyarray_recv anyarray_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ ));
-#define ANYARRAYOID            2277
-DATA(insert OID = 2278 ( void                  PGNSP PGUID  4 t p P f t \054 0 0 0 void_in void_out void_recv void_send - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-#define VOIDOID                        2278
-DATA(insert OID = 2279 ( trigger               PGNSP PGUID  4 t p P f t \054 0 0 0 trigger_in trigger_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-#define TRIGGEROID             2279
-DATA(insert OID = 3838 ( event_trigger         PGNSP PGUID  4 t p P f t \054 0 0 0 event_trigger_in event_trigger_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-#define EVTTRIGGEROID          3838
-DATA(insert OID = 2280 ( language_handler      PGNSP PGUID  4 t p P f t \054 0 0 0 language_handler_in language_handler_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-#define LANGUAGE_HANDLEROID            2280
-DATA(insert OID = 2281 ( internal              PGNSP PGUID  SIZEOF_POINTER t p P f t \054 0 0 0 internal_in internal_out - - - - - ALIGNOF_POINTER p f 0 -1 0 0 _null_ _null_ _null_ ));
-#define INTERNALOID            2281
-DATA(insert OID = 2282 ( opaque                        PGNSP PGUID  4 t p P f t \054 0 0 0 opaque_in opaque_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-#define OPAQUEOID              2282
-DATA(insert OID = 2283 ( anyelement            PGNSP PGUID  4 t p P f t \054 0 0 0 anyelement_in anyelement_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-#define ANYELEMENTOID  2283
-DATA(insert OID = 2776 ( anynonarray   PGNSP PGUID  4 t p P f t \054 0 0 0 anynonarray_in anynonarray_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-#define ANYNONARRAYOID 2776
-DATA(insert OID = 3500 ( anyenum               PGNSP PGUID  4 t p P f t \054 0 0 0 anyenum_in anyenum_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-#define ANYENUMOID             3500
-DATA(insert OID = 3115 ( fdw_handler   PGNSP PGUID  4 t p P f t \054 0 0 0 fdw_handler_in fdw_handler_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-#define FDW_HANDLEROID 3115
-DATA(insert OID = 325 ( index_am_handler       PGNSP PGUID  4 t p P f t \054 0 0 0 index_am_handler_in index_am_handler_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-#define INDEX_AM_HANDLEROID 325
-DATA(insert OID = 3310 ( tsm_handler   PGNSP PGUID  4 t p P f t \054 0 0 0 tsm_handler_in tsm_handler_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ ));
-#define TSM_HANDLEROID 3310
-DATA(insert OID = 3831 ( anyrange              PGNSP PGUID  -1 f p P f t \054 0 0 0 anyrange_in anyrange_out - - - - - d x f 0 -1 0 0 _null_ _null_ _null_ ));
-#define ANYRANGEOID            3831
-
-
-/*
- * macros
+ * macros for values of poor-mans-enumerated-type columns
  */
 #define  TYPTYPE_BASE          'b' /* base type (ordinary scalar type) */
 #define  TYPTYPE_COMPOSITE     'c' /* composite (e.g., table's rowtype) */
@@ -749,4 +280,6 @@ DATA(insert OID = 3831 ( anyrange           PGNSP PGUID  -1 f p P f t \054 0 0 0 anyrange
         (typid) == ANYENUMOID || \
         (typid) == ANYRANGEOID)
 
+#endif                                                 /* EXPOSE_TO_CLIENT_CODE */
+
 #endif                                                 /* PG_TYPE_H */
index 686562a4d2db1a71ed6f135063f356013462e6d0..6efbed0a9d448d50a8ca836dd646d17c2c611191 100644 (file)
@@ -9,8 +9,8 @@
  * src/include/catalog/pg_user_mapping.h
  *
  * NOTES
- *       the genbki.pl script reads this file and generates .bki
- *       information from the DATA() statements.
+ *       The Catalog.pm module reads this file and derives schema
+ *       information.
  *
  *-------------------------------------------------------------------------
  */
 #define PG_USER_MAPPING_H
 
 #include "catalog/genbki.h"
+#include "catalog/pg_user_mapping_d.h"
 
 /* ----------------
  *             pg_user_mapping definition.  cpp turns this into
  *             typedef struct FormData_pg_user_mapping
  * ----------------
  */
-#define UserMappingRelationId  1418
-
-CATALOG(pg_user_mapping,1418)
+CATALOG(pg_user_mapping,1418,UserMappingRelationId)
 {
        Oid                     umuser;                 /* Id of the user, InvalidOid if PUBLIC is
                                                                 * wanted */
@@ -44,14 +43,4 @@ CATALOG(pg_user_mapping,1418)
  */
 typedef FormData_pg_user_mapping *Form_pg_user_mapping;
 
-/* ----------------
- *             compiler constants for pg_user_mapping
- * ----------------
- */
-
-#define Natts_pg_user_mapping                          3
-#define Anum_pg_user_mapping_umuser                    1
-#define Anum_pg_user_mapping_umserver          2
-#define Anum_pg_user_mapping_umoptions         3
-
 #endif                                                 /* PG_USER_MAPPING_H */
diff --git a/src/include/catalog/reformat_dat_file.pl b/src/include/catalog/reformat_dat_file.pl
new file mode 100644 (file)
index 0000000..bbceb16
--- /dev/null
@@ -0,0 +1,311 @@
+#!/usr/bin/perl -w
+#----------------------------------------------------------------------
+#
+# reformat_dat_file.pl
+#    Perl script that reads in a catalog data file and writes out
+#    a functionally equivalent file in a standard format.
+#
+#    Metadata entries (if any) come first, with normal attributes
+#    starting on the following line, in the same order they would be in
+#    the corresponding table. Comments and non-consecutive blank lines
+#    are preserved.
+#
+# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/reformat_dat_file.pl
+#
+#----------------------------------------------------------------------
+
+use Catalog;
+
+use strict;
+use warnings;
+
+my @input_files;
+my $output_path = '';
+my $full_tuples = 0;
+
+# Process command line switches.
+while (@ARGV)
+{
+       my $arg = shift @ARGV;
+       if ($arg !~ /^-/)
+       {
+               push @input_files, $arg;
+       }
+       elsif ($arg =~ /^-o/)
+       {
+               $output_path = length($arg) > 2 ? substr($arg, 2) : shift @ARGV;
+       }
+       elsif ($arg eq '--full-tuples')
+       {
+               $full_tuples = 1;
+       }
+       else
+       {
+               usage();
+       }
+}
+
+# Sanity check arguments.
+die "No input files.\n"
+  if !@input_files;
+
+# Make sure output_path ends in a slash.
+if ($output_path ne '' && substr($output_path, -1) ne '/')
+{
+       $output_path .= '/';
+}
+
+# Metadata of a catalog entry
+my @METADATA = ('oid', 'oid_symbol', 'descr');
+
+# Read all the input files into internal data structures.
+# We pass data file names as arguments and then look for matching
+# headers to parse the schema from.
+my %catalogs;
+my %catalog_data;
+my @catnames;
+foreach my $datfile (@input_files)
+{
+       $datfile =~ /(.+)\.dat$/
+         or die "Input files need to be data (.dat) files.\n";
+
+       my $header = "$1.h";
+       die "There in no header file corresponding to $datfile"
+         if ! -e $header;
+
+       my $catalog = Catalog::ParseHeader($header);
+       my $catname = $catalog->{catname};
+       my $schema  = $catalog->{columns};
+
+       push @catnames, $catname;
+       $catalogs{$catname} = $catalog;
+
+       $catalog_data{$catname} = Catalog::ParseData($datfile, $schema, 1);
+}
+
+########################################################################
+# At this point, we have read all the data. If you are modifying this
+# script for bulk editing, this is a good place to build lookup tables,
+# if you need to. In the following example, the "next if !ref $row"
+# check below is a hack to filter out non-hash objects. This is because
+# we build the lookup tables from data that we read using the
+# "preserve_formatting" parameter.
+#
+##Index access method lookup.
+#my %amnames;
+#foreach my $row (@{ $catalog_data{pg_am} })
+#{
+#      next if !ref $row;
+#      $amnames{$row->{oid}} = $row->{amname};
+#}
+########################################################################
+
+# Write the data.
+foreach my $catname (@catnames)
+{
+       my $catalog = $catalogs{$catname};
+       my @attnames;
+       my $schema = $catalog->{columns};
+       my $prev_blank = 0;
+
+       foreach my $column (@$schema)
+       {
+               my $attname = $column->{name};
+               push @attnames, $attname;
+       }
+
+       # Overwrite .dat files in place, since they are under version control.
+       my $datfile = "$output_path$catname.dat";
+       open my $dat, '>', $datfile
+         or die "can't open $datfile: $!";
+
+       # Write the data.
+       foreach my $data (@{ $catalog_data{$catname} })
+       {
+
+               # Hash ref representing a data entry.
+               if (ref $data eq 'HASH')
+               {
+                       my %values = %$data;
+
+                       ############################################################
+                       # At this point we have the full tuple in memory as a hash
+                       # and can do any operations we want. As written, it only
+                       # removes default values, but this script can be adapted to
+                       # do one-off bulk-editing.
+                       ############################################################
+
+                       if (!$full_tuples)
+                       {
+                               strip_default_values(\%values, $schema, $catname);
+                       }
+
+                       print $dat "{";
+
+                       # Separate out metadata fields for readability.
+                       my $metadata_str = format_hash(\%values, @METADATA);
+                       if ($metadata_str)
+                       {
+                               print $dat $metadata_str;
+
+                               # User attributes start on next line.
+                               print $dat ",\n ";
+                       }
+
+                       my $data_str = format_hash(\%values, @attnames);
+                       print $dat $data_str;
+                       print $dat " },\n";
+                       $prev_blank = 0;
+               }
+
+               # Strings -- handle accordingly or ignore. It was necessary to
+               # ignore bare commas during the initial data conversion. This
+               # should be a no-op now, but we may as well keep that behavior.
+               # Note: We don't update $prev_blank if we ignore a string.
+
+               # Preserve non-consecutive blank lines.
+               elsif ($data =~ /^\s*$/)
+               {
+                       next if $prev_blank;
+                       print $dat "\n";
+                       $prev_blank = 1;
+               }
+
+               # Preserve comments or brackets that are on their own line.
+               elsif ($data =~ /^\s*(\[|\]|#.*?)\s*$/)
+               {
+                       print $dat "$1\n";
+                       $prev_blank = 0;
+               }
+       }
+       close $dat;
+}
+
+# Leave values out if there is a matching default.
+sub strip_default_values
+{
+       my ($row, $schema, $catname) = @_;
+
+       foreach my $column (@$schema)
+       {
+               my $attname = $column->{name};
+               die "strip_default_values: $catname.$attname undefined\n"
+                 if ! defined $row->{$attname};
+
+               # Delete values that match defaults.
+               if (defined $column->{default}
+                       and ($row->{$attname} eq $column->{default}))
+               {
+                       delete $row->{$attname};
+               }
+
+               # Also delete pg_proc.pronargs, since that can be recomputed.
+               if ($catname eq 'pg_proc' && $attname eq 'pronargs' &&
+                       defined($row->{proargtypes}))
+               {
+                       delete $row->{$attname};
+               }
+       }
+}
+
+# Format the individual elements of a Perl hash into a valid string
+# representation. We do this ourselves, rather than use native Perl
+# facilities, so we can keep control over the exact formatting of the
+# data files.
+sub format_hash
+{
+       my $data = shift;
+       my @orig_attnames = @_;
+
+       # Copy attname to new array if it has a value, so we can determine
+       # the last populated element. We do this because we may have default
+       # values or empty metadata fields.
+       my @attnames;
+       foreach my $orig_attname (@orig_attnames)
+       {
+               push @attnames, $orig_attname
+                 if defined $data->{$orig_attname};
+       }
+
+       # When calling this function, we ether have an open-bracket or a
+       # leading space already.
+       my $char_count = 1;
+
+       my $threshold;
+       my $hash_str = '';
+       my $element_count = 0;
+
+       foreach my $attname (@attnames)
+       {
+               $element_count++;
+
+               # To limit the line to 80 chars, we need to account for the
+               # trailing characters.
+               if ($element_count == $#attnames + 1)
+               {
+                       # Last element, so allow space for ' },'
+                       $threshold = 77;
+               }
+               else
+               {
+                       # Just need space for trailing comma
+                       $threshold = 79;
+               }
+
+               if ($element_count > 1)
+               {
+                       $hash_str .= ',';
+                       $char_count++;
+               }
+
+               my $value = $data->{$attname};
+
+               # Escape single quotes.
+               $value =~ s/'/\\'/g;
+
+               # Include a leading space in the key-value pair, since this will
+               # always go after either a comma or an additional padding space on
+               # the next line.
+               my $element = " $attname => '$value'";
+               my $element_length = length($element);
+
+               # If adding the element to the current line would expand the line
+               # beyond 80 chars, put it on the next line. We don't do this for
+               # the first element, since that would create a blank line.
+               if ($element_count > 1 and $char_count + $element_length > $threshold)
+               {
+
+                       # Put on next line with an additional space preceding. There
+                       # are now two spaces in front of the key-value pair, lining
+                       # it up with the line above it.
+                       $hash_str .= "\n $element";
+                       $char_count = $element_length + 1;
+               }
+               else
+               {
+                       $hash_str .= $element;
+                       $char_count += $element_length;
+               }
+       }
+       return $hash_str;
+}
+
+sub usage
+{
+       die <<EOM;
+Usage: reformat_dat_file.pl [options] datafile...
+
+Options:
+    -o               output path
+    --full-tuples    write out full tuples, including default values
+
+Expects a list of .dat files as arguments.
+
+Make sure location of Catalog.pm is passed to the perl interpreter:
+perl -I /path/to/Catalog.pm/ ...
+
+EOM
+}
index f6387ae143f9380cf026a040f834a5ccccbdfbdd..3db39b8f86278b0e7386b441ae56177aa557461a 100644 (file)
@@ -30,7 +30,7 @@ extern void BootstrapToastTable(char *relName,
 
 /*
  * This macro is just to keep the C compiler from spitting up on the
- * upcoming commands for genbki.pl.
+ * upcoming commands for Catalog.pm.
  */
 #define DECLARE_TOAST(name,toastoid,indexoid) extern int no_such_variable
 
index 97769d33d09907fb5ad561b2ba4f3ca1dacd0c56..f71222d50d1623324e9b4130be4dafe8493d7d28 100755 (executable)
@@ -25,12 +25,12 @@ export FIRSTOBJECTID
 
 # this part (down to the uniq step) should match the duplicate_oids script
 # note: we exclude BKI_BOOTSTRAP relations since they are expected to have
-# matching DATA lines in pg_class.h and pg_type.h
+# matching data entries in pg_class.dat and pg_type.dat
 
-cat pg_*.h toasting.h indexing.h | \
+cat pg_*.h pg_*.dat toasting.h indexing.h |
 egrep -v -e '^CATALOG\(.*BKI_BOOTSTRAP' | \
-sed -n -e 's/^DATA(insert *OID *= *\([0-9][0-9]*\).*$/\1/p' \
-       -e 's/^CATALOG([^,]*, *\([0-9][0-9]*\).*BKI_ROWTYPE_OID(\([0-9][0-9]*\)).*$/\1,\2/p' \
+sed -n -e 's/.*\boid *=> *'\''\([0-9][0-9]*\)'\''.*$/\1/p' \
+       -e 's/^CATALOG([^,]*, *\([0-9][0-9]*\).*BKI_ROWTYPE_OID(\([0-9][0-9]*\),.*$/\1,\2/p' \
        -e 's/^CATALOG([^,]*, *\([0-9][0-9]*\).*$/\1/p' \
        -e 's/^DECLARE_INDEX([^,]*, *\([0-9][0-9]*\).*$/\1/p' \
        -e 's/^DECLARE_UNIQUE_INDEX([^,]*, *\([0-9][0-9]*\).*$/\1/p' \
index f75c8878882b026e368cae595dd89569619f57fa..79a6cf8daaa3c0f4cb536c08ef1a4f14941e1fd5 100644 (file)
@@ -1,9 +1,7 @@
 /*-------------------------------------------------------------------------
  *
  * pg_type.h
- *       Hard-wired knowledge about some standard type OIDs.
- *
- * XXX keep this in sync with src/include/catalog/pg_type.h
+ *       Interface to generated type OID symbols.
  *
  * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
 #ifndef PG_TYPE_H
 #define PG_TYPE_H
 
-#define BOOLOID                        16
-#define BYTEAOID               17
-#define CHAROID                        18
-#define NAMEOID                        19
-#define INT8OID                        20
-#define INT2OID                        21
-#define INT2VECTOROID  22
-#define INT4OID                        23
-#define REGPROCOID             24
-#define TEXTOID                        25
-#define OIDOID                 26
-#define TIDOID         27
-#define XIDOID 28
-#define CIDOID 29
-#define OIDVECTOROID   30
-#define POINTOID               600
-#define LSEGOID                        601
-#define PATHOID                        602
-#define BOXOID                 603
-#define POLYGONOID             604
-#define LINEOID                        628
-#define FLOAT4OID 700
-#define FLOAT8OID 701
-#define ABSTIMEOID             702
-#define RELTIMEOID             703
-#define TINTERVALOID   704
-#define UNKNOWNOID             705
-#define CIRCLEOID              718
-#define CASHOID 790
-#define INETOID 869
-#define CIDROID 650
-#define BPCHAROID              1042
-#define VARCHAROID             1043
-#define DATEOID                        1082
-#define TIMEOID                        1083
-#define TIMESTAMPOID   1114
-#define TIMESTAMPTZOID 1184
-#define INTERVALOID            1186
-#define TIMETZOID              1266
-#define BITOID  1560
-#define VARBITOID        1562
-#define NUMERICOID             1700
-#define REFCURSOROID   1790
-#define REGPROCEDUREOID 2202
-#define REGOPEROID             2203
-#define REGOPERATOROID 2204
-#define REGCLASSOID            2205
-#define REGTYPEOID             2206
-#define REGROLEOID             4096
-#define REGNAMESPACEOID                4089
-#define REGTYPEARRAYOID 2211
-#define UUIDOID 2950
-#define LSNOID                 3220
-#define TSVECTOROID            3614
-#define GTSVECTOROID   3642
-#define TSQUERYOID             3615
-#define REGCONFIGOID   3734
-#define REGDICTIONARYOID       3769
-#define JSONBOID 3802
-#define INT4RANGEOID           3904
+#include "catalog/pg_type_d.h"
 
 #endif                                                 /* PG_TYPE_H */
index 36e9fd70d32746de4c7b179aaea76395c56b8d18..b267c19438f3795d80401a9e3b5d342ecaf343bd 100644 (file)
@@ -264,15 +264,23 @@ s{PG_VERSION_STR "[^"]+"}{PG_VERSION_STR "PostgreSQL $self->{strver}$extraver, c
                "src/interfaces/ecpg/pgtypeslib/exports.txt",
                "LIBPGTYPES");
 
+       chdir('src/backend/utils');
+       my $pg_language_dat = '../../../src/include/catalog/pg_language.dat';
+       my $pg_proc_dat = '../../../src/include/catalog/pg_proc.dat';
        if (IsNewer(
-                       'src/backend/utils/fmgrtab.c', 'src/include/catalog/pg_proc.h'))
+                       'fmgrtab.c', $pg_language_dat)
+               || IsNewer(
+                       'fmgrtab.c', $pg_proc_dat)
+               || IsNewer(
+                       'fmgrtab.c', '../../../src/include/access/transam.h')
+               )
        {
                print "Generating fmgrtab.c, fmgroids.h, fmgrprotos.h...\n";
-               chdir('src/backend/utils');
                system(
-"perl -I ../catalog Gen_fmgrtab.pl -I../../../src/include/ ../../../src/include/catalog/pg_proc.h");
-               chdir('../../..');
+"perl -I ../catalog Gen_fmgrtab.pl -I../../../src/include/ $pg_language_dat $pg_proc_dat");
        }
+       chdir('../../..');
+
        if (IsNewer(
                        'src/include/utils/fmgroids.h',
                        'src/backend/utils/fmgroids.h'))
@@ -456,23 +464,38 @@ EOF
 
        my $mf = Project::read_file('src/backend/catalog/Makefile');
        $mf =~ s{\\\r?\n}{}g;
-       $mf =~ /^POSTGRES_BKI_SRCS\s*:?=[^,]+,(.*)\)$/gm
-         || croak "Could not find POSTGRES_BKI_SRCS in Makefile\n";
-       my @allbki = split /\s+/, $1;
-       foreach my $bki (@allbki)
+       $mf =~ /^CATALOG_HEADERS\s*:?=(.*)$/gm
+         || croak "Could not find CATALOG_HEADERS in Makefile\n";
+       my @bki_srcs = split /\s+/, $1;
+       push @bki_srcs, 'toasting.h';
+       push @bki_srcs, 'indexing.h';
+       $mf =~ /^POSTGRES_BKI_DATA\s*:?=[^,]+,(.*)\)$/gm
+         || croak "Could not find POSTGRES_BKI_DATA in Makefile\n";
+       my @bki_data = split /\s+/, $1;
+       foreach my $bki (@bki_srcs, @bki_data)
        {
                next if $bki eq "";
                if (IsNewer(
                                'src/backend/catalog/postgres.bki',
                                "src/include/catalog/$bki"))
                {
-                       print "Generating postgres.bki and schemapg.h...\n";
+                       print "Generating BKI files and symbol definition headers...\n";
                        chdir('src/backend/catalog');
-                       my $bki_srcs = join(' ../../../src/include/catalog/', @allbki);
-                       system(
-"perl genbki.pl -I../../../src/include/catalog --set-version=$self->{majorver} $bki_srcs"
-                       );
+                       my $bki_srcs = join(' ../../../src/include/catalog/', @bki_srcs);
+                       system("perl genbki.pl --set-version=$self->{majorver} $bki_srcs");
                        chdir('../../..');
+
+                       # Copy generated headers to include directory.
+                       opendir(my $dh, 'src/backend/catalog/')
+                         || die "Can't opendir src/backend/catalog/ $!";
+                       my @def_headers = grep { /pg_\w+_d\.h$/  } readdir($dh);
+                       closedir $dh;
+                       foreach my $def_header (@def_headers)
+                       {
+                               copyFile(
+                               "src/backend/catalog/$def_header",
+                               "src/include/catalog/$def_header");
+                       }
                        copyFile(
                                'src/backend/catalog/schemapg.h',
                                'src/include/catalog/schemapg.h');
index 0a88b5253604d1b5c90d9b5862a7d7ff924814bf..b0524964fdf3e0701b8ed0ab12364903b9d6ec4a 100755 (executable)
@@ -48,6 +48,7 @@ if exist src\include\utils\fmgrprotos.h del /q src\include\utils\fmgrprotos.h
 if exist src\include\storage\lwlocknames.h del /q src\include\storage\lwlocknames.h
 if exist src\include\utils\probes.h del /q src\include\utils\probes.h
 if exist src\include\catalog\schemapg.h del /q src\include\catalog\schemapg.h
+if exist src\include\catalog\pg_*_d.h del /q src\include\catalog\pg_*_d.h
 if exist doc\src\sgml\version.sgml del /q doc\src\sgml\version.sgml
 
 if %DIST%==1 if exist src\backend\utils\fmgroids.h del /q src\backend\utils\fmgroids.h
@@ -67,6 +68,7 @@ if %DIST%==1 if exist src\backend\catalog\postgres.bki del /q src\backend\catalo
 if %DIST%==1 if exist src\backend\catalog\postgres.description del /q src\backend\catalog\postgres.description
 if %DIST%==1 if exist src\backend\catalog\postgres.shdescription del /q src\backend\catalog\postgres.shdescription
 if %DIST%==1 if exist src\backend\catalog\schemapg.h del /q src\backend\catalog\schemapg.h
+if %DIST%==1 if exist src\backend\catalog\pg_*_d.h del /q src\backend\catalog\pg_*_d.h
 if %DIST%==1 if exist src\backend\parser\scan.c del /q src\backend\parser\scan.c
 if %DIST%==1 if exist src\backend\parser\gram.c del /q src\backend\parser\gram.c
 if %DIST%==1 if exist src\backend\bootstrap\bootscanner.c del /q src\backend\bootstrap\bootscanner.c
index 37dfccab6bd675f4c6ddda9bf2551528293ca361..06a38261c6b0db3be2c1d1dc6cde2a731b3bb811 100755 (executable)
@@ -213,8 +213,8 @@ sub pre_indent
 s!(^#ifdef[ \t]+__cplusplus.*\nextern[ \t]+"C"[ \t]*\n)\{[ \t]*$!$1$extern_c_start!gm;
        $source =~ s!(^#ifdef[ \t]+__cplusplus.*\n)\}[ \t]*$!$1$extern_c_stop!gm;
 
-       # Protect backslashes in DATA() and wrapping in CATALOG()
-       $source =~ s!^((DATA|CATALOG)\(.*)$!/*$1*/!gm;
+       # Protect wrapping in CATALOG()
+       $source =~ s!^(CATALOG\(.*)$!/*$1*/!gm;
 
        return $source;
 }
@@ -225,8 +225,8 @@ sub post_indent
        my $source          = shift;
        my $source_filename = shift;
 
-       # Restore DATA/CATALOG lines
-       $source =~ s!^/\*((DATA|CATALOG)\(.*)\*/$!$1!gm;
+       # Restore CATALOG lines
+       $source =~ s!^/\*(CATALOG\(.*)\*/$!$1!gm;
 
        # Put back braces for extern "C"
        $source =~ s!^/\* Open extern "C" \*/$!{!gm;