Mr. Deepak Verma
Web Developer
PostgreSQL में Partitioning (पार्टिशनिंग)

Learn PostgreSQL by M-Learnify

PostgreSQL

PostgreSQL में Partitioning (पार्टिशनिंग)


PostgreSQL में Partitioning (पार्टिशनिंग)

पार्टिशनिंग क्या है?

PostgreSQL में Partitioning (पार्टिशनिंग) का अर्थ है किसी बड़ी टेबल को छोटे-छोटे भागों (sub-tables) में बाँटना ताकि डेटा को तेज़ी से खोजा और प्रबंधित किया जा सके।

उदाहरण के लिए यदि आपके पास sales नाम की टेबल है जिसमें कई वर्षों का डेटा है, तो आप उसे साल या महीने के अनुसार बाँट सकते हैं जैसे:

  • sales_2022
  • sales_2023
  • sales_2024
चेतावनी: पार्टिशनिंग करने से पहले यह तय करें कि डेटा किस कॉलम (जैसे तारीख़, क्षेत्र आदि) के आधार पर बाँटा जाएगा। गलत चयन से प्रदर्शन प्रभावित हो सकता है।

PostgreSQL में पार्टिशनिंग के प्रकार

1. Range Partitioning (रेंज आधारित)

डेटा को एक सीमा (Range) के आधार पर बाँटा जाता है, जैसे तारीख़ या संख्या के अनुसार।

CREATE TABLE sales (
    id SERIAL,
    sale_date DATE,
    amount NUMERIC
) PARTITION BY RANGE (sale_date);

CREATE TABLE sales_2023 PARTITION OF sales
    FOR VALUES FROM ('2023-01-01') TO ('2024-01-01');

CREATE TABLE sales_2024 PARTITION OF sales
    FOR VALUES FROM ('2024-01-01') TO ('2025-01-01');
⚠️ नोट: Range Partitioning तब सबसे उपयोगी होती है जब डेटा समय या किसी क्रमिक मान पर आधारित हो।

2. List Partitioning (सूची आधारित)

डेटा को कुछ निश्चित मानों (values) की सूची के अनुसार बाँटा जाता है।

CREATE TABLE customers (
    id SERIAL,
    region TEXT
) PARTITION BY LIST (region);

CREATE TABLE customers_north PARTITION OF customers
    FOR VALUES IN ('NORTH');

CREATE TABLE customers_south PARTITION OF customers
    FOR VALUES IN ('SOUTH');
⚠️ चेतावनी: बहुत सारी सूची मानों के साथ यह प्रकार जटिल हो सकता है।

3. Hash Partitioning (हैश आधारित)

जब रेंज या लिस्ट के अनुसार बाँटना संभव न हो, तब डेटा को बराबर हिस्सों में बाँटने के लिए हैश फ़ंक्शन का प्रयोग किया जाता है।

CREATE TABLE users (
    id INT,
    name TEXT
) PARTITION BY HASH (id);

CREATE TABLE users_p1 PARTITION OF users
    FOR VALUES WITH (MODULUS 4, REMAINDER 0);

CREATE TABLE users_p2 PARTITION OF users
    FOR VALUES WITH (MODULUS 4, REMAINDER 1);

Auto Monthly Partition Creation (वास्तविक SQL डेमो)

नीचे दिया गया स्क्रिप्ट PostgreSQL में एक sales टेबल बनाता है और अपने आप हर महीने के लिए partition बना देता है।

-- मुख्य टेबल बनाएं
CREATE TABLE sales (
    id SERIAL PRIMARY KEY,
    sale_date DATE NOT NULL,
    amount NUMERIC
) PARTITION BY RANGE (sale_date);

-- ऑटो पार्टिशन बनाने के लिए PL/pgSQL ब्लॉक
DO
$$
DECLARE
    i INT;
    start_date DATE := DATE '2025-01-01';
    end_date DATE;
BEGIN
    FOR i IN 1..12 LOOP  -- 12 महीने (1 साल) के लिए
        end_date := start_date + INTERVAL '1 month';
        EXECUTE format(
            'CREATE TABLE IF NOT EXISTS sales_%s PARTITION OF sales
             FOR VALUES FROM (%L) TO (%L);',
             to_char(start_date, 'YYYY_MM'),
             start_date,
             end_date
        );
        start_date := end_date;
    END LOOP;
END
$$;

इस स्क्रिप्ट के परिणामस्वरूप PostgreSQL 12 नई टेबल बनाएगा:

  • sales_2025_01
  • sales_2025_02
  • ...
  • sales_2025_12
⚠️ ध्यान दें: आप FOR i IN 1..12 को बदलकर 1..120 कर सकते हैं, जिससे 10 साल तक के पार्टिशन अपने आप बन जाएंगे।

पार्टिशनिंग के फायदे

  • क्वेरी की गति में सुधार
  • पुराना डेटा हटाना या आर्काइव करना आसान
  • इंडेक्स छोटे और तेज़ रहते हैं
  • Maintenance (VACUUM, ANALYZE) सरल होता है

ध्यान रखने योग्य बातें

⚠️ चेतावनी: बहुत अधिक पार्टिशन बना देने से PostgreSQL की performance धीमी हो सकती है। हर पार्टिशन के लिए अलग इंडेक्स और constraints संभालने की आवश्यकता होती है।
← Back to Courses
Course Lessons