PostgreSQL दो अलग-अलग तरीकों से विभाजन की अनुमति देता है। एक सीमा के अनुसार है और दूसरा सूची के अनुसार है। दोनों विभाजन करने के लिए तालिका वंशानुक्रम का उपयोग करते हैं।
सीमा के आधार पर विभाजन, आमतौर पर एक तिथि सीमा, सबसे आम है, लेकिन सूची के आधार पर विभाजन उपयोगी हो सकता है यदि विभाजन वाले चर स्थिर हैं और तिरछे नहीं हैं।
विभाजन टेबल इनहेरिटेंस के साथ किया जाता है, इसलिए सबसे पहले नए चाइल्ड टेबल को सेट करना है।
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 एक व्यावसायिक उत्पाद है जिसे EnterpriseDB के लिए डिज़ाइन किया गया है, एक वाणिज्यिक डेटाबेस जो postgresql के शीर्ष पर बनाया गया है। उनके उत्पाद बहुत अच्छे हैं, लेकिन मुझे नहीं लगता कि यह मानक पोस्टग्रेज़ल पर काम करेगा।