Thread: Table Partitions: To Inherit Or Not To Inherit

Table Partitions: To Inherit Or Not To Inherit

From
Don Drake
Date:
I've read the previous thread on the list regarding partitioning
mechanisms and I just wrote a plpgsql function to create the partition
tables (by date) as well as another function used to do the insert (it
determines which table will be inserted).

The creation of the partition tables uses the inherits clause when
creating.  It creates an exact copy of the table it's inheriting from,
and adds the indexes since inherits doesn't do that for me.

CREATE TABLE hourly_report_data_2004_11_16 () INHERITS (hourly_report_data)

When I query on the hourly_report_data, the explain plan shows it
query all the tables that inherited from it.  That's all great.

What's really the difference between this and creating separate tables
with the same column definition without the inherit, and then create a
view to "merge" them together?

Also, I've run into a snag in that I have a hourly_detail table, that
has a foreign key to the hourly_report_data.  The inherit method above
does not honor the foreign key relationship to the children table of
hourly_report_data.  I can't insert any data into the hourly_detail
table due to the constraint failing.

The hourly_detail table is relatively tiny compared to the enormous
hourly_report_data table, so if I don't have to partition that one I
would rather not.  Any suggestions on this?

Thanks.

-Don

--
Donald Drake
President
Drake Consulting
http://www.drakeconsult.com/
312-560-1574

Re: Table Partitions: To Inherit Or Not To Inherit

From
Josh Berkus
Date:
Don,

> What's really the difference between this and creating separate tables
> with the same column definition without the inherit, and then create a
> view to "merge" them together?

Easier syntax for queries.   If you created completely seperate tables and
UNIONED them together, you'd have to be constantly modifying a VIEW which
tied the tables together.  With inheritance, you just do "SELECT * FROM
parent_table" and it handles finding all the children for you.

> Also, I've run into a snag in that I have a hourly_detail table, that
> has a foreign key to the hourly_report_data.  The inherit method above
> does not honor the foreign key relationship to the children table of
> hourly_report_data.  I can't insert any data into the hourly_detail
> table due to the constraint failing.

This is a known limitation of inherited tables, at least in current
implementations.   I think it's on the TODO list.   For now, either live
without the FKs, or implement them through custom triggers/rules.

--
Josh Berkus
Aglio Database Solutions
San Francisco