From: | "Mark Liberman" <mliberman(at)mixedsignals(dot)com> |
---|---|
To: | <pgsql-admin(at)postgresql(dot)org> |
Subject: | Release plans for improvements to partitioning |
Date: | 2006-03-29 21:11:38 |
Message-ID: | 9D938282F8C6EE43B748B910386DE93E0138B41D@srvgpimail1.GPI.local |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-admin |
I was wondering if anyone has any insight into if/when future improvements to the 8.1 partitioning capabilities are planned.
The current implementation of partitioning in postgres 8.1 appears to be just a first step. While it would provide some very nice benefits (such as the absence of vacuum processes after dropping partitions), the additional burden it places on administrative DDL whenever you add a partition might be a little too daunting to make it a viable solution for us.
Currently, a single partition, of which we would like to create one per table per day, involves the following definitions:
1) Create table definition. This is rather straight-forward ... e.g. CREATE TABLE programs_20060101 INHERITS (programs_1min)
2) Check condition. This tells postgres which range of data resides in this partition ... e.g. CHECK ( end_time >= '2006-01-01' AND end_time < '2006-01-02' ).
Note: there are no checks to guarantee that these are non-overlapping.
3) Insert rule. This tells postgres which partition to insert into for inserts into the master ... e.g.
CREATE RULE pgm_1min_insert_20060101 AS ON INSERT TO programs_1min WHERE ( end_time >= '2006-01-01' AND end_time < '2006-01-02' ) DO INSTEAD INSERT INTO programs_1min_20060101 VALUES ( NEW.programs_id, NEW.begin_time, NEW.end_time);
Again, there are no guarantees that these are non-overlapping.
4) All Indexes. Indexes must be created seperately on each partition. The existance of an index on the master table does not imply such an index on the underlying partitions.
This is the major area that would involve too much effort. Whenever a new index is added we would need to write a script that dynamically added that new index to all partitions of a given table. While this is certainly achievable with scripting, it simply adds too much margin for error if we are trying to build an automated solution for all of our customers.
From my understanding, there are other limitations as well, such as:
1) No delete rules for deleting across partitions
2) No update rules for updating across partitions
In an ideal solution the addition of a new partition would be a single (ALTER TABLE ADD PARTITION) statement (much like Oracle). This should take care of the table definition, the acceptable ranges (which cannot be overlapping) and any insert rules. Additionally, the index definition that applies to the table should apply to all underlying partitions so that any create index statement on the master table would be sufficient to index each underlying partition. Once created, the partitions should then be "invisible" to the sql writer, such that all inserts, updates, and deletes appropriately hit only the required partitions.
Hopefully, some/much of this is underway, but any insight would be appreciated because we need to determine whether we want to go down the path of implementing a solution based on the current partitioning, or waiting for the next generation of PG partitioning.
Thanks,
Mark
From | Date | Subject | |
---|---|---|---|
Next Message | Thomas F. O'Connell | 2006-03-29 21:17:45 | Re: Remote On-line Backup |
Previous Message | Simon Riggs | 2006-03-29 19:43:14 | Re: Remote On-line Backup |