1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>53.64. pg_type</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><link rev="made" href="pgsql-docs@lists.postgresql.org" /><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><link rel="prev" href="catalog-pg-ts-template.html" title="53.63. pg_ts_template" /><link rel="next" href="catalog-pg-user-mapping.html" title="53.65. pg_user_mapping" /></head><body id="docContent" class="container-fluid col-10"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">53.64. <code class="structname">pg_type</code></th></tr><tr><td width="10%" align="left"><a accesskey="p" href="catalog-pg-ts-template.html" title="53.63. pg_ts_template">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="catalogs.html" title="Chapter 53. System Catalogs">Up</a></td><th width="60%" align="center">Chapter 53. System Catalogs</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 15.7 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="catalog-pg-user-mapping.html" title="53.65. pg_user_mapping">Next</a></td></tr></table><hr /></div><div class="sect1" id="CATALOG-PG-TYPE"><div class="titlepage"><div><div><h2 class="title" style="clear: both">53.64. <code class="structname">pg_type</code></h2></div></div></div><a id="id-1.10.4.66.2" class="indexterm"></a><p>
The catalog <code class="structname">pg_type</code> stores information about data
types. Base types and enum types (scalar types) are created with
<a class="link" href="sql-createtype.html" title="CREATE TYPE"><code class="command">CREATE TYPE</code></a>, and
domains with
<a class="link" href="sql-createdomain.html" title="CREATE DOMAIN"><code class="command">CREATE DOMAIN</code></a>.
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 <code class="command">CREATE TYPE AS</code>.
</p><div class="table" id="id-1.10.4.66.4"><p class="title"><strong>Table 53.64. <code class="structname">pg_type</code> Columns</strong></p><div class="table-contents"><table class="table" summary="pg_type Columns" border="1"><colgroup><col /></colgroup><thead><tr><th class="catalog_table_entry"><p class="column_definition">
Column Type
</p>
<p>
Description
</p></th></tr></thead><tbody><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">oid</code> <code class="type">oid</code>
</p>
<p>
Row identifier
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typname</code> <code class="type">name</code>
</p>
<p>
Data type name
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typnamespace</code> <code class="type">oid</code>
(references <a class="link" href="catalog-pg-namespace.html" title="53.32. pg_namespace"><code class="structname">pg_namespace</code></a>.<code class="structfield">oid</code>)
</p>
<p>
The OID of the namespace that contains this type
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typowner</code> <code class="type">oid</code>
(references <a class="link" href="catalog-pg-authid.html" title="53.8. pg_authid"><code class="structname">pg_authid</code></a>.<code class="structfield">oid</code>)
</p>
<p>
Owner of the type
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typlen</code> <code class="type">int2</code>
</p>
<p>
For a fixed-size type, <code class="structfield">typlen</code> is the number
of bytes in the internal representation of the type. But for a
variable-length type, <code class="structfield">typlen</code> is negative.
-1 indicates a <span class="quote">“<span class="quote">varlena</span>”</span> type (one that has a length word),
-2 indicates a null-terminated C string.
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typbyval</code> <code class="type">bool</code>
</p>
<p>
<code class="structfield">typbyval</code> determines whether internal
routines pass a value of this type by value or by reference.
<code class="structfield">typbyval</code> had better be false if
<code class="structfield">typlen</code> 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
<code class="structfield">typbyval</code> can be false even if the
length would allow pass-by-value.
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typtype</code> <code class="type">char</code>
</p>
<p>
<code class="structfield">typtype</code> is
<code class="literal">b</code> for a base type,
<code class="literal">c</code> for a composite type (e.g., a table's row type),
<code class="literal">d</code> for a domain,
<code class="literal">e</code> for an enum type,
<code class="literal">p</code> for a pseudo-type,
<code class="literal">r</code> for a range type, or
<code class="literal">m</code> for a multirange type.
See also <code class="structfield">typrelid</code> and
<code class="structfield">typbasetype</code>.
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typcategory</code> <code class="type">char</code>
</p>
<p>
<code class="structfield">typcategory</code> is an arbitrary classification
of data types that is used by the parser to determine which implicit
casts should be <span class="quote">“<span class="quote">preferred</span>”</span>.
See <a class="xref" href="catalog-pg-type.html#CATALOG-TYPCATEGORY-TABLE" title="Table 53.65. typcategory Codes">Table 53.65</a>.
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typispreferred</code> <code class="type">bool</code>
</p>
<p>
True if the type is a preferred cast target within its
<code class="structfield">typcategory</code>
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typisdefined</code> <code class="type">bool</code>
</p>
<p>
True if the type is defined, false if this is a placeholder
entry for a not-yet-defined type. When
<code class="structfield">typisdefined</code> is false, nothing
except the type name, namespace, and OID can be relied on.
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typdelim</code> <code class="type">char</code>
</p>
<p>
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.
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typrelid</code> <code class="type">oid</code>
(references <a class="link" href="catalog-pg-class.html" title="53.11. pg_class"><code class="structname">pg_class</code></a>.<code class="structfield">oid</code>)
</p>
<p>
If this is a composite type (see
<code class="structfield">typtype</code>), then this column points to
the <a class="link" href="catalog-pg-class.html" title="53.11. pg_class"><code class="structname">pg_class</code></a> entry that defines the
corresponding table. (For a free-standing composite type, the
<a class="link" href="catalog-pg-class.html" title="53.11. pg_class"><code class="structname">pg_class</code></a> entry doesn't really represent
a table, but it is needed anyway for the type's
<a class="link" href="catalog-pg-attribute.html" title="53.7. pg_attribute"><code class="structname">pg_attribute</code></a> entries to link to.)
Zero for non-composite types.
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typsubscript</code> <code class="type">regproc</code>
(references <a class="link" href="catalog-pg-proc.html" title="53.39. pg_proc"><code class="structname">pg_proc</code></a>.<code class="structfield">oid</code>)
</p>
<p>
Subscripting handler function's OID, or zero if this type doesn't
support subscripting. Types that are <span class="quote">“<span class="quote">true</span>”</span> array
types have <code class="structfield">typsubscript</code>
= <code class="function">array_subscript_handler</code>, but other types may
have other handler functions to implement specialized subscripting
behavior.
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typelem</code> <code class="type">oid</code>
(references <a class="link" href="catalog-pg-type.html" title="53.64. pg_type"><code class="structname">pg_type</code></a>.<code class="structfield">oid</code>)
</p>
<p>
If <code class="structfield">typelem</code> is not zero then it
identifies another row in <code class="structname">pg_type</code>,
defining the type yielded by subscripting. This should be zero
if <code class="structfield">typsubscript</code> is zero. However, it can
be zero when <code class="structfield">typsubscript</code> isn't zero, if the
handler doesn't need <code class="structfield">typelem</code> to
determine the subscripting result type.
Note that a <code class="structfield">typelem</code> 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.
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typarray</code> <code class="type">oid</code>
(references <a class="link" href="catalog-pg-type.html" title="53.64. pg_type"><code class="structname">pg_type</code></a>.<code class="structfield">oid</code>)
</p>
<p>
If <code class="structfield">typarray</code> is not zero then it
identifies another row in <code class="structname">pg_type</code>, which
is the <span class="quote">“<span class="quote">true</span>”</span> array type having this type as element
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typinput</code> <code class="type">regproc</code>
(references <a class="link" href="catalog-pg-proc.html" title="53.39. pg_proc"><code class="structname">pg_proc</code></a>.<code class="structfield">oid</code>)
</p>
<p>
Input conversion function (text format)
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typoutput</code> <code class="type">regproc</code>
(references <a class="link" href="catalog-pg-proc.html" title="53.39. pg_proc"><code class="structname">pg_proc</code></a>.<code class="structfield">oid</code>)
</p>
<p>
Output conversion function (text format)
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typreceive</code> <code class="type">regproc</code>
(references <a class="link" href="catalog-pg-proc.html" title="53.39. pg_proc"><code class="structname">pg_proc</code></a>.<code class="structfield">oid</code>)
</p>
<p>
Input conversion function (binary format), or zero if none
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typsend</code> <code class="type">regproc</code>
(references <a class="link" href="catalog-pg-proc.html" title="53.39. pg_proc"><code class="structname">pg_proc</code></a>.<code class="structfield">oid</code>)
</p>
<p>
Output conversion function (binary format), or zero if none
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typmodin</code> <code class="type">regproc</code>
(references <a class="link" href="catalog-pg-proc.html" title="53.39. pg_proc"><code class="structname">pg_proc</code></a>.<code class="structfield">oid</code>)
</p>
<p>
Type modifier input function, or zero if type does not support modifiers
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typmodout</code> <code class="type">regproc</code>
(references <a class="link" href="catalog-pg-proc.html" title="53.39. pg_proc"><code class="structname">pg_proc</code></a>.<code class="structfield">oid</code>)
</p>
<p>
Type modifier output function, or zero to use the standard format
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typanalyze</code> <code class="type">regproc</code>
(references <a class="link" href="catalog-pg-proc.html" title="53.39. pg_proc"><code class="structname">pg_proc</code></a>.<code class="structfield">oid</code>)
</p>
<p>
Custom <a class="xref" href="sql-analyze.html" title="ANALYZE"><span class="refentrytitle">ANALYZE</span></a> function,
or zero to use the standard function
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typalign</code> <code class="type">char</code>
</p>
<p>
<code class="structfield">typalign</code> 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
<span class="productname">PostgreSQL</span>.
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:
</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="literal">c</code> = <code class="type">char</code> alignment, i.e., no alignment needed.</p></li><li class="listitem"><p><code class="literal">s</code> = <code class="type">short</code> alignment (2 bytes on most machines).</p></li><li class="listitem"><p><code class="literal">i</code> = <code class="type">int</code> alignment (4 bytes on most machines).</p></li><li class="listitem"><p><code class="literal">d</code> = <code class="type">double</code> alignment (8 bytes on many machines, but by no means all).</p></li></ul></div><p>
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typstorage</code> <code class="type">char</code>
</p>
<p>
<code class="structfield">typstorage</code> tells for varlena
types (those with <code class="structfield">typlen</code> = -1) if
the type is prepared for toasting and what the default strategy
for attributes of this type should be.
Possible values are:
</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
<code class="literal">p</code> (plain): Values must always be stored plain
(non-varlena types always use this value).
</p></li><li class="listitem"><p>
<code class="literal">e</code> (external): Values can be stored in a
secondary <span class="quote">“<span class="quote">TOAST</span>”</span> relation (if relation has one, see
<code class="literal">pg_class.reltoastrelid</code>).
</p></li><li class="listitem"><p>
<code class="literal">m</code> (main): Values can be compressed and stored
inline.
</p></li><li class="listitem"><p>
<code class="literal">x</code> (extended): Values can be compressed and/or
moved to a secondary relation.
</p></li></ul></div><p>
<code class="literal">x</code> is the usual choice for toast-able types.
Note that <code class="literal">m</code> values can also be moved out to
secondary storage, but only as a last resort (<code class="literal">e</code>
and <code class="literal">x</code> values are moved first).
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typnotnull</code> <code class="type">bool</code>
</p>
<p>
<code class="structfield">typnotnull</code> represents a not-null
constraint on a type. Used for domains only.
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typbasetype</code> <code class="type">oid</code>
(references <a class="link" href="catalog-pg-type.html" title="53.64. pg_type"><code class="structname">pg_type</code></a>.<code class="structfield">oid</code>)
</p>
<p>
If this is a domain (see <code class="structfield">typtype</code>), then
<code class="structfield">typbasetype</code> identifies the type that this
one is based on. Zero if this type is not a domain.
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typtypmod</code> <code class="type">int4</code>
</p>
<p>
Domains use <code class="structfield">typtypmod</code> to record the <code class="literal">typmod</code>
to be applied to their base type (-1 if base type does not use a
<code class="literal">typmod</code>). -1 if this type is not a domain.
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typndims</code> <code class="type">int4</code>
</p>
<p>
<code class="structfield">typndims</code> is the number of array dimensions
for a domain over an array (that is, <code class="structfield">typbasetype</code> is
an array type).
Zero for types other than domains over array types.
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typcollation</code> <code class="type">oid</code>
(references <a class="link" href="catalog-pg-collation.html" title="53.12. pg_collation"><code class="structname">pg_collation</code></a>.<code class="structfield">oid</code>)
</p>
<p>
<code class="structfield">typcollation</code> 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 <code class="symbol">DEFAULT_COLLATION_OID</code>.
A domain over a collatable type can have a collation OID different
from its base type's, if one was specified for the domain.
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typdefaultbin</code> <code class="type">pg_node_tree</code>
</p>
<p>
If <code class="structfield">typdefaultbin</code> is not null, it is the
<code class="function">nodeToString()</code>
representation of a default expression for the type. This is
only used for domains.
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typdefault</code> <code class="type">text</code>
</p>
<p>
<code class="structfield">typdefault</code> is null if the type has no associated
default value. If <code class="structfield">typdefaultbin</code> is not null,
<code class="structfield">typdefault</code> must contain a human-readable version of the
default expression represented by <code class="structfield">typdefaultbin</code>. If
<code class="structfield">typdefaultbin</code> is null and <code class="structfield">typdefault</code> is
not, then <code class="structfield">typdefault</code> is the external representation of
the type's default value, which can be fed to the type's input
converter to produce a constant.
</p></td></tr><tr><td class="catalog_table_entry"><p class="column_definition">
<code class="structfield">typacl</code> <code class="type">aclitem[]</code>
</p>
<p>
Access privileges; see <a class="xref" href="ddl-priv.html" title="5.7. Privileges">Section 5.7</a> for details
</p></td></tr></tbody></table></div></div><br class="table-break" /><div class="note"><h3 class="title">Note</h3><p>
For fixed-width types used in system tables, it is critical that the size
and alignment defined in <code class="structname">pg_type</code>
agree with the way that the compiler will lay out the column in
a structure representing a table row.
</p></div><p>
<a class="xref" href="catalog-pg-type.html#CATALOG-TYPCATEGORY-TABLE" title="Table 53.65. typcategory Codes">Table 53.65</a> lists the system-defined values
of <code class="structfield">typcategory</code>. Any future additions to this list will
also be upper-case ASCII letters. All other ASCII characters are reserved
for user-defined categories.
</p><div class="table" id="CATALOG-TYPCATEGORY-TABLE"><p class="title"><strong>Table 53.65. <code class="structfield">typcategory</code> Codes</strong></p><div class="table-contents"><table class="table" summary="typcategory Codes" border="1"><colgroup><col /><col /></colgroup><thead><tr><th>Code</th><th>Category</th></tr></thead><tbody><tr><td><code class="literal">A</code></td><td>Array types</td></tr><tr><td><code class="literal">B</code></td><td>Boolean types</td></tr><tr><td><code class="literal">C</code></td><td>Composite types</td></tr><tr><td><code class="literal">D</code></td><td>Date/time types</td></tr><tr><td><code class="literal">E</code></td><td>Enum types</td></tr><tr><td><code class="literal">G</code></td><td>Geometric types</td></tr><tr><td><code class="literal">I</code></td><td>Network address types</td></tr><tr><td><code class="literal">N</code></td><td>Numeric types</td></tr><tr><td><code class="literal">P</code></td><td>Pseudo-types</td></tr><tr><td><code class="literal">R</code></td><td>Range types</td></tr><tr><td><code class="literal">S</code></td><td>String types</td></tr><tr><td><code class="literal">T</code></td><td>Timespan types</td></tr><tr><td><code class="literal">U</code></td><td>User-defined types</td></tr><tr><td><code class="literal">V</code></td><td>Bit-string types</td></tr><tr><td><code class="literal">X</code></td><td><code class="type">unknown</code> type</td></tr><tr><td><code class="literal">Z</code></td><td>Internal-use types</td></tr></tbody></table></div></div><br class="table-break" /></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="catalog-pg-ts-template.html" title="53.63. pg_ts_template">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="catalogs.html" title="Chapter 53. System Catalogs">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="catalog-pg-user-mapping.html" title="53.65. pg_user_mapping">Next</a></td></tr><tr><td width="40%" align="left" valign="top">53.63. <code class="structname">pg_ts_template</code> </td><td width="20%" align="center"><a accesskey="h" href="index.html" title="PostgreSQL 15.7 Documentation">Home</a></td><td width="40%" align="right" valign="top"> 53.65. <code class="structname">pg_user_mapping</code></td></tr></table></div></body></html>
|