PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

quel est un bon moyen de fragmenter horizontalement dans postgresql

PostgreSQL permet le partitionnement de deux manières différentes. L'un est par gamme et l'autre par liste. Les deux utilisent l'héritage de table pour effectuer la partition.
Le partitionnement par plage, généralement une plage de dates, est le plus courant, mais le partitionnement par liste peut être utile si les variables qui constituent la partition sont statiques et non biaisées.

Le partitionnement est effectué avec l'héritage de table, la première chose à faire est donc de configurer de nouvelles tables enfants.

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);

Ensuite, des règles ou des déclencheurs doivent être utilisés pour déposer les données dans les tables appropriées. Les règles sont plus rapides sur les mises à jour en masse, les déclencheurs sur les mises à jour uniques et sont plus faciles à gérer. Voici un exemple de déclencheur.

CREATE TRIGGER insert_measurement_trigger
    BEFORE INSERT ON measurement
    FOR EACH ROW EXECUTE PROCEDURE measurement_insert_trigger();

et la fonction de déclenchement pour faire l'insertion

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;

Ces exemples sont des versions simplifiées de la documentation postgresql pour une lecture plus facile.

Je ne connais pas pgpool2, mais gridsql est un produit commercial conçu pour EnterpriseDB, une base de données commerciale construite sur postgresql. Leurs produits sont très bons, mais je ne pense pas que cela fonctionnera sur postgresl standard.