Fix rule-detection code for MERGE.
authorDean Rasheed <dean.a.rasheed@gmail.com>
Fri, 25 Nov 2022 13:31:48 +0000 (13:31 +0000)
committerDean Rasheed <dean.a.rasheed@gmail.com>
Fri, 25 Nov 2022 13:31:48 +0000 (13:31 +0000)
Use the relation's rd_rules structure to test whether it has rules,
rather than the relhasrules flag, which might be out of date.

Reviewed by Tom Lane.

Backpatch to 15, where MERGE was added.

Discussion: https://postgr.es/m/CAEZATCVkBVZABfw71sYvkcPf6tarcOFST5Bc6AOi-LFT9YdccQ%40mail.gmail.com

src/backend/parser/parse_merge.c

index 7913523b1c6ab33a4502639277eb6e52479e1868..62c2ff69f0c4d1825fdde5890d673dab13147d10 100644 (file)
@@ -182,7 +182,8 @@ transformMergeStmt(ParseState *pstate, MergeStmt *stmt)
                 errmsg("cannot execute MERGE on relation \"%s\"",
                        RelationGetRelationName(pstate->p_target_relation)),
                 errdetail_relkind_not_supported(pstate->p_target_relation->rd_rel->relkind)));
-   if (pstate->p_target_relation->rd_rel->relhasrules)
+   if (pstate->p_target_relation->rd_rules != NULL &&
+       pstate->p_target_relation->rd_rules->numLocks > 0)
        ereport(ERROR,
                (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                 errmsg("cannot execute MERGE on relation \"%s\"",