From: | Scott Marlowe <scott(dot)marlowe(at)gmail(dot)com> |
---|---|
To: | reid(dot)thompson(at)ateb(dot)com |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Partitioned table question |
Date: | 2009-09-24 19:17:42 |
Message-ID: | dcc563d10909241217j6480dca7va99ba39e8f34918b@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Thu, Sep 24, 2009 at 12:02 PM, Reid Thompson <reid(dot)thompson(at)ateb(dot)com> wrote:
> Assuming the examples on
> http://www.postgresql.org/docs/8.3/static/ddl-partitioning.html
>
> where measurement has children as noted....
>
> CREATE TABLE measurement (
> city_id int not null,
> logdate date not null,
> peaktemp int,
> unitsales int
> );
>
> CREATE TABLE measurement_y2006m02 ( ) INHERITS (measurement);
> CREATE TABLE measurement_y2006m03 ( ) INHERITS (measurement);
> ...
> CREATE TABLE measurement_y2007m11 ( ) INHERITS (measurement);
> CREATE TABLE measurement_y2007m12 ( ) INHERITS (measurement);
> CREATE TABLE measurement_y2008m01 ( ) INHERITS (measurement);
>
> and insertion is governed ala the trigger example
>
> CREATE TRIGGER insert_measurement_trigger
> BEFORE INSERT ON measurement
> FOR EACH ROW EXECUTE PROCEDURE measurement_insert_trigger();
>
> CREATE OR REPLACE FUNCTION measurement_insert_trigger()
> RETURNS TRIGGER AS $$
> BEGIN
> IF ( NEW.logdate >= DATE '2006-02-01' AND NEW.logdate < DATE '2006-03-01' ) THEN
> INSERT INTO measurement_y2006m02 VALUES (NEW.*);
> ELSIF ( NEW.logdate >= DATE '2006-03-01' AND NEW.logdate < DATE '2006-04-01' ) THEN
> INSERT INTO measurement_y2006m03 VALUES (NEW.*);
> ...
> ELSIF ( NEW.logdate >= DATE '2008-01-01' AND NEW.logdate < DATE '2008-02-01' ) THEN
> INSERT INTO measurement_y2008m01 VALUES (NEW.*);
> ELSE
> RAISE EXCEPTION 'Date out of range. Fix the measurement_insert_trigger() function!';
> END IF;
> RETURN NULL;
> END;
> $$
> LANGUAGE plpgsql;
>
>
> If I know that no incoming data will be going into measurement_y2007m11
> and I NO INHERIT measurement_y2007m11 from measurement, do I have to
> immediately update the function measurement_insert_trigger() to remove
> references to measurement_y2007m11, or will the function continue to
> work fine and I can update it when convenient?
You can update it whenever it's convenient. I have a similar set and
I drop and recreate the insert trigger every night to handle inserts
for all past partitions and into the future 30 days. So if it fails
for a night or two no great loss.
You can test inserting with a large trigger and all the partitions and
on one that only hits maybe a few days in the past and a few days in
the future to see if it's faster on your machine. On mine there's no
big difference up to a few hundred tables at lease.
From | Date | Subject | |
---|---|---|---|
Next Message | Rob Marjot | 2009-09-24 19:23:35 | Re: generic modelling of data models; enforcing constraints dynamically... |
Previous Message | Magnus Hagander | 2009-09-24 19:09:05 | Re: About logging |