Re: [MASSMAIL]duda con particionado de tablas

From: Anthony Sotolongo <asotolongo(at)gmail(dot)com>
To: Marcos Ortiz <mlortiz(at)uci(dot)cu>, Esneiker Enriquez Cabrera <eenriquez(at)cav(dot)desoft(dot)cu>, 'POSTGRES' <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [MASSMAIL]duda con particionado de tablas
Date: 2015-02-20 16:33:29
Message-ID: 54E761D9.9060603@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Eskeiner me sumo a lo que sugiere marcos, a lo mejor estas
definiendo mal la regla. Una cosa que debes saber es que si consultas la
tabla padre vas a ver los elementos del hijo, pero no quiere decir que
estén en el padre fisicamente, puedes probar haciendo un select * from
only tabla_padre y si esta implementada la herencia y el
redireccionamiento de los registros correctamente, la tabla padre va a
estar vacía, los registros van a estar en los hijos solamente.

saludos

On 20/02/15 12:55, Marcos Ortiz wrote:
>
> On 20/02/15 10:18, Esneiker Enriquez Cabrera wrote:
>>
>> Hola amigos.
>>
>> Estoy implementando un ejemplo de partición de tablas en postgres
>> pero me he encontrado con un problemita. Describo mi escenario.
>>
>> Estoy usando postgres 8.4 y tengo un esquema que se llama master, en
>> este esquema tengo una tabla que sería mi tabla padre. Tengo otro
>> esquema que se llama histórico 2015 que tiene una tabla que hereda de
>> la tabla del esquema master. Tengo creada una regla que me inserta
>> los valores de la tabla padre a la hija según la condición que le
>> especifico. Esto funciona correctamente, pero el problema está en que
>> me inserta el registro en la tabla padre y en la tabla hija, mientras
>> que en los documentos que solo se debe insertar en la tabla hija. Si
>> elimino el registro de alguna de estas tablas lo elimina de la otra.
>>
>> Alguien me podría dar alguna sugerencia?
>>
>> Muchas gracias.
>>
> Bueno, el problema debe estar en la regla que estás definiendo.
> Generalmente esto se hace con un Trigger de tipo Before, para que se
> ejecute antes del INSERT en la tabla master. Aquí te dejo el ejemplo
> de un trigger de este tipo y su función correspondiente. La tabla
> master es impressions_by_day, y cada partición tiene dos meses de datos:
>
> CREATE TRIGGER insert_impressions_by_day_trigger
> BEFORE INSERT ON impressions_by_day
> FOR EACH ROW EXECUTE PROCEDURE impressions_by_day_insert_trigger();
>
>
> CREATE OR REPLACE FUNCTION impressions_by_day_insert_trigger()
> RETURNS TRIGGER AS $$
> BEGIN
> IF ( NEW.day >= DATE '2009-01-01' AND NEW.day < DATE '2009-03-01'
> ) THEN
> INSERT INTO impressions_by_day_y2009m1ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2009-03-01' AND NEW.day < DATE
> '2009-05-01' ) THEN
> INSERT INTO impressions_by_day_y2009m3ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2009-05-01' AND NEW.day < DATE
> '2009-07-01' ) THEN
> INSERT INTO impressions_by_day_y2009m5ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2009-07-01' AND NEW.day < DATE
> '2009-09-01' ) THEN
> INSERT INTO impressions_by_day_y2009m7ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2009-09-01' AND NEW.day < DATE
> '2009-11-01' ) THEN
> INSERT INTO impressions_by_day_y2009m9ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2009-11-01' AND NEW.day < DATE
> '2010-01-01' ) THEN
> INSERT INTO impressions_by_day_y2009m11ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2010-01-01' AND NEW.day < DATE
> '2010-03-01' ) THEN
> INSERT INTO impressions_by_day_y2010m1ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2010-03-01' AND NEW.day < DATE
> '2010-05-01' ) THEN
> INSERT INTO impressions_by_day_y2010m3ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2010-05-01' AND NEW.day < DATE
> '2010-07-01' ) THEN
> INSERT INTO impressions_by_day_y2010m5ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2010-07-01' AND NEW.day < DATE
> '2010-09-01' ) THEN
> INSERT INTO impressions_by_day_y2010m7ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2010-09-01' AND NEW.day < DATE
> '2010-11-01' ) THEN
> INSERT INTO impressions_by_day_y2010m9ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2010-11-01' AND NEW.day < DATE
> '2011-01-01' ) THEN
> INSERT INTO impressions_by_day_y2010m11ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2011-01-01' AND NEW.day < DATE
> '2011-03-01' ) THEN
> INSERT INTO impressions_by_day_y2011m1ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2011-03-01' AND NEW.day < DATE
> '2011-05-01' ) THEN
> INSERT INTO impressions_by_day_y2011m3ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2011-05-01' AND NEW.day < DATE
> '2011-07-01' ) THEN
> INSERT INTO impressions_by_day_y2011m5ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2011-07-01' AND NEW.day < DATE
> '2011-09-01' ) THEN
> INSERT INTO impressions_by_day_y2011m7ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2011-09-01' AND NEW.day < DATE
> '2011-11-01' ) THEN
> INSERT INTO impressions_by_day_y2011m9ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2011-11-01' AND NEW.day < DATE
> '2012-01-01' ) THEN
> INSERT INTO impressions_by_day_y2011m11ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2012-01-01' AND NEW.day < DATE
> '2012-03-01' ) THEN
> INSERT INTO impressions_by_day_y2012m1ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2012-03-01' AND NEW.day < DATE
> '2012-05-01' ) THEN
> INSERT INTO impressions_by_day_y2012m3ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2012-05-01' AND NEW.day < DATE
> '2012-07-01' ) THEN
> INSERT INTO impressions_by_day_y2012m5ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2012-07-01' AND NEW.day < DATE
> '2012-09-01' ) THEN
> INSERT INTO impressions_by_day_y2012m7ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2012-09-01' AND NEW.day < DATE
> '2012-11-01' ) THEN
> INSERT INTO impressions_by_day_y2012m9ms2 VALUES (NEW.*);
> ELSIF ( NEW.day >= DATE '2012-11-01' AND NEW.day < DATE
> '2013-01-01' ) THEN
> INSERT INTO impressions_by_day_y2012m11ms2 VALUES (NEW.*);
> ELSE
> RAISE EXCEPTION 'Date out of range. Something wrong with the
> impressions_by_day_insert_trigger() function!';
> END IF;
> RETURN NULL;
> END;
> $$
> LANGUAGE plpgsql;
>>
>> Saludos,
>>
>> */Ing. Esneiker Enriquez Cabrera/**
>> **Esp. B en Ciencias Informáticas*
>>
>> Desoft en Ciego de Ávila. Joaquín de Agueroesq. Calle 2. Ciego de
>> Ávila. Cuba.
>> *Telf.:* 53 33 22 8971, *email.:* eenriquez(at)cav(dot)desoft(dot)cu
>> <mailto:eenriquez(at)cav(dot)desoft(dot)cu>
>>
>>
>>
>> __________ Información de ESET NOD32 Antivirus, versión de la base de
>> firmas de virus 11193 (20150218) __________
>>
>> ESET NOD32 Antivirus ha comprobado este mensaje.
>>
>> http://www.eset.com
>
>
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Esneiker Enriquez Cabrera 2015-02-20 16:41:51 RE: [MASSMAIL]duda con particionado de tablas
Previous Message Marcos Ortiz 2015-02-20 15:55:13 Re: [MASSMAIL]duda con particionado de tablas