From e09d763e25dccc40695bc824ddda9abea791d66f Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Fri, 1 Sep 2023 14:21:27 +0200 Subject: ATPrepAddPrimaryKey: ignore non-PK constraints Because of lack of test coverage, this function added by b0e96f311985 wasn't ignoring constraint types other than primary keys, which it should have. Add some lines to a test for it. Reported-by: Richard Guo Discussion: https://postgr.es/m/CAMbWs48bc-k_-1fh0dZpAhp_LiR5MfEX9haystmoBboR_4czCQ@mail.gmail.com --- src/backend/commands/tablecmds.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'src/backend') diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index d097da3c78e..03397746724 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -8907,7 +8907,14 @@ ATPrepAddPrimaryKey(List **wqueue, Relation rel, AlterTableCmd *cmd, List *children; List *newconstrs = NIL; ListCell *lc; - IndexStmt *stmt; + IndexStmt *indexstmt; + + /* No work if not creating a primary key */ + if (!IsA(cmd->def, IndexStmt)) + return; + indexstmt = castNode(IndexStmt, cmd->def); + if (!indexstmt->primary) + return; /* No work if no legacy inheritance children are present */ if (rel->rd_rel->relkind != RELKIND_RELATION || @@ -8916,8 +8923,7 @@ ATPrepAddPrimaryKey(List **wqueue, Relation rel, AlterTableCmd *cmd, children = find_inheritance_children(RelationGetRelid(rel), lockmode); - stmt = castNode(IndexStmt, cmd->def); - foreach(lc, stmt->indexParams) + foreach(lc, indexstmt->indexParams) { IndexElem *elem = lfirst_node(IndexElem, lc); Constraint *nnconstr; -- cgit v1.2.3