Thread: Partition Rule Updating While Running?
Sorry if this is a duplicat, someone suggested posting to general as well, I'm using PostgreSQL 8.1.4 in a Hibernate Application and I am attempting to use partitioning via Inherited tables. At first I was going to create a rule per sub-table based on a date range, but found out with multiple rules postgres will only return the affected-row count on the last rule which gives Hibernate problems. So now I'm thinking the way to do it is just have one rule at a time and when I want to start appending data to a new partition, just change the rule on the parent table and also update the constraint on the last table to reflect the date ranges contained so that constraint_exclusion will work. this should perform better also. For instance Starting off with: Parent (Rule on insert instead insert into Child2) Child1 (Constraint date <= somedate1) Child2 (Constraint date > somedate1) Now I want to create another Partition: Create Table Child3 BEGIN Update Parent Rule( instead insert into Child3) somedate2 = max(date) from Child2 Update Child2 Constraint( date > somedate1 AND date <= somedate2 ) Set Constraint Child3 (date > somedate2) END Which ends up with: Parent (Rule on insert instead insert into Child2) Child1 (Constraint date <= somedate1) Child2 (Constraint date > somedate1 AND date <= somedate2) Child3 (Constraint date > somedate2) Anyone else tried this or expect it to work consistently (without stopping db)? Is it possible that there could be a race condition for the insertion and constraints or will the transaction prevent that from occurring? I've done some testing and it seems to work but I could just get lucky so far and not lose any data :) Thanks for any help, Gene
On Fri, Jul 07, 2006 at 04:39:53AM -0400, Gene wrote: > Sorry if this is a duplicat, someone suggested posting to general as well, > > I'm using PostgreSQL 8.1.4 in a Hibernate Application and I am > attempting to use partitioning via Inherited tables. At first I was > going to create a rule per sub-table based on a date range, but found > out with multiple rules postgres will only return the affected-row > count on the last rule which gives Hibernate problems. So now I'm > thinking the way to do it is just have one rule at a time and when I > want to start appending data to a new partition, just change the rule > on the parent table and also update the constraint on the last table > to reflect the date ranges contained so that constraint_exclusion will > work. this should perform better also. For instance Why not just decide somedate2 in advance and create the constraint as a range to start with. Then, a few days before somedate2 add a new constraint for between somedate2 and somedate 3. Then you never have to update any constraints... Have a nice day, -- Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/ > From each according to his ability. To each according to his ability to litigate.