PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
heap.h
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * heap.h
4 * prototypes for functions in backend/catalog/heap.c
5 *
6 *
7 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
9 *
10 * src/include/catalog/heap.h
11 *
12 *-------------------------------------------------------------------------
13 */
14#ifndef HEAP_H
15#define HEAP_H
16
17#include "catalog/indexing.h"
19#include "parser/parse_node.h"
20
21
22/* flag bits for CheckAttributeType/CheckAttributeNamesTypes */
23#define CHKATYPE_ANYARRAY 0x01 /* allow ANYARRAY */
24#define CHKATYPE_ANYRECORD 0x02 /* allow RECORD and RECORD[] */
25#define CHKATYPE_IS_PARTKEY 0x04 /* attname is part key # not column */
26#define CHKATYPE_IS_VIRTUAL 0x08 /* is virtual generated column */
27
28typedef struct RawColumnDefault
29{
30 AttrNumber attnum; /* attribute to attach default to */
31 Node *raw_default; /* default value (untransformed parse tree) */
32 char generated; /* attgenerated setting */
34
35typedef struct CookedConstraint
36{
37 ConstrType contype; /* CONSTR_DEFAULT, CONSTR_CHECK,
38 * CONSTR_NOTNULL */
39 Oid conoid; /* constr OID if created, otherwise Invalid */
40 char *name; /* name, or NULL if none */
41 AttrNumber attnum; /* which attr (only for NOTNULL, DEFAULT) */
42 Node *expr; /* transformed default or check expr */
43 bool is_enforced; /* is enforced? (only for CHECK) */
44 bool skip_validation; /* skip validation? (only for CHECK) */
45 bool is_local; /* constraint has local (non-inherited) def */
46 int16 inhcount; /* number of times constraint is inherited */
47 bool is_no_inherit; /* constraint has local def and cannot be
48 * inherited */
50
51extern Relation heap_create(const char *relname,
52 Oid relnamespace,
53 Oid reltablespace,
54 Oid relid,
55 RelFileNumber relfilenumber,
56 Oid accessmtd,
57 TupleDesc tupDesc,
58 char relkind,
59 char relpersistence,
60 bool shared_relation,
61 bool mapped_relation,
62 bool allow_system_table_mods,
63 TransactionId *relfrozenxid,
64 MultiXactId *relminmxid,
65 bool create_storage);
66
67extern Oid heap_create_with_catalog(const char *relname,
68 Oid relnamespace,
69 Oid reltablespace,
70 Oid relid,
71 Oid reltypeid,
72 Oid reloftypeid,
73 Oid ownerid,
74 Oid accessmtd,
75 TupleDesc tupdesc,
76 List *cooked_constraints,
77 char relkind,
78 char relpersistence,
79 bool shared_relation,
80 bool mapped_relation,
81 OnCommitAction oncommit,
82 Datum reloptions,
83 bool use_user_acl,
84 bool allow_system_table_mods,
85 bool is_internal,
86 Oid relrewrite,
87 ObjectAddress *typaddress);
88
89extern void heap_drop_with_catalog(Oid relid);
90
91extern void heap_truncate(List *relids);
92
93extern void heap_truncate_one_rel(Relation rel);
94
95extern void heap_truncate_check_FKs(List *relations, bool tempTables);
96
97extern List *heap_truncate_find_FKs(List *relationIds);
98
99extern void InsertPgAttributeTuples(Relation pg_attribute_rel,
100 TupleDesc tupdesc,
101 Oid new_rel_oid,
102 const FormExtraData_pg_attribute tupdesc_extra[],
103 CatalogIndexState indstate);
104
105extern void InsertPgClassTuple(Relation pg_class_desc,
106 Relation new_rel_desc,
107 Oid new_rel_oid,
108 Datum relacl,
109 Datum reloptions);
110
112 List *newColDefaults,
113 List *newConstraints,
114 bool allow_merge,
115 bool is_local,
116 bool is_internal,
117 const char *queryString);
119 List *constraints,
120 List *old_notnulls);
121
122extern void RelationClearMissing(Relation rel);
123
125 Datum missingval);
126extern void SetAttrMissing(Oid relid, char *attname, char *value);
127
128extern Node *cookDefault(ParseState *pstate,
129 Node *raw_default,
130 Oid atttypid,
131 int32 atttypmod,
132 const char *attname,
133 char attgenerated);
134
135extern void DeleteRelationTuple(Oid relid);
136extern void DeleteAttributeTuples(Oid relid);
137extern void DeleteSystemAttributeTuples(Oid relid);
138extern void RemoveAttributeById(Oid relid, AttrNumber attnum);
139
140extern void CopyStatistics(Oid fromrelid, Oid torelid);
141extern void RemoveStatistics(Oid relid, AttrNumber attnum);
142
144
145extern const FormData_pg_attribute *SystemAttributeByName(const char *attname);
146
147extern void CheckAttributeNamesTypes(TupleDesc tupdesc, char relkind,
148 int flags);
149
150extern void CheckAttributeType(const char *attname,
151 Oid atttypid, Oid attcollation,
152 List *containing_rowtypes,
153 int flags);
154
155/* pg_partitioned_table catalog manipulation functions */
156extern void StorePartitionKey(Relation rel,
157 char strategy,
158 int16 partnatts,
159 AttrNumber *partattrs,
160 List *partexprs,
161 Oid *partopclass,
162 Oid *partcollation);
163extern void RemovePartitionKeyByRelId(Oid relid);
164extern void StorePartitionBound(Relation rel, Relation parent,
165 PartitionBoundSpec *bound);
166
167#endif /* HEAP_H */
int16 AttrNumber
Definition: attnum.h:21
TransactionId MultiXactId
Definition: c.h:633
int16_t int16
Definition: c.h:497
int32_t int32
Definition: c.h:498
uint32 TransactionId
Definition: c.h:623
void RemoveAttributeById(Oid relid, AttrNumber attnum)
Definition: heap.c:1673
void RelationClearMissing(Relation rel)
Definition: heap.c:1954
struct CookedConstraint CookedConstraint
void SetAttrMissing(Oid relid, char *attname, char *value)
Definition: heap.c:2076
List * heap_truncate_find_FKs(List *relationIds)
Definition: heap.c:3673
void DeleteSystemAttributeTuples(Oid relid)
Definition: heap.c:1632
void StorePartitionKey(Relation rel, char strategy, int16 partnatts, AttrNumber *partattrs, List *partexprs, Oid *partopclass, Oid *partcollation)
Definition: heap.c:3800
void DeleteRelationTuple(Oid relid)
Definition: heap.c:1566
void DeleteAttributeTuples(Oid relid)
Definition: heap.c:1595
void RemoveStatistics(Oid relid, AttrNumber attnum)
Definition: heap.c:3398
Oid heap_create_with_catalog(const char *relname, Oid relnamespace, Oid reltablespace, Oid relid, Oid reltypeid, Oid reloftypeid, Oid ownerid, Oid accessmtd, TupleDesc tupdesc, List *cooked_constraints, char relkind, char relpersistence, bool shared_relation, bool mapped_relation, OnCommitAction oncommit, Datum reloptions, bool use_user_acl, bool allow_system_table_mods, bool is_internal, Oid relrewrite, ObjectAddress *typaddress)
Definition: heap.c:1112
void heap_truncate(List *relids)
Definition: heap.c:3493
struct RawColumnDefault RawColumnDefault
void CheckAttributeType(const char *attname, Oid atttypid, Oid attcollation, List *containing_rowtypes, int flags)
Definition: heap.c:544
const FormData_pg_attribute * SystemAttributeByName(const char *attname)
Definition: heap.c:248
void CopyStatistics(Oid fromrelid, Oid torelid)
Definition: heap.c:3345
void heap_truncate_check_FKs(List *relations, bool tempTables)
Definition: heap.c:3578
void StorePartitionBound(Relation rel, Relation parent, PartitionBoundSpec *bound)
Definition: heap.c:3956
List * AddRelationNotNullConstraints(Relation rel, List *constraints, List *old_notnulls)
Definition: heap.c:2884
void heap_drop_with_catalog(Oid relid)
Definition: heap.c:1774
List * AddRelationNewConstraints(Relation rel, List *newColDefaults, List *newConstraints, bool allow_merge, bool is_local, bool is_internal, const char *queryString)
Definition: heap.c:2375
void InsertPgClassTuple(Relation pg_class_desc, Relation new_rel_desc, Oid new_rel_oid, Datum relacl, Datum reloptions)
Definition: heap.c:901
void CheckAttributeNamesTypes(TupleDesc tupdesc, char relkind, int flags)
Definition: heap.c:452
void InsertPgAttributeTuples(Relation pg_attribute_rel, TupleDesc tupdesc, Oid new_rel_oid, const FormExtraData_pg_attribute tupdesc_extra[], CatalogIndexState indstate)
Definition: heap.c:708
Node * cookDefault(ParseState *pstate, Node *raw_default, Oid atttypid, int32 atttypmod, const char *attname, char attgenerated)
Definition: heap.c:3230
void heap_truncate_one_rel(Relation rel)
Definition: heap.c:3534
void RemovePartitionKeyByRelId(Oid relid)
Definition: heap.c:3925
const FormData_pg_attribute * SystemAttributeDefinition(AttrNumber attno)
Definition: heap.c:236
void StoreAttrMissingVal(Relation rel, AttrNumber attnum, Datum missingval)
Definition: heap.c:2020
Relation heap_create(const char *relname, Oid relnamespace, Oid reltablespace, Oid relid, RelFileNumber relfilenumber, Oid accessmtd, TupleDesc tupDesc, char relkind, char relpersistence, bool shared_relation, bool mapped_relation, bool allow_system_table_mods, TransactionId *relfrozenxid, MultiXactId *relminmxid, bool create_storage)
Definition: heap.c:285
static struct @165 value
ConstrType
Definition: parsenodes.h:2787
FormData_pg_attribute
Definition: pg_attribute.h:186
NameData attname
Definition: pg_attribute.h:41
int16 attnum
Definition: pg_attribute.h:74
NameData relname
Definition: pg_class.h:38
uintptr_t Datum
Definition: postgres.h:69
unsigned int Oid
Definition: postgres_ext.h:30
OnCommitAction
Definition: primnodes.h:57
Oid RelFileNumber
Definition: relpath.h:25
Oid conoid
Definition: heap.h:39
char * name
Definition: heap.h:40
AttrNumber attnum
Definition: heap.h:41
bool skip_validation
Definition: heap.h:44
bool is_enforced
Definition: heap.h:43
bool is_no_inherit
Definition: heap.h:47
int16 inhcount
Definition: heap.h:46
bool is_local
Definition: heap.h:45
ConstrType contype
Definition: heap.h:37
Node * expr
Definition: heap.h:42
Definition: pg_list.h:54
Definition: nodes.h:135
Node * raw_default
Definition: heap.h:31
AttrNumber attnum
Definition: heap.h:30
char generated
Definition: heap.h:32