]> granicus.if.org Git - postgresql/blob - src/include/catalog/pg_partitioned_table.h
Allow a partitioned table to have a default partition.
[postgresql] / src / include / catalog / pg_partitioned_table.h
1 /*-------------------------------------------------------------------------
2  *
3  * pg_partitioned_table.h
4  *        definition of the system "partitioned table" relation
5  *        along with the relation's initial contents.
6  *
7  *
8  * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
9  *
10  * src/include/catalog/pg_partitioned_table.h
11  *
12  * NOTES
13  *        the genbki.sh script reads this file and generates .bki
14  *        information from the DATA() statements.
15  *
16  *-------------------------------------------------------------------------
17  */
18 #ifndef PG_PARTITIONED_TABLE_H
19 #define PG_PARTITIONED_TABLE_H
20
21 #include "catalog/genbki.h"
22
23 /* ----------------
24  *              pg_partitioned_table definition.  cpp turns this into
25  *              typedef struct FormData_pg_partitioned_table
26  * ----------------
27  */
28 #define PartitionedRelationId 3350
29
30 CATALOG(pg_partitioned_table,3350) BKI_WITHOUT_OIDS
31 {
32         Oid                     partrelid;              /* partitioned table oid */
33         char            partstrat;              /* partitioning strategy */
34         int16           partnatts;              /* number of partition key columns */
35         Oid                     partdefid;              /* default partition oid; InvalidOid if there
36                                                                  * isn't one */
37
38         /*
39          * variable-length fields start here, but we allow direct access to
40          * partattrs via the C struct.  That's because the first variable-length
41          * field of a heap tuple can be reliably accessed using its C struct
42          * offset, as previous fields are all non-nullable fixed-length fields.
43          */
44         int2vector      partattrs;              /* each member of the array is the attribute
45                                                                  * number of a partition key column, or 0 if
46                                                                  * the column is actually an expression */
47
48 #ifdef CATALOG_VARLEN
49         oidvector       partclass;              /* operator class to compare keys */
50         oidvector       partcollation;  /* user-specified collation for keys */
51         pg_node_tree partexprs;         /* list of expressions in the partition key;
52                                                                  * one item for each zero entry in partattrs[] */
53 #endif
54 } FormData_pg_partitioned_table;
55
56 /* ----------------
57  *              Form_pg_partitioned_table corresponds to a pointer to a tuple with
58  *              the format of pg_partitioned_table relation.
59  * ----------------
60  */
61 typedef FormData_pg_partitioned_table *Form_pg_partitioned_table;
62
63 /* ----------------
64  *              compiler constants for pg_partitioned_table
65  * ----------------
66  */
67 #define Natts_pg_partitioned_table                              8
68 #define Anum_pg_partitioned_table_partrelid             1
69 #define Anum_pg_partitioned_table_partstrat             2
70 #define Anum_pg_partitioned_table_partnatts             3
71 #define Anum_pg_partitioned_table_partdefid             4
72 #define Anum_pg_partitioned_table_partattrs             5
73 #define Anum_pg_partitioned_table_partclass             6
74 #define Anum_pg_partitioned_table_partcollation 7
75 #define Anum_pg_partitioned_table_partexprs             8
76
77 #endif                                                  /* PG_PARTITIONED_TABLE_H */