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 --
-------------------------------------------
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!