 src/include/catalog/pg_amop.dat      | 72 ++++++++++++++++++++++++++++++++++++
 src/include/catalog/pg_amproc.dat    | 23 ++++++++++++
 src/include/catalog/pg_authid.dat    | 12 +++---
 src/include/catalog/pg_cast.dat      |  6 +++
 src/include/catalog/pg_class.dat     | 11 +-----
 src/include/catalog/pg_database.dat  |  5 ++-
 src/include/catalog/pg_namespace.dat |  2 -
 src/include/catalog/pg_opclass.dat   |  9 +++++
 src/include/catalog/pg_operator.dat  |  3 +-
 src/include/catalog/pg_proc.dat      | 45 ++++++----------------
 src/include/catalog/pg_range.dat     |  2 -
 src/include/catalog/pg_type.dat      | 44 +++++-----------------
 12 files changed, 145 insertions(+), 89 deletions(-)

diff --git a/src/include/catalog/pg_amop.dat b/src/include/catalog/pg_amop.dat
new file mode 100644
index bec8094..3d1a8b9
*** a/src/include/catalog/pg_amop.dat
--- b/src/include/catalog/pg_amop.dat
***************
*** 9,56 ****
--- 9,64 ----
  { opf => '1976', lt => '21', rt => '21', str => '3', oper => '94', am => '403' },
  { opf => '1976', lt => '21', rt => '21', str => '4', oper => '524', am => '403' },
  { opf => '1976', lt => '21', rt => '21', str => '5', oper => '520', am => '403' },
+ 
  # crosstype operators int24
  { opf => '1976', lt => '21', rt => '23', str => '1', oper => '534', am => '403' },
  { opf => '1976', lt => '21', rt => '23', str => '2', oper => '540', am => '403' },
  { opf => '1976', lt => '21', rt => '23', str => '3', oper => '532', am => '403' },
  { opf => '1976', lt => '21', rt => '23', str => '4', oper => '542', am => '403' },
  { opf => '1976', lt => '21', rt => '23', str => '5', oper => '536', am => '403' },
+ 
  # crosstype operators int28
  { opf => '1976', lt => '21', rt => '20', str => '1', oper => '1864', am => '403' },
  { opf => '1976', lt => '21', rt => '20', str => '2', oper => '1866', am => '403' },
  { opf => '1976', lt => '21', rt => '20', str => '3', oper => '1862', am => '403' },
  { opf => '1976', lt => '21', rt => '20', str => '4', oper => '1867', am => '403' },
  { opf => '1976', lt => '21', rt => '20', str => '5', oper => '1865', am => '403' },
+ 
  # default operators int4
  { opf => '1976', lt => '23', rt => '23', str => '1', oper => '97', am => '403' },
  { opf => '1976', lt => '23', rt => '23', str => '2', oper => '523', am => '403' },
  { opf => '1976', lt => '23', rt => '23', str => '3', oper => '96', am => '403' },
  { opf => '1976', lt => '23', rt => '23', str => '4', oper => '525', am => '403' },
  { opf => '1976', lt => '23', rt => '23', str => '5', oper => '521', am => '403' },
+ 
  # crosstype operators int42
  { opf => '1976', lt => '23', rt => '21', str => '1', oper => '535', am => '403' },
  { opf => '1976', lt => '23', rt => '21', str => '2', oper => '541', am => '403' },
  { opf => '1976', lt => '23', rt => '21', str => '3', oper => '533', am => '403' },
  { opf => '1976', lt => '23', rt => '21', str => '4', oper => '543', am => '403' },
  { opf => '1976', lt => '23', rt => '21', str => '5', oper => '537', am => '403' },
+ 
  # crosstype operators int48
  { opf => '1976', lt => '23', rt => '20', str => '1', oper => '37', am => '403' },
  { opf => '1976', lt => '23', rt => '20', str => '2', oper => '80', am => '403' },
  { opf => '1976', lt => '23', rt => '20', str => '3', oper => '15', am => '403' },
  { opf => '1976', lt => '23', rt => '20', str => '4', oper => '82', am => '403' },
  { opf => '1976', lt => '23', rt => '20', str => '5', oper => '76', am => '403' },
+ 
  # default operators int8
  { opf => '1976', lt => '20', rt => '20', str => '1', oper => '412', am => '403' },
  { opf => '1976', lt => '20', rt => '20', str => '2', oper => '414', am => '403' },
  { opf => '1976', lt => '20', rt => '20', str => '3', oper => '410', am => '403' },
  { opf => '1976', lt => '20', rt => '20', str => '4', oper => '415', am => '403' },
  { opf => '1976', lt => '20', rt => '20', str => '5', oper => '413', am => '403' },
+ 
  # crosstype operators int82
  { opf => '1976', lt => '20', rt => '21', str => '1', oper => '1870', am => '403' },
  { opf => '1976', lt => '20', rt => '21', str => '2', oper => '1872', am => '403' },
  { opf => '1976', lt => '20', rt => '21', str => '3', oper => '1868', am => '403' },
  { opf => '1976', lt => '20', rt => '21', str => '4', oper => '1873', am => '403' },
  { opf => '1976', lt => '20', rt => '21', str => '5', oper => '1871', am => '403' },
+ 
  # crosstype operators int84
  { opf => '1976', lt => '20', rt => '23', str => '1', oper => '418', am => '403' },
  { opf => '1976', lt => '20', rt => '23', str => '2', oper => '420', am => '403' },
***************
*** 90,107 ****
--- 98,118 ----
  { opf => '1970', lt => '700', rt => '700', str => '3', oper => '620', am => '403' },
  { opf => '1970', lt => '700', rt => '700', str => '4', oper => '625', am => '403' },
  { opf => '1970', lt => '700', rt => '700', str => '5', oper => '623', am => '403' },
+ 
  # crosstype operators float48
  { opf => '1970', lt => '700', rt => '701', str => '1', oper => '1122', am => '403' },
  { opf => '1970', lt => '700', rt => '701', str => '2', oper => '1124', am => '403' },
  { opf => '1970', lt => '700', rt => '701', str => '3', oper => '1120', am => '403' },
  { opf => '1970', lt => '700', rt => '701', str => '4', oper => '1125', am => '403' },
  { opf => '1970', lt => '700', rt => '701', str => '5', oper => '1123', am => '403' },
+ 
  # default operators float8
  { opf => '1970', lt => '701', rt => '701', str => '1', oper => '672', am => '403' },
  { opf => '1970', lt => '701', rt => '701', str => '2', oper => '673', am => '403' },
  { opf => '1970', lt => '701', rt => '701', str => '3', oper => '670', am => '403' },
  { opf => '1970', lt => '701', rt => '701', str => '4', oper => '675', am => '403' },
  { opf => '1970', lt => '701', rt => '701', str => '5', oper => '674', am => '403' },
+ 
  # crosstype operators float84
  { opf => '1970', lt => '701', rt => '700', str => '1', oper => '1132', am => '403' },
  { opf => '1970', lt => '701', rt => '700', str => '2', oper => '1134', am => '403' },
***************
*** 165,212 ****
--- 176,231 ----
  { opf => '434', lt => '1082', rt => '1082', str => '3', oper => '1093', am => '403' },
  { opf => '434', lt => '1082', rt => '1082', str => '4', oper => '1098', am => '403' },
  { opf => '434', lt => '1082', rt => '1082', str => '5', oper => '1097', am => '403' },
+ 
  # crosstype operators vs timestamp
  { opf => '434', lt => '1082', rt => '1114', str => '1', oper => '2345', am => '403' },
  { opf => '434', lt => '1082', rt => '1114', str => '2', oper => '2346', am => '403' },
  { opf => '434', lt => '1082', rt => '1114', str => '3', oper => '2347', am => '403' },
  { opf => '434', lt => '1082', rt => '1114', str => '4', oper => '2348', am => '403' },
  { opf => '434', lt => '1082', rt => '1114', str => '5', oper => '2349', am => '403' },
+ 
  # crosstype operators vs timestamptz
  { opf => '434', lt => '1082', rt => '1184', str => '1', oper => '2358', am => '403' },
  { opf => '434', lt => '1082', rt => '1184', str => '2', oper => '2359', am => '403' },
  { opf => '434', lt => '1082', rt => '1184', str => '3', oper => '2360', am => '403' },
  { opf => '434', lt => '1082', rt => '1184', str => '4', oper => '2361', am => '403' },
  { opf => '434', lt => '1082', rt => '1184', str => '5', oper => '2362', am => '403' },
+ 
  # default operators timestamp
  { opf => '434', lt => '1114', rt => '1114', str => '1', oper => '2062', am => '403' },
  { opf => '434', lt => '1114', rt => '1114', str => '2', oper => '2063', am => '403' },
  { opf => '434', lt => '1114', rt => '1114', str => '3', oper => '2060', am => '403' },
  { opf => '434', lt => '1114', rt => '1114', str => '4', oper => '2065', am => '403' },
  { opf => '434', lt => '1114', rt => '1114', str => '5', oper => '2064', am => '403' },
+ 
  # crosstype operators vs date
  { opf => '434', lt => '1114', rt => '1082', str => '1', oper => '2371', am => '403' },
  { opf => '434', lt => '1114', rt => '1082', str => '2', oper => '2372', am => '403' },
  { opf => '434', lt => '1114', rt => '1082', str => '3', oper => '2373', am => '403' },
  { opf => '434', lt => '1114', rt => '1082', str => '4', oper => '2374', am => '403' },
  { opf => '434', lt => '1114', rt => '1082', str => '5', oper => '2375', am => '403' },
+ 
  # crosstype operators vs timestamptz
  { opf => '434', lt => '1114', rt => '1184', str => '1', oper => '2534', am => '403' },
  { opf => '434', lt => '1114', rt => '1184', str => '2', oper => '2535', am => '403' },
  { opf => '434', lt => '1114', rt => '1184', str => '3', oper => '2536', am => '403' },
  { opf => '434', lt => '1114', rt => '1184', str => '4', oper => '2537', am => '403' },
  { opf => '434', lt => '1114', rt => '1184', str => '5', oper => '2538', am => '403' },
+ 
  # default operators timestamptz
  { opf => '434', lt => '1184', rt => '1184', str => '1', oper => '1322', am => '403' },
  { opf => '434', lt => '1184', rt => '1184', str => '2', oper => '1323', am => '403' },
  { opf => '434', lt => '1184', rt => '1184', str => '3', oper => '1320', am => '403' },
  { opf => '434', lt => '1184', rt => '1184', str => '4', oper => '1325', am => '403' },
  { opf => '434', lt => '1184', rt => '1184', str => '5', oper => '1324', am => '403' },
+ 
  # crosstype operators vs date
  { opf => '434', lt => '1184', rt => '1082', str => '1', oper => '2384', am => '403' },
  { opf => '434', lt => '1184', rt => '1082', str => '2', oper => '2385', am => '403' },
  { opf => '434', lt => '1184', rt => '1082', str => '3', oper => '2386', am => '403' },
  { opf => '434', lt => '1184', rt => '1082', str => '4', oper => '2387', am => '403' },
  { opf => '434', lt => '1184', rt => '1082', str => '5', oper => '2388', am => '403' },
+ 
  # crosstype operators vs timestamp
  { opf => '434', lt => '1184', rt => '1114', str => '1', oper => '2540', am => '403' },
  { opf => '434', lt => '1184', rt => '1114', str => '2', oper => '2541', am => '403' },
***************
*** 378,394 ****
--- 397,418 ----
  
  # bpchar_ops
  { opf => '427', lt => '1042', rt => '1042', str => '1', oper => '1054', am => '405' },
+ 
  # char_ops
  { opf => '431', lt => '18', rt => '18', str => '1', oper => '92', am => '405' },
+ 
  # date_ops
  { opf => '435', lt => '1082', rt => '1082', str => '1', oper => '1093', am => '405' },
+ 
  # float_ops
  { opf => '1971', lt => '700', rt => '700', str => '1', oper => '620', am => '405' },
  { opf => '1971', lt => '701', rt => '701', str => '1', oper => '670', am => '405' },
  { opf => '1971', lt => '700', rt => '701', str => '1', oper => '1120', am => '405' },
  { opf => '1971', lt => '701', rt => '700', str => '1', oper => '1130', am => '405' },
+ 
  # network_ops
  { opf => '1975', lt => '869', rt => '869', str => '1', oper => '1201', am => '405' },
+ 
  # integer_ops
  { opf => '1977', lt => '21', rt => '21', str => '1', oper => '94', am => '405' },
  { opf => '1977', lt => '23', rt => '23', str => '1', oper => '96', am => '405' },
***************
*** 399,450 ****
--- 423,498 ----
  { opf => '1977', lt => '23', rt => '20', str => '1', oper => '15', am => '405' },
  { opf => '1977', lt => '20', rt => '21', str => '1', oper => '1868', am => '405' },
  { opf => '1977', lt => '20', rt => '23', str => '1', oper => '416', am => '405' },
+ 
  # interval_ops
  { opf => '1983', lt => '1186', rt => '1186', str => '1', oper => '1330', am => '405' },
+ 
  # macaddr_ops
  { opf => '1985', lt => '829', rt => '829', str => '1', oper => '1220', am => '405' },
+ 
  # macaddr8_ops
  { opf => '3372', lt => '774', rt => '774', str => '1', oper => '3362', am => '405' },
+ 
  # name_ops
  { opf => '1987', lt => '19', rt => '19', str => '1', oper => '93', am => '405' },
+ 
  # oid_ops
  { opf => '1990', lt => '26', rt => '26', str => '1', oper => '607', am => '405' },
+ 
  # oidvector_ops
  { opf => '1992', lt => '30', rt => '30', str => '1', oper => '649', am => '405' },
+ 
  # text_ops
  { opf => '1995', lt => '25', rt => '25', str => '1', oper => '98', am => '405' },
+ 
  # time_ops
  { opf => '1997', lt => '1083', rt => '1083', str => '1', oper => '1108', am => '405' },
+ 
  # timestamptz_ops
  { opf => '1999', lt => '1184', rt => '1184', str => '1', oper => '1320', am => '405' },
+ 
  # timetz_ops
  { opf => '2001', lt => '1266', rt => '1266', str => '1', oper => '1550', am => '405' },
+ 
  # timestamp_ops
  { opf => '2040', lt => '1114', rt => '1114', str => '1', oper => '2060', am => '405' },
+ 
  # bool_ops
  { opf => '2222', lt => '16', rt => '16', str => '1', oper => '91', am => '405' },
+ 
  # bytea_ops
  { opf => '2223', lt => '17', rt => '17', str => '1', oper => '1955', am => '405' },
+ 
  # xid_ops
  { opf => '2225', lt => '28', rt => '28', str => '1', oper => '352', am => '405' },
+ 
  # cid_ops
  { opf => '2226', lt => '29', rt => '29', str => '1', oper => '385', am => '405' },
+ 
  # abstime_ops
  { opf => '2227', lt => '702', rt => '702', str => '1', oper => '560', am => '405' },
+ 
  # reltime_ops
  { opf => '2228', lt => '703', rt => '703', str => '1', oper => '566', am => '405' },
+ 
  # text_pattern_ops
  { opf => '2229', lt => '25', rt => '25', str => '1', oper => '98', am => '405' },
+ 
  # bpchar_pattern_ops
  { opf => '2231', lt => '1042', rt => '1042', str => '1', oper => '1054', am => '405' },
+ 
  # aclitem_ops
  { opf => '2235', lt => '1033', rt => '1033', str => '1', oper => '974', am => '405' },
+ 
  # uuid_ops
  { opf => '2969', lt => '2950', rt => '2950', str => '1', oper => '2972', am => '405' },
+ 
  # pg_lsn_ops
  { opf => '3254', lt => '3220', rt => '3220', str => '1', oper => '3222', am => '405' },
+ 
  # numeric_ops
  { opf => '1998', lt => '1700', rt => '1700', str => '1', oper => '1752', am => '405' },
+ 
  # array_ops
  { opf => '627', lt => '2277', rt => '2277', str => '1', oper => '1070', am => '405' },
  
***************
*** 674,697 ****
--- 722,749 ----
  { opf => '3794', lt => '869', rt => '869', str => '27', oper => '934', am => '4000' },
  
  # BRIN opclasses
+ 
  # minmax bytea
  { opf => '4064', lt => '17', rt => '17', str => '1', oper => '1957', am => '3580' },
  { opf => '4064', lt => '17', rt => '17', str => '2', oper => '1958', am => '3580' },
  { opf => '4064', lt => '17', rt => '17', str => '3', oper => '1955', am => '3580' },
  { opf => '4064', lt => '17', rt => '17', str => '4', oper => '1960', am => '3580' },
  { opf => '4064', lt => '17', rt => '17', str => '5', oper => '1959', am => '3580' },
+ 
  # minmax "char"
  { opf => '4062', lt => '18', rt => '18', str => '1', oper => '631', am => '3580' },
  { opf => '4062', lt => '18', rt => '18', str => '2', oper => '632', am => '3580' },
  { opf => '4062', lt => '18', rt => '18', str => '3', oper => '92', am => '3580' },
  { opf => '4062', lt => '18', rt => '18', str => '4', oper => '634', am => '3580' },
  { opf => '4062', lt => '18', rt => '18', str => '5', oper => '633', am => '3580' },
+ 
  # minmax name
  { opf => '4065', lt => '19', rt => '19', str => '1', oper => '660', am => '3580' },
  { opf => '4065', lt => '19', rt => '19', str => '2', oper => '661', am => '3580' },
  { opf => '4065', lt => '19', rt => '19', str => '3', oper => '93', am => '3580' },
  { opf => '4065', lt => '19', rt => '19', str => '4', oper => '663', am => '3580' },
  { opf => '4065', lt => '19', rt => '19', str => '5', oper => '662', am => '3580' },
+ 
  # minmax integer
  { opf => '4054', lt => '20', rt => '20', str => '1', oper => '412', am => '3580' },
  { opf => '4054', lt => '20', rt => '20', str => '2', oper => '414', am => '3580' },
***************
*** 745,762 ****
--- 797,817 ----
  { opf => '4056', lt => '25', rt => '25', str => '3', oper => '98', am => '3580' },
  { opf => '4056', lt => '25', rt => '25', str => '4', oper => '667', am => '3580' },
  { opf => '4056', lt => '25', rt => '25', str => '5', oper => '666', am => '3580' },
+ 
  # minmax oid
  { opf => '4068', lt => '26', rt => '26', str => '1', oper => '609', am => '3580' },
  { opf => '4068', lt => '26', rt => '26', str => '2', oper => '611', am => '3580' },
  { opf => '4068', lt => '26', rt => '26', str => '3', oper => '607', am => '3580' },
  { opf => '4068', lt => '26', rt => '26', str => '4', oper => '612', am => '3580' },
  { opf => '4068', lt => '26', rt => '26', str => '5', oper => '610', am => '3580' },
+ 
  # minmax tid
  { opf => '4069', lt => '27', rt => '27', str => '1', oper => '2799', am => '3580' },
  { opf => '4069', lt => '27', rt => '27', str => '2', oper => '2801', am => '3580' },
  { opf => '4069', lt => '27', rt => '27', str => '3', oper => '387', am => '3580' },
  { opf => '4069', lt => '27', rt => '27', str => '4', oper => '2802', am => '3580' },
  { opf => '4069', lt => '27', rt => '27', str => '5', oper => '2800', am => '3580' },
+ 
  # minmax float (float4, float8)
  { opf => '4070', lt => '700', rt => '700', str => '1', oper => '622', am => '3580' },
  { opf => '4070', lt => '700', rt => '700', str => '2', oper => '624', am => '3580' },
***************
*** 785,814 ****
--- 840,874 ----
  { opf => '4072', lt => '702', rt => '702', str => '3', oper => '560', am => '3580' },
  { opf => '4072', lt => '702', rt => '702', str => '4', oper => '565', am => '3580' },
  { opf => '4072', lt => '702', rt => '702', str => '5', oper => '563', am => '3580' },
+ 
  # minmax reltime
  { opf => '4073', lt => '703', rt => '703', str => '1', oper => '568', am => '3580' },
  { opf => '4073', lt => '703', rt => '703', str => '2', oper => '570', am => '3580' },
  { opf => '4073', lt => '703', rt => '703', str => '3', oper => '566', am => '3580' },
  { opf => '4073', lt => '703', rt => '703', str => '4', oper => '571', am => '3580' },
  { opf => '4073', lt => '703', rt => '703', str => '5', oper => '569', am => '3580' },
+ 
  # minmax macaddr
  { opf => '4074', lt => '829', rt => '829', str => '1', oper => '1222', am => '3580' },
  { opf => '4074', lt => '829', rt => '829', str => '2', oper => '1223', am => '3580' },
  { opf => '4074', lt => '829', rt => '829', str => '3', oper => '1220', am => '3580' },
  { opf => '4074', lt => '829', rt => '829', str => '4', oper => '1225', am => '3580' },
  { opf => '4074', lt => '829', rt => '829', str => '5', oper => '1224', am => '3580' },
+ 
  # minmax macaddr8
  { opf => '4109', lt => '774', rt => '774', str => '1', oper => '3364', am => '3580' },
  { opf => '4109', lt => '774', rt => '774', str => '2', oper => '3365', am => '3580' },
  { opf => '4109', lt => '774', rt => '774', str => '3', oper => '3362', am => '3580' },
  { opf => '4109', lt => '774', rt => '774', str => '4', oper => '3367', am => '3580' },
  { opf => '4109', lt => '774', rt => '774', str => '5', oper => '3366', am => '3580' },
+ 
  # minmax inet
  { opf => '4075', lt => '869', rt => '869', str => '1', oper => '1203', am => '3580' },
  { opf => '4075', lt => '869', rt => '869', str => '2', oper => '1204', am => '3580' },
  { opf => '4075', lt => '869', rt => '869', str => '3', oper => '1201', am => '3580' },
  { opf => '4075', lt => '869', rt => '869', str => '4', oper => '1206', am => '3580' },
  { opf => '4075', lt => '869', rt => '869', str => '5', oper => '1205', am => '3580' },
+ 
  # inclusion inet
  { opf => '4102', lt => '869', rt => '869', str => '3', oper => '3552', am => '3580' },
  { opf => '4102', lt => '869', rt => '869', str => '7', oper => '934', am => '3580' },
***************
*** 816,833 ****
--- 876,896 ----
  { opf => '4102', lt => '869', rt => '869', str => '18', oper => '1201', am => '3580' },
  { opf => '4102', lt => '869', rt => '869', str => '24', oper => '933', am => '3580' },
  { opf => '4102', lt => '869', rt => '869', str => '26', oper => '931', am => '3580' },
+ 
  # minmax character
  { opf => '4076', lt => '1042', rt => '1042', str => '1', oper => '1058', am => '3580' },
  { opf => '4076', lt => '1042', rt => '1042', str => '2', oper => '1059', am => '3580' },
  { opf => '4076', lt => '1042', rt => '1042', str => '3', oper => '1054', am => '3580' },
  { opf => '4076', lt => '1042', rt => '1042', str => '4', oper => '1061', am => '3580' },
  { opf => '4076', lt => '1042', rt => '1042', str => '5', oper => '1060', am => '3580' },
+ 
  # minmax time without time zone
  { opf => '4077', lt => '1083', rt => '1083', str => '1', oper => '1110', am => '3580' },
  { opf => '4077', lt => '1083', rt => '1083', str => '2', oper => '1111', am => '3580' },
  { opf => '4077', lt => '1083', rt => '1083', str => '3', oper => '1108', am => '3580' },
  { opf => '4077', lt => '1083', rt => '1083', str => '4', oper => '1113', am => '3580' },
  { opf => '4077', lt => '1083', rt => '1083', str => '5', oper => '1112', am => '3580' },
+ 
  # minmax datetime (date, timestamp, timestamptz)
  { opf => '4059', lt => '1114', rt => '1114', str => '1', oper => '2062', am => '3580' },
  { opf => '4059', lt => '1114', rt => '1114', str => '2', oper => '2063', am => '3580' },
***************
*** 881,916 ****
--- 944,985 ----
  { opf => '4078', lt => '1186', rt => '1186', str => '3', oper => '1330', am => '3580' },
  { opf => '4078', lt => '1186', rt => '1186', str => '4', oper => '1335', am => '3580' },
  { opf => '4078', lt => '1186', rt => '1186', str => '5', oper => '1334', am => '3580' },
+ 
  # minmax time with time zone
  { opf => '4058', lt => '1266', rt => '1266', str => '1', oper => '1552', am => '3580' },
  { opf => '4058', lt => '1266', rt => '1266', str => '2', oper => '1553', am => '3580' },
  { opf => '4058', lt => '1266', rt => '1266', str => '3', oper => '1550', am => '3580' },
  { opf => '4058', lt => '1266', rt => '1266', str => '4', oper => '1555', am => '3580' },
  { opf => '4058', lt => '1266', rt => '1266', str => '5', oper => '1554', am => '3580' },
+ 
  # minmax bit
  { opf => '4079', lt => '1560', rt => '1560', str => '1', oper => '1786', am => '3580' },
  { opf => '4079', lt => '1560', rt => '1560', str => '2', oper => '1788', am => '3580' },
  { opf => '4079', lt => '1560', rt => '1560', str => '3', oper => '1784', am => '3580' },
  { opf => '4079', lt => '1560', rt => '1560', str => '4', oper => '1789', am => '3580' },
  { opf => '4079', lt => '1560', rt => '1560', str => '5', oper => '1787', am => '3580' },
+ 
  # minmax bit varying
  { opf => '4080', lt => '1562', rt => '1562', str => '1', oper => '1806', am => '3580' },
  { opf => '4080', lt => '1562', rt => '1562', str => '2', oper => '1808', am => '3580' },
  { opf => '4080', lt => '1562', rt => '1562', str => '3', oper => '1804', am => '3580' },
  { opf => '4080', lt => '1562', rt => '1562', str => '4', oper => '1809', am => '3580' },
  { opf => '4080', lt => '1562', rt => '1562', str => '5', oper => '1807', am => '3580' },
+ 
  # minmax numeric
  { opf => '4055', lt => '1700', rt => '1700', str => '1', oper => '1754', am => '3580' },
  { opf => '4055', lt => '1700', rt => '1700', str => '2', oper => '1755', am => '3580' },
  { opf => '4055', lt => '1700', rt => '1700', str => '3', oper => '1752', am => '3580' },
  { opf => '4055', lt => '1700', rt => '1700', str => '4', oper => '1757', am => '3580' },
  { opf => '4055', lt => '1700', rt => '1700', str => '5', oper => '1756', am => '3580' },
+ 
  # minmax uuid
  { opf => '4081', lt => '2950', rt => '2950', str => '1', oper => '2974', am => '3580' },
  { opf => '4081', lt => '2950', rt => '2950', str => '2', oper => '2976', am => '3580' },
  { opf => '4081', lt => '2950', rt => '2950', str => '3', oper => '2972', am => '3580' },
  { opf => '4081', lt => '2950', rt => '2950', str => '4', oper => '2977', am => '3580' },
  { opf => '4081', lt => '2950', rt => '2950', str => '5', oper => '2975', am => '3580' },
+ 
  # inclusion range types
  { opf => '4103', lt => '3831', rt => '3831', str => '1', oper => '3893', am => '3580' },
  { opf => '4103', lt => '3831', rt => '3831', str => '2', oper => '3895', am => '3580' },
***************
*** 926,937 ****
--- 995,1008 ----
  { opf => '4103', lt => '3831', rt => '3831', str => '21', oper => '3885', am => '3580' },
  { opf => '4103', lt => '3831', rt => '3831', str => '22', oper => '3887', am => '3580' },
  { opf => '4103', lt => '3831', rt => '3831', str => '23', oper => '3886', am => '3580' },
+ 
  # minmax pg_lsn
  { opf => '4082', lt => '3220', rt => '3220', str => '1', oper => '3224', am => '3580' },
  { opf => '4082', lt => '3220', rt => '3220', str => '2', oper => '3226', am => '3580' },
  { opf => '4082', lt => '3220', rt => '3220', str => '3', oper => '3222', am => '3580' },
  { opf => '4082', lt => '3220', rt => '3220', str => '4', oper => '3227', am => '3580' },
  { opf => '4082', lt => '3220', rt => '3220', str => '5', oper => '3225', am => '3580' },
+ 
  # inclusion box
  { opf => '4104', lt => '603', rt => '603', str => '1', oper => '493', am => '3580' },
  { opf => '4104', lt => '603', rt => '603', str => '2', oper => '494', am => '3580' },
***************
*** 945,950 ****
--- 1016,1022 ----
  { opf => '4104', lt => '603', rt => '603', str => '10', oper => '2570', am => '3580' },
  { opf => '4104', lt => '603', rt => '603', str => '11', oper => '2573', am => '3580' },
  { opf => '4104', lt => '603', rt => '603', str => '12', oper => '2572', am => '3580' },
+ 
  # we could, but choose not to, supply entries for strategies 13 and 14
  { opf => '4104', lt => '603', rt => '600', str => '7', oper => '433', am => '3580' },
  
diff --git a/src/include/catalog/pg_amproc.dat b/src/include/catalog/pg_amproc.dat
new file mode 100644
index a165e06..6c25ebf
*** a/src/include/catalog/pg_amproc.dat
--- b/src/include/catalog/pg_amproc.dat
***************
*** 260,280 ****
--- 260,284 ----
  { opf => '5000', lt => '603', rt => '603', num => '5', amproc => '5016' },
  
  # BRIN opclasses
+ 
  # minmax bytea
  { opf => '4064', lt => '17', rt => '17', num => '1', amproc => '3383' },
  { opf => '4064', lt => '17', rt => '17', num => '2', amproc => '3384' },
  { opf => '4064', lt => '17', rt => '17', num => '3', amproc => '3385' },
  { opf => '4064', lt => '17', rt => '17', num => '4', amproc => '3386' },
+ 
  # minmax "char"
  { opf => '4062', lt => '18', rt => '18', num => '1', amproc => '3383' },
  { opf => '4062', lt => '18', rt => '18', num => '2', amproc => '3384' },
  { opf => '4062', lt => '18', rt => '18', num => '3', amproc => '3385' },
  { opf => '4062', lt => '18', rt => '18', num => '4', amproc => '3386' },
+ 
  # minmax name
  { opf => '4065', lt => '19', rt => '19', num => '1', amproc => '3383' },
  { opf => '4065', lt => '19', rt => '19', num => '2', amproc => '3384' },
  { opf => '4065', lt => '19', rt => '19', num => '3', amproc => '3385' },
  { opf => '4065', lt => '19', rt => '19', num => '4', amproc => '3386' },
+ 
  # minmax integer: int2, int4, int8
  { opf => '4054', lt => '20', rt => '20', num => '1', amproc => '3383' },
  { opf => '4054', lt => '20', rt => '20', num => '2', amproc => '3384' },
***************
*** 320,335 ****
--- 324,342 ----
  { opf => '4056', lt => '25', rt => '25', num => '2', amproc => '3384' },
  { opf => '4056', lt => '25', rt => '25', num => '3', amproc => '3385' },
  { opf => '4056', lt => '25', rt => '25', num => '4', amproc => '3386' },
+ 
  # minmax oid
  { opf => '4068', lt => '26', rt => '26', num => '1', amproc => '3383' },
  { opf => '4068', lt => '26', rt => '26', num => '2', amproc => '3384' },
  { opf => '4068', lt => '26', rt => '26', num => '3', amproc => '3385' },
  { opf => '4068', lt => '26', rt => '26', num => '4', amproc => '3386' },
+ 
  # minmax tid
  { opf => '4069', lt => '27', rt => '27', num => '1', amproc => '3383' },
  { opf => '4069', lt => '27', rt => '27', num => '2', amproc => '3384' },
  { opf => '4069', lt => '27', rt => '27', num => '3', amproc => '3385' },
  { opf => '4069', lt => '27', rt => '27', num => '4', amproc => '3386' },
+ 
  # minmax float
  { opf => '4070', lt => '700', rt => '700', num => '1', amproc => '3383' },
  { opf => '4070', lt => '700', rt => '700', num => '2', amproc => '3384' },
***************
*** 356,381 ****
--- 363,393 ----
  { opf => '4072', lt => '702', rt => '702', num => '2', amproc => '3384' },
  { opf => '4072', lt => '702', rt => '702', num => '3', amproc => '3385' },
  { opf => '4072', lt => '702', rt => '702', num => '4', amproc => '3386' },
+ 
  # minmax reltime
  { opf => '4073', lt => '703', rt => '703', num => '1', amproc => '3383' },
  { opf => '4073', lt => '703', rt => '703', num => '2', amproc => '3384' },
  { opf => '4073', lt => '703', rt => '703', num => '3', amproc => '3385' },
  { opf => '4073', lt => '703', rt => '703', num => '4', amproc => '3386' },
+ 
  # minmax macaddr
  { opf => '4074', lt => '829', rt => '829', num => '1', amproc => '3383' },
  { opf => '4074', lt => '829', rt => '829', num => '2', amproc => '3384' },
  { opf => '4074', lt => '829', rt => '829', num => '3', amproc => '3385' },
  { opf => '4074', lt => '829', rt => '829', num => '4', amproc => '3386' },
+ 
  # minmax macaddr8
  { opf => '4109', lt => '774', rt => '774', num => '1', amproc => '3383' },
  { opf => '4109', lt => '774', rt => '774', num => '2', amproc => '3384' },
  { opf => '4109', lt => '774', rt => '774', num => '3', amproc => '3385' },
  { opf => '4109', lt => '774', rt => '774', num => '4', amproc => '3386' },
+ 
  # minmax inet
  { opf => '4075', lt => '869', rt => '869', num => '1', amproc => '3383' },
  { opf => '4075', lt => '869', rt => '869', num => '2', amproc => '3384' },
  { opf => '4075', lt => '869', rt => '869', num => '3', amproc => '3385' },
  { opf => '4075', lt => '869', rt => '869', num => '4', amproc => '3386' },
+ 
  # inclusion inet
  { opf => '4102', lt => '869', rt => '869', num => '1', amproc => '4105' },
  { opf => '4102', lt => '869', rt => '869', num => '2', amproc => '4106' },
***************
*** 384,399 ****
--- 396,414 ----
  { opf => '4102', lt => '869', rt => '869', num => '11', amproc => '4063' },
  { opf => '4102', lt => '869', rt => '869', num => '12', amproc => '4071' },
  { opf => '4102', lt => '869', rt => '869', num => '13', amproc => '930' },
+ 
  # minmax character
  { opf => '4076', lt => '1042', rt => '1042', num => '1', amproc => '3383' },
  { opf => '4076', lt => '1042', rt => '1042', num => '2', amproc => '3384' },
  { opf => '4076', lt => '1042', rt => '1042', num => '3', amproc => '3385' },
  { opf => '4076', lt => '1042', rt => '1042', num => '4', amproc => '3386' },
+ 
  # minmax time without time zone
  { opf => '4077', lt => '1083', rt => '1083', num => '1', amproc => '3383' },
  { opf => '4077', lt => '1083', rt => '1083', num => '2', amproc => '3384' },
  { opf => '4077', lt => '1083', rt => '1083', num => '3', amproc => '3385' },
  { opf => '4077', lt => '1083', rt => '1083', num => '4', amproc => '3386' },
+ 
  # minmax datetime (date, timestamp, timestamptz)
  { opf => '4059', lt => '1114', rt => '1114', num => '1', amproc => '3383' },
  { opf => '4059', lt => '1114', rt => '1114', num => '2', amproc => '3384' },
***************
*** 439,469 ****
--- 454,490 ----
  { opf => '4078', lt => '1186', rt => '1186', num => '2', amproc => '3384' },
  { opf => '4078', lt => '1186', rt => '1186', num => '3', amproc => '3385' },
  { opf => '4078', lt => '1186', rt => '1186', num => '4', amproc => '3386' },
+ 
  # minmax time with time zone
  { opf => '4058', lt => '1266', rt => '1266', num => '1', amproc => '3383' },
  { opf => '4058', lt => '1266', rt => '1266', num => '2', amproc => '3384' },
  { opf => '4058', lt => '1266', rt => '1266', num => '3', amproc => '3385' },
  { opf => '4058', lt => '1266', rt => '1266', num => '4', amproc => '3386' },
+ 
  # minmax bit
  { opf => '4079', lt => '1560', rt => '1560', num => '1', amproc => '3383' },
  { opf => '4079', lt => '1560', rt => '1560', num => '2', amproc => '3384' },
  { opf => '4079', lt => '1560', rt => '1560', num => '3', amproc => '3385' },
  { opf => '4079', lt => '1560', rt => '1560', num => '4', amproc => '3386' },
+ 
  # minmax bit varying
  { opf => '4080', lt => '1562', rt => '1562', num => '1', amproc => '3383' },
  { opf => '4080', lt => '1562', rt => '1562', num => '2', amproc => '3384' },
  { opf => '4080', lt => '1562', rt => '1562', num => '3', amproc => '3385' },
  { opf => '4080', lt => '1562', rt => '1562', num => '4', amproc => '3386' },
+ 
  # minmax numeric
  { opf => '4055', lt => '1700', rt => '1700', num => '1', amproc => '3383' },
  { opf => '4055', lt => '1700', rt => '1700', num => '2', amproc => '3384' },
  { opf => '4055', lt => '1700', rt => '1700', num => '3', amproc => '3385' },
  { opf => '4055', lt => '1700', rt => '1700', num => '4', amproc => '3386' },
+ 
  # minmax uuid
  { opf => '4081', lt => '2950', rt => '2950', num => '1', amproc => '3383' },
  { opf => '4081', lt => '2950', rt => '2950', num => '2', amproc => '3384' },
  { opf => '4081', lt => '2950', rt => '2950', num => '3', amproc => '3385' },
  { opf => '4081', lt => '2950', rt => '2950', num => '4', amproc => '3386' },
+ 
  # inclusion range types
  { opf => '4103', lt => '3831', rt => '3831', num => '1', amproc => '4105' },
  { opf => '4103', lt => '3831', rt => '3831', num => '2', amproc => '4106' },
***************
*** 472,482 ****
--- 493,505 ----
  { opf => '4103', lt => '3831', rt => '3831', num => '11', amproc => '4057' },
  { opf => '4103', lt => '3831', rt => '3831', num => '13', amproc => '3859' },
  { opf => '4103', lt => '3831', rt => '3831', num => '14', amproc => '3850' },
+ 
  # minmax pg_lsn
  { opf => '4082', lt => '3220', rt => '3220', num => '1', amproc => '3383' },
  { opf => '4082', lt => '3220', rt => '3220', num => '2', amproc => '3384' },
  { opf => '4082', lt => '3220', rt => '3220', num => '3', amproc => '3385' },
  { opf => '4082', lt => '3220', rt => '3220', num => '4', amproc => '3386' },
+ 
  # inclusion box
  { opf => '4104', lt => '603', rt => '603', num => '1', amproc => '4105' },
  { opf => '4104', lt => '603', rt => '603', num => '2', amproc => '4106' },
diff --git a/src/include/catalog/pg_authid.dat b/src/include/catalog/pg_authid.dat
new file mode 100644
index 927128e..315b0d0
*** a/src/include/catalog/pg_authid.dat
--- b/src/include/catalog/pg_authid.dat
***************
*** 1,12 ****
  # pg_authid.dat
  [
  
! # 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.
  { oid => '10',
!   rolname => 'POSTGRES', rolsuper => 't', rolcreaterole => 't', rolcreatedb => 't', rolcanlogin => 't', rolreplication => 't', rolbypassrls => 't' },
  { oid => '3373',
    rolname => 'pg_monitor' },
  { oid => '3374',
--- 1,14 ----
  # pg_authid.dat
  [
  
! # The C code typically refers to these roles using the #define symbols
! # in pg_authid.h, so be sure to keep those in sync with the data here.
! 
! # The uppercase quantities will be replaced at initdb time with user choices.
! # so we must double-quote them.
  { oid => '10',
!   rolname => '"POSTGRES"', rolsuper => 't', rolcreaterole => 't', rolcreatedb => 't', rolcanlogin => 't', rolreplication => 't', rolbypassrls => 't' },
! 
  { oid => '3373',
    rolname => 'pg_monitor' },
  { oid => '3374',
diff --git a/src/include/catalog/pg_cast.dat b/src/include/catalog/pg_cast.dat
new file mode 100644
index a1fe83d..add77ad
*** a/src/include/catalog/pg_cast.dat
--- b/src/include/catalog/pg_cast.dat
***************
*** 54,59 ****
--- 54,60 ----
  # 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 => '20', casttarget => '26', castfunc => '1287', castcontext => 'i', castmethod => 'f' },
  { castsource => '21', casttarget => '26', castfunc => '313', castcontext => 'i', castmethod => 'f' },
  { castsource => '23', casttarget => '26', castfunc => '0', castcontext => 'i', castmethod => 'b' },
***************
*** 193,198 ****
--- 194,200 ----
  { castsource => '1186', casttarget => '703', castfunc => '1194', castcontext => 'a', castmethod => 'f' },
  { castsource => '1186', casttarget => '1083', castfunc => '1419', castcontext => 'a', castmethod => 'f' },
  { castsource => '1266', casttarget => '1083', castfunc => '2046', castcontext => 'a', castmethod => 'f' },
+ 
  # Cross-category casts between int4 and abstime, reltime
  { castsource => '23', casttarget => '702', castfunc => '0', castcontext => 'e', castmethod => 'b' },
  { castsource => '702', casttarget => '23', castfunc => '0', castcontext => 'e', castmethod => 'b' },
***************
*** 227,232 ****
--- 229,235 ----
  # BitString category
  { castsource => '1560', casttarget => '1562', castfunc => '0', castcontext => 'i', castmethod => 'b' },
  { castsource => '1562', casttarget => '1560', castfunc => '0', castcontext => 'i', castmethod => 'b' },
+ 
  # Cross-category casts between bit and int4, int8
  { castsource => '20', casttarget => '1560', castfunc => '2075', castcontext => 'e', castmethod => 'f' },
  { castsource => '23', casttarget => '1560', castfunc => '1683', castcontext => 'e', castmethod => 'f' },
***************
*** 241,246 ****
--- 244,250 ----
  # 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 => '650', casttarget => '25', castfunc => '730', castcontext => 'a', castmethod => 'f' },
  { castsource => '869', casttarget => '25', castfunc => '730', castcontext => 'a', castmethod => 'f' },
  { castsource => '16', casttarget => '25', castfunc => '2971', castcontext => 'a', castmethod => 'f' },
***************
*** 248,253 ****
--- 252,258 ----
  { castsource => '25', casttarget => '142', castfunc => '2896', castcontext => 'e', castmethod => 'f' },
  
  # Cross-category casts to and from VARCHAR
+ 
  # We support all the same casts as for TEXT.
  { castsource => '650', casttarget => '1043', castfunc => '730', castcontext => 'a', castmethod => 'f' },
  { castsource => '869', casttarget => '1043', castfunc => '730', castcontext => 'a', castmethod => 'f' },
***************
*** 256,261 ****
--- 261,267 ----
  { castsource => '1043', casttarget => '142', castfunc => '2896', castcontext => 'e', castmethod => 'f' },
  
  # Cross-category casts to and from BPCHAR
+ 
  # We support all the same casts as for TEXT.
  { castsource => '650', casttarget => '1042', castfunc => '730', castcontext => 'a', castmethod => 'f' },
  { castsource => '869', casttarget => '1042', castfunc => '730', castcontext => 'a', castmethod => 'f' },
diff --git a/src/include/catalog/pg_class.dat b/src/include/catalog/pg_class.dat
new file mode 100644
index af762e8..d574ba8
*** a/src/include/catalog/pg_class.dat
--- b/src/include/catalog/pg_class.dat
***************
*** 1,12 ****
  # pg_class.dat
  [
  
! # 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
  { oid => '1247',
    relname => 'pg_type', reltype => '71', relnatts => '30', relhasoids => 't' },
  { oid => '1249',
--- 1,10 ----
  # pg_class.dat
  [
  
! # 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.
  
  { oid => '1247',
    relname => 'pg_type', reltype => '71', relnatts => '30', relhasoids => 't' },
  { oid => '1249',
***************
*** 16,26 ****
  { oid => '1259',
    relname => 'pg_class', reltype => '83', relnatts => '33', relhasoids => 't' },
  
- # default selection for replica identity (primary key or nothing)
- # no replica identity is logged for this relation
- # all columns are logged as replica identity
- # an explicitly chosen candidate key's columns are used as replica identity.
- # Note this will still be set if the index has been dropped; in that case it
- # has the same meaning as 'd'.
- 
  ]
--- 14,17 ----
diff --git a/src/include/catalog/pg_database.dat b/src/include/catalog/pg_database.dat
new file mode 100644
index bc4d41f..dfa1553
*** a/src/include/catalog/pg_database.dat
--- b/src/include/catalog/pg_database.dat
***************
*** 1,7 ****
  # pg_database.dat
  [
  
  { oid => '1', shdescr => '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_' },
  
  ]
--- 1,10 ----
  # 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', shdescr => '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_' },
  
  ]
diff --git a/src/include/catalog/pg_namespace.dat b/src/include/catalog/pg_namespace.dat
new file mode 100644
index 646fd30..3281eea
*** a/src/include/catalog/pg_namespace.dat
--- b/src/include/catalog/pg_namespace.dat
***************
*** 8,13 ****
  { oid => '2200', descr => 'standard public schema',
    nspname => 'public', nspowner => 'PGUID', nspacl => '_null_' },
  
- # prototypes for functions in pg_namespace.c
- 
  ]
--- 8,11 ----
diff --git a/src/include/catalog/pg_opclass.dat b/src/include/catalog/pg_opclass.dat
new file mode 100644
index b0f2e8c..8e4569e
*** a/src/include/catalog/pg_opclass.dat
--- b/src/include/catalog/pg_opclass.dat
***************
*** 44,55 ****
--- 44,57 ----
  { opcmethod => '405', opcname => 'macaddr_ops', opcfamily => '1985', opcintype => '829' },
  { opcmethod => '403', opcname => 'macaddr8_ops', opcfamily => '3371', opcintype => '774' },
  { opcmethod => '405', opcname => 'macaddr8_ops', opcfamily => '3372', opcintype => '774' },
+ 
  # 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 => '403', opcname => 'name_ops', opcfamily => '1986', opcintype => '19', opckeytype => '2275' },
+ 
  { opcmethod => '405', opcname => 'name_ops', opcfamily => '1987', opcintype => '19' },
  { oid => '3125',
    opcmethod => '403', opcname => 'numeric_ops', opcfamily => '1988', opcintype => '1700' },
***************
*** 124,130 ****
--- 126,134 ----
  { opcmethod => '2742', opcname => 'jsonb_path_ops', opcfamily => '4037', opcintype => '3802', opcdefault => 'f', opckeytype => '23' },
  
  # BRIN operator classes
+ 
  # no brin opclass for bool
+ 
  { opcmethod => '3580', opcname => 'bytea_minmax_ops', opcfamily => '4064', opcintype => '17', opckeytype => '17' },
  { opcmethod => '3580', opcname => 'char_minmax_ops', opcfamily => '4062', opcintype => '18', opckeytype => '18' },
  { opcmethod => '3580', opcname => 'name_minmax_ops', opcfamily => '4065', opcintype => '19', opckeytype => '19' },
***************
*** 152,163 ****
--- 156,172 ----
  { opcmethod => '3580', opcname => 'bit_minmax_ops', opcfamily => '4079', opcintype => '1560', opckeytype => '1560' },
  { opcmethod => '3580', opcname => 'varbit_minmax_ops', opcfamily => '4080', opcintype => '1562', opckeytype => '1562' },
  { opcmethod => '3580', opcname => 'numeric_minmax_ops', opcfamily => '4055', opcintype => '1700', opckeytype => '1700' },
+ 
  # no brin opclass for record, anyarray
+ 
  { opcmethod => '3580', opcname => 'uuid_minmax_ops', opcfamily => '4081', opcintype => '2950', opckeytype => '2950' },
  { opcmethod => '3580', opcname => 'range_inclusion_ops', opcfamily => '4103', opcintype => '3831', opckeytype => '3831' },
  { opcmethod => '3580', opcname => 'pg_lsn_minmax_ops', opcfamily => '4082', opcintype => '3220', opckeytype => '3220' },
+ 
  # no brin opclass for enum, tsvector, tsquery, jsonb
+ 
  { opcmethod => '3580', opcname => 'box_inclusion_ops', opcfamily => '4104', opcintype => '603', opckeytype => '603' },
+ 
  # no brin opclass for the geometric types except box
  
  ]
diff --git a/src/include/catalog/pg_operator.dat b/src/include/catalog/pg_operator.dat
new file mode 100644
index 1437225..898e2ae
*** a/src/include/catalog/pg_operator.dat
--- b/src/include/catalog/pg_operator.dat
***************
*** 1,7 ****
  # pg_operator.dat
  [
  
! # 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.
--- 1,7 ----
  # pg_operator.dat
  [
  
! # 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.
***************
*** 1581,1586 ****
--- 1581,1587 ----
    oprname => '&&', oprleft => '3615', oprright => '3615', oprresult => '3615', oprcode => 'tsquery_and' },
  { oid => '3681', descr => 'OR-concatenate',
    oprname => '||', oprleft => '3615', oprright => '3615', oprresult => '3615', oprcode => 'tsquery_or' },
+ 
  # <-> operation calls tsquery_phrase, but function is polymorphic. So, point to OID of the tsquery_phrase
  { oid => '5005', descr => 'phrase-concatenate',
    oprname => '<->', oprleft => '3615', oprright => '3615', oprresult => '3615', oprcode => '5003' },
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
new file mode 100644
index ed5db1e..2aeb6e2
*** a/src/include/catalog/pg_proc.dat
--- b/src/include/catalog/pg_proc.dat
***************
*** 1,14 ****
  # pg_proc.dat
  [
  
! # 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
--- 1,16 ----
  # 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
***************
*** 17,23 ****
  # "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
  
--- 19,25 ----
  # "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
  
***************
*** 1774,1779 ****
--- 1776,1782 ----
  # OIDs are not unique across system catalogs.  Use the other form instead.
  { oid => '1348', descr => 'deprecated, use two-argument form instead',
    n => 'obj_description', prolang => '14', procost => '100', v => 's', p => 's', rt => '25', at => '26', s => 'select description from pg_catalog.pg_description where objoid = $1 and objsubid = 0' },
+ 
  { oid => '1349', descr => 'print type names of oidvector field',
    n => 'oidvectortypes', v => 's', p => 's', rt => '25', at => '30' },
  
***************
*** 1934,1944 ****
  
  # pclose and popen might better be named close and open, but that crashes initdb.
  # - thomas 97/04/20
- 
  { oid => '1433', descr => 'close path',
    n => 'pclose', p => 's', rt => '602', at => '602', s => 'path_close' },
  { oid => '1434', descr => 'open path',
    n => 'popen', p => 's', rt => '602', at => '602', s => 'path_open' },
  { oid => '1435',
    n => 'path_add', p => 's', rt => '602', at => '602 602' },
  { oid => '1436',
--- 1937,1947 ----
  
  # pclose and popen might better be named close and open, but that crashes initdb.
  # - thomas 97/04/20
  { oid => '1433', descr => 'close path',
    n => 'pclose', p => 's', rt => '602', at => '602', s => 'path_close' },
  { oid => '1434', descr => 'open path',
    n => 'popen', p => 's', rt => '602', at => '602', s => 'path_open' },
+ 
  { oid => '1435',
    n => 'path_add', p => 's', rt => '602', at => '602 602' },
  { oid => '1436',
***************
*** 2730,2735 ****
--- 2733,2739 ----
    n => 'interval_hash_extended', p => 's', rt => '20', at => '1186 20' },
  
  # OID's 1700 - 1799 NUMERIC data type
+ 
  { oid => '1701', descr => 'I/O',
    n => 'numeric_in', p => 's', rt => '1700', at => '2275 26 23' },
  { oid => '1702', descr => 'I/O',
***************
*** 4753,4758 ****
--- 4757,4763 ----
    n => 'bool_anytrue', p => 's', rt => '16', at => '2281' },
  { oid => '2517', descr => 'boolean-and aggregate',
    n => 'bool_and', proisagg => 't', proisstrict => 'f', p => 's', rt => '16', at => '16', s => 'aggregate_dummy' },
+ 
  # ANY, SOME? These names conflict with subquery operators. See doc.
  { oid => '2518', descr => 'boolean-or aggregate',
    n => 'bool_or', proisagg => 't', proisstrict => 'f', p => 's', rt => '16', at => '16', s => 'aggregate_dummy' },
***************
*** 4802,4807 ****
--- 4807,4813 ----
  # start time function
  { oid => '2560', descr => 'postmaster start time',
    n => 'pg_postmaster_start_time', v => 's', p => 's', rt => '1184', at => '' },
+ 
  # config reload time function
  { oid => '2034', descr => 'configuration load time',
    n => 'pg_conf_load_time', v => 's', p => 'r', rt => '1184', at => '' },
***************
*** 5658,5663 ****
--- 5664,5670 ----
    n => 'jsonb_pretty', p => 's', rt => '25', at => '3802' },
  { oid => '3579', descr => 'Insert value into a jsonb',
    n => 'jsonb_insert', p => 's', rt => '3802', at => '3802 1009 3802 16' },
+ 
  # txid
  { oid => '2939', descr => 'I/O',
    n => 'txid_snapshot_in', p => 's', rt => '2970', at => '2275' },
***************
*** 6069,6105 ****
  # replication/origin.h
  { oid => '6003', descr => 'create a replication origin',
    n => 'pg_replication_origin_create', v => 'v', rt => '26', at => '25' },
- 
  { oid => '6004', descr => 'drop replication origin identified by its name',
    n => 'pg_replication_origin_drop', v => 'v', rt => '2278', at => '25' },
- 
  { oid => '6005', descr => 'translate the replication origin\'s name to its id',
    n => 'pg_replication_origin_oid', v => 's', p => 's', rt => '26', at => '25' },
- 
  { oid => '6006', descr => 'configure session to maintain replication progress tracking for the passed in origin',
    n => 'pg_replication_origin_session_setup', v => 'v', rt => '2278', at => '25' },
- 
  { oid => '6007', descr => 'teardown configured replication progress tracking',
    n => 'pg_replication_origin_session_reset', v => 'v', rt => '2278', at => '' },
- 
  { oid => '6008', descr => 'is a replication origin configured in this session',
    n => 'pg_replication_origin_session_is_setup', v => 'v', p => 'r', rt => '16', at => '' },
- 
  { oid => '6009', descr => 'get the replication progress of the current session',
    n => 'pg_replication_origin_session_progress', v => 'v', rt => '3220', at => '16' },
- 
  { oid => '6010', descr => 'setup the transaction\'s origin lsn and timestamp',
    n => 'pg_replication_origin_xact_setup', v => 'v', p => 'r', rt => '2278', at => '3220 1184' },
- 
  { oid => '6011', descr => 'reset the transaction\'s origin lsn and timestamp',
    n => 'pg_replication_origin_xact_reset', v => 'v', p => 'r', rt => '2278', at => '' },
- 
  { oid => '6012', descr => 'advance replication identifier to specific location',
    n => 'pg_replication_origin_advance', v => 'v', rt => '2278', at => '25 3220' },
- 
  { oid => '6013', descr => 'get an individual replication origin\'s replication progress',
    n => 'pg_replication_origin_progress', v => 'v', rt => '3220', at => '25 16' },
- 
  { oid => '6014', descr => 'get progress for all replication origins',
    n => 'pg_show_replication_origin_status', prorows => '100', proisstrict => 'f', proretset => 't', v => 'v', p => 'r', rt => '2249', at => '', proallargtypes => '{26,25,3220,3220}', proargmodes => '{o,o,o,o}', proargnames => '{local_id, external_id, remote_lsn, local_lsn}' },
  
--- 6076,6101 ----
***************
*** 6122,6141 ****
  # pg_controldata related functions
  { oid => '3441', descr => 'pg_controldata general state information as a function',
    n => 'pg_control_system', v => 'v', p => 's', rt => '2249', at => '', proallargtypes => '{23,23,20,1184}', proargmodes => '{o,o,o,o}', proargnames => '{pg_control_version,catalog_version_no,system_identifier,pg_control_last_modified}' },
- 
  { oid => '3442', descr => 'pg_controldata checkpoint state information as a function',
    n => 'pg_control_checkpoint', v => 'v', p => 's', rt => '2249', at => '', proallargtypes => '{3220,3220,25,23,23,16,25,26,28,28,28,26,28,28,26,28,28,1184}', 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}' },
- 
  { oid => '3443', descr => 'pg_controldata recovery state information as a function',
    n => 'pg_control_recovery', v => 'v', p => 's', rt => '2249', at => '', proallargtypes => '{3220,23,3220,3220,16}', 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}' },
- 
  { oid => '3444', descr => 'pg_controldata init state information as a function',
    n => 'pg_control_init', v => 'v', p => 's', rt => '2249', at => '', proallargtypes => '{23,23,23,23,23,23,23,23,23,16,16,23}', 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}' },
  
  # collation management functions
  { oid => '3445', descr => 'import collations from operating system',
    n => 'pg_import_system_collations', procost => '100', v => 'v', p => 'r', rt => '23', at => '4089' },
- 
  { oid => '3448', descr => 'get actual version of collation from operating system',
    n => 'pg_collation_actual_version', procost => '100', v => 'v', p => 's', rt => '25', at => '26' },
  
--- 6118,6133 ----
***************
*** 6149,6167 ****
  { oid => '5028', descr => 'hash partition CHECK constraint',
    n => 'satisfies_hash_partition', provariadic => '2276', proisstrict => 'f', p => 's', rt => '16', at => '26 23 23 2276', proargmodes => '{i,i,i,v}' },
  
- # Symbolic values for provolatile column: these indicate whether the result
- # of a function is dependent *only* on the values of its explicit arguments,
- # or can change due to outside factors (such as parameter variables or
- # table contents).  NOTE: functions having side-effects, such as setval(),
- # must be labeled volatile to ensure they will not get optimized away,
- # even if the actual return value is not changeable.
- 
- # Symbolic values for proparallel column: these indicate whether a function
- # can be safely be run in a parallel backend, during parallelism but
- # necessarily in the master, or only in non-parallel mode.
- 
- # Symbolic values for proargmodes column.  Note that these must agree with
- # the FunctionParameterMode enum in parsenodes.h; we declare them here to
- # be accessible from either header.
- 
  ]
--- 6141,6144 ----
diff --git a/src/include/catalog/pg_range.dat b/src/include/catalog/pg_range.dat
new file mode 100644
index 063b975..cd9a78b
*** a/src/include/catalog/pg_range.dat
--- b/src/include/catalog/pg_range.dat
***************
*** 8,13 ****
  { rngtypid => '3912', rngsubtype => '1082', rngcollation => '0', rngsubopc => '3122', rngcanonical => 'daterange_canonical', rngsubdiff => 'daterange_subdiff' },
  { rngtypid => '3926', rngsubtype => '20', rngcollation => '0', rngsubopc => '3124', rngcanonical => 'int8range_canonical', rngsubdiff => 'int8range_subdiff' },
  
- # prototypes for functions in pg_range.c
- 
  ]
--- 8,11 ----
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
new file mode 100644
index 65a60bd..a94010d
*** a/src/include/catalog/pg_type.dat
--- b/src/include/catalog/pg_type.dat
***************
*** 7,54 ****
  # TypInfo[] in bootstrap.c.
  
  # OIDS 1 - 99
  { oid => '16', descr => 'boolean, \'true\'/\'false\'',
    typname => 'bool', typlen => '1', typbyval => 't', typcategory => 'B', typispreferred => 't', typarray => '1000', 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 => '1001', 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 => '1002', 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 => '18', typarray => '1003', 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 => '1016', 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 => '1005', 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 => '21', typarray => '1006', 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 => '1007', typinput => 'int4in', typoutput => 'int4out', typreceive => 'int4recv', typsend => 'int4send', typalign => 'i' },
- 
  { oid => '24', descr => 'registered procedure',
    typname => 'regproc', typlen => '4', typbyval => 't', typcategory => 'N', typarray => '1008', 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 => '1009', 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 => '1028', 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 => '1010', typinput => 'tidin', typoutput => 'tidout', typreceive => 'tidrecv', typsend => 'tidsend', typalign => 's' },
- 
  { oid => '28', descr => 'transaction id',
    typname => 'xid', typlen => '4', typbyval => 't', typcategory => 'U', typarray => '1011', 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 => '1012', 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 => '26', typarray => '1013', typinput => 'oidvectorin', typoutput => 'oidvectorout', typreceive => 'oidvectorrecv', typsend => 'oidvectorsend', typalign => 'i' },
  
--- 7,41 ----
  # TypInfo[] in bootstrap.c.
  
  # OIDS 1 - 99
+ 
  { oid => '16', descr => 'boolean, \'true\'/\'false\'',
    typname => 'bool', typlen => '1', typbyval => 't', typcategory => 'B', typispreferred => 't', typarray => '1000', 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 => '1001', 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 => '1002', 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 => '18', typarray => '1003', 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 => '1016', 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 => '1005', 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 => '21', typarray => '1006', 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 => '1007', typinput => 'int4in', typoutput => 'int4out', typreceive => 'int4recv', typsend => 'int4send', typalign => 'i' },
  { oid => '24', descr => 'registered procedure',
    typname => 'regproc', typlen => '4', typbyval => 't', typcategory => 'N', typarray => '1008', 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 => '1009', 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 => '1028', 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 => '1010', typinput => 'tidin', typoutput => 'tidout', typreceive => 'tidrecv', typsend => 'tidsend', typalign => 's' },
  { oid => '28', descr => 'transaction id',
    typname => 'xid', typlen => '4', typbyval => 't', typcategory => 'U', typarray => '1011', 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 => '1012', 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 => '26', typarray => '1013', typinput => 'oidvectorin', typoutput => 'oidvectorout', typreceive => 'oidvectorrecv', typsend => 'oidvectorsend', typalign => 'i' },
  
***************
*** 65,70 ****
--- 52,58 ----
    typname => 'pg_class', typlen => '-1', typbyval => 'f', typtype => 'c', typcategory => 'C', typrelid => '1259', typarray => '0', 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 => '199', typinput => 'json_in', typoutput => 'json_out', typreceive => 'json_recv', typsend => 'json_send', typalign => 'i', typstorage => 'x' },
  { oid => '142', descr => 'XML content',
***************
*** 73,88 ****
    typname => '_xml', typlen => '-1', typbyval => 'f', typcategory => 'A', typelem => '142', typarray => '0', 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 => '114', typarray => '0', typinput => 'array_in', typoutput => 'array_out', typreceive => 'array_recv', typsend => 'array_send', typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
- 
  { oid => '194', descr => 'string representing an internal node tree',
    typname => 'pg_node_tree', typlen => '-1', typbyval => 'f', typcategory => 'S', typarray => '0', 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', descr => 'multivariate ndistinct coefficients',
    typname => 'pg_ndistinct', typlen => '-1', typbyval => 'f', typcategory => 'S', typarray => '0', typinput => 'pg_ndistinct_in', typoutput => 'pg_ndistinct_out', typreceive => 'pg_ndistinct_recv', typsend => 'pg_ndistinct_send', typalign => 'i', typstorage => 'x', typcollation => '100' },
- 
  { oid => '3402', descr => 'multivariate dependencies',
    typname => 'pg_dependencies', typlen => '-1', typbyval => 'f', typcategory => 'S', typarray => '0', typinput => 'pg_dependencies_in', typoutput => 'pg_dependencies_out', typreceive => 'pg_dependencies_recv', typsend => 'pg_dependencies_send', typalign => 'i', typstorage => 'x', typcollation => '100' },
- 
  { oid => '32', descr => 'internal type for passing CollectedCommand',
    typname => 'pg_ddl_command', typlen => 'SIZEOF_POINTER', typbyval => 't', typtype => 'p', typcategory => 'P', typarray => '0', typinput => 'pg_ddl_command_in', typoutput => 'pg_ddl_command_out', typreceive => 'pg_ddl_command_recv', typsend => 'pg_ddl_command_send', typalign => 'ALIGNOF_POINTER' },
  
--- 61,72 ----
***************
*** 98,103 ****
--- 82,88 ----
  # OIDS 500 - 599
  
  # OIDS 600 - 699
+ 
  { oid => '600', descr => 'geometric point \'(x, y)\'',
    typname => 'point', typlen => '16', typbyval => 'f', typcategory => 'G', typelem => '701', typarray => '1017', typinput => 'point_in', typoutput => 'point_out', typreceive => 'point_recv', typsend => 'point_send', typalign => 'd' },
  { oid => '601', descr => 'geometric line segment \'(pt1,pt2)\'',
***************
*** 108,114 ****
    typname => 'box', typlen => '32', typbyval => 'f', typcategory => 'G', typdelim => '\073', typelem => '600', typarray => '1020', 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 => '1027', 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 => '701', typarray => '629', typinput => 'line_in', typoutput => 'line_out', typreceive => 'line_recv', typsend => 'line_send', typalign => 'd' },
  { oid => '629',
--- 93,98 ----
***************
*** 128,134 ****
    typname => 'tinterval', typlen => '12', typbyval => 'f', typcategory => 'T', typarray => '1025', typinput => 'tintervalin', typoutput => 'tintervalout', typreceive => 'tintervalrecv', typsend => 'tintervalsend', typalign => 'i' },
  { oid => '705',
    typname => 'unknown', typlen => '-2', typbyval => 'f', typtype => 'p', typcategory => 'X', typarray => '0', 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 => '719', typinput => 'circle_in', typoutput => 'circle_out', typreceive => 'circle_recv', typsend => 'circle_send', typalign => 'd' },
  { oid => '719',
--- 112,117 ----
***************
*** 151,156 ****
--- 134,140 ----
  # OIDS 900 - 999
  
  # OIDS 1000 - 1099
+ 
  { oid => '1000',
    typname => '_bool', typlen => '-1', typbyval => 'f', typcategory => 'A', typelem => '16', typarray => '0', typinput => 'array_in', typoutput => 'array_out', typreceive => 'array_recv', typsend => 'array_send', typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
  { oid => '1001',
***************
*** 231,236 ****
--- 215,221 ----
    typname => 'time', typlen => '8', typbyval => 'FLOAT8PASSBYVAL', typcategory => 'D', typarray => '1183', 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 => '1115', typinput => 'timestamp_in', typoutput => 'timestamp_out', typreceive => 'timestamp_recv', typsend => 'timestamp_send', typmodin => 'timestamptypmodin', typmodout => 'timestamptypmodout', typalign => 'd' },
  { oid => '1115',
***************
*** 249,254 ****
--- 234,240 ----
    typname => '_interval', typlen => '-1', typbyval => 'f', typcategory => 'A', typelem => '1186', typarray => '0', 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 => '1700', typarray => '0', 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',
***************
*** 257,262 ****
--- 243,249 ----
    typname => '_timetz', typlen => '-1', typbyval => 'f', typcategory => 'A', typelem => '1266', typarray => '0', 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 => '1561', typinput => 'bit_in', typoutput => 'bit_out', typreceive => 'bit_recv', typsend => 'bit_send', typmodin => 'bittypmodin', typmodout => 'bittypmodout', typalign => 'i', typstorage => 'x' },
  { oid => '1561',
***************
*** 269,305 ****
  # OIDS 1600 - 1699
  
  # OIDS 1700 - 1799
  { oid => '1700', descr => 'numeric(precision, decimal), arbitrary precision number',
    typname => 'numeric', typlen => '-1', typbyval => 'f', typcategory => 'N', typarray => '1231', 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 => '2201', 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 => '1790', typarray => '0', 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 => '2207', typinput => 'regprocedurein', typoutput => 'regprocedureout', typreceive => 'regprocedurerecv', typsend => 'regproceduresend', typalign => 'i' },
- 
  { oid => '2203', descr => 'registered operator',
    typname => 'regoper', typlen => '4', typbyval => 't', typcategory => 'N', typarray => '2208', 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 => '2209', typinput => 'regoperatorin', typoutput => 'regoperatorout', typreceive => 'regoperatorrecv', typsend => 'regoperatorsend', typalign => 'i' },
- 
  { oid => '2205', descr => 'registered class',
    typname => 'regclass', typlen => '4', typbyval => 't', typcategory => 'N', typarray => '2210', typinput => 'regclassin', typoutput => 'regclassout', typreceive => 'regclassrecv', typsend => 'regclasssend', typalign => 'i' },
- 
  { oid => '2206', descr => 'registered type',
    typname => 'regtype', typlen => '4', typbyval => 't', typcategory => 'N', typarray => '2211', typinput => 'regtypein', typoutput => 'regtypeout', typreceive => 'regtyperecv', typsend => 'regtypesend', typalign => 'i' },
- 
  { oid => '4096', descr => 'registered role',
    typname => 'regrole', typlen => '4', typbyval => 't', typcategory => 'N', typarray => '4097', typinput => 'regrolein', typoutput => 'regroleout', typreceive => 'regrolerecv', typsend => 'regrolesend', typalign => 'i' },
- 
  { oid => '4089', descr => 'registered namespace',
    typname => 'regnamespace', typlen => '4', typbyval => 't', typcategory => 'N', typarray => '4090', typinput => 'regnamespacein', typoutput => 'regnamespaceout', typreceive => 'regnamespacerecv', typsend => 'regnamespacesend', typalign => 'i' },
- 
  { oid => '2207',
    typname => '_regprocedure', typlen => '-1', typbyval => 'f', typcategory => 'A', typelem => '2202', typarray => '0', typinput => 'array_in', typoutput => 'array_out', typreceive => 'array_recv', typsend => 'array_send', typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
  { oid => '2208',
--- 256,285 ----
  # OIDS 1600 - 1699
  
  # OIDS 1700 - 1799
+ 
  { oid => '1700', descr => 'numeric(precision, decimal), arbitrary precision number',
    typname => 'numeric', typlen => '-1', typbyval => 'f', typcategory => 'N', typarray => '1231', 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 => '2201', 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 => '1790', typarray => '0', 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 => '2207', typinput => 'regprocedurein', typoutput => 'regprocedureout', typreceive => 'regprocedurerecv', typsend => 'regproceduresend', typalign => 'i' },
  { oid => '2203', descr => 'registered operator',
    typname => 'regoper', typlen => '4', typbyval => 't', typcategory => 'N', typarray => '2208', 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 => '2209', typinput => 'regoperatorin', typoutput => 'regoperatorout', typreceive => 'regoperatorrecv', typsend => 'regoperatorsend', typalign => 'i' },
  { oid => '2205', descr => 'registered class',
    typname => 'regclass', typlen => '4', typbyval => 't', typcategory => 'N', typarray => '2210', typinput => 'regclassin', typoutput => 'regclassout', typreceive => 'regclassrecv', typsend => 'regclasssend', typalign => 'i' },
  { oid => '2206', descr => 'registered type',
    typname => 'regtype', typlen => '4', typbyval => 't', typcategory => 'N', typarray => '2211', typinput => 'regtypein', typoutput => 'regtypeout', typreceive => 'regtyperecv', typsend => 'regtypesend', typalign => 'i' },
  { oid => '4096', descr => 'registered role',
    typname => 'regrole', typlen => '4', typbyval => 't', typcategory => 'N', typarray => '4097', typinput => 'regrolein', typoutput => 'regroleout', typreceive => 'regrolerecv', typsend => 'regrolesend', typalign => 'i' },
  { oid => '4089', descr => 'registered namespace',
    typname => 'regnamespace', typlen => '4', typbyval => 't', typcategory => 'N', typarray => '4090', typinput => 'regnamespacein', typoutput => 'regnamespaceout', typreceive => 'regnamespacerecv', typsend => 'regnamespacesend', typalign => 'i' },
  { oid => '2207',
    typname => '_regprocedure', typlen => '-1', typbyval => 'f', typcategory => 'A', typelem => '2202', typarray => '0', typinput => 'array_in', typoutput => 'array_out', typreceive => 'array_recv', typsend => 'array_send', typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
  { oid => '2208',
***************
*** 338,344 ****
    typname => 'regconfig', typlen => '4', typbyval => 't', typcategory => 'N', typarray => '3735', 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 => '3770', typinput => 'regdictionaryin', typoutput => 'regdictionaryout', typreceive => 'regdictionaryrecv', typsend => 'regdictionarysend', typalign => 'i' },
- 
  { oid => '3643',
    typname => '_tsvector', typlen => '-1', typbyval => 'f', typcategory => 'A', typelem => '3614', typarray => '0', typinput => 'array_in', typoutput => 'array_out', typreceive => 'array_recv', typsend => 'array_send', typanalyze => 'array_typanalyze', typalign => 'i', typstorage => 'x' },
  { oid => '3644',
--- 318,323 ----
***************
*** 395,400 ****
--- 374,380 ----
  # 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 => '2287', typinput => 'record_in', typoutput => 'record_out', typreceive => 'record_recv', typsend => 'record_send', typalign => 'd', typstorage => 'x' },
  { oid => '2287',
***************
*** 432,439 ****
  { oid => '3831',
    typname => 'anyrange', typlen => '-1', typbyval => 'f', typtype => 'p', typcategory => 'P', typarray => '0', typinput => 'anyrange_in', typoutput => 'anyrange_out', typreceive => '-', typsend => '-', typalign => 'd', typstorage => 'x' },
  
- # macros
- 
- # Is a type OID a polymorphic pseudotype?	(Beware of multiple evaluation)
- 
  ]
--- 412,415 ----
