PostgreSQL cho phép phân vùng theo hai cách khác nhau. Một là phạm vi và khác là theo danh sách. Cả hai sử dụng bảng kế thừa để làm phân vùng.
Phân vùng theo phạm vi, thường là phạm vi ngày, là phổ biến nhất, nhưng phân vùng theo danh sách có thể hữu ích nếu các biến là phân vùng tĩnh và không bị lệch.
Phân vùng được thực hiện với kế thừa bảng nên điều đầu tiên cần làm là thiết lập bảng con mới.
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);
Sau đó, quy tắc hoặc trình kích hoạt cần được sử dụng để xóa dữ liệu trong bảng chính xác. Quy tắc nhanh hơn về cập nhật hàng loạt, trình kích hoạt trên các bản cập nhật đơn lẻ cũng như dễ bảo trì hơn. Đây là trình kích hoạt mẫu.
CREATE TRIGGER insert_measurement_trigger
BEFORE INSERT ON measurement
FOR EACH ROW EXECUTE PROCEDURE measurement_insert_trigger();
và chức năng kích hoạt để làm các việc chèn
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;
Những ví dụ này là phiên bản đơn giản hóa của các tài liệu postgresql cho việc đọc dễ dàng hơn.
Tôi không quen thuộc với pgpool2, nhưng gridsql là một sản phẩm thương mại được thiết kế cho EnterpriseDB, một cơ sở dữ liệu thương mại được xây dựng trên đầu trang của postgresql. Sản phẩm của họ rất tốt, nhưng tôi không nghĩ rằng nó sẽ hoạt động trên postgresl tiêu chuẩn.
Rất kỹ lưỡng. +1. –
GridSQL là GPL và nó hoạt động theo tiêu chuẩn postgres. – David