PostgreSQL Source Code  git master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
pg_opclass.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * pg_opclass.h
4  * definition of the system "opclass" relation (pg_opclass)
5  * along with the relation's initial contents.
6  *
7  * The primary key for this table is <opcmethod, opcname, opcnamespace> ---
8  * that is, there is a row for each valid combination of opclass name and
9  * index access method type. This row specifies the expected input data type
10  * for the opclass (the type of the heap column, or the expression output type
11  * in the case of an index expression). Note that types binary-coercible to
12  * the specified type will be accepted too.
13  *
14  * For a given <opcmethod, opcintype> pair, there can be at most one row that
15  * has opcdefault = true; this row is the default opclass for such data in
16  * such an index. (This is not currently enforced by an index, because we
17  * don't support partial indexes on system catalogs.)
18  *
19  * Normally opckeytype = InvalidOid (zero), indicating that the data stored
20  * in the index is the same as the data in the indexed column. If opckeytype
21  * is nonzero then it indicates that a conversion step is needed to produce
22  * the stored index data, which will be of type opckeytype (which might be
23  * the same or different from the input datatype). Performing such a
24  * conversion is the responsibility of the index access method --- not all
25  * AMs support this.
26  *
27  *
28  * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
29  * Portions Copyright (c) 1994, Regents of the University of California
30  *
31  * src/include/catalog/pg_opclass.h
32  *
33  * NOTES
34  * the genbki.pl script reads this file and generates .bki
35  * information from the DATA() statements.
36  *
37  *-------------------------------------------------------------------------
38  */
39 #ifndef PG_OPCLASS_H
40 #define PG_OPCLASS_H
41 
42 #include "catalog/genbki.h"
43 
44 /* ----------------
45  * pg_opclass definition. cpp turns this into
46  * typedef struct FormData_pg_opclass
47  * ----------------
48  */
49 #define OperatorClassRelationId 2616
50 
51 CATALOG(pg_opclass,2616)
52 {
53  Oid opcmethod; /* index access method opclass is for */
54  NameData opcname; /* name of this opclass */
55  Oid opcnamespace; /* namespace of this opclass */
56  Oid opcowner; /* opclass owner */
57  Oid opcfamily; /* containing operator family */
58  Oid opcintype; /* type of data indexed by opclass */
59  bool opcdefault; /* T if opclass is default for opcintype */
60  Oid opckeytype; /* type of data in index, or InvalidOid */
62 
63 /* ----------------
64  * Form_pg_opclass corresponds to a pointer to a tuple with
65  * the format of pg_opclass relation.
66  * ----------------
67  */
69 
70 /* ----------------
71  * compiler constants for pg_opclass
72  * ----------------
73  */
74 #define Natts_pg_opclass 8
75 #define Anum_pg_opclass_opcmethod 1
76 #define Anum_pg_opclass_opcname 2
77 #define Anum_pg_opclass_opcnamespace 3
78 #define Anum_pg_opclass_opcowner 4
79 #define Anum_pg_opclass_opcfamily 5
80 #define Anum_pg_opclass_opcintype 6
81 #define Anum_pg_opclass_opcdefault 7
82 #define Anum_pg_opclass_opckeytype 8
83 
84 /* ----------------
85  * initial contents of pg_opclass
86  *
87  * Note: we hard-wire an OID only for a few entries that have to be explicitly
88  * referenced in the C code or in built-in catalog entries. The rest get OIDs
89  * assigned on-the-fly during initdb.
90  * ----------------
91  */
92 
93 DATA(insert ( 403 abstime_ops PGNSP PGUID 421 702 t 0 ));
94 DATA(insert ( 403 array_ops PGNSP PGUID 397 2277 t 0 ));
95 DATA(insert ( 405 array_ops PGNSP PGUID 627 2277 t 0 ));
96 DATA(insert ( 403 bit_ops PGNSP PGUID 423 1560 t 0 ));
97 DATA(insert ( 403 bool_ops PGNSP PGUID 424 16 t 0 ));
98 DATA(insert ( 403 bpchar_ops PGNSP PGUID 426 1042 t 0 ));
99 DATA(insert ( 405 bpchar_ops PGNSP PGUID 427 1042 t 0 ));
100 DATA(insert ( 403 bytea_ops PGNSP PGUID 428 17 t 0 ));
101 DATA(insert ( 403 char_ops PGNSP PGUID 429 18 t 0 ));
102 DATA(insert ( 405 char_ops PGNSP PGUID 431 18 t 0 ));
103 DATA(insert ( 403 cidr_ops PGNSP PGUID 1974 869 f 0 ));
104 DATA(insert ( 405 cidr_ops PGNSP PGUID 1975 869 f 0 ));
105 DATA(insert OID = 3122 ( 403 date_ops PGNSP PGUID 434 1082 t 0 ));
106 #define DATE_BTREE_OPS_OID 3122
107 DATA(insert ( 405 date_ops PGNSP PGUID 435 1082 t 0 ));
108 DATA(insert ( 403 float4_ops PGNSP PGUID 1970 700 t 0 ));
109 DATA(insert ( 405 float4_ops PGNSP PGUID 1971 700 t 0 ));
110 DATA(insert OID = 3123 ( 403 float8_ops PGNSP PGUID 1970 701 t 0 ));
111 #define FLOAT8_BTREE_OPS_OID 3123
112 DATA(insert ( 405 float8_ops PGNSP PGUID 1971 701 t 0 ));
113 DATA(insert ( 403 inet_ops PGNSP PGUID 1974 869 t 0 ));
114 DATA(insert ( 405 inet_ops PGNSP PGUID 1975 869 t 0 ));
115 DATA(insert ( 783 inet_ops PGNSP PGUID 3550 869 f 0 ));
116 DATA(insert ( 4000 inet_ops PGNSP PGUID 3794 869 t 0 ));
117 DATA(insert OID = 1979 ( 403 int2_ops PGNSP PGUID 1976 21 t 0 ));
118 #define INT2_BTREE_OPS_OID 1979
119 DATA(insert ( 405 int2_ops PGNSP PGUID 1977 21 t 0 ));
120 DATA(insert OID = 1978 ( 403 int4_ops PGNSP PGUID 1976 23 t 0 ));
121 #define INT4_BTREE_OPS_OID 1978
122 DATA(insert ( 405 int4_ops PGNSP PGUID 1977 23 t 0 ));
123 DATA(insert OID = 3124 ( 403 int8_ops PGNSP PGUID 1976 20 t 0 ));
124 #define INT8_BTREE_OPS_OID 3124
125 DATA(insert ( 405 int8_ops PGNSP PGUID 1977 20 t 0 ));
126 DATA(insert ( 403 interval_ops PGNSP PGUID 1982 1186 t 0 ));
127 DATA(insert ( 405 interval_ops PGNSP PGUID 1983 1186 t 0 ));
128 DATA(insert ( 403 macaddr_ops PGNSP PGUID 1984 829 t 0 ));
129 DATA(insert ( 405 macaddr_ops PGNSP PGUID 1985 829 t 0 ));
130 DATA(insert ( 403 macaddr8_ops PGNSP PGUID 3371 774 t 0 ));
131 DATA(insert ( 405 macaddr8_ops PGNSP PGUID 3372 774 t 0 ));
132 /*
133  * Here's an ugly little hack to save space in the system catalog indexes.
134  * btree doesn't ordinarily allow a storage type different from input type;
135  * but cstring and name are the same thing except for trailing padding,
136  * and we can safely omit that within an index entry. So we declare the
137  * btree opclass for name as using cstring storage type.
138  */
139 DATA(insert ( 403 name_ops PGNSP PGUID 1986 19 t 2275 ));
140 DATA(insert ( 405 name_ops PGNSP PGUID 1987 19 t 0 ));
141 DATA(insert OID = 3125 ( 403 numeric_ops PGNSP PGUID 1988 1700 t 0 ));
142 #define NUMERIC_BTREE_OPS_OID 3125
143 DATA(insert ( 405 numeric_ops PGNSP PGUID 1998 1700 t 0 ));
144 DATA(insert OID = 1981 ( 403 oid_ops PGNSP PGUID 1989 26 t 0 ));
145 #define OID_BTREE_OPS_OID 1981
146 DATA(insert ( 405 oid_ops PGNSP PGUID 1990 26 t 0 ));
147 DATA(insert ( 403 oidvector_ops PGNSP PGUID 1991 30 t 0 ));
148 DATA(insert ( 405 oidvector_ops PGNSP PGUID 1992 30 t 0 ));
149 DATA(insert ( 403 record_ops PGNSP PGUID 2994 2249 t 0 ));
150 DATA(insert ( 403 record_image_ops PGNSP PGUID 3194 2249 f 0 ));
151 DATA(insert OID = 3126 ( 403 text_ops PGNSP PGUID 1994 25 t 0 ));
152 #define TEXT_BTREE_OPS_OID 3126
153 DATA(insert ( 405 text_ops PGNSP PGUID 1995 25 t 0 ));
154 DATA(insert ( 403 time_ops PGNSP PGUID 1996 1083 t 0 ));
155 DATA(insert ( 405 time_ops PGNSP PGUID 1997 1083 t 0 ));
156 DATA(insert OID = 3127 ( 403 timestamptz_ops PGNSP PGUID 434 1184 t 0 ));
157 #define TIMESTAMPTZ_BTREE_OPS_OID 3127
158 DATA(insert ( 405 timestamptz_ops PGNSP PGUID 1999 1184 t 0 ));
159 DATA(insert ( 403 timetz_ops PGNSP PGUID 2000 1266 t 0 ));
160 DATA(insert ( 405 timetz_ops PGNSP PGUID 2001 1266 t 0 ));
161 DATA(insert ( 403 varbit_ops PGNSP PGUID 2002 1562 t 0 ));
162 DATA(insert ( 403 varchar_ops PGNSP PGUID 1994 25 f 0 ));
163 DATA(insert ( 405 varchar_ops PGNSP PGUID 1995 25 f 0 ));
164 DATA(insert OID = 3128 ( 403 timestamp_ops PGNSP PGUID 434 1114 t 0 ));
165 #define TIMESTAMP_BTREE_OPS_OID 3128
166 DATA(insert ( 405 timestamp_ops PGNSP PGUID 2040 1114 t 0 ));
167 DATA(insert ( 403 text_pattern_ops PGNSP PGUID 2095 25 f 0 ));
168 DATA(insert ( 403 varchar_pattern_ops PGNSP PGUID 2095 25 f 0 ));
169 DATA(insert ( 403 bpchar_pattern_ops PGNSP PGUID 2097 1042 f 0 ));
170 DATA(insert ( 403 money_ops PGNSP PGUID 2099 790 t 0 ));
171 DATA(insert ( 405 bool_ops PGNSP PGUID 2222 16 t 0 ));
172 DATA(insert ( 405 bytea_ops PGNSP PGUID 2223 17 t 0 ));
173 DATA(insert ( 403 tid_ops PGNSP PGUID 2789 27 t 0 ));
174 DATA(insert ( 405 xid_ops PGNSP PGUID 2225 28 t 0 ));
175 DATA(insert ( 405 cid_ops PGNSP PGUID 2226 29 t 0 ));
176 DATA(insert ( 405 abstime_ops PGNSP PGUID 2227 702 t 0 ));
177 DATA(insert ( 405 reltime_ops PGNSP PGUID 2228 703 t 0 ));
178 DATA(insert ( 405 text_pattern_ops PGNSP PGUID 2229 25 f 0 ));
179 DATA(insert ( 405 varchar_pattern_ops PGNSP PGUID 2229 25 f 0 ));
180 DATA(insert ( 405 bpchar_pattern_ops PGNSP PGUID 2231 1042 f 0 ));
181 DATA(insert ( 403 reltime_ops PGNSP PGUID 2233 703 t 0 ));
182 DATA(insert ( 403 tinterval_ops PGNSP PGUID 2234 704 t 0 ));
183 DATA(insert ( 405 aclitem_ops PGNSP PGUID 2235 1033 t 0 ));
184 DATA(insert ( 783 box_ops PGNSP PGUID 2593 603 t 0 ));
185 DATA(insert ( 783 point_ops PGNSP PGUID 1029 600 t 603 ));
186 DATA(insert ( 783 poly_ops PGNSP PGUID 2594 604 t 603 ));
187 DATA(insert ( 783 circle_ops PGNSP PGUID 2595 718 t 603 ));
188 DATA(insert ( 2742 array_ops PGNSP PGUID 2745 2277 t 2283 ));
189 DATA(insert ( 403 uuid_ops PGNSP PGUID 2968 2950 t 0 ));
190 DATA(insert ( 405 uuid_ops PGNSP PGUID 2969 2950 t 0 ));
191 DATA(insert ( 403 pg_lsn_ops PGNSP PGUID 3253 3220 t 0 ));
192 DATA(insert ( 405 pg_lsn_ops PGNSP PGUID 3254 3220 t 0 ));
193 DATA(insert ( 403 enum_ops PGNSP PGUID 3522 3500 t 0 ));
194 DATA(insert ( 405 enum_ops PGNSP PGUID 3523 3500 t 0 ));
195 DATA(insert ( 403 tsvector_ops PGNSP PGUID 3626 3614 t 0 ));
196 DATA(insert ( 783 tsvector_ops PGNSP PGUID 3655 3614 t 3642 ));
197 DATA(insert ( 2742 tsvector_ops PGNSP PGUID 3659 3614 t 25 ));
198 DATA(insert ( 403 tsquery_ops PGNSP PGUID 3683 3615 t 0 ));
199 DATA(insert ( 783 tsquery_ops PGNSP PGUID 3702 3615 t 20 ));
200 DATA(insert ( 403 range_ops PGNSP PGUID 3901 3831 t 0 ));
201 DATA(insert ( 405 range_ops PGNSP PGUID 3903 3831 t 0 ));
202 DATA(insert ( 783 range_ops PGNSP PGUID 3919 3831 t 0 ));
203 DATA(insert ( 4000 range_ops PGNSP PGUID 3474 3831 t 0 ));
204 DATA(insert ( 4000 box_ops PGNSP PGUID 5000 603 t 0 ));
205 DATA(insert ( 4000 quad_point_ops PGNSP PGUID 4015 600 t 0 ));
206 DATA(insert ( 4000 kd_point_ops PGNSP PGUID 4016 600 f 0 ));
207 DATA(insert ( 4000 text_ops PGNSP PGUID 4017 25 t 0 ));
208 DATA(insert ( 403 jsonb_ops PGNSP PGUID 4033 3802 t 0 ));
209 DATA(insert ( 405 jsonb_ops PGNSP PGUID 4034 3802 t 0 ));
210 DATA(insert ( 2742 jsonb_ops PGNSP PGUID 4036 3802 t 25 ));
211 DATA(insert ( 2742 jsonb_path_ops PGNSP PGUID 4037 3802 f 23 ));
212 
213 /* BRIN operator classes */
214 /* no brin opclass for bool */
215 DATA(insert ( 3580 bytea_minmax_ops PGNSP PGUID 4064 17 t 17 ));
216 DATA(insert ( 3580 char_minmax_ops PGNSP PGUID 4062 18 t 18 ));
217 DATA(insert ( 3580 name_minmax_ops PGNSP PGUID 4065 19 t 19 ));
218 DATA(insert ( 3580 int8_minmax_ops PGNSP PGUID 4054 20 t 20 ));
219 DATA(insert ( 3580 int2_minmax_ops PGNSP PGUID 4054 21 t 21 ));
220 DATA(insert ( 3580 int4_minmax_ops PGNSP PGUID 4054 23 t 23 ));
221 DATA(insert ( 3580 text_minmax_ops PGNSP PGUID 4056 25 t 25 ));
222 DATA(insert ( 3580 oid_minmax_ops PGNSP PGUID 4068 26 t 26 ));
223 DATA(insert ( 3580 tid_minmax_ops PGNSP PGUID 4069 27 t 27 ));
224 DATA(insert ( 3580 float4_minmax_ops PGNSP PGUID 4070 700 t 700 ));
225 DATA(insert ( 3580 float8_minmax_ops PGNSP PGUID 4070 701 t 701 ));
226 DATA(insert ( 3580 abstime_minmax_ops PGNSP PGUID 4072 702 t 702 ));
227 DATA(insert ( 3580 reltime_minmax_ops PGNSP PGUID 4073 703 t 703 ));
228 DATA(insert ( 3580 macaddr_minmax_ops PGNSP PGUID 4074 829 t 829 ));
229 DATA(insert ( 3580 macaddr8_minmax_ops PGNSP PGUID 4109 774 t 774 ));
230 DATA(insert ( 3580 inet_minmax_ops PGNSP PGUID 4075 869 f 869 ));
231 DATA(insert ( 3580 inet_inclusion_ops PGNSP PGUID 4102 869 t 869 ));
232 DATA(insert ( 3580 bpchar_minmax_ops PGNSP PGUID 4076 1042 t 1042 ));
233 DATA(insert ( 3580 time_minmax_ops PGNSP PGUID 4077 1083 t 1083 ));
234 DATA(insert ( 3580 date_minmax_ops PGNSP PGUID 4059 1082 t 1082 ));
235 DATA(insert ( 3580 timestamp_minmax_ops PGNSP PGUID 4059 1114 t 1114 ));
236 DATA(insert ( 3580 timestamptz_minmax_ops PGNSP PGUID 4059 1184 t 1184 ));
237 DATA(insert ( 3580 interval_minmax_ops PGNSP PGUID 4078 1186 t 1186 ));
238 DATA(insert ( 3580 timetz_minmax_ops PGNSP PGUID 4058 1266 t 1266 ));
239 DATA(insert ( 3580 bit_minmax_ops PGNSP PGUID 4079 1560 t 1560 ));
240 DATA(insert ( 3580 varbit_minmax_ops PGNSP PGUID 4080 1562 t 1562 ));
241 DATA(insert ( 3580 numeric_minmax_ops PGNSP PGUID 4055 1700 t 1700 ));
242 /* no brin opclass for record, anyarray */
243 DATA(insert ( 3580 uuid_minmax_ops PGNSP PGUID 4081 2950 t 2950 ));
244 DATA(insert ( 3580 range_inclusion_ops PGNSP PGUID 4103 3831 t 3831 ));
245 DATA(insert ( 3580 pg_lsn_minmax_ops PGNSP PGUID 4082 3220 t 3220 ));
246 /* no brin opclass for enum, tsvector, tsquery, jsonb */
247 DATA(insert ( 3580 box_inclusion_ops PGNSP PGUID 4104 603 t 603 ));
248 /* no brin opclass for the geometric types except box */
249 
250 #endif /* PG_OPCLASS_H */
FormData_pg_opclass
Definition: pg_opclass.h:61
unsigned int Oid
Definition: postgres_ext.h:31
Definition: c.h:487
DATA(insert(403abstime_opsPGNSP PGUID421702 t 0))
FormData_pg_opclass * Form_pg_opclass
Definition: pg_opclass.h:68
CATALOG(pg_opclass, 2616)
Definition: pg_opclass.h:51