PostgreSQL umožňuje rozdělení dvěma různými způsoby. Jeden je podle rozsahu a druhý podle seznamu. Oba používají k rozdělení tabulky dědičnost.
Rozdělení podle rozsahu, obvykle časového rozsahu, je nejběžnější, ale rozdělení podle seznamu může být užitečné, pokud jsou proměnné, které tvoří oddíl, statické a nejsou zkreslené.
Rozdělení se provádí pomocí dědičnosti tabulek, takže první věcí, kterou musíte udělat, je nastavit nové podřízené tabulky.
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);
Poté je třeba použít pravidla nebo spouštěče k umístění dat do správných tabulek. Pravidla jsou rychlejší při hromadných aktualizacích, spouštěče při jednotlivých aktualizacích a také se snadněji udržují. Zde je ukázkový spouštěč.
CREATE TRIGGER insert_measurement_trigger
BEFORE INSERT ON measurement
FOR EACH ROW EXECUTE PROCEDURE measurement_insert_trigger();
a spouštěcí funkce pro vložení
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;
Tyto příklady jsou zjednodušené verze dokumentace postgresql pro snadnější čtení.
Neznám pgpool2, ale gridsql je komerční produkt určený pro EnterpriseDB, komerční databázi, která je postavena na postgresql. Jejich produkty jsou velmi dobré, ale nemyslím si, že to bude fungovat na standardním postgreslu.