]> granicus.if.org Git - postgresql/commitdiff
Teach pgrowlocks to check relkind before scanning
authorPeter Eisentraut <peter_e@gmx.net>
Thu, 22 Jun 2017 03:19:13 +0000 (23:19 -0400)
committerPeter Eisentraut <peter_e@gmx.net>
Thu, 22 Jun 2017 03:19:13 +0000 (23:19 -0400)
Author: Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>

contrib/pgrowlocks/pgrowlocks.c

index a50ef67b477b7644fe158ab5b79ccaec4158cd67..eabca65bd2e7c6f0b9e73751619ab596d2960d7e 100644 (file)
@@ -97,7 +97,19 @@ pgrowlocks(PG_FUNCTION_ARGS)
 
                relname = PG_GETARG_TEXT_PP(0);
                relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname));
-               rel = heap_openrv(relrv, AccessShareLock);
+               rel = relation_openrv(relrv, AccessShareLock);
+
+               if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
+                       ereport(ERROR,
+                                       (errcode(ERRCODE_WRONG_OBJECT_TYPE),
+                                        errmsg("\"%s\" is a partitioned table",
+                                                       RelationGetRelationName(rel)),
+                                        errdetail("Partitioned tables do not contain rows.")));
+               else if (rel->rd_rel->relkind != RELKIND_RELATION)
+                       ereport(ERROR,
+                                       (errcode(ERRCODE_WRONG_OBJECT_TYPE),
+                                        errmsg("\"%s\" is not a table",
+                                                       RelationGetRelationName(rel))));
 
                /*
                 * check permissions: must have SELECT on table or be in