Re: [MASSMAIL]duda con particionado de tablas

From: Anthony Sotolongo <asotolongo(at)gmail(dot)com>
To: 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 18:11:26
Message-ID: 54E778CE.1060704@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola nuevamente, creo que debes rectificar algo, pues hice un ejemplo
similar al tuyo y funciona como espero, lo pongo a continuación:

3 tablas (numero[padre], impar, par [hijas])
CREATE TABLE numeros
(
a integer
);

CREATE TABLE impar
(
-- Inherited from table numeros: a integer
)
INHERITS (numeros);

CREATE TABLE par
(
-- Inherited from table numeros: a integer
)
INHERITS (numeros);

-- Rule: desvioimpar ON numeros

CREATE OR REPLACE RULE desvioimpar AS
ON INSERT TO numeros
WHERE (new.a % 2) = 1 DO INSTEAD INSERT INTO impar (a)
VALUES (new.a);

-- DROP RULE desviopar ON numeros;

CREATE OR REPLACE RULE desviopar AS
ON INSERT TO numeros
WHERE (new.a % 2) = 0 DO INSTEAD INSERT INTO par (a)
VALUES (new.a);

luego ejecuto

insert into numeros(a) values (1),(2)

select * from only numeros
(retorna vacío)

y en las hijas están los datos.

select * from par
2
select * from impar
1

saludos

On 20/02/15 14:31, Esneiker Enriquez Cabrera wrote:
>
> Lo consulté y me muestra datos.
>
> Saludos,
>
> */Ing. Esneiker Enriquez Cabrera/**
> **Esp. B en Ciencias Informáticas*
>
> Desoft en Ciego de Ávila. Joaquín de Aguero esq. 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>
>
> *De:*Anthony Sotolongo [mailto:asotolongo(at)gmail(dot)com]
> *Enviado el:* viernes, 20 de febrero de 2015 12:26
> *Para:* Esneiker Enriquez Cabrera; 'POSTGRES'
> *Asunto:* Re: [MASSMAIL][pgsql-es-ayuda] duda con particionado de tablas
>
> Consultaste eso que te comenté?
> select * from only historico_master.estudiante
>
>
>
> saludos
>
> On 20/02/15 13:41, Esneiker Enriquez Cabrera wrote:
>
> Las reglas están definidas de la forma:
>
> CREATE OR REPLACE RULE estudiante_2015_insert_rule AS
>
> ON INSERT TO historico_master.estudiante
>
> WHERE new.anno = 2015 DO INSTEAD INSERT INTO
> historico_2015.estudiante_2015 (id, nombre, anno)
>
> VALUES (new.id, new.nombre, new.anno);
>
> CREATE OR REPLACE RULE estudiante_2016_insert_rule AS
>
> ON INSERT TO historico_master.estudiante
>
> WHERE new.anno = 2016 DO INSTEAD INSERT INTO
> historico_2016.estudiante_2016 (id, nombre, anno)
>
> VALUES (new.id, new.nombre, new.anno);
>
> Saludos,
>
> */Ing. Esneiker Enriquez Cabrera/**
> **Esp. B en Ciencias Informáticas*
>
> Desoft en Ciego de Ávila. Joaquín de Aguero esq. 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>
>
> *De:*pgsql-es-ayuda-owner(at)postgresql(dot)org
> <mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org>
> [mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] *En nombre de
> *Anthony Sotolongo
> *Enviado el:* viernes, 20 de febrero de 2015 11:33
> *Para:* Marcos Ortiz; Esneiker Enriquez Cabrera; 'POSTGRES'
> *Asunto:* Re: [MASSMAIL][pgsql-es-ayuda] duda con particionado de
> tablas
>
> 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 Aguero esq. 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
>
>
>
>
>
>
>
> __________ 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
>
>
>
> __________ 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
>
>
>
>
> __________ 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
>
>
>
> __________ 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

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Anthony Sotolongo 2015-02-22 03:24:04 Re: [pgsql-es-ayuda] Utilidad o herramienta para estimación de crecimiento de bases de datos
Previous Message Esneiker Enriquez Cabrera 2015-02-20 17:31:43 RE: [MASSMAIL]duda con particionado de tablas