diff options
author | Peter Eisentraut | 2017-06-22 03:19:13 +0000 |
---|---|---|
committer | Peter Eisentraut | 2017-06-22 03:19:13 +0000 |
commit | b56818abd450a87e2e3cb03b2cf3eede73487926 (patch) | |
tree | fe71c1b1883e4f78d32d4237f9f661236dbba10c | |
parent | fb886c153bc168eeb1c3fd2f24562b5b808357d6 (diff) |
Teach pgrowlocks to check relkind before scanning
Author: Amit Langote <[email protected]>
-rw-r--r-- | contrib/pgrowlocks/pgrowlocks.c | 14 |
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 |