mirror of
https://github.com/postgres/postgres.git
synced 2025-06-17 17:02:08 +03:00
Prohibit identity columns on typed tables and partitions
Those cases currently crash and supporting them is more work then originally thought, so we'll just prohibit these scenarios for now. Author: Michael Paquier <michael.paquier@gmail.com> Reviewed-by: Amit Langote <Langote_Amit_f8@lab.ntt.co.jp> Reported-by: Мансур Галиев <gomer94@yandex.ru> Bug: #14866
This commit is contained in:
@ -92,6 +92,7 @@ typedef struct
|
||||
IndexStmt *pkey; /* PRIMARY KEY index, if any */
|
||||
bool ispartitioned; /* true if table is partitioned */
|
||||
PartitionBoundSpec *partbound; /* transformed FOR VALUES */
|
||||
bool ofType; /* true if statement contains OF typename */
|
||||
} CreateStmtContext;
|
||||
|
||||
/* State shared by transformCreateSchemaStmt and its subroutines */
|
||||
@ -240,6 +241,8 @@ transformCreateStmt(CreateStmt *stmt, const char *queryString)
|
||||
cxt.alist = NIL;
|
||||
cxt.pkey = NULL;
|
||||
cxt.ispartitioned = stmt->partspec != NULL;
|
||||
cxt.partbound = stmt->partbound;
|
||||
cxt.ofType = (stmt->ofTypename != NULL);
|
||||
|
||||
/*
|
||||
* Notice that we allow OIDs here only for plain tables, even though
|
||||
@ -662,6 +665,15 @@ transformColumnDefinition(CreateStmtContext *cxt, ColumnDef *column)
|
||||
Type ctype;
|
||||
Oid typeOid;
|
||||
|
||||
if (cxt->ofType)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("identity colums are not supported on typed tables")));
|
||||
if (cxt->partbound)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("identify columns are not supported on partitions")));
|
||||
|
||||
ctype = typenameType(cxt->pstate, column->typeName, NULL);
|
||||
typeOid = HeapTupleGetOid(ctype);
|
||||
ReleaseSysCache(ctype);
|
||||
@ -2697,6 +2709,7 @@ transformAlterTableStmt(Oid relid, AlterTableStmt *stmt,
|
||||
cxt.pkey = NULL;
|
||||
cxt.ispartitioned = (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE);
|
||||
cxt.partbound = NULL;
|
||||
cxt.ofType = false;
|
||||
|
||||
/*
|
||||
* The only subtypes that currently require parse transformation handling
|
||||
|
Reference in New Issue
Block a user