{"Entry":{"collection":"catalog","key":"pg_type","name":"pg_type","aliases":[],"metadata":{"changed_in":["8.0","8.1","8.3","8.4","9.1","9.2","12","14"],"changes":[{"added":["typanalyze"],"attributes":[],"description_changed":true,"descriptions":[{"from":"If this is a composite type (see typtype), then this column points to the pg_class entry that defines the corresponding table. (For a free-standing composite type, the pg_class entry doesn't really represent a table, but it is needed anyway for the type's pg_attribute entries to link to.) Zero for base types.","name":"typrelid","to":"If this is a composite type (see typtype), then this column points to the pg_class entry that defines the corresponding table. (For a free-standing composite type, the pg_class entry doesn't really represent a table, but it is needed anyway for the type's pg_attribute entries to link to.) Zero for non-composite types."},{"from":"typtype is b for a base type, c for a composite type (i.e., a table's row type), d for a domain, or p for a pseudo-type. See also typrelid and typbasetype.","name":"typtype","to":"typtype is b for a base type, c for a composite type (e.g., a table's row type), d for a domain, or p for a pseudo-type. See also typrelid and typbasetype."}],"from":"7.4","listing":[],"order":false,"removed":[],"status":"changed","to":"8.0","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"If typelem is not 0 then it identifies another row in pg_type. The current type can then be subscripted like an array yielding values of type typelem. A \"true\" array type is variable length (typlen = -1), but some fixed-length (typlen \u003e 0) types also have nonzero typelem, for example name and oidvector. If a fixed-length type has a typelem then its internal representation must be some number of values of the typelem data type with no other data. Variable-length array types have a header defined by the array subroutines.","name":"typelem","to":"If typelem is not 0 then it identifies another row in pg_type. The current type can then be subscripted like an array yielding values of type typelem. A \"true\" array type is variable length (typlen = -1), but some fixed-length (typlen \u003e 0) types also have nonzero typelem, for example name and point. If a fixed-length type has a typelem then its internal representation must be some number of values of the typelem data type with no other data. Variable-length array types have a header defined by the array subroutines."}],"from":"8.0","listing":[],"order":false,"removed":[],"status":"changed","to":"8.1","types":[{"from":"int4","name":"typowner","to":"oid"}],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"If this is a domain (see typtype), then typbasetype identifies the type that this one is based on. Zero if not a domain.","name":"typbasetype","to":"If this is a domain (see typtype), then typbasetype identifies the type that this one is based on. Zero if this type is not a domain"},{"from":"typbyval determines whether internal routines pass a value of this type by value or by reference. typbyval had better be false if typlen 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 typbyval can be false even if the length would allow pass-by-value; this is currently true for type float4, for example.","name":"typbyval","to":"typbyval determines whether internal routines pass a value of this type by value or by reference. typbyval had better be false if typlen 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 typbyval can be false even if the length would allow pass-by-value; this is currently true for type float4, for example"},{"from":"typdefault is null if the type has no associated default value. If typdefaultbin is not null, typdefault must contain a human-readable version of the default expression represented by typdefaultbin. If typdefaultbin is null and typdefault is not, then typdefault is the external representation of the type's default value, which may be fed to the type's input converter to produce a constant.","name":"typdefault","to":"typdefault is null if the type has no associated default value. If typdefaultbin is not null, typdefault must contain a human-readable version of the default expression represented by typdefaultbin. If typdefaultbin is null and typdefault is not, then typdefault is the external representation of the type's default value, which may be fed to the type's input converter to produce a constant"},{"from":"If typdefaultbin is not null, it is the nodeToString() representation of a default expression for the type. This is only used for domains.","name":"typdefaultbin","to":"If typdefaultbin is not null, it is the nodeToString() representation of a default expression for the type. This is only used for domains"},{"from":"Character 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.","name":"typdelim","to":"Character 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"},{"from":"If typelem is not 0 then it identifies another row in pg_type. The current type can then be subscripted like an array yielding values of type typelem. A \"true\" array type is variable length (typlen = -1), but some fixed-length (typlen \u003e 0) types also have nonzero typelem, for example name and point. If a fixed-length type has a typelem then its internal representation must be some number of values of the typelem data type with no other data. Variable-length array types have a header defined by the array subroutines.","name":"typelem","to":"If typelem is not 0 then it identifies another row in pg_type. The current type can then be subscripted like an array yielding values of type typelem. A \"true\" array type is variable length (typlen = -1), but some fixed-length (typlen \u003e 0) types also have nonzero typelem, for example name and point. If a fixed-length type has a typelem then its internal representation must be some number of values of the typelem data type with no other data. Variable-length array types have a header defined by the array subroutines"},{"from":"True if the type is defined, false if this is a placeholder entry for a not-yet-defined type. When typisdefined is false, nothing except the type name, namespace, and OID can be relied on.","name":"typisdefined","to":"True if the type is defined, false if this is a placeholder entry for a not-yet-defined type. When typisdefined is false, nothing except the type name, namespace, and OID can be relied on"},{"from":"typndims is the number of array dimensions for a domain that is an array (that is, typbasetype is an array type; the domain's typelem will match the base type's typelem). Zero for types other than array domains.","name":"typndims","to":"typndims is the number of array dimensions for a domain that is an array (that is, typbasetype is an array type; the domain's typelem will match the base type's typelem). Zero for types other than array domains"},{"from":"typnotnull represents a not-null constraint on a type. Used for domains only.","name":"typnotnull","to":"typnotnull represents a not-null constraint on a type. Used for domains only"},{"from":"If this is a composite type (see typtype), then this column points to the pg_class entry that defines the corresponding table. (For a free-standing composite type, the pg_class entry doesn't really represent a table, but it is needed anyway for the type's pg_attribute entries to link to.) Zero for non-composite types.","name":"typrelid","to":"If this is a composite type (see typtype), then this column points to the pg_class entry that defines the corresponding table. (For a free-standing composite type, the pg_class entry doesn't really represent a table, but it is needed anyway for the type's pg_attribute entries to link to.) Zero for non-composite types"},{"from":"typtype is b for a base type, c for a composite type (e.g., a table's row type), d for a domain, or p for a pseudo-type. See also typrelid and typbasetype.","name":"typtype","to":"typtype is b for a base type, c for a composite type (e.g., a table's row type), d for a domain, or p for a pseudo-type. See also typrelid and typbasetype"},{"from":"Domains use typtypmod to record the typmod to be applied to their base type (-1 if base type does not use a typmod). -1 if this type is not a domain.","name":"typtypmod","to":"Domains use typtypmod to record the typmod to be applied to their base type (-1 if base type does not use a typmod). -1 if this type is not a domain"}],"from":"8.1","listing":[],"order":false,"removed":[],"status":"reworded","to":"8.2","types":[],"unlisted":[]},{"added":["typarray","typmodin","typmodout"],"attributes":[],"description_changed":false,"descriptions":[{"from":"typdefault is null if the type has no associated default value. If typdefaultbin is not null, typdefault must contain a human-readable version of the default expression represented by typdefaultbin. If typdefaultbin is null and typdefault is not, then typdefault is the external representation of the type's default value, which may be fed to the type's input converter to produce a constant","name":"typdefault","to":"typdefault is null if the type has no associated default value. If typdefaultbin is not null, typdefault must contain a human-readable version of the default expression represented by typdefaultbin. If typdefaultbin is null and typdefault is not, then typdefault is the external representation of the type's default value, which might be fed to the type's input converter to produce a constant"},{"from":"typndims is the number of array dimensions for a domain that is an array (that is, typbasetype is an array type; the domain's typelem will match the base type's typelem). Zero for types other than array domains","name":"typndims","to":"typndims is the number of array dimensions for a domain that is an array (that is, typbasetype is an array type; the domain's typelem will match the base type's typelem). Zero for types other than domains over array types"},{"from":"typtype is b for a base type, c for a composite type (e.g., a table's row type), d for a domain, or p for a pseudo-type. See also typrelid and typbasetype","name":"typtype","to":"typtype is b for a base type, c for a composite type (e.g., a table's row type), d for a domain, e for an enum type, or p for a pseudo-type. See also typrelid and typbasetype"}],"from":"8.2","listing":[],"order":false,"removed":[],"status":"changed","to":"8.3","types":[],"unlisted":[]},{"added":["typcategory","typispreferred"],"attributes":[],"description_changed":true,"descriptions":[{"from":"typbyval determines whether internal routines pass a value of this type by value or by reference. typbyval had better be false if typlen 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 typbyval can be false even if the length would allow pass-by-value; this is currently true for type float4, for example","name":"typbyval","to":"typbyval determines whether internal routines pass a value of this type by value or by reference. typbyval had better be false if typlen 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 typbyval can be false even if the length would allow pass-by-value"}],"from":"8.3","listing":[],"order":false,"removed":[],"status":"changed","to":"8.4","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"If this is a domain (see typtype), then typbasetype identifies the type that this one is based on. Zero if this type is not a domain","name":"typbasetype","to":"If this is a domain (see typtype), then typbasetype identifies the type that this one is based on. Zero if this type is not a domain."},{"from":"typbyval determines whether internal routines pass a value of this type by value or by reference. typbyval had better be false if typlen 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 typbyval can be false even if the length would allow pass-by-value","name":"typbyval","to":"typbyval determines whether internal routines pass a value of this type by value or by reference. typbyval had better be false if typlen 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 typbyval can be false even if the length would allow pass-by-value."},{"from":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \"preferred\". See Table 44-43","name":"typcategory","to":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \"preferred\". See Table 45-45."},{"from":"typdefault is null if the type has no associated default value. If typdefaultbin is not null, typdefault must contain a human-readable version of the default expression represented by typdefaultbin. If typdefaultbin is null and typdefault is not, then typdefault is the external representation of the type's default value, which might be fed to the type's input converter to produce a constant","name":"typdefault","to":"typdefault is null if the type has no associated default value. If typdefaultbin is not null, typdefault must contain a human-readable version of the default expression represented by typdefaultbin. If typdefaultbin is null and typdefault is not, then typdefault is the external representation of the type's default value, which might be fed to the type's input converter to produce a constant."},{"from":"If typdefaultbin is not null, it is the nodeToString() representation of a default expression for the type. This is only used for domains","name":"typdefaultbin","to":"If typdefaultbin is not null, it is the nodeToString() representation of a default expression for the type. This is only used for domains."},{"from":"Character 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","name":"typdelim","to":"Character 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."},{"from":"If typelem is not 0 then it identifies another row in pg_type. The current type can then be subscripted like an array yielding values of type typelem. A \"true\" array type is variable length (typlen = -1), but some fixed-length (typlen \u003e 0) types also have nonzero typelem, for example name and point. If a fixed-length type has a typelem then its internal representation must be some number of values of the typelem data type with no other data. Variable-length array types have a header defined by the array subroutines","name":"typelem","to":"If typelem is not 0 then it identifies another row in pg_type. The current type can then be subscripted like an array yielding values of type typelem. A \"true\" array type is variable length (typlen = -1), but some fixed-length (typlen \u003e 0) types also have nonzero typelem, for example name and point. If a fixed-length type has a typelem then its internal representation must be some number of values of the typelem data type with no other data. Variable-length array types have a header defined by the array subroutines."},{"from":"True if the type is defined, false if this is a placeholder entry for a not-yet-defined type. When typisdefined is false, nothing except the type name, namespace, and OID can be relied on","name":"typisdefined","to":"True if the type is defined, false if this is a placeholder entry for a not-yet-defined type. When typisdefined is false, nothing except the type name, namespace, and OID can be relied on."},{"from":"typndims is the number of array dimensions for a domain that is an array (that is, typbasetype is an array type; the domain's typelem will match the base type's typelem). Zero for types other than domains over array types","name":"typndims","to":"typndims is the number of array dimensions for a domain that is an array (that is, typbasetype is an array type; the domain's typelem will match the base type's typelem). Zero for types other than domains over array types."},{"from":"typnotnull represents a not-null constraint on a type. Used for domains only","name":"typnotnull","to":"typnotnull represents a not-null constraint on a type. Used for domains only."},{"from":"If this is a composite type (see typtype), then this column points to the pg_class entry that defines the corresponding table. (For a free-standing composite type, the pg_class entry doesn't really represent a table, but it is needed anyway for the type's pg_attribute entries to link to.) Zero for non-composite types","name":"typrelid","to":"If this is a composite type (see typtype), then this column points to the pg_class entry that defines the corresponding table. (For a free-standing composite type, the pg_class entry doesn't really represent a table, but it is needed anyway for the type's pg_attribute entries to link to.) Zero for non-composite types."},{"from":"typtype is b for a base type, c for a composite type (e.g., a table's row type), d for a domain, e for an enum type, or p for a pseudo-type. See also typrelid and typbasetype","name":"typtype","to":"typtype is b for a base type, c for a composite type (e.g., a table's row type), d for a domain, e for an enum type, or p for a pseudo-type. See also typrelid and typbasetype."},{"from":"Domains use typtypmod to record the typmod to be applied to their base type (-1 if base type does not use a typmod). -1 if this type is not a domain","name":"typtypmod","to":"Domains use typtypmod to record the typmod to be applied to their base type (-1 if base type does not use a typmod). -1 if this type is not a domain."}],"from":"8.4","listing":[],"order":false,"removed":[],"status":"reworded","to":"9.0","types":[],"unlisted":[]},{"added":["typcollation"],"attributes":[],"description_changed":false,"descriptions":[{"from":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \"preferred\". See Table 45-45.","name":"typcategory","to":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \"preferred\". See Table 45-49."},{"from":"typdefault is null if the type has no associated default value. If typdefaultbin is not null, typdefault must contain a human-readable version of the default expression represented by typdefaultbin. If typdefaultbin is null and typdefault is not, then typdefault is the external representation of the type's default value, which might be fed to the type's input converter to produce a constant.","name":"typdefault","to":"typdefault is null if the type has no associated default value. If typdefaultbin is not null, typdefault must contain a human-readable version of the default expression represented by typdefaultbin. If typdefaultbin is null and typdefault is not, then typdefault is the external representation of the type's default value, which can be fed to the type's input converter to produce a constant."},{"from":"typndims is the number of array dimensions for a domain that is an array (that is, typbasetype is an array type; the domain's typelem will match the base type's typelem). Zero for types other than domains over array types.","name":"typndims","to":"typndims is the number of array dimensions for a domain over an array (that is, typbasetype is an array type). Zero for types other than domains over array types."}],"from":"9.0","listing":[],"order":false,"removed":[],"status":"changed","to":"9.1","types":[{"from":"text","name":"typdefaultbin","to":"pg_node_tree"}],"unlisted":[]},{"added":["typacl"],"attributes":[],"description_changed":false,"descriptions":[{"from":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \"preferred\". See Table 45-49.","name":"typcategory","to":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \"preferred\". See Table 45-51."},{"from":"typtype is b for a base type, c for a composite type (e.g., a table's row type), d for a domain, e for an enum type, or p for a pseudo-type. See also typrelid and typbasetype.","name":"typtype","to":"typtype is b for a base type, c for a composite type (e.g., a table's row type), d for a domain, e for an enum type, p for a pseudo-type, or r for a range type. See also typrelid and typbasetype."}],"from":"9.1","listing":[],"order":false,"removed":[],"status":"changed","to":"9.2","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \"preferred\". See Table 45-51.","name":"typcategory","to":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \"preferred\". See Table 47-52."}],"from":"9.2","listing":[],"order":false,"removed":[],"status":"reworded","to":"9.3","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \"preferred\". See Table 47-52.","name":"typcategory","to":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \"preferred\". See Table 48-53."}],"from":"9.3","listing":[],"order":false,"removed":[],"status":"reworded","to":"9.4","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \"preferred\". See Table 48-53.","name":"typcategory","to":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \"preferred\". See Table 49-55."}],"from":"9.4","listing":[],"order":false,"removed":[],"status":"reworded","to":"9.5","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \"preferred\". See Table 49-55.","name":"typcategory","to":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \"preferred\". See Table 50-56."}],"from":"9.5","listing":[],"order":false,"removed":[],"status":"reworded","to":"9.6","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"typalign 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 PostgreSQL. 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: c = char alignment, i.e., no alignment needed. s = short alignment (2 bytes on most machines). i = int alignment (4 bytes on most machines). d = double alignment (8 bytes on many machines, but by no means all). Note: For types used in system tables, it is critical that the size and alignment defined in pg_type agree with the way that the compiler will lay out the column in a structure representing a table row.","name":"typalign","to":"typalign 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 PostgreSQL. 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: c = char alignment, i.e., no alignment needed. s = short alignment (2 bytes on most machines). i = int alignment (4 bytes on most machines). d = double alignment (8 bytes on many machines, but by no means all). Note For types used in system tables, it is critical that the size and alignment defined in pg_type agree with the way that the compiler will lay out the column in a structure representing a table row."},{"from":"If typarray is not 0 then it identifies another row in pg_type, which is the \"true\" array type having this type as element","name":"typarray","to":"If typarray is not 0 then it identifies another row in pg_type, which is the “true” array type having this type as element"},{"from":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be \"preferred\". See Table 50-56.","name":"typcategory","to":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 51.63."},{"from":"If typelem is not 0 then it identifies another row in pg_type. The current type can then be subscripted like an array yielding values of type typelem. A \"true\" array type is variable length (typlen = -1), but some fixed-length (typlen \u003e 0) types also have nonzero typelem, for example name and point. If a fixed-length type has a typelem then its internal representation must be some number of values of the typelem data type with no other data. Variable-length array types have a header defined by the array subroutines.","name":"typelem","to":"If typelem is not 0 then it identifies another row in pg_type. The current type can then be subscripted like an array yielding values of type typelem. A “true” array type is variable length (typlen = -1), but some fixed-length (typlen \u003e 0) types also have nonzero typelem, for example name and point. If a fixed-length type has a typelem then its internal representation must be some number of values of the typelem data type with no other data. Variable-length array types have a header defined by the array subroutines."},{"from":"For a fixed-size type, typlen is the number of bytes in the internal representation of the type. But for a variable-length type, typlen is negative. -1 indicates a \"varlena\" type (one that has a length word), -2 indicates a null-terminated C string.","name":"typlen","to":"For a fixed-size type, typlen is the number of bytes in the internal representation of the type. But for a variable-length type, typlen is negative. -1 indicates a “varlena” type (one that has a length word), -2 indicates a null-terminated C string."},{"from":"typstorage tells for varlena types (those with typlen = -1) if the type is prepared for toasting and what the default strategy for attributes of this type should be. Possible values are p: Value must always be stored plain. e: Value can be stored in a \"secondary\" relation (if relation has one, see pg_class.reltoastrelid). m: Value can be stored compressed inline. x: Value can be stored compressed inline or stored in \"secondary\" storage. Note that m columns can also be moved out to secondary storage, but only as a last resort (e and x columns are moved first).","name":"typstorage","to":"typstorage tells for varlena types (those with typlen = -1) if the type is prepared for toasting and what the default strategy for attributes of this type should be. Possible values are p: Value must always be stored plain. e: Value can be stored in a “secondary” relation (if relation has one, see pg_class.reltoastrelid). m: Value can be stored compressed inline. x: Value can be stored compressed inline or stored in “secondary” storage. Note that m columns can also be moved out to secondary storage, but only as a last resort (e and x columns are moved first)."}],"from":"9.6","listing":[],"order":false,"removed":[],"status":"reworded","to":"10","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 51.63.","name":"typcategory","to":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 52.63."}],"from":"10","listing":[],"order":false,"removed":[],"status":"reworded","to":"11","types":[],"unlisted":[]},{"added":[],"attributes":[{"attribute":"hidden","from":true,"name":"oid","to":false}],"description_changed":false,"descriptions":[{"from":"Access privileges; see GRANT and REVOKE for details","name":"typacl","to":"Access privileges; see Section 5.7 for details"},{"from":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 52.63.","name":"typcategory","to":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 51.64."},{"from":"typcollation 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 DEFAULT_COLLATION_OID here. A domain over a collatable type can have some other collation OID, if one was specified for the domain.","name":"typcollation","to":"typcollation 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 DEFAULT_COLLATION_OID. A domain over a collatable type can have a collation OID different from its base type's, if one was specified for the domain."}],"from":"11","listing":[],"order":false,"removed":[],"status":"changed","to":"12","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"typalign 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 PostgreSQL. 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: c = char alignment, i.e., no alignment needed. s = short alignment (2 bytes on most machines). i = int alignment (4 bytes on most machines). d = double alignment (8 bytes on many machines, but by no means all). Note For types used in system tables, it is critical that the size and alignment defined in pg_type agree with the way that the compiler will lay out the column in a structure representing a table row.","name":"typalign","to":"typalign 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 PostgreSQL. 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:\n\nc = char alignment, i.e., no alignment needed. s = short alignment (2 bytes on most machines). i = int alignment (4 bytes on most machines). d = double alignment (8 bytes on many machines, but by no means all)."},{"from":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 51.64.","name":"typcategory","to":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 51.63."},{"from":"typstorage tells for varlena types (those with typlen = -1) if the type is prepared for toasting and what the default strategy for attributes of this type should be. Possible values are p: Value must always be stored plain. e: Value can be stored in a “secondary” relation (if relation has one, see pg_class.reltoastrelid). m: Value can be stored compressed inline. x: Value can be stored compressed inline or stored in “secondary” storage. Note that m columns can also be moved out to secondary storage, but only as a last resort (e and x columns are moved first).","name":"typstorage","to":"typstorage tells for varlena types (those with typlen = -1) if the type is prepared for toasting and what the default strategy for attributes of this type should be. Possible values are:\n\np (plain): Values must always be stored plain (non-varlena types always use this value). e (external): Values can be stored in a secondary “TOAST” relation (if relation has one, see pg_class.reltoastrelid). m (main): Values can be compressed and stored inline. x (extended): Values can be compressed and/or moved to a secondary relation.\n\nx is the usual choice for toast-able types. Note that m values can also be moved out to secondary storage, but only as a last resort (e and x values are moved first)."}],"from":"12","listing":[],"order":false,"removed":[],"status":"reworded","to":"13","types":[],"unlisted":[]},{"added":["typsubscript"],"attributes":[],"description_changed":false,"descriptions":[{"from":"Custom ANALYZE function, or 0 to use the standard function","name":"typanalyze","to":"Custom ANALYZE function, or zero to use the standard function"},{"from":"If typarray is not 0 then it identifies another row in pg_type, which is the “true” array type having this type as element","name":"typarray","to":"If typarray is not zero then it identifies another row in pg_type, which is the “true” array type having this type as element"},{"from":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 51.63.","name":"typcategory","to":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 52.63."},{"from":"If typelem is not 0 then it identifies another row in pg_type. The current type can then be subscripted like an array yielding values of type typelem. A “true” array type is variable length (typlen = -1), but some fixed-length (typlen \u003e 0) types also have nonzero typelem, for example name and point. If a fixed-length type has a typelem then its internal representation must be some number of values of the typelem data type with no other data. Variable-length array types have a header defined by the array subroutines.","name":"typelem","to":"If typelem is not zero then it identifies another row in pg_type, defining the type yielded by subscripting. This should be zero if typsubscript is zero. However, it can be zero when typsubscript isn't zero, if the handler doesn't need typelem to determine the subscripting result type. Note that a typelem 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."},{"from":"Type modifier input function, or 0 if type does not support modifiers","name":"typmodin","to":"Type modifier input function, or zero if type does not support modifiers"},{"from":"Type modifier output function, or 0 to use the standard format","name":"typmodout","to":"Type modifier output function, or zero to use the standard format"},{"from":"Input conversion function (binary format), or 0 if none","name":"typreceive","to":"Input conversion function (binary format), or zero if none"},{"from":"Output conversion function (binary format), or 0 if none","name":"typsend","to":"Output conversion function (binary format), or zero if none"},{"from":"typtype is b for a base type, c for a composite type (e.g., a table's row type), d for a domain, e for an enum type, p for a pseudo-type, or r for a range type. See also typrelid and typbasetype.","name":"typtype","to":"typtype is b for a base type, c for a composite type (e.g., a table's row type), d for a domain, e for an enum type, p for a pseudo-type, r for a range type, or m for a multirange type. See also typrelid and typbasetype."}],"from":"13","listing":[],"order":false,"removed":[],"status":"changed","to":"14","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 52.63.","name":"typcategory","to":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 53.65."}],"from":"14","listing":[],"order":false,"removed":[],"status":"reworded","to":"15","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"Access privileges; see Section 5.7 for details","name":"typacl","to":"Access privileges; see Section 5.8 for details"},{"from":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 53.65.","name":"typcategory","to":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 51.65."}],"from":"16","listing":[],"order":false,"removed":[],"status":"reworded","to":"17","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 51.65.","name":"typcategory","to":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 52.65."}],"from":"17","listing":[],"order":false,"removed":[],"status":"reworded","to":"18","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"Access privileges; see Section 5.8 for details","name":"typacl","to":"Access privileges; see Section 5.9 for details"}],"from":"18","listing":[],"order":false,"removed":[],"status":"reworded","to":"19","types":[],"unlisted":[]}],"column_count":32,"content_hash":"95385c30ceb61060ac221c01bf3a0a599aeb972228957211b09748191af27bdc","derived_content_hash":"3cc4ae2e94550b219219c854439b6be1efa1fd6eb4de44a4dd26623526ae43b1","first_version":"7.4","imported_at":"2026-09-30T00:40:56.378517+08:00","kind":"catalog","last_version":"20","name":"pg_type","position":149,"present_in":["7.4","8.0","8.1","8.2","8.3","8.4","9.0","9.1","9.2","9.3","9.4","9.5","9.6","10","11","12","13","14","15","16","17","18","19","20"],"relation_oid":null,"relkind":"r","shared":false,"source_rev":"catalog-bilingual-repair:5c4f11583751d53c3644ac131252146bc75665e88d6b7350c34371b4147b616d","summary":"The catalog pg_type stores information about data types.","summary_zh":"目录 pg_type 存储有关数据类型的信息。基础类型和枚举类型（标量类型）使用 CREATE TYPE 创建，而域使用 CREATE DOMAIN 创建。数据库中的每一个表都会有一个自动创建的复合类型，用于表示表的行结构。也可以使用 CREATE TYPE AS 创建复合类型。"}},"Definition":{"Collection":"catalog","Key":"pg_type","SourceDatabase":"center","Version":"18","SourceTable":"catalog","SourceKey":"pg_type","SourceRevision":"catalog-bilingual-repair:5c4f11583751d53c3644ac131252146bc75665e88d6b7350c34371b4147b616d","Facts":{"columns":[{"array_dimensions":0,"attnum":1,"description":"Row identifier","description_zh":"行标识符","documented":true,"documented_name":"oid","hidden":false,"name":"oid","not_null":true,"references":"","type":"oid","type_modifier":-1,"type_oid":26,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":2,"description":"Data type name","description_zh":"数据类型的名字","documented":true,"documented_name":"typname","hidden":false,"name":"typname","not_null":true,"references":"","type":"name","type_modifier":-1,"type_oid":19,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":3,"description":"The OID of the namespace that contains this type","description_zh":"包含此类型的名字空间的 OID","documented":true,"documented_name":"typnamespace","hidden":false,"name":"typnamespace","not_null":true,"references":"pg_namespace.oid","type":"oid","type_modifier":-1,"type_oid":26,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":4,"description":"Owner of the type","description_zh":"类型的拥有者","documented":true,"documented_name":"typowner","hidden":false,"name":"typowner","not_null":true,"references":"pg_authid.oid","type":"oid","type_modifier":-1,"type_oid":26,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":5,"description":"For a fixed-size type, typlen is the number of bytes in the internal representation of the type. But for a variable-length type, typlen is negative. -1 indicates a “varlena” type (one that has a length word), -2 indicates a null-terminated C string.","description_zh":"对于一个固定尺寸的类型，typlen 是该类型内部表示的字节数。对于一个变长类型，typlen 为负值。-1 表示一个“varlena”类型（具有长度字），-2 表示一个以空字符结尾的 C 字符串。","documented":true,"documented_name":"typlen","hidden":false,"name":"typlen","not_null":true,"references":"","type":"int2","type_modifier":-1,"type_oid":21,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":6,"description":"typbyval determines whether internal routines pass a value of this type by value or by reference. typbyval had better be false if typlen 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 typbyval can be false even if the length would allow pass-by-value.","description_zh":"typbyval 判断内部例程传递这个类型的值时是通过传值还是传引用。如果 typlen 不是 1、2 或 4（或者在 Datum 为 8 字节的机器上为 8），则 typbyval 最好是假。变长类型总是传引用。注意即使长度允许传值，typbyval 也可以为假。","documented":true,"documented_name":"typbyval","hidden":false,"name":"typbyval","not_null":true,"references":"","type":"bool","type_modifier":-1,"type_oid":16,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":7,"description":"typtype is b for a base type, c for a composite type (e.g., a table's row type), d for a domain, e for an enum type, p for a pseudo-type, r for a range type, or m for a multirange type. See also typrelid and typbasetype.","description_zh":"typtype 可以是：b 表示一个基础类型，c 表示一个复合类型（例如一个表的行类型），d 表示一个域，e 表示一个枚举类型，p 表示一个伪类型，r 表示一个范围类型，或 m 表示一个多范围类型。另请参阅 typrelid 和 typbasetype。","documented":true,"documented_name":"typtype","hidden":false,"name":"typtype","not_null":true,"references":"","type":"char","type_modifier":-1,"type_oid":18,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":8,"description":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 52.65.","description_zh":"typcategory 是一种任意的数据类型分类，它被解析器用来决定应“首选”哪些隐式类型转换。参见表 52.65。","documented":true,"documented_name":"typcategory","hidden":false,"name":"typcategory","not_null":true,"references":"","type":"char","type_modifier":-1,"type_oid":18,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":9,"description":"True if the type is a preferred cast target within its typcategory","description_zh":"如果此类型在它的 typcategory 中是首选的类型转换目标，此列为真","documented":true,"documented_name":"typispreferred","hidden":false,"name":"typispreferred","not_null":true,"references":"","type":"bool","type_modifier":-1,"type_oid":16,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":10,"description":"True if the type is defined, false if this is a placeholder entry for a not-yet-defined type. When typisdefined is false, nothing except the type name, namespace, and OID can be relied on.","description_zh":"如果此类型已被定义则为真，如果此类型只是一个表示还未定义类型的占位符则为假。当 typisdefined 为假，除了类型名字、名字空间和 OID 之外什么都不能被依赖。","documented":true,"documented_name":"typisdefined","hidden":false,"name":"typisdefined","not_null":true,"references":"","type":"bool","type_modifier":-1,"type_oid":16,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":11,"description":"Character 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.","description_zh":"在分析数组输入时，分隔两个此类型值的字符。注意该分隔符是与数组元素数据类型相关联的，而不是和数组的数据类型关联。","documented":true,"documented_name":"typdelim","hidden":false,"name":"typdelim","not_null":true,"references":"","type":"char","type_modifier":-1,"type_oid":18,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":12,"description":"If this is a composite type (see typtype), then this column points to the pg_class entry that defines the corresponding table. (For a free-standing composite type, the pg_class entry doesn't really represent a table, but it is needed anyway for the type's pg_attribute entries to link to.) Zero for non-composite types.","description_zh":"如果这是一个复合类型（见 typtype），那么此列指向 pg_class 中定义对应表的项（对于独立定义的复合类型，pg_class 项并不表示一个表，但不管怎样该类型的 pg_attribute 项需要链接到它）。对非复合类型此列为零。","documented":true,"documented_name":"typrelid","hidden":false,"name":"typrelid","not_null":true,"references":"pg_class.oid","type":"oid","type_modifier":-1,"type_oid":26,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":13,"description":"Subscripting handler function's OID, or zero if this type doesn't support subscripting. Types that are “true” array types have typsubscript = array_subscript_handler, but other types may have other handler functions to implement specialized subscripting behavior.","description_zh":"下标处理函数的 OID，如果该类型不支持下标则为零。“真正的”数组类型的 typsubscript = array_subscript_handler，但其他类型也可能使用不同的处理函数来实现特定的下标行为。","documented":true,"documented_name":"typsubscript","hidden":false,"name":"typsubscript","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":14,"description":"If typelem is not zero then it identifies another row in pg_type, defining the type yielded by subscripting. This should be zero if typsubscript is zero. However, it can be zero when typsubscript isn't zero, if the handler doesn't need typelem to determine the subscripting result type. Note that a typelem 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.","description_zh":"如果 typelem 不为零，则它标识 pg_type 中的另一行，该行定义了下标操作产生的类型。如果 typsubscript 为零则该项为零。但是，当 typsubscript 不为零时它也可以为零，如果处理函数不需要 typelem 来决定下标结果类型。注意 typelem 依赖被视为意味着该类型在物理上包含其元素类型；所以这个元素类型上的 DDL 变更可能会受到该类型存在的限制。","documented":true,"documented_name":"typelem","hidden":false,"name":"typelem","not_null":true,"references":"pg_type.oid","type":"oid","type_modifier":-1,"type_oid":26,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":15,"description":"If typarray is not zero then it identifies another row in pg_type, which is the “true” array type having this type as element","description_zh":"如果 typarray 不是零，则它标识 pg_type 中的另一行，这一行是一个将此类型作为元素的“真正的”数组类型","documented":true,"documented_name":"typarray","hidden":false,"name":"typarray","not_null":true,"references":"pg_type.oid","type":"oid","type_modifier":-1,"type_oid":26,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":16,"description":"Input conversion function (text format)","description_zh":"输入转换函数（文本格式）","documented":true,"documented_name":"typinput","hidden":false,"name":"typinput","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":17,"description":"Output conversion function (text format)","description_zh":"输出转换函数（文本格式）","documented":true,"documented_name":"typoutput","hidden":false,"name":"typoutput","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":18,"description":"Input conversion function (binary format), or zero if none","description_zh":"输入转换函数（二进制格式），如果没有则为零","documented":true,"documented_name":"typreceive","hidden":false,"name":"typreceive","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":19,"description":"Output conversion function (binary format), or zero if none","description_zh":"输出转换函数（二进制格式），如果没有则为零","documented":true,"documented_name":"typsend","hidden":false,"name":"typsend","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":20,"description":"Type modifier input function, or zero if type does not support modifiers","description_zh":"类型修饰符输入函数，如果类型不支持修饰符则为零","documented":true,"documented_name":"typmodin","hidden":false,"name":"typmodin","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":21,"description":"Type modifier output function, or zero to use the standard format","description_zh":"类型修饰符输出函数，或为零以使用标准格式","documented":true,"documented_name":"typmodout","hidden":false,"name":"typmodout","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":22,"description":"Custom ANALYZE function, or zero to use the standard function","description_zh":"自定义 ANALYZE 函数，零表示使用标准函数","documented":true,"documented_name":"typanalyze","hidden":false,"name":"typanalyze","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":23,"description":"typalign 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 PostgreSQL. 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:\n\nc = char alignment, i.e., no alignment needed. s = short alignment (2 bytes on most machines). i = int alignment (4 bytes on most machines). d = double alignment (8 bytes on many machines, but by no means all).","description_zh":"typalign 表示存储此类型值时所要求的对齐方式。它适用于磁盘存储，以及该值在 PostgreSQL 内部的大多数表示形式。当多个值连续存放时，例如在磁盘上完整行的表示中，这种类型的数据前会插入填充，使其从指定边界开始。对齐参考点是该序列中第一个数据的起始位置。可能的值为：\n\nc = char 对齐，即不需要对齐。s = short 对齐（在大部分机器上为 2 字节）。i = int 对齐（在大部分机器上为 4 字节）。d = double 对齐（在很多机器上为 8 字节，但并非所有机器都如此）。\n\n","documented":true,"documented_name":"typalign","hidden":false,"name":"typalign","not_null":true,"references":"","type":"char","type_modifier":-1,"type_oid":18,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":24,"description":"typstorage tells for varlena types (those with typlen = -1) if the type is prepared for toasting and what the default strategy for attributes of this type should be. Possible values are:\n\np (plain): Values must always be stored plain (non-varlena types always use this value). e (external): Values can be stored in a secondary “TOAST” relation (if relation has one, see pg_class.reltoastrelid). m (main): Values can be compressed and stored inline. x (extended): Values can be compressed and/or moved to a secondary relation.\n\nx is the usual choice for toast-able types. Note that m values can also be moved out to secondary storage, but only as a last resort (e and x values are moved first).","description_zh":"对于变长类型（typlen = -1），typstorage 同时指示该类型是否支持 TOAST，以及其属性应采用的默认策略。可能的值是：\n\np（普通）：值必须始终以普通方式存储（非 varlena 类型总是使用这个值）。 e（外部）：值可以存储在一个二级“TOAST”关系中（如果原关系有这样的关系，参见 pg_class.reltoastrelid）。 m（主要）：值可以压缩后存储在行内。 x（扩展）：值可以被压缩和/或移动到二级关系。\n\nx 是支持 TOAST 的类型的常见选择。注意，m 值也可以移到二级存储，但只能作为最后手段（e 和 x 值会先被移动）。","documented":true,"documented_name":"typstorage","hidden":false,"name":"typstorage","not_null":true,"references":"","type":"char","type_modifier":-1,"type_oid":18,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":25,"description":"typnotnull represents a not-null constraint on a type. Used for domains only.","description_zh":"typnotnull 表示类型上的一个非空约束。只用于域。","documented":true,"documented_name":"typnotnull","hidden":false,"name":"typnotnull","not_null":true,"references":"","type":"bool","type_modifier":-1,"type_oid":16,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":26,"description":"If this is a domain (see typtype), then typbasetype identifies the type that this one is based on. Zero if this type is not a domain.","description_zh":"如果这是一个域（见 typtype），则 typbasetype 标识该域所基于的类型。如果此类型不是域，则为 0。","documented":true,"documented_name":"typbasetype","hidden":false,"name":"typbasetype","not_null":true,"references":"pg_type.oid","type":"oid","type_modifier":-1,"type_oid":26,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":27,"description":"Domains use typtypmod to record the typmod to be applied to their base type (-1 if base type does not use a typmod). -1 if this type is not a domain.","description_zh":"域使用 typtypmod 来记录被应用于它们基础类型的 typmod（如果基础类型不使用 typmod，则为-1）。如果此类型不是一个域则为-1。","documented":true,"documented_name":"typtypmod","hidden":false,"name":"typtypmod","not_null":true,"references":"","type":"int4","type_modifier":-1,"type_oid":23,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":28,"description":"typndims is the number of array dimensions for a domain over an array (that is, typbasetype is an array type). Zero for types other than domains over array types.","description_zh":"对于基于数组的域，typndims 是数组维度数（即，typbasetype 是一个数组类型）。对于不是基于数组的域的类型，此列为零。","documented":true,"documented_name":"typndims","hidden":false,"name":"typndims","not_null":true,"references":"","type":"int4","type_modifier":-1,"type_oid":23,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":29,"description":"typcollation 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 DEFAULT_COLLATION_OID. A domain over a collatable type can have a collation OID different from its base type's, if one was specified for the domain.","description_zh":"typcollation 指定此类型的排序规则。如果类型不支持排序规则，此列为零。支持排序规则的基础类型在这里会有一个非零值，典型值为 DEFAULT_COLLATION_OID。基于支持排序规则的类型的域，如果为其指定了排序规则 OID，则它的排序规则 OID 可以不同于其基础类型的排序规则 OID。","documented":true,"documented_name":"typcollation","hidden":false,"name":"typcollation","not_null":true,"references":"pg_collation.oid","type":"oid","type_modifier":-1,"type_oid":26,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":30,"description":"If typdefaultbin is not null, it is the nodeToString() representation of a default expression for the type. This is only used for domains.","description_zh":"如果 typdefaultbin 非 NULL，那么它就是该类型默认表达式的 nodeToString() 表示形式。此列只用于域。","documented":true,"documented_name":"typdefaultbin","hidden":false,"name":"typdefaultbin","not_null":false,"references":"","type":"pg_node_tree","type_modifier":-1,"type_oid":194,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":31,"description":"typdefault is null if the type has no associated default value. If typdefaultbin is not null, typdefault must contain a human-readable version of the default expression represented by typdefaultbin. If typdefaultbin is null and typdefault is not, then typdefault is the external representation of the type's default value, which can be fed to the type's input converter to produce a constant.","description_zh":"如果某类型没有相关默认值，那么 typdefault 为 NULL。如果 typdefaultbin 不为 NULL，那么 typdefault 必须包含由 typdefaultbin 表示的默认表达式的人类可读版本。如果 typdefaultbin 为 NULL 而 typdefault 不为 NULL，则 typdefault 是该类型默认值的外部表示形式，它可以被交给该类型的输入转换器来产生一个常量。","documented":true,"documented_name":"typdefault","hidden":false,"name":"typdefault","not_null":false,"references":"","type":"text","type_modifier":-1,"type_oid":25,"zh_from":"same-version-manual"},{"array_dimensions":1,"attnum":32,"description":"Access privileges; see Section 5.8 for details","description_zh":"访问权限，另请参阅第 5.8 节","documented":true,"documented_name":"typacl","hidden":false,"name":"typacl","not_null":false,"references":"","type":"aclitem[]","type_modifier":-1,"type_oid":1034,"zh_from":"same-version-manual"}],"description":"The catalog pg_type stores information about data types. Base types and enum types (scalar types) are created with CREATE TYPE, and domains with CREATE DOMAIN. 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 CREATE TYPE AS.","description_zh":"目录 pg_type 存储有关数据类型的信息。基础类型和枚举类型（标量类型）使用 CREATE TYPE 创建，而域使用 CREATE DOMAIN 创建。数据库中的每一个表都会有一个自动创建的复合类型，用于表示表的行结构。也可以使用 CREATE TYPE AS 创建复合类型。","description_zh_html":"\u003cp\u003e目录 pg_type 存储有关数据类型的信息。基础类型和枚举类型（标量类型）使用 CREATE TYPE 创建，而域使用 CREATE DOMAIN 创建。数据库中的每一个表都会有一个自动创建的复合类型，用于表示表的行结构。也可以使用 CREATE TYPE AS 创建复合类型。\u003c/p\u003e","doc":{"anchor":"id-1.10.4.66.4","file":"catalog-pg-type.html","lang":"en","sha256":"ea9c9313bab8e92a7da18ebc50c7ff1f908dd80999a7e0ca3bbc82ba626c58d4","slug":"18"},"kind":"catalog","lang":"en","measured_attributes":true,"metadata_release":"18.6","runtime_columns":["oid","typname","typnamespace","typowner","typlen","typbyval","typtype","typcategory","typispreferred","typisdefined","typdelim","typrelid","typsubscript","typelem","typarray","typinput","typoutput","typreceive","typsend","typmodin","typmodout","typanalyze","typalign","typstorage","typnotnull","typbasetype","typtypmod","typndims","typcollation","typdefaultbin","typdefault","typacl"],"runtime_verified":false,"source":"english-manual","sources":[{"evidence":[{"build_id":107,"kind":"same-version-manual","locale":"zh-Hans","page":"catalog-pg-type.html","sha256":"468a89c998d4d895bd48e6b05dbfc2d84030549a6b24b8ca147836edc4836a6b","source_revision":"unknown:rendered-translation-baseline","translation_revision":"git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:08e987a66af27b98444a8057c256314eafa13611a3fb9e888214fc436824244b","version":"18"}],"kind":"catalog-bilingual-repair","prior_source_revision":"english-manuals:7ccd3acc4070ff012770bbecf798361c0d9e93f7548eac7e946c2638d5cea4cf","version":"18"}],"zh_from":"same-version-manual"},"ManualEvidence":{"doc":{"anchor":"id-1.10.4.66.4","file":"catalog-pg-type.html","lang":"en","sha256":"ea9c9313bab8e92a7da18ebc50c7ff1f908dd80999a7e0ca3bbc82ba626c58d4","slug":"18"},"sources":[{"evidence":[{"build_id":107,"kind":"same-version-manual","locale":"zh-Hans","page":"catalog-pg-type.html","sha256":"468a89c998d4d895bd48e6b05dbfc2d84030549a6b24b8ca147836edc4836a6b","source_revision":"unknown:rendered-translation-baseline","translation_revision":"git:b1b500221dbe5437cfca004d6b04d3f6e422765d;html-sha256:08e987a66af27b98444a8057c256314eafa13611a3fb9e888214fc436824244b","version":"18"}],"kind":"catalog-bilingual-repair","prior_source_revision":"english-manuals:7ccd3acc4070ff012770bbecf798361c0d9e93f7548eac7e946c2638d5cea4cf","version":"18"}]},"MeasuredEvidence":{"measured_attributes":true,"metadata_release":"18.6","runtime_columns":["oid","typname","typnamespace","typowner","typlen","typbyval","typtype","typcategory","typispreferred","typisdefined","typdelim","typrelid","typsubscript","typelem","typarray","typinput","typoutput","typreceive","typsend","typmodin","typmodout","typanalyze","typalign","typstorage","typnotnull","typbasetype","typtypmod","typndims","typcollation","typdefaultbin","typdefault","typacl"],"runtime_verified":false}},"Text":{"Collection":"catalog","Key":"pg_type","SourceDatabase":"center","Version":"18","Locale":"en","Title":"pg_type","Summary":"The catalog pg_type stores information about data types. Base types and enum types (scalar types) are created with CREATE TYPE, and domains with CREATE DOMAIN. 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 CREATE TYPE AS.","BodyHTML":"\u003cp\u003eThe catalog pg_type stores information about data types. Base types and enum types (scalar types) are created with CREATE TYPE, and domains with CREATE DOMAIN. 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 CREATE TYPE AS.\u003c/p\u003e","SourceRevision":"catalog-bilingual-repair:5c4f11583751d53c3644ac131252146bc75665e88d6b7350c34371b4147b616d","ContentHash":"31cb3fe8c97f9ddf0f43df5c740090b82663f1d8ddc861253d1e8af6c9b8e1c6","Payload":{"columns":[{"array_dimensions":0,"attnum":1,"description":"Row identifier","description_zh":"行标识符","documented":true,"documented_name":"oid","hidden":false,"name":"oid","not_null":true,"references":"","type":"oid","type_modifier":-1,"type_oid":26,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":2,"description":"Data type name","description_zh":"数据类型的名字","documented":true,"documented_name":"typname","hidden":false,"name":"typname","not_null":true,"references":"","type":"name","type_modifier":-1,"type_oid":19,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":3,"description":"The OID of the namespace that contains this type","description_zh":"包含此类型的名字空间的 OID","documented":true,"documented_name":"typnamespace","hidden":false,"name":"typnamespace","not_null":true,"references":"pg_namespace.oid","type":"oid","type_modifier":-1,"type_oid":26,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":4,"description":"Owner of the type","description_zh":"类型的拥有者","documented":true,"documented_name":"typowner","hidden":false,"name":"typowner","not_null":true,"references":"pg_authid.oid","type":"oid","type_modifier":-1,"type_oid":26,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":5,"description":"For a fixed-size type, typlen is the number of bytes in the internal representation of the type. But for a variable-length type, typlen is negative. -1 indicates a “varlena” type (one that has a length word), -2 indicates a null-terminated C string.","description_zh":"对于一个固定尺寸的类型，typlen 是该类型内部表示的字节数。对于一个变长类型，typlen 为负值。-1 表示一个“varlena”类型（具有长度字），-2 表示一个以空字符结尾的 C 字符串。","documented":true,"documented_name":"typlen","hidden":false,"name":"typlen","not_null":true,"references":"","type":"int2","type_modifier":-1,"type_oid":21,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":6,"description":"typbyval determines whether internal routines pass a value of this type by value or by reference. typbyval had better be false if typlen 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 typbyval can be false even if the length would allow pass-by-value.","description_zh":"typbyval 判断内部例程传递这个类型的值时是通过传值还是传引用。如果 typlen 不是 1、2 或 4（或者在 Datum 为 8 字节的机器上为 8），则 typbyval 最好是假。变长类型总是传引用。注意即使长度允许传值，typbyval 也可以为假。","documented":true,"documented_name":"typbyval","hidden":false,"name":"typbyval","not_null":true,"references":"","type":"bool","type_modifier":-1,"type_oid":16,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":7,"description":"typtype is b for a base type, c for a composite type (e.g., a table's row type), d for a domain, e for an enum type, p for a pseudo-type, r for a range type, or m for a multirange type. See also typrelid and typbasetype.","description_zh":"typtype 可以是：b 表示一个基础类型，c 表示一个复合类型（例如一个表的行类型），d 表示一个域，e 表示一个枚举类型，p 表示一个伪类型，r 表示一个范围类型，或 m 表示一个多范围类型。另请参阅 typrelid 和 typbasetype。","documented":true,"documented_name":"typtype","hidden":false,"name":"typtype","not_null":true,"references":"","type":"char","type_modifier":-1,"type_oid":18,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":8,"description":"typcategory is an arbitrary classification of data types that is used by the parser to determine which implicit casts should be “preferred”. See Table 52.65.","description_zh":"typcategory 是一种任意的数据类型分类，它被解析器用来决定应“首选”哪些隐式类型转换。参见表 52.65。","documented":true,"documented_name":"typcategory","hidden":false,"name":"typcategory","not_null":true,"references":"","type":"char","type_modifier":-1,"type_oid":18,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":9,"description":"True if the type is a preferred cast target within its typcategory","description_zh":"如果此类型在它的 typcategory 中是首选的类型转换目标，此列为真","documented":true,"documented_name":"typispreferred","hidden":false,"name":"typispreferred","not_null":true,"references":"","type":"bool","type_modifier":-1,"type_oid":16,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":10,"description":"True if the type is defined, false if this is a placeholder entry for a not-yet-defined type. When typisdefined is false, nothing except the type name, namespace, and OID can be relied on.","description_zh":"如果此类型已被定义则为真，如果此类型只是一个表示还未定义类型的占位符则为假。当 typisdefined 为假，除了类型名字、名字空间和 OID 之外什么都不能被依赖。","documented":true,"documented_name":"typisdefined","hidden":false,"name":"typisdefined","not_null":true,"references":"","type":"bool","type_modifier":-1,"type_oid":16,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":11,"description":"Character 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.","description_zh":"在分析数组输入时，分隔两个此类型值的字符。注意该分隔符是与数组元素数据类型相关联的，而不是和数组的数据类型关联。","documented":true,"documented_name":"typdelim","hidden":false,"name":"typdelim","not_null":true,"references":"","type":"char","type_modifier":-1,"type_oid":18,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":12,"description":"If this is a composite type (see typtype), then this column points to the pg_class entry that defines the corresponding table. (For a free-standing composite type, the pg_class entry doesn't really represent a table, but it is needed anyway for the type's pg_attribute entries to link to.) Zero for non-composite types.","description_zh":"如果这是一个复合类型（见 typtype），那么此列指向 pg_class 中定义对应表的项（对于独立定义的复合类型，pg_class 项并不表示一个表，但不管怎样该类型的 pg_attribute 项需要链接到它）。对非复合类型此列为零。","documented":true,"documented_name":"typrelid","hidden":false,"name":"typrelid","not_null":true,"references":"pg_class.oid","type":"oid","type_modifier":-1,"type_oid":26,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":13,"description":"Subscripting handler function's OID, or zero if this type doesn't support subscripting. Types that are “true” array types have typsubscript = array_subscript_handler, but other types may have other handler functions to implement specialized subscripting behavior.","description_zh":"下标处理函数的 OID，如果该类型不支持下标则为零。“真正的”数组类型的 typsubscript = array_subscript_handler，但其他类型也可能使用不同的处理函数来实现特定的下标行为。","documented":true,"documented_name":"typsubscript","hidden":false,"name":"typsubscript","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":14,"description":"If typelem is not zero then it identifies another row in pg_type, defining the type yielded by subscripting. This should be zero if typsubscript is zero. However, it can be zero when typsubscript isn't zero, if the handler doesn't need typelem to determine the subscripting result type. Note that a typelem 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.","description_zh":"如果 typelem 不为零，则它标识 pg_type 中的另一行，该行定义了下标操作产生的类型。如果 typsubscript 为零则该项为零。但是，当 typsubscript 不为零时它也可以为零，如果处理函数不需要 typelem 来决定下标结果类型。注意 typelem 依赖被视为意味着该类型在物理上包含其元素类型；所以这个元素类型上的 DDL 变更可能会受到该类型存在的限制。","documented":true,"documented_name":"typelem","hidden":false,"name":"typelem","not_null":true,"references":"pg_type.oid","type":"oid","type_modifier":-1,"type_oid":26,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":15,"description":"If typarray is not zero then it identifies another row in pg_type, which is the “true” array type having this type as element","description_zh":"如果 typarray 不是零，则它标识 pg_type 中的另一行，这一行是一个将此类型作为元素的“真正的”数组类型","documented":true,"documented_name":"typarray","hidden":false,"name":"typarray","not_null":true,"references":"pg_type.oid","type":"oid","type_modifier":-1,"type_oid":26,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":16,"description":"Input conversion function (text format)","description_zh":"输入转换函数（文本格式）","documented":true,"documented_name":"typinput","hidden":false,"name":"typinput","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":17,"description":"Output conversion function (text format)","description_zh":"输出转换函数（文本格式）","documented":true,"documented_name":"typoutput","hidden":false,"name":"typoutput","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":18,"description":"Input conversion function (binary format), or zero if none","description_zh":"输入转换函数（二进制格式），如果没有则为零","documented":true,"documented_name":"typreceive","hidden":false,"name":"typreceive","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":19,"description":"Output conversion function (binary format), or zero if none","description_zh":"输出转换函数（二进制格式），如果没有则为零","documented":true,"documented_name":"typsend","hidden":false,"name":"typsend","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":20,"description":"Type modifier input function, or zero if type does not support modifiers","description_zh":"类型修饰符输入函数，如果类型不支持修饰符则为零","documented":true,"documented_name":"typmodin","hidden":false,"name":"typmodin","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":21,"description":"Type modifier output function, or zero to use the standard format","description_zh":"类型修饰符输出函数，或为零以使用标准格式","documented":true,"documented_name":"typmodout","hidden":false,"name":"typmodout","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":22,"description":"Custom ANALYZE function, or zero to use the standard function","description_zh":"自定义 ANALYZE 函数，零表示使用标准函数","documented":true,"documented_name":"typanalyze","hidden":false,"name":"typanalyze","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":23,"description":"typalign 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 PostgreSQL. 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:\n\nc = char alignment, i.e., no alignment needed. s = short alignment (2 bytes on most machines). i = int alignment (4 bytes on most machines). d = double alignment (8 bytes on many machines, but by no means all).","description_zh":"typalign 表示存储此类型值时所要求的对齐方式。它适用于磁盘存储，以及该值在 PostgreSQL 内部的大多数表示形式。当多个值连续存放时，例如在磁盘上完整行的表示中，这种类型的数据前会插入填充，使其从指定边界开始。对齐参考点是该序列中第一个数据的起始位置。可能的值为：\n\nc = char 对齐，即不需要对齐。s = short 对齐（在大部分机器上为 2 字节）。i = int 对齐（在大部分机器上为 4 字节）。d = double 对齐（在很多机器上为 8 字节，但并非所有机器都如此）。\n\n","documented":true,"documented_name":"typalign","hidden":false,"name":"typalign","not_null":true,"references":"","type":"char","type_modifier":-1,"type_oid":18,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":24,"description":"typstorage tells for varlena types (those with typlen = -1) if the type is prepared for toasting and what the default strategy for attributes of this type should be. Possible values are:\n\np (plain): Values must always be stored plain (non-varlena types always use this value). e (external): Values can be stored in a secondary “TOAST” relation (if relation has one, see pg_class.reltoastrelid). m (main): Values can be compressed and stored inline. x (extended): Values can be compressed and/or moved to a secondary relation.\n\nx is the usual choice for toast-able types. Note that m values can also be moved out to secondary storage, but only as a last resort (e and x values are moved first).","description_zh":"对于变长类型（typlen = -1），typstorage 同时指示该类型是否支持 TOAST，以及其属性应采用的默认策略。可能的值是：\n\np（普通）：值必须始终以普通方式存储（非 varlena 类型总是使用这个值）。 e（外部）：值可以存储在一个二级“TOAST”关系中（如果原关系有这样的关系，参见 pg_class.reltoastrelid）。 m（主要）：值可以压缩后存储在行内。 x（扩展）：值可以被压缩和/或移动到二级关系。\n\nx 是支持 TOAST 的类型的常见选择。注意，m 值也可以移到二级存储，但只能作为最后手段（e 和 x 值会先被移动）。","documented":true,"documented_name":"typstorage","hidden":false,"name":"typstorage","not_null":true,"references":"","type":"char","type_modifier":-1,"type_oid":18,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":25,"description":"typnotnull represents a not-null constraint on a type. Used for domains only.","description_zh":"typnotnull 表示类型上的一个非空约束。只用于域。","documented":true,"documented_name":"typnotnull","hidden":false,"name":"typnotnull","not_null":true,"references":"","type":"bool","type_modifier":-1,"type_oid":16,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":26,"description":"If this is a domain (see typtype), then typbasetype identifies the type that this one is based on. Zero if this type is not a domain.","description_zh":"如果这是一个域（见 typtype），则 typbasetype 标识该域所基于的类型。如果此类型不是域，则为 0。","documented":true,"documented_name":"typbasetype","hidden":false,"name":"typbasetype","not_null":true,"references":"pg_type.oid","type":"oid","type_modifier":-1,"type_oid":26,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":27,"description":"Domains use typtypmod to record the typmod to be applied to their base type (-1 if base type does not use a typmod). -1 if this type is not a domain.","description_zh":"域使用 typtypmod 来记录被应用于它们基础类型的 typmod（如果基础类型不使用 typmod，则为-1）。如果此类型不是一个域则为-1。","documented":true,"documented_name":"typtypmod","hidden":false,"name":"typtypmod","not_null":true,"references":"","type":"int4","type_modifier":-1,"type_oid":23,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":28,"description":"typndims is the number of array dimensions for a domain over an array (that is, typbasetype is an array type). Zero for types other than domains over array types.","description_zh":"对于基于数组的域，typndims 是数组维度数（即，typbasetype 是一个数组类型）。对于不是基于数组的域的类型，此列为零。","documented":true,"documented_name":"typndims","hidden":false,"name":"typndims","not_null":true,"references":"","type":"int4","type_modifier":-1,"type_oid":23,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":29,"description":"typcollation 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 DEFAULT_COLLATION_OID. A domain over a collatable type can have a collation OID different from its base type's, if one was specified for the domain.","description_zh":"typcollation 指定此类型的排序规则。如果类型不支持排序规则，此列为零。支持排序规则的基础类型在这里会有一个非零值，典型值为 DEFAULT_COLLATION_OID。基于支持排序规则的类型的域，如果为其指定了排序规则 OID，则它的排序规则 OID 可以不同于其基础类型的排序规则 OID。","documented":true,"documented_name":"typcollation","hidden":false,"name":"typcollation","not_null":true,"references":"pg_collation.oid","type":"oid","type_modifier":-1,"type_oid":26,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":30,"description":"If typdefaultbin is not null, it is the nodeToString() representation of a default expression for the type. This is only used for domains.","description_zh":"如果 typdefaultbin 非 NULL，那么它就是该类型默认表达式的 nodeToString() 表示形式。此列只用于域。","documented":true,"documented_name":"typdefaultbin","hidden":false,"name":"typdefaultbin","not_null":false,"references":"","type":"pg_node_tree","type_modifier":-1,"type_oid":194,"zh_from":"same-version-manual"},{"array_dimensions":0,"attnum":31,"description":"typdefault is null if the type has no associated default value. If typdefaultbin is not null, typdefault must contain a human-readable version of the default expression represented by typdefaultbin. If typdefaultbin is null and typdefault is not, then typdefault is the external representation of the type's default value, which can be fed to the type's input converter to produce a constant.","description_zh":"如果某类型没有相关默认值，那么 typdefault 为 NULL。如果 typdefaultbin 不为 NULL，那么 typdefault 必须包含由 typdefaultbin 表示的默认表达式的人类可读版本。如果 typdefaultbin 为 NULL 而 typdefault 不为 NULL，则 typdefault 是该类型默认值的外部表示形式，它可以被交给该类型的输入转换器来产生一个常量。","documented":true,"documented_name":"typdefault","hidden":false,"name":"typdefault","not_null":false,"references":"","type":"text","type_modifier":-1,"type_oid":25,"zh_from":"same-version-manual"},{"array_dimensions":1,"attnum":32,"description":"Access privileges; see Section 5.8 for details","description_zh":"访问权限，另请参阅第 5.8 节","documented":true,"documented_name":"typacl","hidden":false,"name":"typacl","not_null":false,"references":"","type":"aclitem[]","type_modifier":-1,"type_oid":1034,"zh_from":"same-version-manual"}],"description":"The catalog pg_type stores information about data types. Base types and enum types (scalar types) are created with CREATE TYPE, and domains with CREATE DOMAIN. 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 CREATE TYPE AS."}},"RequestedLocale":"en","Fallback":false,"Versions":["10","11","12","13","14","15","16","17","18","19","20","7.4","8.0","8.1","8.2","8.3","8.4","9.0","9.1","9.2","9.3","9.4","9.5","9.6"],"Locales":["en","zh-Hans"],"Signatures":null,"Spellings":null,"SQLState":null,"Evidence":null}
