summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut2017-06-22 03:19:13 +0000
committerPeter Eisentraut2017-06-22 03:19:13 +0000
commitb56818abd450a87e2e3cb03b2cf3eede73487926 (patch)
treefe71c1b1883e4f78d32d4237f9f661236dbba10c
parentfb886c153bc168eeb1c3fd2f24562b5b808357d6 (diff)
Teach pgrowlocks to check relkind before scanning
Author: Amit Langote <[email protected]>
-rw-r--r--contrib/pgrowlocks/pgrowlocks.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/contrib/pgrowlocks/pgrowlocks.c b/contrib/pgrowlocks/pgrowlocks.c
index a50ef67b47..eabca65bd2 100644
--- a/contrib/pgrowlocks/pgrowlocks.c
+++ b/contrib/pgrowlocks/pgrowlocks.c
@@ -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