Re: Partitioned table question

Поиск
Список
Период
Сортировка
От Scott Marlowe
Тема Re: Partitioned table question
Дата
Msg-id dcc563d10909241217j6480dca7va99ba39e8f34918b@mail.gmail.com
обсуждение исходный текст
Ответ на Partitioned table question  (Reid Thompson <reid.thompson@ateb.com>)
Ответы Re: Partitioned table question  (Reid Thompson <reid.thompson@ateb.com>)
Список pgsql-general
On Thu, Sep 24, 2009 at 12:02 PM, Reid Thompson <reid.thompson@ateb.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.

В списке pgsql-general по дате отправления:

Предыдущее
От: "Eric B. Ridge"
Дата:
Сообщение: v8.1 pgbench ERRORs
Следующее
От: Ricky Tompu Breaky
Дата:
Сообщение: Re: Newbie's question: How can I connect to my postgresql-server?