]> granicus.if.org Git - postgresql/commitdiff
Make pg_partition_tree return no rows on unsupported and undefined objects
authorMichael Paquier <michael@paquier.xyz>
Fri, 1 Mar 2019 00:07:07 +0000 (09:07 +0900)
committerMichael Paquier <michael@paquier.xyz>
Fri, 1 Mar 2019 00:07:07 +0000 (09:07 +0900)
The function was tweaked so as it returned one row full of NULLs when
working on an unsupported relkind or an undefined object as of cc53123,
and after discussion with Amit and Álvaro it looks more natural to make
it return no rows.

Author: Michael Paquier
Reviewed-by: Álvaro Herrera, Amit Langote
Discussion: https://postgr.es/m/20190227184808.GA17357@alvherre.pgsql

src/backend/utils/adt/partitionfuncs.c
src/test/regress/expected/partition_info.out

index ffd66b64394f811018bef837e64f48051b7ab01d..36d9f69cbccd72f76cb37adc7dd6740087112f4a 100644 (file)
@@ -69,9 +69,6 @@ pg_partition_tree(PG_FUNCTION_ARGS)
        FuncCallContext *funcctx;
        ListCell  **next;
 
-       if (!check_rel_can_be_partition(rootrelid))
-               PG_RETURN_NULL();
-
        /* stuff done only on the first call of the function */
        if (SRF_IS_FIRSTCALL())
        {
@@ -82,6 +79,9 @@ pg_partition_tree(PG_FUNCTION_ARGS)
                /* create a function context for cross-call persistence */
                funcctx = SRF_FIRSTCALL_INIT();
 
+               if (!check_rel_can_be_partition(rootrelid))
+                       SRF_RETURN_DONE(funcctx);
+
                /* switch to memory context appropriate for multiple function calls */
                oldcxt = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
 
index a884df976fd65ebb7697c24e76ad19554c7bd9e3..73269ffd09d3beb86608b0c11f1e7cd6f1e0e8ec 100644 (file)
@@ -9,8 +9,7 @@ SELECT * FROM pg_partition_tree(NULL);
 SELECT * FROM pg_partition_tree(0);
  relid | parentrelid | isleaf | level 
 -------+-------------+--------+-------
-       |             |        |      
-(1 row)
+(0 rows)
 
 SELECT pg_partition_root(NULL);
  pg_partition_root 
@@ -163,14 +162,12 @@ CREATE MATERIALIZED VIEW ptif_test_matview AS SELECT 1;
 SELECT * FROM pg_partition_tree('ptif_test_view');
  relid | parentrelid | isleaf | level 
 -------+-------------+--------+-------
-       |             |        |      
-(1 row)
+(0 rows)
 
 SELECT * FROM pg_partition_tree('ptif_test_matview');
  relid | parentrelid | isleaf | level 
 -------+-------------+--------+-------
-       |             |        |      
-(1 row)
+(0 rows)
 
 SELECT pg_partition_root('ptif_test_view');
  pg_partition_root