PostgreSQL memungkinkan partisi dalam dua cara berbeda. Satu berdasarkan rentang dan yang lainnya berdasarkan daftar. Keduanya menggunakan pewarisan tabel untuk melakukan partisi.
Mempartisi menurut rentang, biasanya rentang tanggal, adalah yang paling umum, tetapi mempartisi menurut daftar dapat berguna jika variabel yang merupakan partisi statis dan tidak miring.
Partisi dilakukan dengan pewarisan tabel sehingga hal pertama yang harus dilakukan adalah menyiapkan tabel anak baru.
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);
Kemudian aturan atau pemicu perlu digunakan untuk meletakkan data di tabel yang benar. Aturan lebih cepat pada pembaruan massal, pemicu pada pembaruan tunggal serta lebih mudah dikelola. Berikut adalah contoh pemicu.
CREATE TRIGGER insert_measurement_trigger
BEFORE INSERT ON measurement
FOR EACH ROW EXECUTE PROCEDURE measurement_insert_trigger();
dan fungsi trigger untuk melakukan insert
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;
Contoh-contoh ini adalah versi sederhana dari dokumentasi postgresql agar lebih mudah dibaca.
Saya tidak akrab dengan pgpool2, tetapi gridsql adalah produk komersial yang dirancang untuk EnterpriseDB, database komersial yang dibangun di atas postgresql. Produk mereka sangat bagus, tetapi menurut saya itu tidak akan berfungsi pada postgresl standar.