PostgreSQL permite la creación de particiones de dos maneras diferentes. Uno es por rango y el otro por lista. Ambos usan herencia de tabla para hacer partición.
El particionamiento por rango, generalmente un rango de fechas, es el más común, pero la partición por lista puede ser útil si las variables que son la partición son estáticas y no sesgadas.
El particionamiento se realiza con la herencia de la tabla, por lo que lo primero que debe hacer es configurar nuevas tablas secundarias.
CREATE TABLE measurement (
x int not null,
y date not null,
z int
);
CREATE TABLE measurement_y2006 (
CHECK (logdate >= DATE '2006-01-01' AND logdate < DATE '2007-01-01')
) INHERITS (measurement);
CREATE TABLE measurement_y2007 (
CHECK (logdate >= DATE '2007-01-01' AND logdate < DATE '2008-01-01')
) INHERITS (measurement);
A continuación, se deben utilizar reglas o desencadenantes para soltar los datos en las tablas correctas. Las reglas son más rápidas en las actualizaciones masivas, desencadenan actualizaciones únicas y son más fáciles de mantener. Aquí hay un disparador de muestra.
CREATE TRIGGER insert_measurement_trigger
BEFORE INSERT ON measurement
FOR EACH ROW EXECUTE PROCEDURE measurement_insert_trigger();
y la función de disparo para hacer el inserto
CREATE OR REPLACE FUNCTION measurement_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
IF (NEW.logdate >= DATE '2006-01-01'
AND NEW.logdate < DATE '2007-01-01') THEN
INSERT INTO measurement_y2006 VALUES (NEW.*);
ELSIF (NEW.logdate >= DATE '2007-01-01'
AND NEW.logdate < DATE '2008-01-01') THEN
INSERT INTO measurement_y2006m03 VALUES (NEW.*);
ELSE
RAISE EXCEPTION 'Date out of range.';
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
Estos ejemplos son versiones simplificadas de la documentación de PostgreSQL para facilitar la lectura.
No estoy familiarizado con pgpool2, pero gridsql es un producto comercial diseñado para EnterpriseDB, una base de datos comercial que se basa en postgresql. Sus productos son muy buenos, pero no creo que funcione en postgresl estándar.
Muy completo. +1. –
GridSQL es GPL y funciona en postgres estándar. – David