diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c index 62c46e4384..cf6c47b596 100644 --- a/src/backend/rewrite/rewriteDefine.c +++ b/src/backend/rewrite/rewriteDefine.c @@ -30,6 +30,7 @@ #include "catalog/pg_rewrite.h" #include "catalog/storage.h" #include "commands/policy.h" +#include "commands/tablecmds.h" #include "miscadmin.h" #include "nodes/nodeFuncs.h" #include "parser/parse_utilcmd.h" @@ -422,6 +423,9 @@ DefineQueryRewrite(const char *rulename, * whole business of converting relations to views is just an obsolete * kluge to allow dump/reload of views that participate in circular * dependencies.) + * + * Also ensure the relation isn't being manipulated in any outer SQL + * command of our own session. */ if (event_relation->rd_rel->relkind != RELKIND_VIEW && event_relation->rd_rel->relkind != RELKIND_MATVIEW) @@ -430,6 +434,8 @@ DefineQueryRewrite(const char *rulename, Snapshot snapshot; TupleTableSlot *slot; + CheckTableNotInUse(event_relation, "CREATE RULE"); + if (event_relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE),