postgrespro.git / summary / log / commit / refs

commit    0f3cdf873e7d81fbf61965e13685595c8a23c322
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Fri Mar 01 00:07:07 2019 +0000

    Make pg_partition_tree return no rows on unsupported and undefined objects
    
    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 | 6 +++--- src/test/regress/expected/partition_info.out | 9 +++------ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/backend/utils/adt/partitionfuncs.c b/src/backend/utils/adt/partitionfuncs.c index ffd66b6439..36d9f69cbc 100644 --- a/src/backend/utils/adt/partitionfuncs.c +++ b/src/backend/utils/adt/partitionfuncs.c @@ -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); diff --git a/src/test/regress/expected/partition_info.out b/src/test/regress/expected/partition_info.out index a884df976f..73269ffd09 100644 --- a/src/test/regress/expected/partition_info.out +++ b/src/test/regress/expected/partition_info.out @@ -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 [parent: 253655116bb4]