mirror of
https://github.com/postgres/postgres.git
synced 2025-06-17 17:02:08 +03:00
Ensure that CREATE TABLE LIKE copies any NO INHERIT constraint property.
Since the documentation about LIKE doesn't say that a copied constraint has properties different from the original, it seems that ignoring a NO INHERIT property doesn't meet the principle of least surprise. So make it copy that. (Note, however, that we still don't copy a NOT VALID property; CREATE TABLE offers no way to do that, plus it seems pointless.) Arguably this is a bug fix; but no back-patch, as it seems barely possible somebody is depending on the current behavior. Ildar Musin and Chris Travers; reviewed by Amit Langote and myself Discussion: https://postgr.es/m/CAONYFtMC6C+3AWCVp7Yd8H87Zn0GxG1_iQG6_bQKbaqYZY0=-g@mail.gmail.com
This commit is contained in:
@ -1133,12 +1133,14 @@ transformTableLikeClause(CreateStmtContext *cxt, TableLikeClause *table_like_cla
|
||||
if ((table_like_clause->options & CREATE_TABLE_LIKE_CONSTRAINTS) &&
|
||||
tupleDesc->constr)
|
||||
{
|
||||
TupleConstr *constr = tupleDesc->constr;
|
||||
int ccnum;
|
||||
|
||||
for (ccnum = 0; ccnum < tupleDesc->constr->num_check; ccnum++)
|
||||
for (ccnum = 0; ccnum < constr->num_check; ccnum++)
|
||||
{
|
||||
char *ccname = tupleDesc->constr->check[ccnum].ccname;
|
||||
char *ccbin = tupleDesc->constr->check[ccnum].ccbin;
|
||||
char *ccname = constr->check[ccnum].ccname;
|
||||
char *ccbin = constr->check[ccnum].ccbin;
|
||||
bool ccnoinherit = constr->check[ccnum].ccnoinherit;
|
||||
Constraint *n = makeNode(Constraint);
|
||||
Node *ccbin_node;
|
||||
bool found_whole_row;
|
||||
@ -1163,8 +1165,9 @@ transformTableLikeClause(CreateStmtContext *cxt, TableLikeClause *table_like_cla
|
||||
RelationGetRelationName(relation))));
|
||||
|
||||
n->contype = CONSTR_CHECK;
|
||||
n->location = -1;
|
||||
n->conname = pstrdup(ccname);
|
||||
n->location = -1;
|
||||
n->is_no_inherit = ccnoinherit;
|
||||
n->raw_expr = NULL;
|
||||
n->cooked_expr = nodeToString(ccbin_node);
|
||||
cxt->ckconstraints = lappend(cxt->ckconstraints, n);
|
||||
|
Reference in New Issue
Block a user