From 2ab6d28d233af17987ea323e3235b2bda89b4f2e Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 22 Mar 2019 17:27:38 +0900 Subject: Fix crash with pg_partition_root MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Trying to call the function with the top-most parent of a partition tree was leading to a crash. In this case the correct result is to return the top-most parent itself. Reported-by: Álvaro Herrera Author: Michael Paquier Reviewed-by: Amit Langote Discussion: https://postgr.es/m/20190322032612.GA323@alvherre.pgsql --- src/backend/utils/adt/partitionfuncs.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/backend/utils/adt/partitionfuncs.c') diff --git a/src/backend/utils/adt/partitionfuncs.c b/src/backend/utils/adt/partitionfuncs.c index 98c8ef77f1..714a0242a1 100644 --- a/src/backend/utils/adt/partitionfuncs.c +++ b/src/backend/utils/adt/partitionfuncs.c @@ -189,8 +189,16 @@ pg_partition_root(PG_FUNCTION_ARGS) if (!check_rel_can_be_partition(relid)) PG_RETURN_NULL(); - /* Fetch the top-most parent */ + /* fetch the list of ancestors */ ancestors = get_partition_ancestors(relid); + + /* + * If the input relation is already the top-most parent, just return + * itself. + */ + if (ancestors == NIL) + PG_RETURN_OID(relid); + rootrelid = llast_oid(ancestors); list_free(ancestors); -- cgit v1.2.1