190 stmt->relation->location);
214 errmsg(
"relation \"%s\" already exists, skipping",
215 stmt->relation->relname)));
226 if (
stmt->relation->schemaname ==
NULL
234 cxt.
stmtType =
"CREATE FOREIGN TABLE";
261 if (
stmt->ofTypename)
266 if (
stmt->inhRelations && !
stmt->partbound)
269 errmsg(
"cannot create partitioned table as inheritance child")));
276 foreach(elements,
stmt->tableElts)
295 elog(
ERROR,
"unrecognized node type: %d",
327 if (
strcmp(cd->colname, colname) != 0)
333 cd->is_not_null =
true;
488 (
errmsg_internal(
"%s will create implicit sequence \"%s\" for serial column \"%s.%s\"",
508 errmsg(
"cannot set logged status of a temporary sequence"),
521 seqstmt->for_identity = for_identity;
612 && !
column->typeName->pct_type)
646 errmsg(
"array of serial is not implemented"),
648 column->typeName->location)));
725 switch (constraint->contype)
745 switch (constraint->contype)
751 errmsg(
"conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"",
754 constraint->location)));
755 column->is_not_null =
false;
763 errmsg(
"not-null constraints on partitioned tables cannot be NO INHERIT"));
769 errmsg(
"conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"",
772 constraint->location)));
777 errmsg(
"conflicting NO INHERIT declarations for not-null constraints on column \"%s\"",
793 column->is_not_null =
true;
803 if (constraint->conname &&
806 elog(
ERROR,
"conflicting not-null constraint names \"%s\" and \"%s\"",
812 errmsg(
"conflicting NO INHERIT declarations for not-null constraints on column \"%s\"",
825 errmsg(
"multiple default values specified for column \"%s\" of table \"%s\"",
828 constraint->location)));
829 column->raw_default = constraint->raw_expr;
842 errmsg(
"identity columns are not supported on typed tables")));
846 errmsg(
"identity columns are not supported on partitions")));
855 errmsg(
"multiple identity specifications for column \"%s\" of table \"%s\"",
858 constraint->location)));
861 typeOid, constraint->options,
865 column->identity = constraint->generated_when;
874 else if (!
column->is_not_null)
877 errmsg(
"conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"",
880 constraint->location)));
888 errmsg(
"generated columns are not supported on typed tables")));
892 errmsg(
"multiple generation clauses specified for column \"%s\" of table \"%s\"",
895 constraint->location)));
896 column->generated = constraint->generated_kind;
897 column->raw_default = constraint->raw_expr;
910 errmsg(
"conflicting NULL/NOT NULL declarations for column \"%s\" of table \"%s\"",
913 constraint->location)));
919 errmsg(
"primary key constraints are not supported on foreign tables"),
921 constraint->location)));
928 errmsg(
"unique constraints are not supported on foreign tables"),
930 constraint->location)));
931 if (constraint->keys ==
NIL)
938 elog(
ERROR,
"column exclusion constraints are not supported");
945 errmsg(
"foreign key constraints are not supported on foreign tables"),
947 constraint->location)));
967 elog(
ERROR,
"unrecognized constraint type: %d",
968 constraint->contype);
975 errmsg(
"both default and identity specified for column \"%s\" of table \"%s\"",
978 constraint->location)));
983 errmsg(
"both default and generation expression specified for column \"%s\" of table \"%s\"",
986 constraint->location)));
991 errmsg(
"both identity and generation expression specified for column \"%s\" of table \"%s\"",
994 constraint->location)));
1003 column->is_not_null =
true;
1047 errmsg(
"primary key constraints are not supported on foreign tables"),
1057 errmsg(
"unique constraints are not supported on foreign tables"),
1067 errmsg(
"exclusion constraints are not supported on foreign tables"),
1081 errmsg(
"not-null constraints on partitioned tables cannot be NO INHERIT"));
1090 errmsg(
"foreign key constraints are not supported on foreign tables"),
1104 elog(
ERROR,
"invalid context for constraint type %d",
1109 elog(
ERROR,
"unrecognized constraint type: %d",
1153 errmsg(
"relation \"%s\" is invalid in LIKE clause",
1196 if (attribute->attisdropped)
1203 attribute->atttypmod, attribute->attcollation);
1214 if (attribute->atthasdef && attribute->attgenerated &&
1216 def->
generated = attribute->attgenerated;
1221 if (attribute->attidentity &&
1238 def->
identity = attribute->attidentity;
1244 def->
storage = attribute->attstorage;
1261 attribute->attnum)) !=
NULL)
1368 elog(
ERROR,
"expandTableLikeClause called on untransformed LIKE clause");
1405 if (attribute->attisdropped)
1413 if (attribute->atthasdef &&
1414 (attribute->attgenerated ?
1420 bool found_whole_row;
1424 elog(
ERROR,
"default expression not found for attribute %d of relation \"%s\"",
1441 if (found_whole_row)
1444 errmsg(
"cannot convert whole-row table reference"),
1445 errdetail(
"Generation expression for column \"%s\" contains a whole-row reference to table \"%s\".",
1470 bool found_whole_row;
1485 if (found_whole_row)
1488 errmsg(
"cannot convert whole-row table reference"),
1489 errdetail(
"Constraint \"%s\" contains a whole-row reference to table \"%s\".",
1543 atcmd->missing_ok =
false;
1551 relation->
rd_rel->relhasindex &&
1658 for (
i = 0;
i < tupdesc->
natts;
i++)
1663 if (attr->attisdropped)
1667 attr->atttypmod, attr->attcollation);
1738 elog(
ERROR,
"cache lookup failed for access method %u",
1753 index->relation = heapRel;
1766 index->nulls_not_distinct =
idxrec->indnullsnotdistinct;
1769 index->transformed =
true;
1770 index->concurrent =
false;
1771 index->if_not_exists =
false;
1772 index->reset_default_tblspc =
false;
1803 elog(
ERROR,
"cache lookup failed for constraint %u",
1807 index->isconstraint =
true;
1812 if (
idxrec->indisexclusion)
1819 (
index->iswithoutoverlaps &&
1826 for (
i = 0;
i < nElems;
i++)
1838 elog(
ERROR,
"cache lookup failed for operator %u",
1855 index->isconstraint =
false;
1858 index->isconstraint =
false;
1878 for (keyno = 0; keyno <
idxrec->indnkeyatts; keyno++)
1903 bool found_whole_row;
1906 elog(
ERROR,
"too few entries in indexprs list");
1917 if (found_whole_row)
1920 errmsg(
"cannot convert whole-row table reference"),
1921 errdetail(
"Index \"%s\" contains a whole-row table reference.",
1972 for (keyno =
idxrec->indnkeyatts; keyno <
idxrec->indnatts; keyno++)
1994 errmsg(
"expressions are not supported in included columns")));
2016 bool found_whole_row;
2029 if (found_whole_row)
2032 errmsg(
"cannot convert whole-row table reference"),
2033 errdetail(
"Index \"%s\" contains a whole-row table reference.",
2086 elog(
ERROR,
"stxkind is not a 1-D char array");
2100 elog(
ERROR,
"unrecognized statistics kind %c", enabled[
i]);
2140 bool found_whole_row;
2196 elog(
ERROR,
"cache lookup failed for collation %u", collation);
2223 elog(
ERROR,
"cache lookup failed for opclass %u", opclass);
2288 foreach(
lc, indexlist)
2360 errmsg(
"multiple primary keys for table \"%s\" are not allowed",
2371 index->isconstraint =
true;
2394 index->transformed =
false;
2395 index->concurrent =
false;
2396 index->if_not_exists =
false;
2427 errmsg(
"cannot use an existing index in CREATE TABLE"),
2447 errmsg(
"index \"%s\" is already associated with a constraint",
2455 errmsg(
"index \"%s\" does not belong to table \"%s\"",
2474 errdetail(
"Cannot create a primary key or unique constraint using such an index."),
2481 errdetail(
"Cannot create a primary key or unique constraint using such an index."),
2488 errdetail(
"Cannot create a primary key or unique constraint using such an index."),
2500 errdetail(
"Cannot create a non-deferrable constraint using a deferrable index."),
2559 attoptions != (
Datum) 0 ||
2563 errmsg(
"index \"%s\" column number %d does not have default sorting behavior",
index_name,
i + 1),
2564 errdetail(
"Cannot create a primary key or unique constraint using such an index."),
2616 foreach(
lc, constraint->
keys)
2626 foreach(columns, cxt->
columns)
2660 if (
nn->is_no_inherit)
2663 errmsg(
"conflicting NO INHERIT declaration for not-null constraint on column \"%s\"",
2671 column->is_not_null =
true;
2707 errmsg(
"inherited relation \"%s\" is not a table or foreign table",
2709 for (count = 0; count < rel->
rd_att->
natts; count++)
2743 errmsg(
"column \"%s\" named in key does not exist", key),
2747 foreach(columns,
index->indexParams)
2755 errmsg(
"column \"%s\" appears twice in primary key constraint",
2761 errmsg(
"column \"%s\" appears twice in unique constraint",
2786 if (attr->attisdropped)
2793 typid = attr->atttypid;
2806 errmsg(
"column \"%s\" in WITHOUT OVERLAPS is not a range or multirange type", key),
2835 errmsg(
"constraint using WITHOUT OVERLAPS needs at least two columns"));
2838 index->accessMethod =
"gist";
2858 foreach(columns, cxt->
columns)
2896 errmsg(
"inherited relation \"%s\" is not a table or foreign table",
2898 for (count = 0; count < rel->
rd_att->
natts; count++)
2927 errmsg(
"column \"%s\" named in key does not exist", key),
3067 if (
stmt->transformed)
3088 if (
stmt->whereClause)
3099 foreach(l,
stmt->indexParams)
3133 errmsg(
"index expressions and predicates can refer only to the table being indexed")));
3141 stmt->transformed =
true;
3162 if (
stmt->transformed)
3183 foreach(l,
stmt->exprs)
3205 errmsg(
"statistics expressions can refer only to the table being referenced")));
3213 stmt->transformed =
true;
3230 List **actions,
Node **whereClause)
3248 errmsg(
"rules on materialized views are not supported")));
3275 switch (
stmt->event)
3291 elog(
ERROR,
"unrecognized event type: %d",
3308 errmsg(
"rule WHERE condition cannot contain references to other relations")));
3335 foreach(l,
stmt->actions)
3377 *whereClause !=
NULL)
3380 errmsg(
"rules with WHERE conditions can only have SELECT, INSERT, UPDATE, or DELETE actions")));
3398 errmsg(
"conditional UNION/INTERSECT/EXCEPT statements are not implemented")));
3410 switch (
stmt->event)
3416 errmsg(
"ON SELECT rule cannot use OLD")));
3420 errmsg(
"ON SELECT rule cannot use NEW")));
3429 errmsg(
"ON INSERT rule cannot use OLD")));
3435 errmsg(
"ON DELETE rule cannot use NEW")));
3438 elog(
ERROR,
"unrecognized event type: %d",
3463 errmsg(
"cannot refer to OLD within WITH query")));
3470 errmsg(
"cannot refer to NEW within WITH query")));
3499 errmsg(
"conditional UNION/INTERSECT/EXCEPT statements are not implemented")));
3540 ?
errhint(
"ALTER TABLE ... MERGE PARTITIONS can only merge partitions don't have sub-partitions")
3541 :
errhint(
"ALTER TABLE ... SPLIT PARTITION can only split partitions don't have sub-partitions"));
3543 if (!partRel->
rd_rel->relispartition)
3546 errmsg(
"\"%s\" is not a partition of partitioned table \"%s\"",
3549 ?
errhint(
"ALTER TABLE ... MERGE PARTITIONS can only merge partitions don't have sub-partitions")
3550 :
errhint(
"ALTER TABLE ... SPLIT PARTITION can only split partitions don't have sub-partitions"));
3555 errmsg(
"relation \"%s\" is not a partition of relation \"%s\"",
3558 ?
errhint(
"ALTER TABLE ... MERGE PARTITIONS can only merge partitions don't have sub-partitions")
3559 :
errhint(
"ALTER TABLE ... SPLIT PARTITION can only split partitions don't have sub-partitions"));
3579 int default_index = -1;
3617 if (
sps->bound->is_default)
3619 if (default_index != -1)
3622 errmsg(
"DEFAULT partition should be one"),
3634 errmsg(
"partition of hash-partitioned table cannot be split"));
3638 elog(
ERROR,
"unexpected partition strategy: %d",
3639 (
int) key->strategy);
3649 errmsg(
"can not split DEFAULT partition \"%s\"",
3651 errhint(
"To split DEFAULT partition one of the new partition msut be DEFAULT"),
3666 errmsg(
"can not split non-DEFAULT partition \"%s\"",
3668 errmsg(
"new partition cannot be DEFAULT because DEFAULT partition \"%s\" already exists",
3691 errmsg(
"partition with name \"%s\" is already used",
name->relname),
3699 errmsg(
"partition with name \"%s\" is already used",
name->relname),
3735 errmsg(
"partition of hash-partitioned table cannot be merged"));
3752 errmsg(
"partition with name \"%s\" is already used",
name->relname),
3781 errmsg(
"partition with name \"%s\" is already used",
name->relname),
3795 partcmd->bound->strategy = strategy;
3796 partcmd->bound->location = -1;
3818 const char *queryString,
3852 cxt.
stmtType =
"ALTER FOREIGN TABLE";
3922 elog(
ERROR,
"unrecognized node type: %d",
3954 errmsg(
"column \"%s\" of relation \"%s\" does not exist",
3994 errmsg(
"column \"%s\" of relation \"%s\" does not exist",
4036 errmsg(
"column \"%s\" of relation \"%s\" does not exist",
4088 errmsg(
"list of partitions to be merged should include at least two partitions"));
4102 errmsg(
"list of new partitions should contain at least two partitions"));
4139 foreach(l, cxt.
alist)
4218#define SUPPORTS_ATTRS(node) \
4219 ((node) != NULL && \
4220 ((node)->contype == CONSTR_PRIMARY || \
4221 (node)->contype == CONSTR_UNIQUE || \
4222 (node)->contype == CONSTR_EXCLUSION || \
4223 (node)->contype == CONSTR_FOREIGN))
4230 elog(
ERROR,
"unrecognized node type: %d",
4238 errmsg(
"misplaced DEFERRABLE clause"),
4243 errmsg(
"multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed"),
4253 errmsg(
"misplaced NOT DEFERRABLE clause"),
4258 errmsg(
"multiple DEFERRABLE/NOT DEFERRABLE clauses not allowed"),
4266 errmsg(
"constraint declared INITIALLY DEFERRED must be DEFERRABLE"),
4274 errmsg(
"misplaced INITIALLY DEFERRED clause"),
4279 errmsg(
"multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed"),
4292 errmsg(
"constraint declared INITIALLY DEFERRED must be DEFERRABLE"),
4300 errmsg(
"misplaced INITIALLY IMMEDIATE clause"),
4305 errmsg(
"multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed"),
4317 errmsg(
"misplaced ENFORCED clause"),
4322 errmsg(
"multiple ENFORCED/NOT ENFORCED clauses not allowed"),
4334 errmsg(
"misplaced NOT ENFORCED clause"),
4339 errmsg(
"multiple ENFORCED/NOT ENFORCED clauses not allowed"),
4378 column->collClause->collname,
4379 column->collClause->location);
4384 errmsg(
"collations are not supported by type %s",
4387 column->collClause->location)));
4440 foreach(elements, schemaElts)
4504 elog(
ERROR,
"unrecognized node type: %d",
4532 errmsg(
"CREATE specifies a schema (%s) "
4533 "different from the one being created (%s)",
4567 errmsg(
"\"%s\" is not a partitioned table",
4574 errmsg(
"table \"%s\" is not partitioned",
4581 errmsg(
"index \"%s\" is not partitioned",
4586 elog(
ERROR,
"\"%s\" is not a partitioned table or index",
4610 if (
spec->is_default)
4621 errmsg(
"a hash-partitioned table may not have a default partition")));
4638 errmsg(
"invalid bound specification for a hash partition"),
4641 if (
spec->modulus <= 0)
4644 errmsg(
"modulus for hash partition must be an integer value greater than zero")));
4648 if (
spec->remainder >=
spec->modulus)
4651 errmsg(
"remainder for hash partition must be less than modulus")));
4664 errmsg(
"invalid bound specification for a list partition"),
4668 if (key->partattrs[0] != 0)
4670 key->partattrs[0],
false);
4682 foreach(cell,
spec->listdatums)
4717 errmsg(
"invalid bound specification for a range partition"),
4723 errmsg(
"FROM must specify exactly one value per partitioning column")));
4727 errmsg(
"TO must specify exactly one value per partitioning column")));
4741 elog(
ERROR,
"unexpected partition strategy: %d", (
int) strategy);
4819 if (key->partattrs[
i] != 0)
4821 key->partattrs[
i],
false);
4840 if (
value->constisnull)
4843 errmsg(
"cannot specify NULL in range bound")));
4879 if (kind ==
prd->kind)
4891 errmsg(
"every bound following MAXVALUE must also be MAXVALUE"),
4898 errmsg(
"every bound following MINVALUE must also be MINVALUE"),
4941 errmsg(
"specified value cannot be cast to type %s for column \"%s\"",
4956 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 errcode(int sqlerrcode)
int errhint(const char *fmt,...) pg_attribute_printf(1
int errdetail(const char *fmt,...) pg_attribute_printf(1
int int errmsg_internal(const char *fmt,...) pg_attribute_printf(1
#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
void addNSItemToQuery(ParseState *pstate, ParseNamespaceItem *nsitem, bool addToJoinList, bool addToRelNameSpace, bool addToVarNameSpace)
ParseNamespaceItem * addRangeTableEntryForRelation(ParseState *pstate, Relation rel, LOCKMODE lockmode, Alias *alias, bool inh, bool inFromCl)
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)
END_CATALOG_STRUCT typedef 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
END_CATALOG_STRUCT typedef 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)
END_CATALOG_STRUCT typedef 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)
END_CATALOG_STRUCT typedef 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)
END_CATALOG_STRUCT typedef FormData_pg_opclass * Form_pg_opclass
END_CATALOG_STRUCT typedef FormData_pg_operator * Form_pg_operator
END_CATALOG_STRUCT typedef FormData_pg_statistic_ext * Form_pg_statistic_ext
END_CATALOG_STRUCT typedef 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)
Datum SysCacheGetAttrNotNull(SysCacheIdentifier cacheId, HeapTuple tup, AttrNumber attributeNumber)
HeapTuple SearchSysCache1(SysCacheIdentifier cacheId, Datum key1)
Datum SysCacheGetAttr(SysCacheIdentifier cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
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)