189 stmt->relation->location);
213 errmsg(
"relation \"%s\" already exists, skipping",
214 stmt->relation->relname)));
225 if (
stmt->relation->schemaname ==
NULL
233 cxt.
stmtType =
"CREATE FOREIGN TABLE";
260 if (
stmt->ofTypename)
265 if (
stmt->inhRelations && !
stmt->partbound)
268 errmsg(
"cannot create partitioned table as inheritance child")));
275 foreach(elements,
stmt->tableElts)
294 elog(
ERROR,
"unrecognized node type: %d",
326 if (
strcmp(cd->colname, colname) != 0)
332 cd->is_not_null =
true;
487 (
errmsg_internal(
"%s will create implicit sequence \"%s\" for serial column \"%s.%s\"",
507 errmsg(
"cannot set logged status of a temporary sequence"),
520 seqstmt->for_identity = for_identity;
611 && !
column->typeName->pct_type)
645 errmsg(
"array of serial is not implemented"),
647 column->typeName->location)));
724 switch (constraint->contype)
744 switch (constraint->contype)
750 errmsg(
"conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"",
753 constraint->location)));
754 column->is_not_null =
false;
762 errmsg(
"not-null constraints on partitioned tables cannot be NO INHERIT"));
768 errmsg(
"conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"",
771 constraint->location)));
776 errmsg(
"conflicting NO INHERIT declarations for not-null constraints on column \"%s\"",
792 column->is_not_null =
true;
802 if (constraint->conname &&
805 elog(
ERROR,
"conflicting not-null constraint names \"%s\" and \"%s\"",
811 errmsg(
"conflicting NO INHERIT declarations for not-null constraints on column \"%s\"",
824 errmsg(
"multiple default values specified for column \"%s\" of table \"%s\"",
827 constraint->location)));
828 column->raw_default = constraint->raw_expr;
841 errmsg(
"identity columns are not supported on typed tables")));
845 errmsg(
"identity columns are not supported on partitions")));
854 errmsg(
"multiple identity specifications for column \"%s\" of table \"%s\"",
857 constraint->location)));
860 typeOid, constraint->options,
864 column->identity = constraint->generated_when;
873 else if (!
column->is_not_null)
876 errmsg(
"conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"",
879 constraint->location)));
887 errmsg(
"generated columns are not supported on typed tables")));
891 errmsg(
"multiple generation clauses specified for column \"%s\" of table \"%s\"",
894 constraint->location)));
895 column->generated = constraint->generated_kind;
896 column->raw_default = constraint->raw_expr;
909 errmsg(
"conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"",
912 constraint->location)));
918 errmsg(
"primary key constraints are not supported on foreign tables"),
920 constraint->location)));
927 errmsg(
"unique constraints are not supported on foreign tables"),
929 constraint->location)));
930 if (constraint->keys ==
NIL)
937 elog(
ERROR,
"column exclusion constraints are not supported");
944 errmsg(
"foreign key constraints are not supported on foreign tables"),
946 constraint->location)));
966 elog(
ERROR,
"unrecognized constraint type: %d",
967 constraint->contype);
974 errmsg(
"both default and identity specified for column \"%s\" of table \"%s\"",
977 constraint->location)));
982 errmsg(
"both default and generation expression specified for column \"%s\" of table \"%s\"",
985 constraint->location)));
990 errmsg(
"both identity and generation expression specified for column \"%s\" of table \"%s\"",
993 constraint->location)));
1002 column->is_not_null =
true;
1046 errmsg(
"primary key constraints are not supported on foreign tables"),
1056 errmsg(
"unique constraints are not supported on foreign tables"),
1066 errmsg(
"exclusion constraints are not supported on foreign tables"),
1080 errmsg(
"not-null constraints on partitioned tables cannot be NO INHERIT"));
1089 errmsg(
"foreign key constraints are not supported on foreign tables"),
1103 elog(
ERROR,
"invalid context for constraint type %d",
1108 elog(
ERROR,
"unrecognized constraint type: %d",
1152 errmsg(
"relation \"%s\" is invalid in LIKE clause",
1195 if (attribute->attisdropped)
1202 attribute->atttypmod, attribute->attcollation);
1213 if (attribute->atthasdef && attribute->attgenerated &&
1215 def->
generated = attribute->attgenerated;
1220 if (attribute->attidentity &&
1237 def->
identity = attribute->attidentity;
1243 def->
storage = attribute->attstorage;
1260 attribute->attnum)) !=
NULL)
1367 elog(
ERROR,
"expandTableLikeClause called on untransformed LIKE clause");
1404 if (attribute->attisdropped)
1412 if (attribute->atthasdef &&
1413 (attribute->attgenerated ?
1419 bool found_whole_row;
1423 elog(
ERROR,
"default expression not found for attribute %d of relation \"%s\"",
1440 if (found_whole_row)
1443 errmsg(
"cannot convert whole-row table reference"),
1444 errdetail(
"Generation expression for column \"%s\" contains a whole-row reference to table \"%s\".",
1469 bool found_whole_row;
1484 if (found_whole_row)
1487 errmsg(
"cannot convert whole-row table reference"),
1488 errdetail(
"Constraint \"%s\" contains a whole-row reference to table \"%s\".",
1542 atcmd->missing_ok =
false;
1550 relation->
rd_rel->relhasindex &&
1657 for (
i = 0;
i < tupdesc->
natts;
i++)
1662 if (attr->attisdropped)
1666 attr->atttypmod, attr->attcollation);
1737 elog(
ERROR,
"cache lookup failed for access method %u",
1752 index->relation = heapRel;
1765 index->nulls_not_distinct =
idxrec->indnullsnotdistinct;
1768 index->transformed =
true;
1769 index->concurrent =
false;
1770 index->if_not_exists =
false;
1771 index->reset_default_tblspc =
false;
1802 elog(
ERROR,
"cache lookup failed for constraint %u",
1806 index->isconstraint =
true;
1811 if (
idxrec->indisexclusion)
1818 (
index->iswithoutoverlaps &&
1825 for (
i = 0;
i < nElems;
i++)
1837 elog(
ERROR,
"cache lookup failed for operator %u",
1854 index->isconstraint =
false;
1857 index->isconstraint =
false;
1877 for (keyno = 0; keyno <
idxrec->indnkeyatts; keyno++)
1902 bool found_whole_row;
1905 elog(
ERROR,
"too few entries in indexprs list");
1916 if (found_whole_row)
1919 errmsg(
"cannot convert whole-row table reference"),
1920 errdetail(
"Index \"%s\" contains a whole-row table reference.",
1971 for (keyno =
idxrec->indnkeyatts; keyno <
idxrec->indnatts; keyno++)
1993 errmsg(
"expressions are not supported in included columns")));
2015 bool found_whole_row;
2028 if (found_whole_row)
2031 errmsg(
"cannot convert whole-row table reference"),
2032 errdetail(
"Index \"%s\" contains a whole-row table reference.",
2085 elog(
ERROR,
"stxkind is not a 1-D char array");
2099 elog(
ERROR,
"unrecognized statistics kind %c", enabled[
i]);
2139 bool found_whole_row;
2195 elog(
ERROR,
"cache lookup failed for collation %u", collation);
2222 elog(
ERROR,
"cache lookup failed for opclass %u", opclass);
2287 foreach(
lc, indexlist)
2359 errmsg(
"multiple primary keys for table \"%s\" are not allowed",
2370 index->isconstraint =
true;
2393 index->transformed =
false;
2394 index->concurrent =
false;
2395 index->if_not_exists =
false;
2426 errmsg(
"cannot use an existing index in CREATE TABLE"),
2446 errmsg(
"index \"%s\" is already associated with a constraint",
2454 errmsg(
"index \"%s\" does not belong to table \"%s\"",
2473 errdetail(
"Cannot create a primary key or unique constraint using such an index."),
2480 errdetail(
"Cannot create a primary key or unique constraint using such an index."),
2487 errdetail(
"Cannot create a primary key or unique constraint using such an index."),
2499 errdetail(
"Cannot create a non-deferrable constraint using a deferrable index."),
2558 attoptions != (
Datum) 0 ||
2562 errmsg(
"index \"%s\" column number %d does not have default sorting behavior",
index_name,
i + 1),
2563 errdetail(
"Cannot create a primary key or unique constraint using such an index."),
2615 foreach(
lc, constraint->
keys)
2625 foreach(columns, cxt->
columns)
2659 if (
nn->is_no_inherit)
2662 errmsg(
"conflicting NO INHERIT declaration for not-null constraint on column \"%s\"",
2670 column->is_not_null =
true;
2706 errmsg(
"inherited relation \"%s\" is not a table or foreign table",
2708 for (count = 0; count < rel->
rd_att->
natts; count++)
2742 errmsg(
"column \"%s\" named in key does not exist", key),
2746 foreach(columns,
index->indexParams)
2754 errmsg(
"column \"%s\" appears twice in primary key constraint",
2760 errmsg(
"column \"%s\" appears twice in unique constraint",
2785 if (attr->attisdropped)
2792 typid = attr->atttypid;
2805 errmsg(
"column \"%s\" in WITHOUT OVERLAPS is not a range or multirange type", key),
2834 errmsg(
"constraint using WITHOUT OVERLAPS needs at least two columns"));
2837 index->accessMethod =
"gist";
2857 foreach(columns, cxt->
columns)
2895 errmsg(
"inherited relation \"%s\" is not a table or foreign table",
2897 for (count = 0; count < rel->
rd_att->
natts; count++)
2926 errmsg(
"column \"%s\" named in key does not exist", key),
3066 if (
stmt->transformed)
3087 if (
stmt->whereClause)
3098 foreach(l,
stmt->indexParams)
3132 errmsg(
"index expressions and predicates can refer only to the table being indexed")));
3140 stmt->transformed =
true;
3161 if (
stmt->transformed)
3182 foreach(l,
stmt->exprs)
3204 errmsg(
"statistics expressions can refer only to the table being referenced")));
3212 stmt->transformed =
true;
3229 List **actions,
Node **whereClause)
3247 errmsg(
"rules on materialized views are not supported")));
3274 switch (
stmt->event)
3290 elog(
ERROR,
"unrecognized event type: %d",
3307 errmsg(
"rule WHERE condition cannot contain references to other relations")));
3334 foreach(l,
stmt->actions)
3376 *whereClause !=
NULL)
3379 errmsg(
"rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions")));
3397 errmsg(
"conditional UNION/INTERSECT/EXCEPT statements are not implemented")));
3409 switch (
stmt->event)
3415 errmsg(
"ON SELECT rule cannot use OLD")));
3419 errmsg(
"ON SELECT rule cannot use NEW")));
3428 errmsg(
"ON INSERT rule cannot use OLD")));
3434 errmsg(
"ON DELETE rule cannot use NEW")));
3437 elog(
ERROR,
"unrecognized event type: %d",
3462 errmsg(
"cannot refer to OLD within WITH query")));
3469 errmsg(
"cannot refer to NEW within WITH query")));
3498 errmsg(
"conditional UNION/INTERSECT/EXCEPT statements are not implemented")));
3539 ?
errhint(
"ALTER TABLE ... MERGE PARTITIONS can only merge partitions don't have sub-partitions")
3540 :
errhint(
"ALTER TABLE ... SPLIT PARTITION can only split partitions don't have sub-partitions"));
3542 if (!partRel->
rd_rel->relispartition)
3545 errmsg(
"\"%s\" is not a partition of partitioned table \"%s\"",
3548 ?
errhint(
"ALTER TABLE ... MERGE PARTITIONS can only merge partitions don't have sub-partitions")
3549 :
errhint(
"ALTER TABLE ... SPLIT PARTITION can only split partitions don't have sub-partitions"));
3554 errmsg(
"relation \"%s\" is not a partition of relation \"%s\"",
3557 ?
errhint(
"ALTER TABLE ... MERGE PARTITIONS can only merge partitions don't have sub-partitions")
3558 :
errhint(
"ALTER TABLE ... SPLIT PARTITION can only split partitions don't have sub-partitions"));
3578 int default_index = -1;
3616 if (
sps->bound->is_default)
3618 if (default_index != -1)
3621 errmsg(
"DEFAULT partition should be one"),
3633 errmsg(
"partition of hash-partitioned table cannot be split"));
3637 elog(
ERROR,
"unexpected partition strategy: %d",
3638 (
int) key->strategy);
3648 errmsg(
"can not split DEFAULT partition \"%s\"",
3650 errhint(
"To split DEFAULT partition one of the new partition msut be DEFAULT"),
3665 errmsg(
"can not split non-DEFAULT partition \"%s\"",
3667 errmsg(
"new partition cannot be DEFAULT because DEFAULT partition \"%s\" already exists",
3690 errmsg(
"partition with name \"%s\" is already used",
name->relname),
3698 errmsg(
"partition with name \"%s\" is already used",
name->relname),
3734 errmsg(
"partition of hash-partitioned table cannot be merged"));
3751 errmsg(
"partition with name \"%s\" is already used",
name->relname),
3780 errmsg(
"partition with name \"%s\" is already used",
name->relname),
3794 partcmd->bound->strategy = strategy;
3795 partcmd->bound->location = -1;
3817 const char *queryString,
3851 cxt.
stmtType =
"ALTER FOREIGN TABLE";
3921 elog(
ERROR,
"unrecognized node type: %d",
3953 errmsg(
"column \"%s\" of relation \"%s\" does not exist",
3993 errmsg(
"column \"%s\" of relation \"%s\" does not exist",
4035 errmsg(
"column \"%s\" of relation \"%s\" does not exist",
4087 errmsg(
"list of partitions to be merged should include at least two partitions"));
4101 errmsg(
"list of new partitions should contain at least two partitions"));
4138 foreach(l, cxt.
alist)
4217#define SUPPORTS_ATTRS(node) \
4218 ((node) != NULL && \
4219 ((node)->contype == CONSTR_PRIMARY || \
4220 (node)->contype == CONSTR_UNIQUE || \
4221 (node)->contype == CONSTR_EXCLUSION || \
4222 (node)->contype == CONSTR_FOREIGN))
4229 elog(
ERROR,
"unrecognized node type: %d",
4237 errmsg(
"misplaced DEFERRABLE clause"),
4242 errmsg(
"multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed"),
4252 errmsg(
"misplaced NOT DEFERRABLE clause"),
4257 errmsg(
"multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed"),
4265 errmsg(
"constraint declared INITIALLY DEFERRED must be DEFERRABLE"),
4273 errmsg(
"misplaced INITIALLY DEFERRED clause"),
4278 errmsg(
"multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed"),
4291 errmsg(
"constraint declared INITIALLY DEFERRED must be DEFERRABLE"),
4299 errmsg(
"misplaced INITIALLY IMMEDIATE clause"),
4304 errmsg(
"multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed"),
4316 errmsg(
"misplaced ENFORCED clause"),
4321 errmsg(
"multiple ENFORCED/NOT ENFORCED clauses not allowed"),
4333 errmsg(
"misplaced NOT ENFORCED clause"),
4338 errmsg(
"multiple ENFORCED/NOT ENFORCED clauses not allowed"),
4377 column->collClause->collname,
4378 column->collClause->location);
4383 errmsg(
"collations are not supported by type %s",
4386 column->collClause->location)));
4439 foreach(elements, schemaElts)
4503 elog(
ERROR,
"unrecognized node type: %d",
4531 errmsg(
"CREATE specifies a schema (%s) "
4532 "different from the one being created (%s)",
4566 errmsg(
"\"%s\" is not a partitioned table",
4573 errmsg(
"table \"%s\" is not partitioned",
4580 errmsg(
"index \"%s\" is not partitioned",
4585 elog(
ERROR,
"\"%s\" is not a partitioned table or index",
4609 if (
spec->is_default)
4620 errmsg(
"a hash-partitioned table may not have a default partition")));
4637 errmsg(
"invalid bound specification for a hash partition"),
4640 if (
spec->modulus <= 0)
4643 errmsg(
"modulus for hash partition must be an integer value greater than zero")));
4647 if (
spec->remainder >=
spec->modulus)
4650 errmsg(
"remainder for hash partition must be less than modulus")));
4663 errmsg(
"invalid bound specification for a list partition"),
4667 if (key->partattrs[0] != 0)
4669 key->partattrs[0],
false);
4681 foreach(cell,
spec->listdatums)
4716 errmsg(
"invalid bound specification for a range partition"),
4722 errmsg(
"FROM must specify exactly one value per partitioning column")));
4726 errmsg(
"TO must specify exactly one value per partitioning column")));
4740 elog(
ERROR,
"unexpected partition strategy: %d", (
int) strategy);
4818 if (key->partattrs[
i] != 0)
4820 key->partattrs[
i],
false);
4839 if (
value->constisnull)
4842 errmsg(
"cannot specify NULL in range bound")));
4878 if (kind ==
prd->kind)
4890 errmsg(
"every bound following MAXVALUE must also be MAXVALUE"),
4897 errmsg(
"every bound following MINVALUE must also be MINVALUE"),
4940 errmsg(
"specified value cannot be cast to type %s for column \"%s\"",
4955 elog(
ERROR,
"could not evaluate partition bound expression");
void aclcheck_error(AclResult aclerr, ObjectType objtype, const char *objectname)
AclResult object_aclcheck(Oid classid, Oid objectid, Oid roleid, AclMode mode)
AclResult pg_class_aclcheck(Oid table_oid, Oid roleid, AclMode mode)
Oid get_index_am_oid(const char *amname, bool missing_ok)
#define DatumGetArrayTypeP(X)
void deconstruct_array_builtin(const ArrayType *array, Oid elmtype, Datum **elemsp, bool **nullsp, int *nelemsp)
AttrMap * build_attrmap_by_name(TupleDesc indesc, TupleDesc outdesc, bool missing_ok)
#define AttributeNumberIsValid(attributeNumber)
#define InvalidAttrNumber
char * get_tablespace_name(Oid spc_oid)
#define TextDatumGetCString(d)
#define unconstify(underlying_type, expr)
#define InvalidSubTransactionId
#define Assert(condition)
#define OidIsValid(objectId)
Expr * evaluate_expr(Expr *expr, Oid result_type, int32 result_typmod, Oid result_collation)
List * sequence_options(Oid relid)
void errorConflictingDefElem(DefElem *defel, ParseState *pstate)
int errmsg_internal(const char *fmt,...)
int errdetail(const char *fmt,...)
int errhint(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
bool equal(const void *a, const void *b)
const FormData_pg_attribute * SystemAttributeByName(const char *attname)
const FormData_pg_attribute * SystemAttributeDefinition(AttrNumber attno)
#define HeapTupleIsValid(tuple)
static void * GETSTRUCT(const HeapTupleData *tuple)
#define DEFAULT_INDEX_TYPE
void index_close(Relation relation, LOCKMODE lockmode)
Relation index_open(Oid relationId, LOCKMODE lockmode)
char * ChooseRelationName(const char *name1, const char *name2, const char *label, Oid namespaceid, bool isconstraint)
Oid GetDefaultOpClass(Oid type_id, Oid am_id)
List * lappend(List *list, void *datum)
List * list_concat(List *list1, const List *list2)
List * list_copy(const List *oldlist)
List * lappend_oid(List *list, Oid datum)
List * lcons(void *datum, List *list)
void list_free(List *list)
#define AccessExclusiveLock
char * get_rel_name(Oid relid)
AttrNumber get_attnum(Oid relid, const char *attname)
bool type_is_range(Oid typid)
Datum get_attoptions(Oid relid, int16 attnum)
Oid get_rel_namespace(Oid relid)
Oid get_typcollation(Oid typid)
char * get_attname(Oid relid, AttrNumber attnum, bool missing_ok)
char * get_namespace_name(Oid nspid)
Oid get_atttype(Oid relid, AttrNumber attnum)
Oid get_relname_relid(const char *relname, Oid relnamespace)
bool type_is_multirange(Oid typid)
Alias * makeAlias(const char *aliasname, List *colnames)
DefElem * makeDefElem(char *name, Node *arg, int location)
FromExpr * makeFromExpr(List *fromlist, Node *quals)
ColumnDef * makeColumnDef(const char *colname, Oid typeOid, int32 typmod, Oid collOid)
RangeVar * makeRangeVar(char *schemaname, char *relname, int location)
FuncCall * makeFuncCall(List *name, List *args, CoercionForm funcformat, int location)
Constraint * makeNotNullConstraint(String *colname)
TypeName * makeTypeNameFromOid(Oid typeOid, int32 typmod)
char * pstrdup(const char *in)
void pfree(void *pointer)
Oid RangeVarGetAndCheckCreationNamespace(RangeVar *relation, LOCKMODE lockmode, Oid *existing_relation_id)
void RangeVarAdjustRelationPersistence(RangeVar *newRelation, Oid nspid)
Oid RangeVarGetCreationNamespace(const RangeVar *newRelation)
RangeVar * makeRangeVarFromNameList(const List *names)
Oid RangeVarGetRelidExtended(const RangeVar *relation, LOCKMODE lockmode, uint32 flags, RangeVarGetRelidCallback callback, void *callback_arg)
Oid exprType(const Node *expr)
int exprLocation(const Node *expr)
#define IsA(nodeptr, _type_)
#define castNode(_type_, nodeptr)
ObjectType get_relkind_objtype(char relkind)
#define ObjectAddressSet(addr, class_id, object_id)
char * nodeToString(const void *obj)
Node * transformWhereClause(ParseState *pstate, Node *clause, ParseExprKind exprKind, const char *constructName)
Node * coerce_to_target_type(ParseState *pstate, Node *expr, Oid exprtype, Oid targettype, int32 targettypmod, CoercionContext ccontext, CoercionForm cformat, int location)
void assign_expr_collations(ParseState *pstate, Node *expr)
Node * transformExpr(ParseState *pstate, Node *expr, ParseExprKind exprKind)
void cancel_parser_errposition_callback(ParseCallbackState *pcbstate)
void free_parsestate(ParseState *pstate)
int parser_errposition(ParseState *pstate, int location)
void setup_parser_errposition_callback(ParseCallbackState *pcbstate, ParseState *pstate, int location)
ParseState * make_parsestate(ParseState *parentParseState)
@ EXPR_KIND_STATS_EXPRESSION
@ EXPR_KIND_INDEX_EXPRESSION
@ EXPR_KIND_PARTITION_BOUND
@ EXPR_KIND_INDEX_PREDICATE
@ EXPR_KIND_ALTER_COL_TRANSFORM
ParseNamespaceItem * addRangeTableEntryForRelation(ParseState *pstate, Relation rel, int lockmode, Alias *alias, bool inh, bool inFromCl)
void addNSItemToQuery(ParseState *pstate, ParseNamespaceItem *nsitem, bool addToJoinList, bool addToRelNameSpace, bool addToVarNameSpace)
char * FigureIndexColname(Node *node)
Oid LookupCollation(ParseState *pstate, List *collnames, int location)
Type typenameType(ParseState *pstate, const TypeName *typeName, int32 *typmod_p)
Oid typenameTypeId(ParseState *pstate, const TypeName *typeName)
static void generateSerialExtraStmts(CreateStmtContext *cxt, ColumnDef *column, Oid seqtypid, List *seqoptions, bool for_identity, bool col_exists, char **snamespace_p, char **sname_p)
List * transformCreateStmt(CreateStmt *stmt, const char *queryString)
IndexStmt * transformIndexStmt(Oid relid, IndexStmt *stmt, const char *queryString)
List * transformCreateSchemaStmtElements(List *schemaElts, const char *schemaName)
static void transformColumnType(CreateStmtContext *cxt, ColumnDef *column)
static void transformColumnDefinition(CreateStmtContext *cxt, ColumnDef *column)
void transformRuleStmt(RuleStmt *stmt, const char *queryString, List **actions, Node **whereClause)
static void transformIndexConstraints(CreateStmtContext *cxt)
static List * get_collation(Oid collation, Oid actual_datatype)
static IndexStmt * transformIndexConstraint(Constraint *constraint, CreateStmtContext *cxt)
AlterTableStmt * transformAlterTableStmt(Oid relid, AlterTableStmt *stmt, const char *queryString, List **beforeStmts, List **afterStmts)
static void transformTableLikeClause(CreateStmtContext *cxt, TableLikeClause *table_like_clause)
static void transformConstraintAttrs(CreateStmtContext *cxt, List *constraintList)
List * expandTableLikeClause(RangeVar *heapRel, TableLikeClause *table_like_clause)
static void transformPartitionCmdForSplit(CreateStmtContext *cxt, PartitionCmd *partcmd)
static void transformTableConstraint(CreateStmtContext *cxt, Constraint *constraint)
static List * get_opclass(Oid opclass, Oid actual_datatype)
static void transformPartitionCmdForMerge(CreateStmtContext *cxt, PartitionCmd *partcmd)
static void checkPartition(Relation rel, Oid partRelOid, bool isMerge)
static List * transformPartitionRangeBounds(ParseState *pstate, List *blist, Relation parent)
static void setSchemaName(const char *context_schema, char **stmt_schema_name)
CreateStatsStmt * transformStatsStmt(Oid relid, CreateStatsStmt *stmt, const char *queryString)
static void validateInfiniteBounds(ParseState *pstate, List *blist)
static void transformPartitionCmd(CreateStmtContext *cxt, PartitionBoundSpec *bound)
static Const * transformPartitionBoundValue(ParseState *pstate, Node *val, const char *colName, Oid colType, int32 colTypmod, Oid partCollation)
static void transformCheckConstraints(CreateStmtContext *cxt, bool skipValidation)
static void transformOfType(CreateStmtContext *cxt, TypeName *ofTypename)
static CreateStatsStmt * generateClonedExtStatsStmt(RangeVar *heapRel, Oid heapRelid, Oid source_statsid, const AttrMap *attmap)
PartitionBoundSpec * transformPartitionBound(ParseState *pstate, Relation parent, PartitionBoundSpec *spec)
static void transformFKConstraints(CreateStmtContext *cxt, bool skipValidation, bool isAddConstraint)
IndexStmt * generateClonedIndexStmt(RangeVar *heapRel, Relation source_idx, const AttrMap *attmap, Oid *constraintOid)
#define SUPPORTS_ATTRS(node)
@ PARTITION_STRATEGY_HASH
@ PARTITION_STRATEGY_LIST
@ PARTITION_STRATEGY_RANGE
@ CONSTR_ATTR_NOT_DEFERRABLE
@ CONSTR_ATTR_NOT_ENFORCED
@ PARTITION_RANGE_DATUM_MAXVALUE
@ PARTITION_RANGE_DATUM_VALUE
@ PARTITION_RANGE_DATUM_MINVALUE
@ AT_AlterColumnGenericOptions
@ CREATE_TABLE_LIKE_COMMENTS
@ CREATE_TABLE_LIKE_GENERATED
@ CREATE_TABLE_LIKE_IDENTITY
@ CREATE_TABLE_LIKE_COMPRESSION
@ CREATE_TABLE_LIKE_STORAGE
@ CREATE_TABLE_LIKE_INDEXES
@ CREATE_TABLE_LIKE_DEFAULTS
@ CREATE_TABLE_LIKE_STATISTICS
@ CREATE_TABLE_LIKE_CONSTRAINTS
Query * transformStmt(ParseState *pstate, Node *parseTree)
List * SystemFuncName(char *name)
TypeName * SystemTypeName(char *name)
void check_partitions_for_split(Relation parent, Oid splitPartOid, List *partlist, ParseState *pstate)
void calculate_partition_bound_for_merge(Relation parent, List *partNames, List *partOids, PartitionBoundSpec *spec, ParseState *pstate)
PartitionKey RelationGetPartitionKey(Relation rel)
static int get_partition_strategy(PartitionKey key)
static int32 get_partition_col_typmod(PartitionKey key, int col)
static int get_partition_natts(PartitionKey key)
static Oid get_partition_col_typid(PartitionKey key, int col)
static List * get_partition_exprs(PartitionKey key)
static Oid get_partition_col_collation(PartitionKey key, int col)
PartitionDesc RelationGetPartitionDesc(Relation rel, bool omit_detached)
Oid get_default_oid_from_partdesc(PartitionDesc partdesc)
Oid get_partition_parent(Oid relid, bool even_if_detached)
FormData_pg_am * Form_pg_am
FormData_pg_attribute * Form_pg_attribute
int errdetail_relkind_not_supported(char relkind)
FormData_pg_class * Form_pg_class
FormData_pg_collation * Form_pg_collation
List * RelationGetNotNullConstraints(Oid relid, bool cooked, bool include_noinh)
Oid get_relation_constraint_oid(Oid relid, const char *conname, bool missing_ok)
FormData_pg_constraint * Form_pg_constraint
void checkMembershipInCurrentExtension(const ObjectAddress *object)
Oid getIdentitySequence(Relation rel, AttrNumber attnum, bool missing_ok)
Oid get_index_constraint(Oid indexId)
FormData_pg_index * Form_pg_index
#define lfirst_node(type, lc)
static int list_length(const List *l)
#define linitial_node(type, l)
#define lsecond_node(type, l)
#define foreach_current_index(var_or_cell)
#define foreach_delete_current(lst, var_or_cell)
#define for_each_cell(cell, lst, initcell)
static void * list_nth(const List *list, int n)
#define list_make3(x1, x2, x3)
#define foreach_node(type, var, lst)
static ListCell * list_head(const List *l)
static ListCell * lnext(const List *l, const ListCell *c)
#define list_make2(x1, x2)
static ListCell * list_last_cell(const List *list)
FormData_pg_opclass * Form_pg_opclass
FormData_pg_operator * Form_pg_operator
FormData_pg_statistic_ext * Form_pg_statistic_ext
FormData_pg_type * Form_pg_type
Expr * expression_planner(Expr *expr)
static Oid DatumGetObjectId(Datum X)
static Datum ObjectIdGetDatum(Oid X)
static Pointer DatumGetPointer(Datum X)
void * stringToNode(const char *str)
static chr element(struct vars *v, const chr *startp, const chr *endp)
#define RelationGetForm(relation)
#define RelationGetRelid(relation)
#define RelationGetDescr(relation)
#define RelationGetRelationName(relation)
#define RelationGetNamespace(relation)
List * RelationGetIndexList(Relation relation)
List * RelationGetIndexPredicate(Relation relation)
List * RelationGetStatExtList(Relation relation)
List * RelationGetIndexExpressions(Relation relation)
List * untransformRelOptions(Datum options)
#define InvalidRelFileNumber
bool rangeTableEntry_used(Node *node, int rt_index, int sublevels_up)
Query * getInsertSelectQuery(Query *parsetree, Query ***subquery_ptr)
Node * map_variable_attnos(Node *node, int target_varno, int sublevels_up, const AttrMap *attno_map, Oid to_rowtype, bool *found_whole_row)
char * quote_qualified_identifier(const char *qualifier, const char *ident)
List * deparse_context_for(const char *aliasname, Oid relid)
char * deparse_expression(Node *expr, List *dpcontext, bool forceprefix, bool showimplicit)
void relation_close(Relation relation, LOCKMODE lockmode)
Relation relation_openrv(const RangeVar *relation, LOCKMODE lockmode)
Relation relation_open(Oid relationId, LOCKMODE lockmode)
bool reset_default_tblspc
PartitionBoundSpec * partbound
const char * p_sourcetext
void ReleaseSysCache(HeapTuple tuple)
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Datum SysCacheGetAttr(int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
Datum SysCacheGetAttrNotNull(int cacheId, HeapTuple tup, AttrNumber attributeNumber)
void table_close(Relation relation, LOCKMODE lockmode)
Relation table_open(Oid relationId, LOCKMODE lockmode)
Relation table_openrv(const RangeVar *relation, LOCKMODE lockmode)
void check_of_type(HeapTuple typetuple)
void RangeVarCallbackOwnsRelation(const RangeVar *relation, Oid relId, Oid oldRelId, void *arg)
const char * GetCompressionMethodName(char method)
#define CompressionMethodIsValid(cm)
Node * TupleDescGetDefault(TupleDesc tupdesc, AttrNumber attnum)
#define ReleaseTupleDesc(tupdesc)
static FormData_pg_attribute * TupleDescAttr(TupleDesc tupdesc, int i)
TupleDesc lookup_rowtype_tupdesc(Oid type_id, int32 typmod)
String * makeString(char *str)
bool contain_var_clause(Node *node)