Re: particionamiento horizontal postgresql

Lists: pgsql-es-ayuda
From: "Ing(dot) Marcos L(dot) Ortiz Valmaseda" <mlortiz(at)uci(dot)cu>
To: jairo vides <jairoeduardov(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: particionamiento horizontal postgresql
Date: 2010-01-19 12:02:29
Message-ID: 4B559F55.8000502@uci.cu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El 19/01/2010 15:42, jairo vides escribió:
> Estoy diseñando una base de datos y quiero implementarla en postgresql
> mi pregunta es:
> Alguien ha utilizado el concepto de particionamiento horizontal en
> postgresql? y como podria implementarlo?
> Intenten pero me dio problemas en el las tablas que estaban
> relacionadas con las que estaban particionadas.
>
>
> Jairo Vides.
> EL futuro incierto ahora es presente gracias a la fe y la esperanza.
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (GNU/Linux)
>
> iEYEABECAAYFAkpbysEACgkQoDfr0iXJqDW1eQCgmr/u5p4m51x6E27uiauUtrwh
> 2mEAoLSDqCGdai6S7bqgY6lWKzABqTDT
> =KlzE
> -----END PGP SIGNATURE-----
> --
> TIP 1: para suscribirte y desuscribirte, visita http://archives.postgresql.org/pgsql-es-ayuda
>
Hay varias opciones para ello:
PostgreSQL Partitioning Docs
http://www.postgresql.org/docs/8.3/interactive/ddl-partitioning.html
PostgreSQL Tablespaces Docs
http://www.postgresql.org/docs/8.3/interactive/manage-ag-tablespaces.html
Con PL/Proxy se puede lograr esto también:
https://developer.skype.com/SkypeGarage/DbProjects/PlProxy
http://kaiv.wordpress.com/2007/07/27/postgresql-cluster-partitioning-with-plproxy-part-i/
http://kaiv.wordpress.com/2007/07/27/postgresql-cluster-partitioning-with-plproxy-part-ii/

También se puede consultar la presentación de Edwin Grubbs
(edwin(at)grubbs(dot)org); en en link: http://mysql.meetup.com/284/

Ejemplo de Edwin:
1.Create a master table from which all the child tables will inherit.

CREATE TABLE shipment (
id SERIAL PRIMARY KEY,
address TEXT NOT NULL,
shipping_date TIMESTAMP NOT NULL);

2.Create child tables to serve as each partition of the master table using
table constraints to define the allowed key values in each partition.

CREATE TABLE shipment_part_2008 (
CHECK (shipping_date >= DATE '2008-01-01'
AND shipping_date < DATE '2009-01-01')
) INHERITS (shipment);
CREATE TABLE shipment_part_pre2008 (
CHECK (shipping_date < DATE '2008-01-01')
) INHERITS (shipment);

3.Create an index on the key column(s) for each partition.
CREATE INDEX shipping_date_2008 ON shipment_part_2008 (shipping_date);
CREATE INDEX shipping_date_pre2008 ON shipment_part_pre2008 (shipping_date);

4.Ensure that the constraint exclusion configuration parameter is enabled in
postgresql.conf so that queries will be optimized for partitioning (child
tables will not be searched for values they can't contain).
constraint_exclusion = on

5. Optionally, define a trigger or rule to redirect data inserted into
the master table
to the appropriate partition. An update trigger is not necessary.

CREATE OR REPLACE FUNCTION shipment_insert()
RETURNS TRIGGER AS $$
BEGIN
IF (NEW.shipping_date >= DATE '2008-01-01'
AND NEW.shipping_date < DATE '2009-01-01') THEN
INSERT INTO shipment_part_2008 VALUES (NEW.*);
ELSIF (NEW.shipping_date < DATE '2008-01-01') THEN
INSERT INTO shipment_part_pre2008 VALUES (NEW.*);
ELSE
RAISE EXCEPTION 'Date out of range. Fix the shipment_insert()
function!';
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
CREATE TRIGGER shipment_insert_trigger
BEFORE INSERT ON shipment
FOR EACH ROW EXECUTE PROCEDURE shipment_insert();

INSERT INTO shipment (address, shipping_date) VALUES ('Alaska',
'2008-08-08');
INSERT INTO shipment (address, shipping_date) VALUES ('Texas',
'2007-07-07');
UPDATE shipment SET address = 'Dakota' WHERE address = 'Alaska';
SELECT * FROM ONLY shipment;
id | address | shipping_date
----+---------+---------------
(0 rows)
SELECT * FROM shipment;
id | address | shipping_date
----+---------+---------------------
1 | Dakota | 2008-08-08 00:00:00
2 | Texas | 2007-07-07 00:00:00
(2 rows)
SELECT * FROM shipment_part_2008;
id | address | shipping_date
----+---------+---------------------
1 | Dakota | 2008-08-08 00:00:00
(1 row)
SELECT * FROM shipment_part_pre2008;
id | address | shipping_date
----+---------+---------------------
2 | Texas | 2007-07-07 00:00:00
(1 row)

Éste es un ejemplo muy básico.
Saludos y espero que les sirva algo

--
-------------------------------------
"TIP 4: No hagas 'kill -9' a postmaster"
Ing. Marcos Luís Ortíz Valmaseda
PostgreSQL System DBA&& DWH -- BI Apprentice

Centro de Tecnologías de Almacenamiento y Análisis de Datos (CENTALAD)
Universidad de las Ciencias Informáticas

Linux User # 418229

-- PostgreSQL --

http://www.postgresql-es.org
http://www.postgresql.org
http://www.planetpostgresql.org

-- DWH + BI --

http://www.tdwi.org

-------------------------------------------


From: jairo vides <jairoeduardov(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: particionamiento horizontal postgresql
Date: 2010-01-19 14:42:28
Message-ID: d33468841001190642u6b2c7cd3m54aca450f5147d5@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Estoy diseñando una base de datos y quiero implementarla en postgresql
mi pregunta es:
Alguien ha utilizado el concepto de particionamiento horizontal en
postgresql? y como podria implementarlo?
Intenten pero me dio problemas en el las tablas que estaban
relacionadas con las que estaban particionadas.

Jairo Vides.
EL futuro incierto ahora es presente gracias a la fe y la esperanza.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEABECAAYFAkpbysEACgkQoDfr0iXJqDW1eQCgmr/u5p4m51x6E27uiauUtrwh
2mEAoLSDqCGdai6S7bqgY6lWKzABqTDT
=KlzE
-----END PGP SIGNATURE-----


From: Emanuel Calvo Franco <postgres(dot)arg(at)gmail(dot)com>
To: jairo vides <jairoeduardov(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: particionamiento horizontal postgresql
Date: 2010-01-19 14:49:23
Message-ID: f205bb121001190649j40cbd7e4q5ea4ba371ff2a857@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El día 19 de enero de 2010 11:42, jairo vides
<jairoeduardov(at)gmail(dot)com> escribió:
> Estoy diseñando una base de datos y quiero implementarla en postgresql
> mi pregunta es:
> Alguien ha utilizado el concepto de particionamiento horizontal en
> postgresql? y como podria implementarlo?
> Intenten pero me dio problemas en el las tablas que estaban
> relacionadas con las que estaban particionadas.
>
>

Aca tenés un documento introductorio
[http://desarrollos.siu.edu.ar/trac/postgresql/attachment/wiki/Documentos/Particionado%20de%20tablas.doc].
Perdón si esta en formato doc pero es como me lo piden por ahora. En
realidad estoy haciendo un Webminar sobre esto.

L mejor que encontré fue una presentación de Robert Treat en
[http://video.google.com/videoplay?docid=4507656824171092567&ei=EVFLS_nHCIm-qQKNi-CMCw&q=postgresql+partitioning&view=3#]

Enjoy 'em :)

--
Emanuel Calvo Franco
DBA at: www.siu.edu.ar
www.emanuelcalvofranco.com.ar
Join: http://www.thevenusproject.com/


From: Ronald <ronaldriveros(at)gmail(dot)com>
To: Emanuel Calvo Franco <postgres(dot)arg(at)gmail(dot)com>
Cc: jairo vides <jairoeduardov(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: particionamiento horizontal postgresql
Date: 2010-01-19 15:11:17
Message-ID: 396a69b91001190711p270b9557g97085f753d32c827@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Aca esta la documentacion oficial

http://www.postgresql.org/docs/current/static/ddl-partitioning.html

<http://www.postgresql.org/docs/current/static/ddl-partitioning.html>y por
si te sirve, tambien de mysql

http://dev.mysql.com/tech-resources/articles/performance-partitioning.html

2010/1/19 Emanuel Calvo Franco <postgres(dot)arg(at)gmail(dot)com>

> El día 19 de enero de 2010 11:42, jairo vides
> <jairoeduardov(at)gmail(dot)com> escribió:
> > Estoy diseñando una base de datos y quiero implementarla en postgresql
> > mi pregunta es:
> > Alguien ha utilizado el concepto de particionamiento horizontal en
> > postgresql? y como podria implementarlo?
> > Intenten pero me dio problemas en el las tablas que estaban
> > relacionadas con las que estaban particionadas.
> >
> >
>
> Aca tenés un documento introductorio
> [
> http://desarrollos.siu.edu.ar/trac/postgresql/attachment/wiki/Documentos/Particionado%20de%20tablas.doc
> ].
> Perdón si esta en formato doc pero es como me lo piden por ahora. En
> realidad estoy haciendo un Webminar sobre esto.
>
> L mejor que encontré fue una presentación de Robert Treat en
> [
> http://video.google.com/videoplay?docid=4507656824171092567&ei=EVFLS_nHCIm-qQKNi-CMCw&q=postgresql+partitioning&view=3#
> ]
>
> Enjoy 'em :)
>
>
>
> --
> Emanuel Calvo Franco
> DBA at: www.siu.edu.ar
> www.emanuelcalvofranco.com.ar
> Join: http://www.thevenusproject.com/
> --
> TIP 1: para suscribirte y desuscribirte, visita
> http://archives.postgresql.org/pgsql-es-ayuda
>


From: Gilberto Castillo Martínez <gilberto(dot)castillo(at)etecsa(dot)cu>
To: jairo vides <jairoeduardov(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: particionamiento horizontal postgresql
Date: 2010-01-19 15:12:24
Message-ID: 1263913944.14345.8.camel@gilbertoc.mtcorp.etecsa.cu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda


El mar, 19-01-2010 a las 08:42 -0600, jairo vides escribió:
> Estoy diseñando una base de datos y quiero implementarla en postgresql
> mi pregunta es:
> Alguien ha utilizado el concepto de particionamiento horizontal en
> postgresql? y como podria implementarlo?
> Intenten pero me dio problemas en el las tablas que estaban
> relacionadas con las que estaban particionadas.
Adjunto algo sobre el tema
--
Saludos,
Gilberto Castillo
Edificio Beijing. Miramar Trade Center. Etecsa.
Miramar, La Haban.Cuba.

Attachment Content-Type Size
particionado de tablas_usandoReglas.txt text/plain 8.1 KB

From: Jorge Jacques <jorge(at)eskalonnetwork(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Problema con funcion en version anterior de postgres
Date: 2010-01-19 18:23:43
Message-ID: 4B55F8AF.8030308@eskalonnetwork.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola, buenos dias

Tengo un problema al usar una funcion que desarrolle para una base de
datos, corriendo en un Postgres 8.2.3. Estoy intentando usarla en un
Postgres 7.4.2 pero no he tenido exito.

Obtengo el error: ERROR: COLUMN REFPROB DOES NOT EXIST.

CREATE OR REPLACE FUNCTION "public"."inmo_desempeno_empeno_tri" ()
RETURNS trigger AS
$BODY$
DECLARE
refprob record;
BEGIN
IF TG_OP='UPDATE' THEN
SELECT INTO refprob id, empeno_id, fecha FROM
refrendos_prohibidos WHERE empeno_id = OLD.id AND fecha = CURRENT_DATE;
IF refprob IS NOT NULL THEN
DELETE FROM refrendos_prohibidos WHERE empeno_id = OLD.id
AND fecha = CURRENT_DATE;
RETURN NULL;
END IF;
END IF;
RETURN NEW;
END
$BODY$
LANGUAGE 'plpgsql'

Asumo que el problema esta en que el manejo de la variable tipo record
es diferente en la version 7.4.2 de Postgres. Alguna sugerencia??

GRACIAS DE ANTEMANO

Saluos!


From: Jorge Jacques <jorge(at)eskalonnetwork(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Problema con funcion en version anterior de postgres
Date: 2010-01-19 18:47:49
Message-ID: 4B55FE55.1090806@eskalonnetwork.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Jorge Jacques wrote:
> Hola, buenos dias
>
> Tengo un problema al usar una funcion que desarrolle para una base de
> datos, corriendo en un Postgres 8.2.3. Estoy intentando usarla en un
> Postgres 7.4.2 pero no he tenido exito.
>
> Obtengo el error: ERROR: COLUMN REFPROB DOES NOT EXIST.
>
> CREATE OR REPLACE FUNCTION "public"."inmo_desempeno_empeno_tri" ()
> RETURNS trigger AS
> $BODY$
> DECLARE
> refprob record;
> BEGIN
> IF TG_OP='UPDATE' THEN
> SELECT INTO refprob id, empeno_id, fecha FROM
> refrendos_prohibidos WHERE empeno_id = OLD.id AND fecha = CURRENT_DATE;
> IF refprob IS NOT NULL THEN
> DELETE FROM refrendos_prohibidos WHERE empeno_id = OLD.id
> AND fecha = CURRENT_DATE;
> RETURN NULL;
> END IF;
> END IF;
> RETURN NEW;
> END
> $BODY$
> LANGUAGE 'plpgsql'
>
>
> Asumo que el problema esta en que el manejo de la variable tipo record
> es diferente en la version 7.4.2 de Postgres. Alguna sugerencia??
>
> GRACIAS DE ANTEMANO
>
>
>
> Saluos!
> --
> TIP 7: no olvides aumentar la configuración del "free space map"
>
Hola

Curiosamente buscando un poco mas me encontre con la solucion. En
postgres 7.4 hay que cambiar la condicion:

refprob IS NOT NULL THEN

por

refprob.id IS NOT NULL THEN

Para omitir ese error, en este este enlace encontre la solucion:
http://bytes.com/topic/postgresql/answers/868014-pseudo-type-record-seen-column-older-postgresql-version

Gracias!
Saluos!