sql >> Databáze >  >> RDS >> PostgreSQL

jaký je dobrý způsob horizontálního úlomku v postgresql

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.




  1. Chyba dotazování KGXGN (15)

  2. Oprava „ERROR 1054 (42S22):Neznámý sloupec „…“ v „klauzuli objednávky“ při použití UNION v MySQL

  3. Rychlé nalezení podobných řetězců pomocí PostgreSQL

  4. Jak PostgreSQL vynucuje omezení UNIQUE / jaký typ indexu používá?