{"Entry":{"collection":"type","key":"pg_ndistinct","name":"pg_ndistinct","aliases":[],"metadata":{"aliases":[],"category":"Character strings","content_hash":"5b0ee4632825f6ea5a501dbebce900e3c88b5d08990a391e651ed32e1f1d43d2","imported_at":"2026-09-30T00:40:36.393058+08:00","name":"pg_ndistinct","name_zh":"","slug":"pg_ndistinct","summary":"multivariate ndistinct coefficients"}},"Definition":{"Collection":"type","Key":"pg_ndistinct","SourceDatabase":"center","Version":"18","SourceTable":"data_type","SourceKey":"pg_ndistinct","SourceRevision":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f","Facts":{"aliases":[],"casts":[{"castcontext":"i","castfunc":"0","castmethod":"b","castsource":"pg_ndistinct","casttarget":"bytea"},{"castcontext":"i","castfunc":"0","castmethod":"i","castsource":"pg_ndistinct","casttarget":"text"}],"catalog":{"array_type_name":"","array_type_oid":"0","descr":"multivariate ndistinct coefficients","oid":"3361","typacl":"_null_","typalign":"i","typanalyze":"-","typarray":"0","typbasetype":"0","typbyval":"f","typcategory":"Z","typcollation":"default","typdefault":"_null_","typdefaultbin":"_null_","typdelim":"','","typelem":"0","typinput":"pg_ndistinct_in","typisdefined":"t","typispreferred":"f","typlen":"-1","typmodin":"-","typmodout":"-","typname":"pg_ndistinct","typnamespace":"pg_catalog","typndims":"0","typnotnull":"f","typoutput":"pg_ndistinct_out","typowner":"POSTGRES","typreceive":"pg_ndistinct_recv","typrelid":"0","typsend":"pg_ndistinct_send","typstorage":"x","typsubscript":"-","typtype":"b","typtypmod":"-1"},"comparison_data":{"aliases":[],"casts":[{"castcontext":"i","castfunc":"0","castmethod":"b","castsource":"pg_ndistinct","casttarget":"bytea"},{"castcontext":"i","castfunc":"0","castmethod":"i","castsource":"pg_ndistinct","casttarget":"text"}],"catalog":{"array_type_name":"","typacl":"_null_","typalign":"i","typanalyze":"-","typarray":"","typbasetype":"0","typbyval":"f","typcategory":"Z","typcollation":"default","typdefault":"_null_","typdefaultbin":"_null_","typdelim":",","typelem":"0","typinput":"pg_ndistinct_in","typisdefined":"t","typispreferred":"f","typlen":"-1","typmodin":"-","typmodout":"-","typname":"pg_ndistinct","typndims":"0","typnotnull":"f","typoutput":"pg_ndistinct_out","typreceive":"pg_ndistinct_recv","typrelid":"0","typsend":"pg_ndistinct_send","typstorage":"x","typsubscript":"-","typtype":"b","typtypmod":"-1"},"facts":[{"label":"Catalog name","value":"pg_catalog.pg_ndistinct"},{"label":"Declared length","value":"Variable length (varlena)"},{"label":"Input function","value":"pg_ndistinct_in"},{"label":"Output function","value":"pg_ndistinct_out"},{"label":"Storage strategy","value":"extended"},{"label":"Type OID","value":"3361"},{"label":"Type kind","value":"Base type"}],"operator_classes":[],"operators":[],"ranges":[]},"comparison_hash":"87c9069448c5b1f629dbe9ef15bcfc028d4fba78633568d86c94a07a311096b1","coverage":"source inventory; exact declared input types for operator classes","description":["multivariate ndistinct coefficients"],"facts":[{"label":"Catalog name","value":"pg_catalog.pg_ndistinct"},{"label":"Type OID","value":"3361"},{"label":"Type kind","value":"Base type"},{"label":"Declared length","value":"Variable length (varlena)"},{"label":"Storage strategy","value":"extended"},{"label":"Input function","value":"pg_ndistinct_in"},{"label":"Output function","value":"pg_ndistinct_out"}],"manual_documentation":"catalog schema only","manual_html":"\u003cdiv class=\"sect1\" id=\"CATALOG-PG-TYPE\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch2 class=\"title\"\u003e52.64. \u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e \u003c/h2\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe catalog \u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e stores information about data types. Base types and enum types (scalar types) are created with \u003ca class=\"link\" href=\"/docs/18/sql-createtype.html\" title=\"CREATE TYPE\"\u003e\u003ccode class=\"command\"\u003eCREATE TYPE\u003c/code\u003e\u003c/a\u003e, and domains with \u003ca class=\"link\" href=\"/docs/18/sql-createdomain.html\" title=\"CREATE DOMAIN\"\u003e\u003ccode class=\"command\"\u003eCREATE DOMAIN\u003c/code\u003e\u003c/a\u003e. A composite type is automatically created for each table in the database, to represent the row structure of the table. It is also possible to create composite types with \u003ccode class=\"command\"\u003eCREATE TYPE AS\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"id-1.10.4.66.4\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 52.64. \u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e Columns\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003eColumn Type\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eRow identifier\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypname\u003c/code\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eData type name\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypnamespace\u003c/code\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-namespace.html\" title=\"52.32. pg_namespace\"\u003e\u003ccode class=\"structname\"\u003epg_namespace\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eThe OID of the namespace that contains this type\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypowner\u003c/code\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-authid.html\" title=\"52.8. pg_authid\"\u003e\u003ccode class=\"structname\"\u003epg_authid\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eOwner of the type\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etyplen\u003c/code\u003e \u003ccode class=\"type\"\u003eint2\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eFor a fixed-size type, \u003ccode class=\"structfield\"\u003etyplen\u003c/code\u003e is the number of bytes in the internal representation of the type. But for a variable-length type, \u003ccode class=\"structfield\"\u003etyplen\u003c/code\u003e is negative. -1 indicates a \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003evarlena\u003c/span\u003e”\u003c/span\u003e type (one that has a length word), -2 indicates a null-terminated C string.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypbyval\u003c/code\u003e \u003ccode class=\"type\"\u003ebool\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etypbyval\u003c/code\u003e determines whether internal routines pass a value of this type by value or by reference. \u003ccode class=\"structfield\"\u003etypbyval\u003c/code\u003e had better be false if \u003ccode class=\"structfield\"\u003etyplen\u003c/code\u003e is not 1, 2, or 4 (or 8 on machines where Datum is 8 bytes). Variable-length types are always passed by reference. Note that \u003ccode class=\"structfield\"\u003etypbyval\u003c/code\u003e can be false even if the length would allow pass-by-value.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etyptype\u003c/code\u003e \u003ccode class=\"type\"\u003echar\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etyptype\u003c/code\u003e is \u003ccode class=\"literal\"\u003eb\u003c/code\u003e for a base type, \u003ccode class=\"literal\"\u003ec\u003c/code\u003e for a composite type (e.g., a table's row type), \u003ccode class=\"literal\"\u003ed\u003c/code\u003e for a domain, \u003ccode class=\"literal\"\u003ee\u003c/code\u003e for an enum type, \u003ccode class=\"literal\"\u003ep\u003c/code\u003e for a pseudo-type, \u003ccode class=\"literal\"\u003er\u003c/code\u003e for a range type, or \u003ccode class=\"literal\"\u003em\u003c/code\u003e for a multirange type. See also \u003ccode class=\"structfield\"\u003etyprelid\u003c/code\u003e and \u003ccode class=\"structfield\"\u003etypbasetype\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypcategory\u003c/code\u003e \u003ccode class=\"type\"\u003echar\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etypcategory\u003c/code\u003e is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003epreferred\u003c/span\u003e”\u003c/span\u003e. See \u003ca class=\"xref\" href=\"/docs/18/catalog-pg-type.html#CATALOG-TYPCATEGORY-TABLE\" title=\"Table 52.65. typcategory Codes\"\u003eTable 52.65\u003c/a\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypispreferred\u003c/code\u003e \u003ccode class=\"type\"\u003ebool\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTrue if the type is a preferred cast target within its \u003ccode class=\"structfield\"\u003etypcategory\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypisdefined\u003c/code\u003e \u003ccode class=\"type\"\u003ebool\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTrue if the type is defined, false if this is a placeholder entry for a not-yet-defined type. When \u003ccode class=\"structfield\"\u003etypisdefined\u003c/code\u003e is false, nothing except the type name, namespace, and OID can be relied on.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypdelim\u003c/code\u003e \u003ccode class=\"type\"\u003echar\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eCharacter that separates two values of this type when parsing array input. Note that the delimiter is associated with the array element data type, not the array data type.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etyprelid\u003c/code\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-class.html\" title=\"52.11. pg_class\"\u003e\u003ccode class=\"structname\"\u003epg_class\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eIf this is a composite type (see \u003ccode class=\"structfield\"\u003etyptype\u003c/code\u003e), then this column points to the \u003ca class=\"link\" href=\"/docs/18/catalog-pg-class.html\" title=\"52.11. pg_class\"\u003e\u003ccode class=\"structname\"\u003epg_class\u003c/code\u003e\u003c/a\u003e entry that defines the corresponding table. (For a free-standing composite type, the \u003ca class=\"link\" href=\"/docs/18/catalog-pg-class.html\" title=\"52.11. pg_class\"\u003e\u003ccode class=\"structname\"\u003epg_class\u003c/code\u003e\u003c/a\u003e entry doesn't really represent a table, but it is needed anyway for the type's \u003ca class=\"link\" href=\"/docs/18/catalog-pg-attribute.html\" title=\"52.7. pg_attribute\"\u003e\u003ccode class=\"structname\"\u003epg_attribute\u003c/code\u003e\u003c/a\u003e entries to link to.) Zero for non-composite types.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypsubscript\u003c/code\u003e \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-proc.html\" title=\"52.39. pg_proc\"\u003e\u003ccode class=\"structname\"\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eSubscripting handler function's OID, or zero if this type doesn't support subscripting. Types that are \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003etrue\u003c/span\u003e”\u003c/span\u003e array types have \u003ccode class=\"structfield\"\u003etypsubscript\u003c/code\u003e = \u003ccode class=\"function\"\u003earray_subscript_handler\u003c/code\u003e, but other types may have other handler functions to implement specialized subscripting behavior.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypelem\u003c/code\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-type.html\" title=\"52.64. pg_type\"\u003e\u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eIf \u003ccode class=\"structfield\"\u003etypelem\u003c/code\u003e is not zero then it identifies another row in \u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e, defining the type yielded by subscripting. This should be zero if \u003ccode class=\"structfield\"\u003etypsubscript\u003c/code\u003e is zero. However, it can be zero when \u003ccode class=\"structfield\"\u003etypsubscript\u003c/code\u003e isn't zero, if the handler doesn't need \u003ccode class=\"structfield\"\u003etypelem\u003c/code\u003e to determine the subscripting result type. Note that a \u003ccode class=\"structfield\"\u003etypelem\u003c/code\u003e dependency is considered to imply physical containment of the element type in this type; so DDL changes on the element type might be restricted by the presence of this type.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etyparray\u003c/code\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-type.html\" title=\"52.64. pg_type\"\u003e\u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eIf \u003ccode class=\"structfield\"\u003etyparray\u003c/code\u003e is not zero then it identifies another row in \u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e, which is the \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003etrue\u003c/span\u003e”\u003c/span\u003e array type having this type as element\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypinput\u003c/code\u003e \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-proc.html\" title=\"52.39. pg_proc\"\u003e\u003ccode class=\"structname\"\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eInput conversion function (text format)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypoutput\u003c/code\u003e \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-proc.html\" title=\"52.39. pg_proc\"\u003e\u003ccode class=\"structname\"\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eOutput conversion function (text format)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypreceive\u003c/code\u003e \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-proc.html\" title=\"52.39. pg_proc\"\u003e\u003ccode class=\"structname\"\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eInput conversion function (binary format), or zero if none\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypsend\u003c/code\u003e \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-proc.html\" title=\"52.39. pg_proc\"\u003e\u003ccode class=\"structname\"\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eOutput conversion function (binary format), or zero if none\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypmodin\u003c/code\u003e \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-proc.html\" title=\"52.39. pg_proc\"\u003e\u003ccode class=\"structname\"\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eType modifier input function, or zero if type does not support modifiers\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypmodout\u003c/code\u003e \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-proc.html\" title=\"52.39. pg_proc\"\u003e\u003ccode class=\"structname\"\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eType modifier output function, or zero to use the standard format\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypanalyze\u003c/code\u003e \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-proc.html\" title=\"52.39. pg_proc\"\u003e\u003ccode class=\"structname\"\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eCustom \u003ca class=\"xref\" href=\"/docs/18/sql-analyze.html\" title=\"ANALYZE\"\u003e\u003cspan class=\"refentrytitle\"\u003eANALYZE\u003c/span\u003e\u003c/a\u003e function, or zero to use the standard function\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypalign\u003c/code\u003e \u003ccode class=\"type\"\u003echar\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etypalign\u003c/code\u003e is the alignment required when storing a value of this type. It applies to storage on disk as well as most representations of the value inside \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e. When multiple values are stored consecutively, such as in the representation of a complete row on disk, padding is inserted before a datum of this type so that it begins on the specified boundary. The alignment reference is the beginning of the first datum in the sequence. Possible values are:\u003c/p\u003e\n\u003cdiv class=\"itemizedlist\"\u003e\n\u003cul class=\"itemizedlist\"\u003e\n\u003cli class=\"listitem\"\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ec\u003c/code\u003e = \u003ccode class=\"type\"\u003echar\u003c/code\u003e alignment, i.e., no alignment needed.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli class=\"listitem\"\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003es\u003c/code\u003e = \u003ccode class=\"type\"\u003eshort\u003c/code\u003e alignment (2 bytes on most machines).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli class=\"listitem\"\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ei\u003c/code\u003e = \u003ccode class=\"type\"\u003eint\u003c/code\u003e alignment (4 bytes on most machines).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli class=\"listitem\"\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ed\u003c/code\u003e = \u003ccode class=\"type\"\u003edouble\u003c/code\u003e alignment (8 bytes on many machines, but by no means all).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypstorage\u003c/code\u003e \u003ccode class=\"type\"\u003echar\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etypstorage\u003c/code\u003e tells for varlena types (those with \u003ccode class=\"structfield\"\u003etyplen\u003c/code\u003e = -1) if the type is prepared for toasting and what the default strategy for attributes of this type should be. Possible values are:\u003c/p\u003e\n\u003cdiv class=\"itemizedlist\"\u003e\n\u003cul class=\"itemizedlist\"\u003e\n\u003cli class=\"listitem\"\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ep\u003c/code\u003e (plain): Values must always be stored plain (non-varlena types always use this value).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli class=\"listitem\"\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ee\u003c/code\u003e (external): Values can be stored in a secondary \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003eTOAST\u003c/span\u003e”\u003c/span\u003e relation (if relation has one, see \u003ccode class=\"literal\"\u003epg_class.reltoastrelid\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli class=\"listitem\"\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003em\u003c/code\u003e (main): Values can be compressed and stored inline.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli class=\"listitem\"\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ex\u003c/code\u003e (extended): Values can be compressed and/or moved to a secondary relation.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ex\u003c/code\u003e is the usual choice for toast-able types. Note that \u003ccode class=\"literal\"\u003em\u003c/code\u003e values can also be moved out to secondary storage, but only as a last resort (\u003ccode class=\"literal\"\u003ee\u003c/code\u003e and \u003ccode class=\"literal\"\u003ex\u003c/code\u003e values are moved first).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypnotnull\u003c/code\u003e \u003ccode class=\"type\"\u003ebool\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etypnotnull\u003c/code\u003e represents a not-null constraint on a type. Used for domains only.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypbasetype\u003c/code\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-type.html\" title=\"52.64. pg_type\"\u003e\u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eIf this is a domain (see \u003ccode class=\"structfield\"\u003etyptype\u003c/code\u003e), then \u003ccode class=\"structfield\"\u003etypbasetype\u003c/code\u003e identifies the type that this one is based on. Zero if this type is not a domain.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etyptypmod\u003c/code\u003e \u003ccode class=\"type\"\u003eint4\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDomains use \u003ccode class=\"structfield\"\u003etyptypmod\u003c/code\u003e to record the \u003ccode class=\"literal\"\u003etypmod\u003c/code\u003e to be applied to their base type (-1 if base type does not use a \u003ccode class=\"literal\"\u003etypmod\u003c/code\u003e). -1 if this type is not a domain.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypndims\u003c/code\u003e \u003ccode class=\"type\"\u003eint4\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etypndims\u003c/code\u003e is the number of array dimensions for a domain over an array (that is, \u003ccode class=\"structfield\"\u003etypbasetype\u003c/code\u003e is an array type). Zero for types other than domains over array types.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypcollation\u003c/code\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-collation.html\" title=\"52.12. pg_collation\"\u003e\u003ccode class=\"structname\"\u003epg_collation\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etypcollation\u003c/code\u003e specifies the collation of the type. If the type does not support collations, this will be zero. A base type that supports collations will have a nonzero value here, typically \u003ccode class=\"symbol\"\u003eDEFAULT_COLLATION_OID\u003c/code\u003e. A domain over a collatable type can have a collation OID different from its base type's, if one was specified for the domain.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypdefaultbin\u003c/code\u003e \u003ccode class=\"type\"\u003epg_node_tree\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIf \u003ccode class=\"structfield\"\u003etypdefaultbin\u003c/code\u003e is not null, it is the \u003ccode class=\"function\"\u003enodeToString()\u003c/code\u003e representation of a default expression for the type. This is only used for domains.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypdefault\u003c/code\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etypdefault\u003c/code\u003e is null if the type has no associated default value. If \u003ccode class=\"structfield\"\u003etypdefaultbin\u003c/code\u003e is not null, \u003ccode class=\"structfield\"\u003etypdefault\u003c/code\u003e must contain a human-readable version of the default expression represented by \u003ccode class=\"structfield\"\u003etypdefaultbin\u003c/code\u003e. If \u003ccode class=\"structfield\"\u003etypdefaultbin\u003c/code\u003e is null and \u003ccode class=\"structfield\"\u003etypdefault\u003c/code\u003e is not, then \u003ccode class=\"structfield\"\u003etypdefault\u003c/code\u003e is the external representation of the type's default value, which can be fed to the type's input converter to produce a constant.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypacl\u003c/code\u003e \u003ccode class=\"type\"\u003eaclitem[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eAccess privileges; see \u003ca class=\"xref\" href=\"/docs/18/ddl-priv.html\" title=\"5.8. Privileges\"\u003eSection 5.8\u003c/a\u003e for details\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"note\"\u003e\n\u003ch3 class=\"title\"\u003eNote\u003c/h3\u003e\n\u003cp\u003eFor fixed-width types used in system tables, it is critical that the size and alignment defined in \u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e agree with the way that the compiler will lay out the column in a structure representing a table row.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca class=\"xref\" href=\"/docs/18/catalog-pg-type.html#CATALOG-TYPCATEGORY-TABLE\" title=\"Table 52.65. typcategory Codes\"\u003eTable 52.65\u003c/a\u003e lists the system-defined values of \u003ccode class=\"structfield\"\u003etypcategory\u003c/code\u003e. Any future additions to this list will also be upper-case ASCII letters. All other ASCII characters are reserved for user-defined categories.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"CATALOG-TYPCATEGORY-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 52.65. \u003ccode class=\"structfield\"\u003etypcategory\u003c/code\u003e Codes\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCode\u003c/th\u003e\n\u003cth\u003eCategory\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eA\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eArray types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eB\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBoolean types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eC\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eComposite types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eD\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDate/time types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eE\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnum types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eG\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGeometric types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eI\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNetwork address types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eN\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNumeric types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eP\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePseudo-types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eR\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRange types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eS\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eString types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eT\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTimespan types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eU\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eUser-defined types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eV\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBit-string types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eX\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eunknown\u003c/code\u003e type\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eZ\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eInternal-use types\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e","manual_path":"catalog-pg-type.html","operator_classes":[],"operators":[],"ranges":[],"related":[{"label":"pg_type catalog","url":"/wiki/catalog/pg_type/?v=18"},{"label":"pg_cast catalog","url":"/wiki/catalog/pg_cast/?v=18"},{"label":"pg_operator catalog","url":"/wiki/catalog/pg_operator/?v=18"},{"label":"pg_opclass catalog","url":"/wiki/catalog/pg_opclass/?v=18"},{"label":"Arrays","url":"/wiki/type/arrays/?v=18"}],"release":{"channel":"stable","label":"18.6","major":"18","manual_sha256":{"arrays.html":"0e1d5c5a7b4a949d4439995f44f74ad4264e050d16eb9ad2a850fbaee04032df","catalog-pg-type.html":"ea9c9313bab8e92a7da18ebc50c7ff1f908dd80999a7e0ca3bbc82ba626c58d4","datatype-binary.html":"0c03ec47b76e37888a3da7f5dcfd340128a5d356642a85185cc9ebe17856a904","datatype-bit.html":"c49124aad561636c18080b9e09572fde7785a6b9eae86f5a33283f0fd6774c37","datatype-boolean.html":"b633f663e6c8276e7056287640c413aa79dbc15d5353cee0d41653d58d376956","datatype-character.html":"c73eebe413ea709a7792e4cfc3cfe9fb68cb496ebe83c3ebaa9d09f8c40d0f73","datatype-datetime.html":"e366275d8b13845bfa4ef0d68faa093e5f3ecb708a1ec870cbcbf7e425b85699","datatype-enum.html":"cab38e53222e30cc94b24de4b33634fd22d7c93f58ebcf35f646c9b8da78fae8","datatype-geometric.html":"0eb3053cfe7d6b0a4b5592c5d7af8d97cae527e87f063c5793413bcba5c14cd9","datatype-json.html":"650162a05b660146b500a205d523374d00aee117a6a6240d30262be51b6e33e5","datatype-money.html":"8b29c14b90679683ac5c472b59a0a7e2853f32cc7db43fab417b2697a6879964","datatype-net-types.html":"96846e641cc37727ddcd8b8a1aa0dbe33cd9787760a2b4efb0dcb9403d5be63f","datatype-numeric.html":"b74619f7ac2f1ca9f85c48073df78c33dd30e464e61baba6008634534edcb500","datatype-oid.html":"8b3360302225f08ae72716ce1804596de95b568e5d31f788cb4597427b28cc38","datatype-pg-lsn.html":"339172f5107cc7eb7139bec911277647219e92a532cebd0f3da0a5dacf8195af","datatype-pseudo.html":"c7cf0b8214304bd8702c95f2142671ae5f0d631f83717f9c07d9e1f2579961b4","datatype-textsearch.html":"4b15e05be8b49a71b28aea22f2c46d0dbf639a91e7b4fe129a4c737c6daad47c","datatype-uuid.html":"292b307b3223c6182bdba687e7f69e6dca9038430143ad79d56327f6ed4c3246","datatype-xml.html":"061fc2295b7b69be704f0a741b8decd10ad721059f871fb0243c669bb54d7822","datatype.html":"e581f67c74e42006289638c8659e9b338adbfd7f068bd8bf2b3be3880fcd2254","domains.html":"82d486973ccc35d14276627a67ac76b434452f23f9ed4d8aa3fbb01fdf285fc2","functions-info.html":"78ac80bf81da2e4f4a33f3b850faa86f0f58ec54a083d6c31da557907de0df87","rangetypes.html":"e4960abc7ce8e51d794f94f1e57b099d30b7f75dd7f2b23a960eef91f6291c33","rowtypes.html":"74f99e029c3a9edfd3e18810ba3c8cb66d3aada91eb67b86476560871e6617e9","sql-createdomain.html":"e94f927196de1b0ea1ce35cd4603c1f6f544439adcc0edf1c4222358e832245b"},"ref":"https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2","revision":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f","source_files":{"doc/src/sgml/datatype.sgml":"86328daa77e20d81d222376ec0306d9841a17104e436c08d138eb763aefb3700","src/include/catalog/pg_am.dat":"b3cb86b102a42fb0024cbd99779c9897afb40d12a71f5cc5a0e5aee7ff2f9969","src/include/catalog/pg_am.h":"3426799df799f32163fcc0765f43dbdb5e88e626acf31284fef9fc6014b69d8e","src/include/catalog/pg_cast.dat":"97911281ca2c81917394ccb2ec13367e37c6801fd461d5e1a3d2f28b911b46b2","src/include/catalog/pg_cast.h":"de585c7df687d698e7d1d100dce8a794ac9da52414ea48169191019178c8f053","src/include/catalog/pg_opclass.dat":"4ee7d3619a6aa106e1c0db55de903931c7d11b1c60ba053a022519c55f8ee668","src/include/catalog/pg_opclass.h":"9c218537806c8ef0398302faaca7f91315dfc1198c48706cebffb479b68defaf","src/include/catalog/pg_operator.dat":"5d35b9b2ef5f9797cc815263927ef8a12367fedace53e828b4e8b320e2a7f703","src/include/catalog/pg_operator.h":"621b18cfffe102413d79b746ce7a10f77fc60fdd097bac34c22b31070d3ee3c4","src/include/catalog/pg_opfamily.dat":"3b694879027b858f2ecf1fa1152b7e30c6e15a216ba99c2384291c30e9d52311","src/include/catalog/pg_opfamily.h":"e1f5fc8aebd3042df847455bf66bf755f768c2aa8a9b03d22f7ec8563eba59c0","src/include/catalog/pg_proc.dat":"1f934ce80d460159dda137714374a35f9896315ea2476709cbb4da13b38ef95a","src/include/catalog/pg_proc.h":"f7d59f07c5b95e2f3c7141762a0f576e8a3af7581ba54c27537f4d500472bea5","src/include/catalog/pg_range.dat":"5c2271f8e89e9378d1887204e5785060b77405b5f0ff3e6c719250c9c1dcfcc4","src/include/catalog/pg_range.h":"45546d952b5181f989bd9234721897fc2b37005c8e49ce2ddc156f26974c3ca4","src/include/catalog/pg_type.dat":"5f5887b75677cba2d4a1a0cfeb355df5ed91f85d385fac88bd8d7c605b3578f9","src/include/catalog/pg_type.h":"8fb198749fd82b6c1818a3c18455f226f66116fcfeb3d4959c65ce3fda22802e"},"source_sha256":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"},"sections":[],"signature":"pg_ndistinct","sources":[{"label":"PostgreSQL 18 English manual","path":"catalog-pg-type.html","sha256":"ea9c9313bab8e92a7da18ebc50c7ff1f908dd80999a7e0ca3bbc82ba626c58d4","url":"/docs/18/catalog-pg-type.html"},{"label":"Matching PostgreSQL source archive","sha256":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f","url":"https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2"}]},"ManualEvidence":{"manual_path":"catalog-pg-type.html","release":{"channel":"stable","label":"18.6","major":"18","manual_sha256":{"arrays.html":"0e1d5c5a7b4a949d4439995f44f74ad4264e050d16eb9ad2a850fbaee04032df","catalog-pg-type.html":"ea9c9313bab8e92a7da18ebc50c7ff1f908dd80999a7e0ca3bbc82ba626c58d4","datatype-binary.html":"0c03ec47b76e37888a3da7f5dcfd340128a5d356642a85185cc9ebe17856a904","datatype-bit.html":"c49124aad561636c18080b9e09572fde7785a6b9eae86f5a33283f0fd6774c37","datatype-boolean.html":"b633f663e6c8276e7056287640c413aa79dbc15d5353cee0d41653d58d376956","datatype-character.html":"c73eebe413ea709a7792e4cfc3cfe9fb68cb496ebe83c3ebaa9d09f8c40d0f73","datatype-datetime.html":"e366275d8b13845bfa4ef0d68faa093e5f3ecb708a1ec870cbcbf7e425b85699","datatype-enum.html":"cab38e53222e30cc94b24de4b33634fd22d7c93f58ebcf35f646c9b8da78fae8","datatype-geometric.html":"0eb3053cfe7d6b0a4b5592c5d7af8d97cae527e87f063c5793413bcba5c14cd9","datatype-json.html":"650162a05b660146b500a205d523374d00aee117a6a6240d30262be51b6e33e5","datatype-money.html":"8b29c14b90679683ac5c472b59a0a7e2853f32cc7db43fab417b2697a6879964","datatype-net-types.html":"96846e641cc37727ddcd8b8a1aa0dbe33cd9787760a2b4efb0dcb9403d5be63f","datatype-numeric.html":"b74619f7ac2f1ca9f85c48073df78c33dd30e464e61baba6008634534edcb500","datatype-oid.html":"8b3360302225f08ae72716ce1804596de95b568e5d31f788cb4597427b28cc38","datatype-pg-lsn.html":"339172f5107cc7eb7139bec911277647219e92a532cebd0f3da0a5dacf8195af","datatype-pseudo.html":"c7cf0b8214304bd8702c95f2142671ae5f0d631f83717f9c07d9e1f2579961b4","datatype-textsearch.html":"4b15e05be8b49a71b28aea22f2c46d0dbf639a91e7b4fe129a4c737c6daad47c","datatype-uuid.html":"292b307b3223c6182bdba687e7f69e6dca9038430143ad79d56327f6ed4c3246","datatype-xml.html":"061fc2295b7b69be704f0a741b8decd10ad721059f871fb0243c669bb54d7822","datatype.html":"e581f67c74e42006289638c8659e9b338adbfd7f068bd8bf2b3be3880fcd2254","domains.html":"82d486973ccc35d14276627a67ac76b434452f23f9ed4d8aa3fbb01fdf285fc2","functions-info.html":"78ac80bf81da2e4f4a33f3b850faa86f0f58ec54a083d6c31da557907de0df87","rangetypes.html":"e4960abc7ce8e51d794f94f1e57b099d30b7f75dd7f2b23a960eef91f6291c33","rowtypes.html":"74f99e029c3a9edfd3e18810ba3c8cb66d3aada91eb67b86476560871e6617e9","sql-createdomain.html":"e94f927196de1b0ea1ce35cd4603c1f6f544439adcc0edf1c4222358e832245b"},"ref":"https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2","revision":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f","source_files":{"doc/src/sgml/datatype.sgml":"86328daa77e20d81d222376ec0306d9841a17104e436c08d138eb763aefb3700","src/include/catalog/pg_am.dat":"b3cb86b102a42fb0024cbd99779c9897afb40d12a71f5cc5a0e5aee7ff2f9969","src/include/catalog/pg_am.h":"3426799df799f32163fcc0765f43dbdb5e88e626acf31284fef9fc6014b69d8e","src/include/catalog/pg_cast.dat":"97911281ca2c81917394ccb2ec13367e37c6801fd461d5e1a3d2f28b911b46b2","src/include/catalog/pg_cast.h":"de585c7df687d698e7d1d100dce8a794ac9da52414ea48169191019178c8f053","src/include/catalog/pg_opclass.dat":"4ee7d3619a6aa106e1c0db55de903931c7d11b1c60ba053a022519c55f8ee668","src/include/catalog/pg_opclass.h":"9c218537806c8ef0398302faaca7f91315dfc1198c48706cebffb479b68defaf","src/include/catalog/pg_operator.dat":"5d35b9b2ef5f9797cc815263927ef8a12367fedace53e828b4e8b320e2a7f703","src/include/catalog/pg_operator.h":"621b18cfffe102413d79b746ce7a10f77fc60fdd097bac34c22b31070d3ee3c4","src/include/catalog/pg_opfamily.dat":"3b694879027b858f2ecf1fa1152b7e30c6e15a216ba99c2384291c30e9d52311","src/include/catalog/pg_opfamily.h":"e1f5fc8aebd3042df847455bf66bf755f768c2aa8a9b03d22f7ec8563eba59c0","src/include/catalog/pg_proc.dat":"1f934ce80d460159dda137714374a35f9896315ea2476709cbb4da13b38ef95a","src/include/catalog/pg_proc.h":"f7d59f07c5b95e2f3c7141762a0f576e8a3af7581ba54c27537f4d500472bea5","src/include/catalog/pg_range.dat":"5c2271f8e89e9378d1887204e5785060b77405b5f0ff3e6c719250c9c1dcfcc4","src/include/catalog/pg_range.h":"45546d952b5181f989bd9234721897fc2b37005c8e49ce2ddc156f26974c3ca4","src/include/catalog/pg_type.dat":"5f5887b75677cba2d4a1a0cfeb355df5ed91f85d385fac88bd8d7c605b3578f9","src/include/catalog/pg_type.h":"8fb198749fd82b6c1818a3c18455f226f66116fcfeb3d4959c65ce3fda22802e"},"source_sha256":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f"},"sources":[{"label":"PostgreSQL 18 English manual","path":"catalog-pg-type.html","sha256":"ea9c9313bab8e92a7da18ebc50c7ff1f908dd80999a7e0ca3bbc82ba626c58d4","url":"/docs/18/catalog-pg-type.html"},{"label":"Matching PostgreSQL source archive","sha256":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f","url":"https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2"}]},"MeasuredEvidence":{}},"Text":{"Collection":"type","Key":"pg_ndistinct","SourceDatabase":"center","Version":"18","Locale":"en","Title":"pg_ndistinct","Summary":"multivariate ndistinct coefficients","BodyHTML":"\u003cdiv id=\"CATALOG-PG-TYPE\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch2\u003e52.64. \u003ccode\u003epg_type\u003c/code\u003e \u003c/h2\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe catalog \u003ccode\u003epg_type\u003c/code\u003e stores information about data types. Base types and enum types (scalar types) are created with \u003ca href=\"/docs/18/sql-createtype.html\" title=\"CREATE TYPE\" rel=\"nofollow\"\u003e\u003ccode\u003eCREATE TYPE\u003c/code\u003e\u003c/a\u003e, and domains with \u003ca href=\"/docs/18/sql-createdomain.html\" title=\"CREATE DOMAIN\" rel=\"nofollow\"\u003e\u003ccode\u003eCREATE DOMAIN\u003c/code\u003e\u003c/a\u003e. A composite type is automatically created for each table in the database, to represent the row structure of the table. It is also possible to create composite types with \u003ccode\u003eCREATE TYPE AS\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv id=\"id-1.10.4.66.4\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 52.64. \u003ccode\u003epg_type\u003c/code\u003e Columns\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\n\u003cp\u003eColumn Type\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003eoid\u003c/code\u003e \u003ccode\u003eoid\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eRow identifier\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypname\u003c/code\u003e \u003ccode\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eData type name\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypnamespace\u003c/code\u003e \u003ccode\u003eoid\u003c/code\u003e (references \u003ca href=\"/docs/18/catalog-pg-namespace.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_namespace\u003c/code\u003e\u003c/a\u003e.\u003ccode\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eThe OID of the namespace that contains this type\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypowner\u003c/code\u003e \u003ccode\u003eoid\u003c/code\u003e (references \u003ca href=\"/docs/18/catalog-pg-authid.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_authid\u003c/code\u003e\u003c/a\u003e.\u003ccode\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eOwner of the type\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etyplen\u003c/code\u003e \u003ccode\u003eint2\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eFor a fixed-size type, \u003ccode\u003etyplen\u003c/code\u003e is the number of bytes in the internal representation of the type. But for a variable-length type, \u003ccode\u003etyplen\u003c/code\u003e is negative. -1 indicates a \u003cspan\u003e“\u003cspan\u003evarlena\u003c/span\u003e”\u003c/span\u003e type (one that has a length word), -2 indicates a null-terminated C string.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypbyval\u003c/code\u003e \u003ccode\u003ebool\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003etypbyval\u003c/code\u003e determines whether internal routines pass a value of this type by value or by reference. \u003ccode\u003etypbyval\u003c/code\u003e had better be false if \u003ccode\u003etyplen\u003c/code\u003e is not 1, 2, or 4 (or 8 on machines where Datum is 8 bytes). Variable-length types are always passed by reference. Note that \u003ccode\u003etypbyval\u003c/code\u003e can be false even if the length would allow pass-by-value.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etyptype\u003c/code\u003e \u003ccode\u003echar\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003etyptype\u003c/code\u003e is \u003ccode\u003eb\u003c/code\u003e for a base type, \u003ccode\u003ec\u003c/code\u003e for a composite type (e.g., a table\u0026#39;s row type), \u003ccode\u003ed\u003c/code\u003e for a domain, \u003ccode\u003ee\u003c/code\u003e for an enum type, \u003ccode\u003ep\u003c/code\u003e for a pseudo-type, \u003ccode\u003er\u003c/code\u003e for a range type, or \u003ccode\u003em\u003c/code\u003e for a multirange type. See also \u003ccode\u003etyprelid\u003c/code\u003e and \u003ccode\u003etypbasetype\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypcategory\u003c/code\u003e \u003ccode\u003echar\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003etypcategory\u003c/code\u003e is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \u003cspan\u003e“\u003cspan\u003epreferred\u003c/span\u003e”\u003c/span\u003e. See \u003ca href=\"/docs/18/catalog-pg-type.html#CATALOG-TYPCATEGORY-TABLE\" rel=\"nofollow\"\u003eTable 52.65\u003c/a\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypispreferred\u003c/code\u003e \u003ccode\u003ebool\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTrue if the type is a preferred cast target within its \u003ccode\u003etypcategory\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypisdefined\u003c/code\u003e \u003ccode\u003ebool\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTrue if the type is defined, false if this is a placeholder entry for a not-yet-defined type. When \u003ccode\u003etypisdefined\u003c/code\u003e is false, nothing except the type name, namespace, and OID can be relied on.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypdelim\u003c/code\u003e \u003ccode\u003echar\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eCharacter that separates two values of this type when parsing array input. Note that the delimiter is associated with the array element data type, not the array data type.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etyprelid\u003c/code\u003e \u003ccode\u003eoid\u003c/code\u003e (references \u003ca href=\"/docs/18/catalog-pg-class.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_class\u003c/code\u003e\u003c/a\u003e.\u003ccode\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eIf this is a composite type (see \u003ccode\u003etyptype\u003c/code\u003e), then this column points to the \u003ca href=\"/docs/18/catalog-pg-class.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_class\u003c/code\u003e\u003c/a\u003e entry that defines the corresponding table. (For a free-standing composite type, the \u003ca href=\"/docs/18/catalog-pg-class.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_class\u003c/code\u003e\u003c/a\u003e entry doesn\u0026#39;t really represent a table, but it is needed anyway for the type\u0026#39;s \u003ca href=\"/docs/18/catalog-pg-attribute.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_attribute\u003c/code\u003e\u003c/a\u003e entries to link to.) Zero for non-composite types.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypsubscript\u003c/code\u003e \u003ccode\u003eregproc\u003c/code\u003e (references \u003ca href=\"/docs/18/catalog-pg-proc.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eSubscripting handler function\u0026#39;s OID, or zero if this type doesn\u0026#39;t support subscripting. Types that are \u003cspan\u003e“\u003cspan\u003etrue\u003c/span\u003e”\u003c/span\u003e array types have \u003ccode\u003etypsubscript\u003c/code\u003e = \u003ccode\u003earray_subscript_handler\u003c/code\u003e, but other types may have other handler functions to implement specialized subscripting behavior.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypelem\u003c/code\u003e \u003ccode\u003eoid\u003c/code\u003e (references \u003ca href=\"/docs/18/catalog-pg-type.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_type\u003c/code\u003e\u003c/a\u003e.\u003ccode\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eIf \u003ccode\u003etypelem\u003c/code\u003e is not zero then it identifies another row in \u003ccode\u003epg_type\u003c/code\u003e, defining the type yielded by subscripting. This should be zero if \u003ccode\u003etypsubscript\u003c/code\u003e is zero. However, it can be zero when \u003ccode\u003etypsubscript\u003c/code\u003e isn\u0026#39;t zero, if the handler doesn\u0026#39;t need \u003ccode\u003etypelem\u003c/code\u003e to determine the subscripting result type. Note that a \u003ccode\u003etypelem\u003c/code\u003e dependency is considered to imply physical containment of the element type in this type; so DDL changes on the element type might be restricted by the presence of this type.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etyparray\u003c/code\u003e \u003ccode\u003eoid\u003c/code\u003e (references \u003ca href=\"/docs/18/catalog-pg-type.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_type\u003c/code\u003e\u003c/a\u003e.\u003ccode\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eIf \u003ccode\u003etyparray\u003c/code\u003e is not zero then it identifies another row in \u003ccode\u003epg_type\u003c/code\u003e, which is the \u003cspan\u003e“\u003cspan\u003etrue\u003c/span\u003e”\u003c/span\u003e array type having this type as element\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypinput\u003c/code\u003e \u003ccode\u003eregproc\u003c/code\u003e (references \u003ca href=\"/docs/18/catalog-pg-proc.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eInput conversion function (text format)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypoutput\u003c/code\u003e \u003ccode\u003eregproc\u003c/code\u003e (references \u003ca href=\"/docs/18/catalog-pg-proc.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eOutput conversion function (text format)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypreceive\u003c/code\u003e \u003ccode\u003eregproc\u003c/code\u003e (references \u003ca href=\"/docs/18/catalog-pg-proc.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eInput conversion function (binary format), or zero if none\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypsend\u003c/code\u003e \u003ccode\u003eregproc\u003c/code\u003e (references \u003ca href=\"/docs/18/catalog-pg-proc.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eOutput conversion function (binary format), or zero if none\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypmodin\u003c/code\u003e \u003ccode\u003eregproc\u003c/code\u003e (references \u003ca href=\"/docs/18/catalog-pg-proc.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eType modifier input function, or zero if type does not support modifiers\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypmodout\u003c/code\u003e \u003ccode\u003eregproc\u003c/code\u003e (references \u003ca href=\"/docs/18/catalog-pg-proc.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eType modifier output function, or zero to use the standard format\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypanalyze\u003c/code\u003e \u003ccode\u003eregproc\u003c/code\u003e (references \u003ca href=\"/docs/18/catalog-pg-proc.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eCustom \u003ca href=\"/docs/18/sql-analyze.html\" title=\"ANALYZE\" rel=\"nofollow\"\u003e\u003cspan\u003eANALYZE\u003c/span\u003e\u003c/a\u003e function, or zero to use the standard function\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypalign\u003c/code\u003e \u003ccode\u003echar\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003etypalign\u003c/code\u003e is the alignment required when storing a value of this type. It applies to storage on disk as well as most representations of the value inside \u003cspan\u003ePostgreSQL\u003c/span\u003e. When multiple values are stored consecutively, such as in the representation of a complete row on disk, padding is inserted before a datum of this type so that it begins on the specified boundary. The alignment reference is the beginning of the first datum in the sequence. Possible values are:\u003c/p\u003e\n\u003cdiv\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ec\u003c/code\u003e = \u003ccode\u003echar\u003c/code\u003e alignment, i.e., no alignment needed.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003es\u003c/code\u003e = \u003ccode\u003eshort\u003c/code\u003e alignment (2 bytes on most machines).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ei\u003c/code\u003e = \u003ccode\u003eint\u003c/code\u003e alignment (4 bytes on most machines).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ed\u003c/code\u003e = \u003ccode\u003edouble\u003c/code\u003e alignment (8 bytes on many machines, but by no means all).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypstorage\u003c/code\u003e \u003ccode\u003echar\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003etypstorage\u003c/code\u003e tells for varlena types (those with \u003ccode\u003etyplen\u003c/code\u003e = -1) if the type is prepared for toasting and what the default strategy for attributes of this type should be. Possible values are:\u003c/p\u003e\n\u003cdiv\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ep\u003c/code\u003e (plain): Values must always be stored plain (non-varlena types always use this value).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ee\u003c/code\u003e (external): Values can be stored in a secondary \u003cspan\u003e“\u003cspan\u003eTOAST\u003c/span\u003e”\u003c/span\u003e relation (if relation has one, see \u003ccode\u003epg_class.reltoastrelid\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003em\u003c/code\u003e (main): Values can be compressed and stored inline.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ex\u003c/code\u003e (extended): Values can be compressed and/or moved to a secondary relation.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ccode\u003ex\u003c/code\u003e is the usual choice for toast-able types. Note that \u003ccode\u003em\u003c/code\u003e values can also be moved out to secondary storage, but only as a last resort (\u003ccode\u003ee\u003c/code\u003e and \u003ccode\u003ex\u003c/code\u003e values are moved first).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypnotnull\u003c/code\u003e \u003ccode\u003ebool\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003etypnotnull\u003c/code\u003e represents a not-null constraint on a type. Used for domains only.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypbasetype\u003c/code\u003e \u003ccode\u003eoid\u003c/code\u003e (references \u003ca href=\"/docs/18/catalog-pg-type.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_type\u003c/code\u003e\u003c/a\u003e.\u003ccode\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eIf this is a domain (see \u003ccode\u003etyptype\u003c/code\u003e), then \u003ccode\u003etypbasetype\u003c/code\u003e identifies the type that this one is based on. Zero if this type is not a domain.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etyptypmod\u003c/code\u003e \u003ccode\u003eint4\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDomains use \u003ccode\u003etyptypmod\u003c/code\u003e to record the \u003ccode\u003etypmod\u003c/code\u003e to be applied to their base type (-1 if base type does not use a \u003ccode\u003etypmod\u003c/code\u003e). -1 if this type is not a domain.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypndims\u003c/code\u003e \u003ccode\u003eint4\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003etypndims\u003c/code\u003e is the number of array dimensions for a domain over an array (that is, \u003ccode\u003etypbasetype\u003c/code\u003e is an array type). Zero for types other than domains over array types.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypcollation\u003c/code\u003e \u003ccode\u003eoid\u003c/code\u003e (references \u003ca href=\"/docs/18/catalog-pg-collation.html\" rel=\"nofollow\"\u003e\u003ccode\u003epg_collation\u003c/code\u003e\u003c/a\u003e.\u003ccode\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003etypcollation\u003c/code\u003e specifies the collation of the type. If the type does not support collations, this will be zero. A base type that supports collations will have a nonzero value here, typically \u003ccode\u003eDEFAULT_COLLATION_OID\u003c/code\u003e. A domain over a collatable type can have a collation OID different from its base type\u0026#39;s, if one was specified for the domain.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypdefaultbin\u003c/code\u003e \u003ccode\u003epg_node_tree\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIf \u003ccode\u003etypdefaultbin\u003c/code\u003e is not null, it is the \u003ccode\u003enodeToString()\u003c/code\u003e representation of a default expression for the type. This is only used for domains.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypdefault\u003c/code\u003e \u003ccode\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003etypdefault\u003c/code\u003e is null if the type has no associated default value. If \u003ccode\u003etypdefaultbin\u003c/code\u003e is not null, \u003ccode\u003etypdefault\u003c/code\u003e must contain a human-readable version of the default expression represented by \u003ccode\u003etypdefaultbin\u003c/code\u003e. If \u003ccode\u003etypdefaultbin\u003c/code\u003e is null and \u003ccode\u003etypdefault\u003c/code\u003e is not, then \u003ccode\u003etypdefault\u003c/code\u003e is the external representation of the type\u0026#39;s default value, which can be fed to the type\u0026#39;s input converter to produce a constant.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003cp\u003e\u003ccode\u003etypacl\u003c/code\u003e \u003ccode\u003eaclitem[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eAccess privileges; see \u003ca href=\"/docs/18/ddl-priv.html\" rel=\"nofollow\"\u003eSection 5.8\u003c/a\u003e for details\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003cdiv\u003e\n\u003ch3\u003eNote\u003c/h3\u003e\n\u003cp\u003eFor fixed-width types used in system tables, it is critical that the size and alignment defined in \u003ccode\u003epg_type\u003c/code\u003e agree with the way that the compiler will lay out the column in a structure representing a table row.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca href=\"/docs/18/catalog-pg-type.html#CATALOG-TYPCATEGORY-TABLE\" rel=\"nofollow\"\u003eTable 52.65\u003c/a\u003e lists the system-defined values of \u003ccode\u003etypcategory\u003c/code\u003e. Any future additions to this list will also be upper-case ASCII letters. All other ASCII characters are reserved for user-defined categories.\u003c/p\u003e\n\u003cdiv id=\"CATALOG-TYPCATEGORY-TABLE\"\u003e\n\u003cp\u003e\u003cstrong\u003eTable 52.65. \u003ccode\u003etypcategory\u003c/code\u003e Codes\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv\u003e\n\u003ctable\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCode\u003c/th\u003e\n\u003cth\u003eCategory\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eA\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eArray types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eB\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBoolean types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eC\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eComposite types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eD\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDate/time types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eE\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnum types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eG\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGeometric types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eI\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNetwork address types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eN\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNumeric types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eP\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePseudo-types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eR\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRange types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eS\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eString types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eT\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTimespan types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eU\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eUser-defined types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eV\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBit-string types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eX\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eunknown\u003c/code\u003e type\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode\u003eZ\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eInternal-use types\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr\u003e\n\u003c/div\u003e","SourceRevision":"555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f","ContentHash":"9c7af01132bc9ae1eefb58b6e8ab0a22ad2a4849c0e3b18ca92f2ac0047a9ab6","Payload":{"description":["multivariate ndistinct coefficients"],"manual_html":"\u003cdiv class=\"sect1\" id=\"CATALOG-PG-TYPE\"\u003e\n\u003cdiv class=\"titlepage\"\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003ch2 class=\"title\"\u003e52.64. \u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e \u003c/h2\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe catalog \u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e stores information about data types. Base types and enum types (scalar types) are created with \u003ca class=\"link\" href=\"/docs/18/sql-createtype.html\" title=\"CREATE TYPE\"\u003e\u003ccode class=\"command\"\u003eCREATE TYPE\u003c/code\u003e\u003c/a\u003e, and domains with \u003ca class=\"link\" href=\"/docs/18/sql-createdomain.html\" title=\"CREATE DOMAIN\"\u003e\u003ccode class=\"command\"\u003eCREATE DOMAIN\u003c/code\u003e\u003c/a\u003e. A composite type is automatically created for each table in the database, to represent the row structure of the table. It is also possible to create composite types with \u003ccode class=\"command\"\u003eCREATE TYPE AS\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"id-1.10.4.66.4\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 52.64. \u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e Columns\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003eColumn Type\u003c/p\u003e\n\u003cp\u003eDescription\u003c/p\u003e\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eRow identifier\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypname\u003c/code\u003e \u003ccode class=\"type\"\u003ename\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eData type name\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypnamespace\u003c/code\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-namespace.html\" title=\"52.32. pg_namespace\"\u003e\u003ccode class=\"structname\"\u003epg_namespace\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eThe OID of the namespace that contains this type\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypowner\u003c/code\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-authid.html\" title=\"52.8. pg_authid\"\u003e\u003ccode class=\"structname\"\u003epg_authid\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eOwner of the type\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etyplen\u003c/code\u003e \u003ccode class=\"type\"\u003eint2\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eFor a fixed-size type, \u003ccode class=\"structfield\"\u003etyplen\u003c/code\u003e is the number of bytes in the internal representation of the type. But for a variable-length type, \u003ccode class=\"structfield\"\u003etyplen\u003c/code\u003e is negative. -1 indicates a \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003evarlena\u003c/span\u003e”\u003c/span\u003e type (one that has a length word), -2 indicates a null-terminated C string.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypbyval\u003c/code\u003e \u003ccode class=\"type\"\u003ebool\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etypbyval\u003c/code\u003e determines whether internal routines pass a value of this type by value or by reference. \u003ccode class=\"structfield\"\u003etypbyval\u003c/code\u003e had better be false if \u003ccode class=\"structfield\"\u003etyplen\u003c/code\u003e is not 1, 2, or 4 (or 8 on machines where Datum is 8 bytes). Variable-length types are always passed by reference. Note that \u003ccode class=\"structfield\"\u003etypbyval\u003c/code\u003e can be false even if the length would allow pass-by-value.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etyptype\u003c/code\u003e \u003ccode class=\"type\"\u003echar\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etyptype\u003c/code\u003e is \u003ccode class=\"literal\"\u003eb\u003c/code\u003e for a base type, \u003ccode class=\"literal\"\u003ec\u003c/code\u003e for a composite type (e.g., a table's row type), \u003ccode class=\"literal\"\u003ed\u003c/code\u003e for a domain, \u003ccode class=\"literal\"\u003ee\u003c/code\u003e for an enum type, \u003ccode class=\"literal\"\u003ep\u003c/code\u003e for a pseudo-type, \u003ccode class=\"literal\"\u003er\u003c/code\u003e for a range type, or \u003ccode class=\"literal\"\u003em\u003c/code\u003e for a multirange type. See also \u003ccode class=\"structfield\"\u003etyprelid\u003c/code\u003e and \u003ccode class=\"structfield\"\u003etypbasetype\u003c/code\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypcategory\u003c/code\u003e \u003ccode class=\"type\"\u003echar\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etypcategory\u003c/code\u003e is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003epreferred\u003c/span\u003e”\u003c/span\u003e. See \u003ca class=\"xref\" href=\"/docs/18/catalog-pg-type.html#CATALOG-TYPCATEGORY-TABLE\" title=\"Table 52.65. typcategory Codes\"\u003eTable 52.65\u003c/a\u003e.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypispreferred\u003c/code\u003e \u003ccode class=\"type\"\u003ebool\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTrue if the type is a preferred cast target within its \u003ccode class=\"structfield\"\u003etypcategory\u003c/code\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypisdefined\u003c/code\u003e \u003ccode class=\"type\"\u003ebool\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTrue if the type is defined, false if this is a placeholder entry for a not-yet-defined type. When \u003ccode class=\"structfield\"\u003etypisdefined\u003c/code\u003e is false, nothing except the type name, namespace, and OID can be relied on.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypdelim\u003c/code\u003e \u003ccode class=\"type\"\u003echar\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eCharacter that separates two values of this type when parsing array input. Note that the delimiter is associated with the array element data type, not the array data type.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etyprelid\u003c/code\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-class.html\" title=\"52.11. pg_class\"\u003e\u003ccode class=\"structname\"\u003epg_class\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eIf this is a composite type (see \u003ccode class=\"structfield\"\u003etyptype\u003c/code\u003e), then this column points to the \u003ca class=\"link\" href=\"/docs/18/catalog-pg-class.html\" title=\"52.11. pg_class\"\u003e\u003ccode class=\"structname\"\u003epg_class\u003c/code\u003e\u003c/a\u003e entry that defines the corresponding table. (For a free-standing composite type, the \u003ca class=\"link\" href=\"/docs/18/catalog-pg-class.html\" title=\"52.11. pg_class\"\u003e\u003ccode class=\"structname\"\u003epg_class\u003c/code\u003e\u003c/a\u003e entry doesn't really represent a table, but it is needed anyway for the type's \u003ca class=\"link\" href=\"/docs/18/catalog-pg-attribute.html\" title=\"52.7. pg_attribute\"\u003e\u003ccode class=\"structname\"\u003epg_attribute\u003c/code\u003e\u003c/a\u003e entries to link to.) Zero for non-composite types.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypsubscript\u003c/code\u003e \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-proc.html\" title=\"52.39. pg_proc\"\u003e\u003ccode class=\"structname\"\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eSubscripting handler function's OID, or zero if this type doesn't support subscripting. Types that are \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003etrue\u003c/span\u003e”\u003c/span\u003e array types have \u003ccode class=\"structfield\"\u003etypsubscript\u003c/code\u003e = \u003ccode class=\"function\"\u003earray_subscript_handler\u003c/code\u003e, but other types may have other handler functions to implement specialized subscripting behavior.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypelem\u003c/code\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-type.html\" title=\"52.64. pg_type\"\u003e\u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eIf \u003ccode class=\"structfield\"\u003etypelem\u003c/code\u003e is not zero then it identifies another row in \u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e, defining the type yielded by subscripting. This should be zero if \u003ccode class=\"structfield\"\u003etypsubscript\u003c/code\u003e is zero. However, it can be zero when \u003ccode class=\"structfield\"\u003etypsubscript\u003c/code\u003e isn't zero, if the handler doesn't need \u003ccode class=\"structfield\"\u003etypelem\u003c/code\u003e to determine the subscripting result type. Note that a \u003ccode class=\"structfield\"\u003etypelem\u003c/code\u003e dependency is considered to imply physical containment of the element type in this type; so DDL changes on the element type might be restricted by the presence of this type.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etyparray\u003c/code\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-type.html\" title=\"52.64. pg_type\"\u003e\u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eIf \u003ccode class=\"structfield\"\u003etyparray\u003c/code\u003e is not zero then it identifies another row in \u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e, which is the \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003etrue\u003c/span\u003e”\u003c/span\u003e array type having this type as element\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypinput\u003c/code\u003e \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-proc.html\" title=\"52.39. pg_proc\"\u003e\u003ccode class=\"structname\"\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eInput conversion function (text format)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypoutput\u003c/code\u003e \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-proc.html\" title=\"52.39. pg_proc\"\u003e\u003ccode class=\"structname\"\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eOutput conversion function (text format)\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypreceive\u003c/code\u003e \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-proc.html\" title=\"52.39. pg_proc\"\u003e\u003ccode class=\"structname\"\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eInput conversion function (binary format), or zero if none\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypsend\u003c/code\u003e \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-proc.html\" title=\"52.39. pg_proc\"\u003e\u003ccode class=\"structname\"\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eOutput conversion function (binary format), or zero if none\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypmodin\u003c/code\u003e \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-proc.html\" title=\"52.39. pg_proc\"\u003e\u003ccode class=\"structname\"\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eType modifier input function, or zero if type does not support modifiers\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypmodout\u003c/code\u003e \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-proc.html\" title=\"52.39. pg_proc\"\u003e\u003ccode class=\"structname\"\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eType modifier output function, or zero to use the standard format\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypanalyze\u003c/code\u003e \u003ccode class=\"type\"\u003eregproc\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-proc.html\" title=\"52.39. pg_proc\"\u003e\u003ccode class=\"structname\"\u003epg_proc\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eCustom \u003ca class=\"xref\" href=\"/docs/18/sql-analyze.html\" title=\"ANALYZE\"\u003e\u003cspan class=\"refentrytitle\"\u003eANALYZE\u003c/span\u003e\u003c/a\u003e function, or zero to use the standard function\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypalign\u003c/code\u003e \u003ccode class=\"type\"\u003echar\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etypalign\u003c/code\u003e is the alignment required when storing a value of this type. It applies to storage on disk as well as most representations of the value inside \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e. When multiple values are stored consecutively, such as in the representation of a complete row on disk, padding is inserted before a datum of this type so that it begins on the specified boundary. The alignment reference is the beginning of the first datum in the sequence. Possible values are:\u003c/p\u003e\n\u003cdiv class=\"itemizedlist\"\u003e\n\u003cul class=\"itemizedlist\"\u003e\n\u003cli class=\"listitem\"\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ec\u003c/code\u003e = \u003ccode class=\"type\"\u003echar\u003c/code\u003e alignment, i.e., no alignment needed.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli class=\"listitem\"\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003es\u003c/code\u003e = \u003ccode class=\"type\"\u003eshort\u003c/code\u003e alignment (2 bytes on most machines).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli class=\"listitem\"\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ei\u003c/code\u003e = \u003ccode class=\"type\"\u003eint\u003c/code\u003e alignment (4 bytes on most machines).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli class=\"listitem\"\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ed\u003c/code\u003e = \u003ccode class=\"type\"\u003edouble\u003c/code\u003e alignment (8 bytes on many machines, but by no means all).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypstorage\u003c/code\u003e \u003ccode class=\"type\"\u003echar\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etypstorage\u003c/code\u003e tells for varlena types (those with \u003ccode class=\"structfield\"\u003etyplen\u003c/code\u003e = -1) if the type is prepared for toasting and what the default strategy for attributes of this type should be. Possible values are:\u003c/p\u003e\n\u003cdiv class=\"itemizedlist\"\u003e\n\u003cul class=\"itemizedlist\"\u003e\n\u003cli class=\"listitem\"\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ep\u003c/code\u003e (plain): Values must always be stored plain (non-varlena types always use this value).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli class=\"listitem\"\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ee\u003c/code\u003e (external): Values can be stored in a secondary \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003eTOAST\u003c/span\u003e”\u003c/span\u003e relation (if relation has one, see \u003ccode class=\"literal\"\u003epg_class.reltoastrelid\u003c/code\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli class=\"listitem\"\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003em\u003c/code\u003e (main): Values can be compressed and stored inline.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli class=\"listitem\"\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ex\u003c/code\u003e (extended): Values can be compressed and/or moved to a secondary relation.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ccode class=\"literal\"\u003ex\u003c/code\u003e is the usual choice for toast-able types. Note that \u003ccode class=\"literal\"\u003em\u003c/code\u003e values can also be moved out to secondary storage, but only as a last resort (\u003ccode class=\"literal\"\u003ee\u003c/code\u003e and \u003ccode class=\"literal\"\u003ex\u003c/code\u003e values are moved first).\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypnotnull\u003c/code\u003e \u003ccode class=\"type\"\u003ebool\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etypnotnull\u003c/code\u003e represents a not-null constraint on a type. Used for domains only.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypbasetype\u003c/code\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-type.html\" title=\"52.64. pg_type\"\u003e\u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003eIf this is a domain (see \u003ccode class=\"structfield\"\u003etyptype\u003c/code\u003e), then \u003ccode class=\"structfield\"\u003etypbasetype\u003c/code\u003e identifies the type that this one is based on. Zero if this type is not a domain.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etyptypmod\u003c/code\u003e \u003ccode class=\"type\"\u003eint4\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eDomains use \u003ccode class=\"structfield\"\u003etyptypmod\u003c/code\u003e to record the \u003ccode class=\"literal\"\u003etypmod\u003c/code\u003e to be applied to their base type (-1 if base type does not use a \u003ccode class=\"literal\"\u003etypmod\u003c/code\u003e). -1 if this type is not a domain.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypndims\u003c/code\u003e \u003ccode class=\"type\"\u003eint4\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etypndims\u003c/code\u003e is the number of array dimensions for a domain over an array (that is, \u003ccode class=\"structfield\"\u003etypbasetype\u003c/code\u003e is an array type). Zero for types other than domains over array types.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypcollation\u003c/code\u003e \u003ccode class=\"type\"\u003eoid\u003c/code\u003e (references \u003ca class=\"link\" href=\"/docs/18/catalog-pg-collation.html\" title=\"52.12. pg_collation\"\u003e\u003ccode class=\"structname\"\u003epg_collation\u003c/code\u003e\u003c/a\u003e.\u003ccode class=\"structfield\"\u003eoid\u003c/code\u003e)\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etypcollation\u003c/code\u003e specifies the collation of the type. If the type does not support collations, this will be zero. A base type that supports collations will have a nonzero value here, typically \u003ccode class=\"symbol\"\u003eDEFAULT_COLLATION_OID\u003c/code\u003e. A domain over a collatable type can have a collation OID different from its base type's, if one was specified for the domain.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypdefaultbin\u003c/code\u003e \u003ccode class=\"type\"\u003epg_node_tree\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIf \u003ccode class=\"structfield\"\u003etypdefaultbin\u003c/code\u003e is not null, it is the \u003ccode class=\"function\"\u003enodeToString()\u003c/code\u003e representation of a default expression for the type. This is only used for domains.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypdefault\u003c/code\u003e \u003ccode class=\"type\"\u003etext\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode class=\"structfield\"\u003etypdefault\u003c/code\u003e is null if the type has no associated default value. If \u003ccode class=\"structfield\"\u003etypdefaultbin\u003c/code\u003e is not null, \u003ccode class=\"structfield\"\u003etypdefault\u003c/code\u003e must contain a human-readable version of the default expression represented by \u003ccode class=\"structfield\"\u003etypdefaultbin\u003c/code\u003e. If \u003ccode class=\"structfield\"\u003etypdefaultbin\u003c/code\u003e is null and \u003ccode class=\"structfield\"\u003etypdefault\u003c/code\u003e is not, then \u003ccode class=\"structfield\"\u003etypdefault\u003c/code\u003e is the external representation of the type's default value, which can be fed to the type's input converter to produce a constant.\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"catalog_table_entry\"\u003e\n\u003cp class=\"column_definition\"\u003e\u003ccode class=\"structfield\"\u003etypacl\u003c/code\u003e \u003ccode class=\"type\"\u003eaclitem[]\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eAccess privileges; see \u003ca class=\"xref\" href=\"/docs/18/ddl-priv.html\" title=\"5.8. Privileges\"\u003eSection 5.8\u003c/a\u003e for details\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003cdiv class=\"note\"\u003e\n\u003ch3 class=\"title\"\u003eNote\u003c/h3\u003e\n\u003cp\u003eFor fixed-width types used in system tables, it is critical that the size and alignment defined in \u003ccode class=\"structname\"\u003epg_type\u003c/code\u003e agree with the way that the compiler will lay out the column in a structure representing a table row.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003e\u003ca class=\"xref\" href=\"/docs/18/catalog-pg-type.html#CATALOG-TYPCATEGORY-TABLE\" title=\"Table 52.65. typcategory Codes\"\u003eTable 52.65\u003c/a\u003e lists the system-defined values of \u003ccode class=\"structfield\"\u003etypcategory\u003c/code\u003e. Any future additions to this list will also be upper-case ASCII letters. All other ASCII characters are reserved for user-defined categories.\u003c/p\u003e\n\u003cdiv class=\"table\" id=\"CATALOG-TYPCATEGORY-TABLE\"\u003e\n\u003cp class=\"title\"\u003e\u003cstrong\u003eTable 52.65. \u003ccode class=\"structfield\"\u003etypcategory\u003c/code\u003e Codes\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"table-contents\"\u003e\n\u003ctable class=\"table\"\u003e\n\n\n\n\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCode\u003c/th\u003e\n\u003cth\u003eCategory\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eA\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eArray types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eB\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBoolean types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eC\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eComposite types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eD\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDate/time types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eE\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eEnum types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eG\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eGeometric types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eI\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNetwork address types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eN\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNumeric types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eP\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePseudo-types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eR\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRange types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eS\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eString types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eT\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTimespan types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eU\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eUser-defined types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eV\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eBit-string types\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eX\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"type\"\u003eunknown\u003c/code\u003e type\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"literal\"\u003eZ\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eInternal-use types\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cbr class=\"table-break\"\u003e\n\u003c/div\u003e","related":[{"label":"pg_type catalog","url":"/wiki/catalog/pg_type/?v=18"},{"label":"pg_cast catalog","url":"/wiki/catalog/pg_cast/?v=18"},{"label":"pg_operator catalog","url":"/wiki/catalog/pg_operator/?v=18"},{"label":"pg_opclass catalog","url":"/wiki/catalog/pg_opclass/?v=18"},{"label":"Arrays","url":"/wiki/type/arrays/?v=18"}],"sections":[]}},"RequestedLocale":"zh-Hans","Fallback":true,"Versions":["10","11","12","13","14","15","16","17","18","19","20"],"Locales":["en"],"Signatures":null,"Spellings":null,"SQLState":null,"Evidence":null}
