postgresql/src/include/catalog/pg_type.dat
Tomas Vondra 7300a69950 Add support for multivariate MCV lists
Introduce a third extended statistic type, supported by the CREATE
STATISTICS command - MCV lists, a generalization of the statistic
already built and used for individual columns.

Compared to the already supported types (n-distinct coefficients and
functional dependencies), MCV lists are more complex, include column
values and allow estimation of much wider range of common clauses
(equality and inequality conditions, IS NULL, IS NOT NULL etc.).
Similarly to the other types, a new pseudo-type (pg_mcv_list) is used.

Author: Tomas Vondra
Reviewed-by: Dean Rasheed, David Rowley, Mark Dilger, Alvaro Herrera
Discussion: https://postgr.es/m/dfdac334-9cf2-2597-fb27-f0fb3753f435@2ndquadrant.com
2019-03-27 18:32:18 +01:00

600 lines
32 KiB
Plaintext

#----------------------------------------------------------------------
#
# pg_type.dat
# Initial contents of the pg_type system catalog.
#
# Portions Copyright (c) 1996-2019, 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.
# To autogenerate an array type, add 'array_type_oid => 'nnnn' to the element
# type, which will instruct genbki.pl to generate a BKI entry for it.
# In a few cases, the array type's properties don't match the normal pattern
# so it can't be autogenerated; in such cases do not write array_type_oid.
# 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', array_type_oid => '1000',
descr => 'boolean, \'true\'/\'false\'',
typname => 'bool', typlen => '1', typbyval => 't', typcategory => 'B',
typispreferred => 't', typinput => 'boolin', typoutput => 'boolout',
typreceive => 'boolrecv', typsend => 'boolsend', typalign => 'c' },
{ oid => '17', array_type_oid => '1001',
descr => 'variable-length string, binary values escaped',
typname => 'bytea', typlen => '-1', typbyval => 'f', typcategory => 'U',
typinput => 'byteain', typoutput => 'byteaout', typreceive => 'bytearecv',
typsend => 'byteasend', typalign => 'i', typstorage => 'x' },
{ oid => '18', array_type_oid => '1002', descr => 'single character',
typname => 'char', typlen => '1', typbyval => 't', typcategory => 'S',
typinput => 'charin', typoutput => 'charout', typreceive => 'charrecv',
typsend => 'charsend', typalign => 'c' },
{ oid => '19', array_type_oid => '1003',
descr => '63-byte type for storing system identifiers',
typname => 'name', typlen => 'NAMEDATALEN', typbyval => 'f',
typcategory => 'S', typelem => 'char', typinput => 'namein',
typoutput => 'nameout', typreceive => 'namerecv', typsend => 'namesend',
typalign => 'c', typcollation => 'C' },
{ oid => '20', array_type_oid => '1016',
descr => '~18 digit integer, 8-byte storage',
typname => 'int8', typlen => '8', typbyval => 'FLOAT8PASSBYVAL',
typcategory => 'N', typinput => 'int8in', typoutput => 'int8out',
typreceive => 'int8recv', typsend => 'int8send', typalign => 'd' },
{ oid => '21', array_type_oid => '1005',
descr => '-32 thousand to 32 thousand, 2-byte storage',
typname => 'int2', typlen => '2', typbyval => 't', typcategory => 'N',
typinput => 'int2in', typoutput => 'int2out', typreceive => 'int2recv',
typsend => 'int2send', typalign => 's' },
{ oid => '22', array_type_oid => '1006',
descr => 'array of int2, used in system tables',
typname => 'int2vector', typlen => '-1', typbyval => 'f', typcategory => 'A',
typelem => 'int2', typinput => 'int2vectorin', typoutput => 'int2vectorout',
typreceive => 'int2vectorrecv', typsend => 'int2vectorsend',
typalign => 'i' },
{ oid => '23', array_type_oid => '1007',
descr => '-2 billion to 2 billion integer, 4-byte storage',
typname => 'int4', typlen => '4', typbyval => 't', typcategory => 'N',
typinput => 'int4in', typoutput => 'int4out', typreceive => 'int4recv',
typsend => 'int4send', typalign => 'i' },
{ oid => '24', array_type_oid => '1008', descr => 'registered procedure',
typname => 'regproc', typlen => '4', typbyval => 't', typcategory => 'N',
typinput => 'regprocin', typoutput => 'regprocout',
typreceive => 'regprocrecv', typsend => 'regprocsend', typalign => 'i' },
{ oid => '25', array_type_oid => '1009',
descr => 'variable-length string, no limit specified',
typname => 'text', typlen => '-1', typbyval => 'f', typcategory => 'S',
typispreferred => 't', typinput => 'textin', typoutput => 'textout',
typreceive => 'textrecv', typsend => 'textsend', typalign => 'i',
typstorage => 'x', typcollation => 'default' },
{ oid => '26', array_type_oid => '1028',
descr => 'object identifier(oid), maximum 4 billion',
typname => 'oid', typlen => '4', typbyval => 't', typcategory => 'N',
typispreferred => 't', typinput => 'oidin', typoutput => 'oidout',
typreceive => 'oidrecv', typsend => 'oidsend', typalign => 'i' },
{ oid => '27', array_type_oid => '1010',
descr => '(block, offset), physical location of tuple',
typname => 'tid', typlen => '6', typbyval => 'f', typcategory => 'U',
typinput => 'tidin', typoutput => 'tidout', typreceive => 'tidrecv',
typsend => 'tidsend', typalign => 's' },
{ oid => '28', array_type_oid => '1011', descr => 'transaction id',
typname => 'xid', typlen => '4', typbyval => 't', typcategory => 'U',
typinput => 'xidin', typoutput => 'xidout', typreceive => 'xidrecv',
typsend => 'xidsend', typalign => 'i' },
{ oid => '29', array_type_oid => '1012',
descr => 'command identifier type, sequence in transaction id',
typname => 'cid', typlen => '4', typbyval => 't', typcategory => 'U',
typinput => 'cidin', typoutput => 'cidout', typreceive => 'cidrecv',
typsend => 'cidsend', typalign => 'i' },
{ oid => '30', array_type_oid => '1013',
descr => 'array of oids, used in system tables',
typname => 'oidvector', typlen => '-1', typbyval => 'f', typcategory => 'A',
typelem => 'oid', 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 => 'pg_type', 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 => 'pg_attribute', 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 => 'pg_proc', 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 => 'pg_class', typinput => 'record_in',
typoutput => 'record_out', typreceive => 'record_recv',
typsend => 'record_send', typalign => 'd', typstorage => 'x' },
# OIDS 100 - 199
{ oid => '114', array_type_oid => '199', descr => 'JSON stored as text',
typname => 'json', typlen => '-1', typbyval => 'f', typcategory => 'U',
typinput => 'json_in', typoutput => 'json_out', typreceive => 'json_recv',
typsend => 'json_send', typalign => 'i', typstorage => 'x' },
{ oid => '142', array_type_oid => '143', descr => 'XML content',
typname => 'xml', typlen => '-1', typbyval => 'f', typcategory => 'U',
typinput => 'xml_in', typoutput => 'xml_out', typreceive => 'xml_recv',
typsend => 'xml_send', 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 => 'default' },
{ 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 => 'default' },
{ 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 => 'default' },
{ oid => '5017', oid_symbol => 'PGMCVLISTOID',
descr => 'multivariate MCV list',
typname => 'pg_mcv_list', typlen => '-1', typbyval => 'f',
typcategory => 'S', typinput => 'pg_mcv_list_in',
typoutput => 'pg_mcv_list_out', typreceive => 'pg_mcv_list_recv',
typsend => 'pg_mcv_list_send', typalign => 'i', typstorage => 'x',
typcollation => 'default' },
{ 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 600 - 699
{ oid => '600', array_type_oid => '1017',
descr => 'geometric point \'(x, y)\'',
typname => 'point', typlen => '16', typbyval => 'f', typcategory => 'G',
typelem => 'float8', typinput => 'point_in', typoutput => 'point_out',
typreceive => 'point_recv', typsend => 'point_send', typalign => 'd' },
{ oid => '601', array_type_oid => '1018',
descr => 'geometric line segment \'(pt1,pt2)\'',
typname => 'lseg', typlen => '32', typbyval => 'f', typcategory => 'G',
typelem => 'point', typinput => 'lseg_in', typoutput => 'lseg_out',
typreceive => 'lseg_recv', typsend => 'lseg_send', typalign => 'd' },
{ oid => '602', array_type_oid => '1019',
descr => 'geometric path \'(pt1,...)\'',
typname => 'path', typlen => '-1', typbyval => 'f', typcategory => 'G',
typinput => 'path_in', typoutput => 'path_out', typreceive => 'path_recv',
typsend => 'path_send', typalign => 'd', typstorage => 'x' },
{ oid => '603', array_type_oid => '1020',
descr => 'geometric box \'(lower left,upper right)\'',
typname => 'box', typlen => '32', typbyval => 'f', typcategory => 'G',
typdelim => ';', typelem => 'point', typinput => 'box_in',
typoutput => 'box_out', typreceive => 'box_recv', typsend => 'box_send',
typalign => 'd' },
{ oid => '604', array_type_oid => '1027',
descr => 'geometric polygon \'(pt1,...)\'',
typname => 'polygon', typlen => '-1', typbyval => 'f', typcategory => 'G',
typinput => 'poly_in', typoutput => 'poly_out', typreceive => 'poly_recv',
typsend => 'poly_send', typalign => 'd', typstorage => 'x' },
{ oid => '628', array_type_oid => '629', descr => 'geometric line',
typname => 'line', typlen => '24', typbyval => 'f', typcategory => 'G',
typelem => 'float8', typinput => 'line_in', typoutput => 'line_out',
typreceive => 'line_recv', typsend => 'line_send', typalign => 'd' },
# OIDS 700 - 799
{ oid => '700', array_type_oid => '1021',
descr => 'single-precision floating point number, 4-byte storage',
typname => 'float4', typlen => '4', typbyval => 'FLOAT4PASSBYVAL',
typcategory => 'N', typinput => 'float4in', typoutput => 'float4out',
typreceive => 'float4recv', typsend => 'float4send', typalign => 'i' },
{ oid => '701', array_type_oid => '1022',
descr => 'double-precision floating point number, 8-byte storage',
typname => 'float8', typlen => '8', typbyval => 'FLOAT8PASSBYVAL',
typcategory => 'N', typispreferred => 't', typinput => 'float8in',
typoutput => 'float8out', typreceive => 'float8recv', typsend => 'float8send',
typalign => 'd' },
{ oid => '705', descr => 'pseudo-type representing an undetermined type',
typname => 'unknown', typlen => '-2', typbyval => 'f', typtype => 'p',
typcategory => 'X', typinput => 'unknownin', typoutput => 'unknownout',
typreceive => 'unknownrecv', typsend => 'unknownsend', typalign => 'c' },
{ oid => '718', array_type_oid => '719',
descr => 'geometric circle \'(center,radius)\'',
typname => 'circle', typlen => '24', typbyval => 'f', typcategory => 'G',
typinput => 'circle_in', typoutput => 'circle_out',
typreceive => 'circle_recv', typsend => 'circle_send', typalign => 'd' },
{ oid => '790', oid_symbol => 'CASHOID', array_type_oid => '791',
descr => 'monetary amounts, $d,ddd.cc',
typname => 'money', typlen => '8', typbyval => 'FLOAT8PASSBYVAL',
typcategory => 'N', typinput => 'cash_in', typoutput => 'cash_out',
typreceive => 'cash_recv', typsend => 'cash_send', typalign => 'd' },
# OIDS 800 - 899
{ oid => '829', array_type_oid => '1040',
descr => 'XX:XX:XX:XX:XX:XX, MAC address',
typname => 'macaddr', typlen => '6', typbyval => 'f', typcategory => 'U',
typinput => 'macaddr_in', typoutput => 'macaddr_out',
typreceive => 'macaddr_recv', typsend => 'macaddr_send', typalign => 'i' },
{ oid => '869', array_type_oid => '1041',
descr => 'IP address/netmask, host address, netmask optional',
typname => 'inet', typlen => '-1', typbyval => 'f', typcategory => 'I',
typispreferred => 't', typinput => 'inet_in', typoutput => 'inet_out',
typreceive => 'inet_recv', typsend => 'inet_send', typalign => 'i',
typstorage => 'm' },
{ oid => '650', array_type_oid => '651',
descr => 'network IP address/netmask, network address',
typname => 'cidr', typlen => '-1', typbyval => 'f', typcategory => 'I',
typinput => 'cidr_in', typoutput => 'cidr_out', typreceive => 'cidr_recv',
typsend => 'cidr_send', typalign => 'i', typstorage => 'm' },
{ oid => '774', array_type_oid => '775',
descr => 'XX:XX:XX:XX:XX:XX:XX:XX, MAC address',
typname => 'macaddr8', typlen => '8', typbyval => 'f', typcategory => 'U',
typinput => 'macaddr8_in', typoutput => 'macaddr8_out',
typreceive => 'macaddr8_recv', typsend => 'macaddr8_send', typalign => 'i' },
# OIDS 1000 - 1099
{ oid => '1033', array_type_oid => '1034', descr => 'access control list',
typname => 'aclitem', typlen => '12', typbyval => 'f', typcategory => 'U',
typinput => 'aclitemin', typoutput => 'aclitemout', typreceive => '-',
typsend => '-', typalign => 'i' },
{ oid => '1042', array_type_oid => '1014',
descr => 'char(length), blank-padded string, fixed storage length',
typname => 'bpchar', typlen => '-1', typbyval => 'f', typcategory => 'S',
typinput => 'bpcharin', typoutput => 'bpcharout', typreceive => 'bpcharrecv',
typsend => 'bpcharsend', typmodin => 'bpchartypmodin',
typmodout => 'bpchartypmodout', typalign => 'i', typstorage => 'x',
typcollation => 'default' },
{ oid => '1043', array_type_oid => '1015',
descr => 'varchar(length), non-blank-padded string, variable storage length',
typname => 'varchar', typlen => '-1', typbyval => 'f', typcategory => 'S',
typinput => 'varcharin', typoutput => 'varcharout',
typreceive => 'varcharrecv', typsend => 'varcharsend',
typmodin => 'varchartypmodin', typmodout => 'varchartypmodout',
typalign => 'i', typstorage => 'x', typcollation => 'default' },
{ oid => '1082', array_type_oid => '1182', descr => 'date',
typname => 'date', typlen => '4', typbyval => 't', typcategory => 'D',
typinput => 'date_in', typoutput => 'date_out', typreceive => 'date_recv',
typsend => 'date_send', typalign => 'i' },
{ oid => '1083', array_type_oid => '1183', descr => 'time of day',
typname => 'time', typlen => '8', typbyval => 'FLOAT8PASSBYVAL',
typcategory => 'D', typinput => 'time_in', typoutput => 'time_out',
typreceive => 'time_recv', typsend => 'time_send', typmodin => 'timetypmodin',
typmodout => 'timetypmodout', typalign => 'd' },
# OIDS 1100 - 1199
{ oid => '1114', array_type_oid => '1115', descr => 'date and time',
typname => 'timestamp', typlen => '8', typbyval => 'FLOAT8PASSBYVAL',
typcategory => 'D', typinput => 'timestamp_in', typoutput => 'timestamp_out',
typreceive => 'timestamp_recv', typsend => 'timestamp_send',
typmodin => 'timestamptypmodin', typmodout => 'timestamptypmodout',
typalign => 'd' },
{ oid => '1184', array_type_oid => '1185',
descr => 'date and time with time zone',
typname => 'timestamptz', typlen => '8', typbyval => 'FLOAT8PASSBYVAL',
typcategory => 'D', typispreferred => 't', typinput => 'timestamptz_in',
typoutput => 'timestamptz_out', typreceive => 'timestamptz_recv',
typsend => 'timestamptz_send', typmodin => 'timestamptztypmodin',
typmodout => 'timestamptztypmodout', typalign => 'd' },
{ oid => '1186', array_type_oid => '1187',
descr => '@ <number> <units>, time interval',
typname => 'interval', typlen => '16', typbyval => 'f', typcategory => 'T',
typispreferred => 't', typinput => 'interval_in', typoutput => 'interval_out',
typreceive => 'interval_recv', typsend => 'interval_send',
typmodin => 'intervaltypmodin', typmodout => 'intervaltypmodout',
typalign => 'd' },
# OIDS 1200 - 1299
{ oid => '1266', array_type_oid => '1270',
descr => 'time of day with time zone',
typname => 'timetz', typlen => '12', typbyval => 'f', typcategory => 'D',
typinput => 'timetz_in', typoutput => 'timetz_out',
typreceive => 'timetz_recv', typsend => 'timetz_send',
typmodin => 'timetztypmodin', typmodout => 'timetztypmodout',
typalign => 'd' },
# OIDS 1500 - 1599
{ oid => '1560', array_type_oid => '1561', descr => 'fixed-length bit string',
typname => 'bit', typlen => '-1', typbyval => 'f', typcategory => 'V',
typinput => 'bit_in', typoutput => 'bit_out', typreceive => 'bit_recv',
typsend => 'bit_send', typmodin => 'bittypmodin', typmodout => 'bittypmodout',
typalign => 'i', typstorage => 'x' },
{ oid => '1562', array_type_oid => '1563',
descr => 'variable-length bit string',
typname => 'varbit', typlen => '-1', typbyval => 'f', typcategory => 'V',
typispreferred => 't', typinput => 'varbit_in', typoutput => 'varbit_out',
typreceive => 'varbit_recv', typsend => 'varbit_send',
typmodin => 'varbittypmodin', typmodout => 'varbittypmodout', typalign => 'i',
typstorage => 'x' },
# OIDS 1700 - 1799
{ oid => '1700', array_type_oid => '1231',
descr => 'numeric(precision, decimal), arbitrary precision number',
typname => 'numeric', typlen => '-1', typbyval => 'f', typcategory => 'N',
typinput => 'numeric_in', typoutput => 'numeric_out',
typreceive => 'numeric_recv', typsend => 'numeric_send',
typmodin => 'numerictypmodin', typmodout => 'numerictypmodout',
typalign => 'i', typstorage => 'm' },
{ oid => '1790', array_type_oid => '2201',
descr => 'reference to cursor (portal name)',
typname => 'refcursor', typlen => '-1', typbyval => 'f', typcategory => 'U',
typinput => 'textin', typoutput => 'textout', typreceive => 'textrecv',
typsend => 'textsend', typalign => 'i', typstorage => 'x' },
# OIDS 2200 - 2299
{ oid => '2202', array_type_oid => '2207',
descr => 'registered procedure (with args)',
typname => 'regprocedure', typlen => '4', typbyval => 't', typcategory => 'N',
typinput => 'regprocedurein', typoutput => 'regprocedureout',
typreceive => 'regprocedurerecv', typsend => 'regproceduresend',
typalign => 'i' },
{ oid => '2203', array_type_oid => '2208', descr => 'registered operator',
typname => 'regoper', typlen => '4', typbyval => 't', typcategory => 'N',
typinput => 'regoperin', typoutput => 'regoperout',
typreceive => 'regoperrecv', typsend => 'regopersend', typalign => 'i' },
{ oid => '2204', array_type_oid => '2209',
descr => 'registered operator (with args)',
typname => 'regoperator', typlen => '4', typbyval => 't', typcategory => 'N',
typinput => 'regoperatorin', typoutput => 'regoperatorout',
typreceive => 'regoperatorrecv', typsend => 'regoperatorsend',
typalign => 'i' },
{ oid => '2205', array_type_oid => '2210', descr => 'registered class',
typname => 'regclass', typlen => '4', typbyval => 't', typcategory => 'N',
typinput => 'regclassin', typoutput => 'regclassout',
typreceive => 'regclassrecv', typsend => 'regclasssend', typalign => 'i' },
{ oid => '2206', array_type_oid => '2211', descr => 'registered type',
typname => 'regtype', typlen => '4', typbyval => 't', typcategory => 'N',
typinput => 'regtypein', typoutput => 'regtypeout',
typreceive => 'regtyperecv', typsend => 'regtypesend', typalign => 'i' },
{ oid => '4096', array_type_oid => '4097', descr => 'registered role',
typname => 'regrole', typlen => '4', typbyval => 't', typcategory => 'N',
typinput => 'regrolein', typoutput => 'regroleout',
typreceive => 'regrolerecv', typsend => 'regrolesend', typalign => 'i' },
{ oid => '4089', array_type_oid => '4090', descr => 'registered namespace',
typname => 'regnamespace', typlen => '4', typbyval => 't', typcategory => 'N',
typinput => 'regnamespacein', typoutput => 'regnamespaceout',
typreceive => 'regnamespacerecv', typsend => 'regnamespacesend',
typalign => 'i' },
# uuid
{ oid => '2950', array_type_oid => '2951', descr => 'UUID datatype',
typname => 'uuid', typlen => '16', typbyval => 'f', typcategory => 'U',
typinput => 'uuid_in', typoutput => 'uuid_out', typreceive => 'uuid_recv',
typsend => 'uuid_send', typalign => 'c' },
# pg_lsn
{ oid => '3220', oid_symbol => 'LSNOID', array_type_oid => '3221',
descr => 'PostgreSQL LSN datatype',
typname => 'pg_lsn', typlen => '8', typbyval => 'FLOAT8PASSBYVAL',
typcategory => 'U', typinput => 'pg_lsn_in', typoutput => 'pg_lsn_out',
typreceive => 'pg_lsn_recv', typsend => 'pg_lsn_send', typalign => 'd' },
# text search
{ oid => '3614', array_type_oid => '3643',
descr => 'text representation for text search',
typname => 'tsvector', typlen => '-1', typbyval => 'f', typcategory => 'U',
typinput => 'tsvectorin', typoutput => 'tsvectorout',
typreceive => 'tsvectorrecv', typsend => 'tsvectorsend',
typanalyze => 'ts_typanalyze', typalign => 'i', typstorage => 'x' },
{ oid => '3642', array_type_oid => '3644',
descr => 'GiST index internal text representation for text search',
typname => 'gtsvector', typlen => '-1', typbyval => 'f', typcategory => 'U',
typinput => 'gtsvectorin', typoutput => 'gtsvectorout', typreceive => '-',
typsend => '-', typalign => 'i' },
{ oid => '3615', array_type_oid => '3645',
descr => 'query representation for text search',
typname => 'tsquery', typlen => '-1', typbyval => 'f', typcategory => 'U',
typinput => 'tsqueryin', typoutput => 'tsqueryout',
typreceive => 'tsqueryrecv', typsend => 'tsquerysend', typalign => 'i' },
{ oid => '3734', array_type_oid => '3735',
descr => 'registered text search configuration',
typname => 'regconfig', typlen => '4', typbyval => 't', typcategory => 'N',
typinput => 'regconfigin', typoutput => 'regconfigout',
typreceive => 'regconfigrecv', typsend => 'regconfigsend', typalign => 'i' },
{ oid => '3769', array_type_oid => '3770',
descr => 'registered text search dictionary',
typname => 'regdictionary', typlen => '4', typbyval => 't',
typcategory => 'N', typinput => 'regdictionaryin',
typoutput => 'regdictionaryout', typreceive => 'regdictionaryrecv',
typsend => 'regdictionarysend', typalign => 'i' },
# jsonb
{ oid => '3802', array_type_oid => '3807', descr => 'Binary JSON',
typname => 'jsonb', typlen => '-1', typbyval => 'f', typcategory => 'U',
typinput => 'jsonb_in', typoutput => 'jsonb_out', typreceive => 'jsonb_recv',
typsend => 'jsonb_send', typalign => 'i', typstorage => 'x' },
{ oid => '4072', array_type_oid => '4073', descr => 'JSON path',
typname => 'jsonpath', typlen => '-1', typbyval => 'f', typcategory => 'U',
typarray => '_jsonpath', typinput => 'jsonpath_in',
typoutput => 'jsonpath_out', typreceive => '-', typsend => '-',
typalign => 'i', typstorage => 'x' },
{ oid => '2970', array_type_oid => '2949', descr => 'txid snapshot',
typname => 'txid_snapshot', typlen => '-1', typbyval => 'f',
typcategory => 'U', typinput => 'txid_snapshot_in',
typoutput => 'txid_snapshot_out', typreceive => 'txid_snapshot_recv',
typsend => 'txid_snapshot_send', typalign => 'd', typstorage => 'x' },
# range types
{ oid => '3904', array_type_oid => '3905', descr => 'range of integers',
typname => 'int4range', typlen => '-1', typbyval => 'f', typtype => 'r',
typcategory => 'R', typinput => 'range_in', typoutput => 'range_out',
typreceive => 'range_recv', typsend => 'range_send',
typanalyze => 'range_typanalyze', typalign => 'i', typstorage => 'x' },
{ oid => '3906', array_type_oid => '3907', descr => 'range of numerics',
typname => 'numrange', typlen => '-1', typbyval => 'f', typtype => 'r',
typcategory => 'R', typinput => 'range_in', typoutput => 'range_out',
typreceive => 'range_recv', typsend => 'range_send',
typanalyze => 'range_typanalyze', typalign => 'i', typstorage => 'x' },
{ oid => '3908', array_type_oid => '3909',
descr => 'range of timestamps without time zone',
typname => 'tsrange', typlen => '-1', typbyval => 'f', typtype => 'r',
typcategory => 'R', typinput => 'range_in', typoutput => 'range_out',
typreceive => 'range_recv', typsend => 'range_send',
typanalyze => 'range_typanalyze', typalign => 'd', typstorage => 'x' },
{ oid => '3910', array_type_oid => '3911',
descr => 'range of timestamps with time zone',
typname => 'tstzrange', typlen => '-1', typbyval => 'f', typtype => 'r',
typcategory => 'R', typinput => 'range_in', typoutput => 'range_out',
typreceive => 'range_recv', typsend => 'range_send',
typanalyze => 'range_typanalyze', typalign => 'd', typstorage => 'x' },
{ oid => '3912', array_type_oid => '3913', descr => 'range of dates',
typname => 'daterange', typlen => '-1', typbyval => 'f', typtype => 'r',
typcategory => 'R', typinput => 'range_in', typoutput => 'range_out',
typreceive => 'range_recv', typsend => 'range_send',
typanalyze => 'range_typanalyze', typalign => 'i', typstorage => 'x' },
{ oid => '3926', array_type_oid => '3927', descr => 'range of bigints',
typname => 'int8range', typlen => '-1', typbyval => 'f', typtype => 'r',
typcategory => 'R', typinput => 'range_in', typoutput => 'range_out',
typreceive => 'range_recv', typsend => 'range_send',
typanalyze => 'range_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', descr => 'pseudo-type representing any composite type',
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' },
# Arrays of records have typcategory P, so they can't be autogenerated.
{ 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', array_type_oid => '1263', descr => 'C-style string',
typname => 'cstring', typlen => '-2', typbyval => 'f', typtype => 'p',
typcategory => 'P', typinput => 'cstring_in', typoutput => 'cstring_out',
typreceive => 'cstring_recv', typsend => 'cstring_send', typalign => 'c' },
{ oid => '2276', descr => 'pseudo-type representing any type',
typname => 'any', typlen => '4', typbyval => 't', typtype => 'p',
typcategory => 'P', typinput => 'any_in', typoutput => 'any_out',
typreceive => '-', typsend => '-', typalign => 'i' },
{ oid => '2277', descr => 'pseudo-type representing a polymorphic array type',
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',
descr => 'pseudo-type for the result of a function with no real result',
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', descr => 'pseudo-type for the result of a trigger function',
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',
descr => 'pseudo-type for the result of an event trigger function',
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',
descr => 'pseudo-type for the result of a language handler function',
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',
descr => 'pseudo-type representing an internal data structure',
typname => 'internal', typlen => 'SIZEOF_POINTER', typbyval => 't',
typtype => 'p', typcategory => 'P', typinput => 'internal_in',
typoutput => 'internal_out', typreceive => '-', typsend => '-',
typalign => 'ALIGNOF_POINTER' },
{ oid => '2282', descr => 'obsolete, deprecated pseudo-type',
typname => 'opaque', typlen => '4', typbyval => 't', typtype => 'p',
typcategory => 'P', typinput => 'opaque_in', typoutput => 'opaque_out',
typreceive => '-', typsend => '-', typalign => 'i' },
{ oid => '2283', descr => 'pseudo-type representing a polymorphic base type',
typname => 'anyelement', typlen => '4', typbyval => 't', typtype => 'p',
typcategory => 'P', typinput => 'anyelement_in',
typoutput => 'anyelement_out', typreceive => '-', typsend => '-',
typalign => 'i' },
{ oid => '2776',
descr => 'pseudo-type representing a polymorphic base type that is not an array',
typname => 'anynonarray', typlen => '4', typbyval => 't', typtype => 'p',
typcategory => 'P', typinput => 'anynonarray_in',
typoutput => 'anynonarray_out', typreceive => '-', typsend => '-',
typalign => 'i' },
{ oid => '3500',
descr => 'pseudo-type representing a polymorphic base type that is an enum',
typname => 'anyenum', typlen => '4', typbyval => 't', typtype => 'p',
typcategory => 'P', typinput => 'anyenum_in', typoutput => 'anyenum_out',
typreceive => '-', typsend => '-', typalign => 'i' },
{ oid => '3115',
descr => 'pseudo-type for the result of an FDW handler function',
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',
descr => 'pseudo-type for the result of an index AM handler function',
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',
descr => 'pseudo-type for the result of a tablesample method function',
typname => 'tsm_handler', typlen => '4', typbyval => 't', typtype => 'p',
typcategory => 'P', typinput => 'tsm_handler_in',
typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
typalign => 'i' },
{ oid => '269',
typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
typcategory => 'P', typinput => 'table_am_handler_in',
typoutput => 'table_am_handler_out', typreceive => '-', typsend => '-',
typalign => 'i' },
{ oid => '3831',
descr => 'pseudo-type representing a polymorphic base type that is a range',
typname => 'anyrange', typlen => '-1', typbyval => 'f', typtype => 'p',
typcategory => 'P', typinput => 'anyrange_in', typoutput => 'anyrange_out',
typreceive => '-', typsend => '-', typalign => 'd', typstorage => 'x' },
]