On Mon, Nov 10, 2014 at 8:53 PM, Amit Langote
<langote_amit...@lab.ntt.co.jp> wrote:
> Above commands are merely transformed into ALTER TABLE subcommands that 
> arrange
> partitioned table and partitions into inheritance hierarchy, but with extra
> information, that is, allowed values for the partition in a new anyarray 
> column
> called 'pg_inherits.values'. A special case of ATExecAddInherit() namely
> ATExecAttachPartitionI(), as part of its processing, also adds partition
> constraints in the form of appropriate CHECK constraints. So, a few of the
> manual steps are automated and additional (IMHO non-opaque) metadata (namely
> partition boundaries/list values) is added.

I thought putting the partition boundaries into pg_inherits was a
strange choice.  I'd put it in pg_class, or in pg_partition if we
decide to create that.  Maybe as anyarray, but I think pg_node_tree
might even be better.  That can also represent data of some arbitrary
type, but it doesn't enforce that everything is uniform.  So you could
have a list of objects of the form {RANGEPARTITION :lessthan {CONST
...} :partition 16982} or similar.  The relcache could load that up
and convert the list to a C array, which would then be easy to
binary-search.

As you say, you also need to store the relevant operator somewhere,
and the fact that it's a range partition rather than list or hash,
say.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to