Re: pg_partition_tree crashes for a non-defined relation

Michael Paquier <michael@paquier.xyz>

From: Michael Paquier <michael@paquier.xyz>
To: Alvaro Herrera <alvherre@2ndquadrant.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Stephen Frost <sfrost@snowman.net>, Postgres hackers <pgsql-hackers@postgresql.org>, Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>
Date: 2019-03-01T00:22:04Z
Lists: pgsql-hackers
On Thu, Feb 28, 2019 at 04:32:03PM -0300, Alvaro Herrera wrote:
> Yeah, looks good, please push.

Done for this part.

> I would opt for returning the empty set for legacy inheritance too.
> 
> More generally, I think we should return empty for anything that's
> either not RELKIND_PARTITIONED_TABLE or has relispartition set.

I think that one option is to make the function return only the table
itself if it is not a partitioned table, which would be more
consistent with what pg_partition_root() does.

What I am writing next sounds perhaps a bit fancy, but in my opinion a
normal table is itself a partition tree, made of one single member:
itself.
--
Michael

Commits

  1. Test partition functions with legacy inheritance children, too

  2. Consider only relations part of partition trees in partition functions

  3. Make pg_partition_tree return no rows on unsupported and undefined objects

  4. Tweak pg_partition_tree for undefined relations and unsupported relkinds