PostgreSQL constraints — table data पर नियमों — के माध्यम से data integrity लागू करता है। मानक constraints (, , , , , ) से परे, Postgres constraints और लचीली expressions जैसे शक्तिशाली विकल्प जोड़ता है।
PostgreSQL constraints — table data पर नियमों — के माध्यम से data integrity लागू करता है। मानक constraints (, , , , , ) से परे, Postgres constraints और लचीली expressions जैसे शक्तिशाली विकल्प जोड़ता है।
PRIMARY KEYFOREIGN KEYUNIQUENOT NULLCHECKDEFAULTCHECKCREATE TABLE bookings (
id SERIAL PRIMARY KEY, -- unique identifier
room_id INT NOT NULL REFERENCES rooms(id), -- foreign key (referential integrity)
email VARCHAR(255) UNIQUE NOT NULL, -- unique + required
guests INT CHECK (guests > 0 AND guests <= 10), -- value constraint
status TEXT DEFAULT 'pending' -- default value
);
PRIMARY KEY → unique row identifier
FOREIGN KEY → references another table (referential integrity, with ON DELETE options)
UNIQUE → no duplicate values
NOT NULL → must have a value
CHECK → value must satisfy a condition
DEFAULT → default value when not provided
CHECK (price > 0)
CHECK (end_date > start_date) -- logical consistency between columns
CHECK (status IN ('active', 'inactive', 'pending'))
CHECK (email ~ '^[^@]+@[^@]+\.[^@]+$') -- regex validation
Postgres CHECK constraints समृद्ध व्यावसायिक नियम लागू कर सकते हैं, जिनमें cross-column conditions और regex patterns शामिल हैं।
-- prevent OVERLAPPING bookings for the same room (impossible with UNIQUE alone!)
CREATE TABLE bookings (
room_id INT,
during TSRANGE, -- a time range
EXCLUDE USING GIST (room_id WITH =, during WITH &&) -- no two rows where room_id is
); -- equal AND time ranges OVERLAP
EXCLUDE constraints (एक Postgres-विशिष्ट feature) उन rows को रोकते हैं जो किसी custom operator द्वारा टकराती हैं — प्रसिद्ध रूप से, overlapping time ranges (double-bookings) को रोकना, जो एक UNIQUE constraint नहीं कर सकता।
-- check constraints at COMMIT instead of immediately (useful for circular references)
FOREIGN KEY (...) REFERENCES ... DEFERRABLE INITIALLY DEFERRED
Constraints data integrity के लिए आवश्यक हैं — वे database स्तर पर data नियम लागू करते हैं (रक्षा की अंतिम पंक्ति, जो application code की परवाह किए बिना हमेशा लागू होती है), इसलिए PostgreSQL के constraint समर्थन को समझना मजबूत databases डिज़ाइन करने के लिए महत्वपूर्ण है।
मानक constraints (PRIMARY KEY, referential integrity के साथ FOREIGN KEY, UNIQUE, NOT NULL, CHECK, DEFAULT) और प्रत्येक क्या लागू करता है, यह जानना schema design के लिए मौलिक है, जो database-स्तरीय गारंटी (uniqueness, valid references, required values, valid data) प्रदान करता है जो bugs, race conditions, और असंगत data से इस तरह सुरक्षा करता है जैसे केवल application code नहीं कर सकता।
PostgreSQL के CHECK constraints विशेष रूप से सक्षम हैं, जो cross-column conditions (तार्किक संगति जैसे end_date > start_date) और यहाँ तक कि regex patterns सहित समृद्ध व्यावसायिक नियम लागू करते हैं — जिससे आप domain नियमों को सीधे schema में encode कर सकते हैं।
विशेष रूप से मूल्यवान है Postgres-विशिष्ट EXCLUDE constraint, जो custom operators द्वारा टकराने वाली rows को रोकता है — सबसे विशेष रूप से overlapping time ranges को रोकना (किसी room/resource के लिए double-bookings), एक शक्तिशाली क्षमता जो एक मानक UNIQUE constraint प्रदान नहीं कर सकता और जो एक आम वास्तविक समस्या (scheduling, reservations) को database स्तर पर सुरुचिपूर्ण ढंग से हल करती है।
constraints को समझना — integrity के लिए मानक वाले, Postgres के लचीले CHECK expressions, और टकराव रोकथाम के लिए शक्तिशाली EXCLUDE — ऐसे databases डिज़ाइन करने के लिए महत्वपूर्ण है जो शुद्धता को स्वतः लागू करें।
चूँकि data integrity महत्वपूर्ण है और constraints ऐसी गारंटी प्रदान करते हैं जो application code नहीं कर सकता, और चूँकि Postgres बुनियादी चीज़ों से परे शक्तिशाली विकल्प (समृद्ध CHECK, overlaps के लिए EXCLUDE) प्रदान करता है, PostgreSQL के constraint समर्थन को समझना मजबूत databases बनाने के लिए मूल्यवान, व्यावहारिक रूप से प्रासंगिक ज्ञान है, जिसमें EXCLUDE constraint विशेष रूप से scheduling/reservation systems के लिए जानने योग्य एक विशिष्ट, उपयोगी Postgres क्षमता है।