aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/partitionfuncs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/adt/partitionfuncs.c')
-rw-r--r--src/backend/utils/adt/partitionfuncs.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/backend/utils/adt/partitionfuncs.c b/src/backend/utils/adt/partitionfuncs.c
index 78dd2b542b5..6fb4f6bc50f 100644
--- a/src/backend/utils/adt/partitionfuncs.c
+++ b/src/backend/utils/adt/partitionfuncs.c
@@ -23,6 +23,7 @@
#include "funcapi.h"
#include "utils/fmgrprotos.h"
#include "utils/lsyscache.h"
+#include "utils/syscache.h"
/*
@@ -42,16 +43,16 @@ pg_partition_tree(PG_FUNCTION_ARGS)
FuncCallContext *funcctx;
ListCell **next;
- /* Only allow relation types that can appear in partition trees. */
+ if (!SearchSysCacheExists1(RELOID, ObjectIdGetDatum(rootrelid)))
+ PG_RETURN_NULL();
+
+ /* Return NULL for relation types that cannot appear in partition trees */
if (relkind != RELKIND_RELATION &&
relkind != RELKIND_FOREIGN_TABLE &&
relkind != RELKIND_INDEX &&
relkind != RELKIND_PARTITIONED_TABLE &&
relkind != RELKIND_PARTITIONED_INDEX)
- ereport(ERROR,
- (errcode(ERRCODE_WRONG_OBJECT_TYPE),
- errmsg("\"%s\" is not a table, a foreign table, or an index",
- get_rel_name(rootrelid))));
+ PG_RETURN_NULL();
/* stuff done only on the first call of the function */
if (SRF_IS_FIRSTCALL())