PostgreSQL позволява разделяне по два различни начина. Единият е по диапазон, а другият е по списък. И двете използват наследяване на таблицата, за да направят дял.
Разделянето по диапазон, обикновено период от време, е най-често срещаното, но разделянето по списък може да бъде полезно, ако променливите, които представляват дяла, са статични и не са изкривени.
Разделянето се извършва с наследяване на таблици, така че първото нещо, което трябва да направите, е да настроите нови дъщерни таблици.
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);
След това трябва да се използват или правила, или тригери, за да се хвърлят данните в правилните таблици. Правилата са по-бързи при групови актуализации, задействат се при единични актуализации, както и по-лесни за поддръжка. Ето примерен тригер.
CREATE TRIGGER insert_measurement_trigger
BEFORE INSERT ON measurement
FOR EACH ROW EXECUTE PROCEDURE measurement_insert_trigger();
и функцията за задействане за вмъкване
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;
Тези примери са опростени версии на документацията на postgresql за по-лесно четене.
Не съм запознат с pgpool2, но gridsql е търговски продукт, предназначен за EnterpriseDB, търговска база данни, която е изградена върху postgresql. Продуктите им са много добри, но не мисля, че ще работи на стандартен postgresl.