PostgreSQLでは、2つの異なる方法でパーティショニングが可能です。 1つは範囲によるもので、もう1つはリストによるものです。どちらもテーブルの継承を使用してパーティションを作成します。
範囲によるパーティション化(通常は日付範囲)が最も一般的ですが、パーティションである変数が静的でスキューされていない場合は、リストによるパーティション化が役立ちます。
パーティショニングはテーブル継承で行われるため、最初に行うことは新しい子テーブルを設定することです。
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は、postgresqlの上に構築された商用データベースであるEnterpriseDB用に設計された商用製品です。彼らの製品は非常に優れていますが、標準的なpostgreslでは機能しないと思います。