Log in to leave a comment
No posts yet
PostgreSQL अब केवल एक साधारण डेटा स्टोर से कहीं आगे निकल गया है। यह कोई संयोग नहीं है कि 2025 के स्टैक ओवरफ्लो सर्वे में इसने MySQL को 15% अंकों के अंतर से पछाड़कर पहला स्थान हासिल किया है। इस शक्तिशाली DB के ऊपर PostgREST का उपयोग करके, आपको Node.js या Python के साथ उबाऊ CRUD API लिखने की ज़रूरत नहीं है। हालांकि, जब भुगतान एकीकरण (payment integration) या जटिल अनुमति सेटिंग्स की बात आती है, तो हर कोई हिचकिचाता है। ऐसा इसलिए है क्योंकि मन में सवाल उठता है, "क्या यह वास्तव में बिना सर्वर के संभव होगा?" निष्कर्ष यह है कि हाँ, यह संभव है। और वह भी बहुत शानदार तरीके से।
PostgREST का उपयोग करते समय सबसे बड़ी चिंता भुगतान स्वीकृति या ईमेल भेजने जैसे बाहरी HTTP कॉल की होती है। DB के अंदर बाहरी सर्वर का इंतज़ार करना एक भयानक विचार है। लेकिन यदि आप pg_net एक्सटेंशन मॉड्यूल का उपयोग करते हैं, तो कहानी बदल जाती है। libcurl पर आधारित यह टूल बाहरी API प्रतिक्रिया की प्रतीक्षा किए बिना एसिंक्रोनस (asynchronously) रूप से अनुरोध भेजता है।
Toss Payments जैसे भुगतान API को एकीकृत करते समय यह तरीका बहुत कारगर होता है। मुख्य ट्रांजेक्शन केवल डेटा को सहेजता है और तुरंत समाप्त हो जाता है। वास्तविक API कॉल बैकग्राउंड क्यू (queue) में प्रोसेस होती है। इस तरह, आप बाहरी सर्वर की स्थिति की परवाह किए बिना API प्रतिक्रिया समय को 200ms से कम रख सकते हैं। जब आप सिस्टम के कुल थ्रूपुट को 3 गुना से अधिक बढ़ते हुए देखेंगे, तो आप सोचेंगे कि अब तक API सर्वर में इतनी मेहनत क्यों की।
इन्वेंट्री की जाँच करने और ऑर्डर प्रोसेस करने जैसे जटिल लॉजिक को आमतौर पर बैकएंड कोड में if-else कथनों के साथ हल किया जाता है। लेकिन यह डेटा दूषण (data corruption) की शुरुआत है। इसके बजाय, pg_jsonschema का उपयोग करके देखें। Rust में लिखा गया यह एक्सटेंशन 48ms में 100,000 JSON पैटर्न मिलान को पूरा कर सकता है।
तरीका स्पष्ट है। टेबल पर CHECK बाधाएं लगाएं या BEFORE INSERT ट्रिगर बनाएं। यदि शर्तें पूरी नहीं होती हैं, तो RAISE EXCEPTION के साथ एरर थ्रो करें। इस समय, यदि आप SQLSTATE को PT402 के रूप में निर्दिष्ट करते हैं, तो PostgREST स्वचालित रूप से क्लाइंट को 402 Payment Required कोड भेज देगा। बैकएंड में सत्यापन कोड लिखने में बर्बाद होने वाले 5 घंटों को बचाएं और उन्हें अधिक महत्वपूर्ण डेटा मॉडलिंग में लगाएं।
PostgREST में क्लाइंट के URL पैरामीटर सीधे क्वेरी बन जाते हैं। यह सुविधाजनक है लेकिन खतरनाक भी। यदि आप बिना इंडेक्स वाले कॉलम पर फ़िल्टर लगाते हैं, तो प्रदर्शन की समस्या (performance hell) शुरू हो जाती है। ऐसे में pg_stat_statements अनिवार्य है। यह वास्तविक समय में दिखाता है कि कौन सी क्वेरी संसाधनों की खपत कर रही है।
वास्तव में, EXPLAIN (ANALYZE, BUFFERS) कमांड के साथ निष्पादन योजना (execution plan) का विश्लेषण करने और अनुक्रमिक स्कैन (sequential scan) को इंडेक्स स्कैन में बदलने मात्र से प्रदर्शन में 3 गुना से अधिक सुधार हो सकता है। क्लाउड लागत में 30% की कमी एक अतिरिक्त लाभ है। यदि जटिल गणनाओं की आवश्यकता है, तो PostgreSQL 18 के वर्चुअल जेनरेटेड कॉलम पर इंडेक्स लगाना भी एक अच्छा तरीका है।
सुरक्षा के लिए बैकएंड में बहुत सारे मिडलवेयर जोड़ना बंद करें। PostgREST PostgreSQL की पंक्ति-स्तरीय सुरक्षा (RLS) का 100% लाभ उठाता है। JWT में निहित उपयोगकर्ता जानकारी को current_setting फ़ंक्शन के माध्यम से पढ़ा जाता है और SQL स्तर पर अनुमतियों को नियंत्रित किया जाता है।
"केवल सशुल्क सदस्य ही इस पोस्ट को देख सकें" जैसी नीति के लिए केवल एक CREATE POLICY कथन पर्याप्त है। यह इस तरह की दुर्घटनाओं को रोकता है जहाँ एक डेवलपर कोड में अनुमति जाँच फ़ंक्शन को कॉल करना भूल जाता है और डेटा लीक हो जाता है। पासवर्ड बदलने जैसे संवेदनशील कार्यों के लिए, उन्हें SECURITY DEFINER विकल्प वाले फ़ंक्शन के साथ एनकैप्सुलेट (encapsulate) करना ही काफी है। सुरक्षा लॉजिक DB में केंद्रित होने के कारण प्रबंधन बहुत आसान हो जाता है।
PostgREST आर्किटेक्चर में स्कीमा परिवर्तन का अर्थ API अपडेट है। यदि इसे मैन्युअल रूप से किया जाता है, तो दुर्घटनाएं होना तय है। आपको dbmate जैसे टूल का उपयोग करके सभी परिवर्तनों को .sql फ़ाइलों के रूप में प्रबंधित करना चाहिए।
GitHub Actions में पाइपलाइन सेट करने पर, हर बार कोड पुश करने पर यह स्वचालित रूप से स्टेजिंग सर्वर पर प्रतिबिंबित हो जाएगा। माइग्रेशन पूरा होने के बाद, PostgREST को SIGUSR1 सिग्नल भेजें या NOTIFY pgrst, 'reload schema' चलाएं। बिना किसी डाउनटाइम के API नवीनतम स्थिति में अपडेट हो जाएगा। यह एक एकल डेवलपर के लिए भी एंटरप्राइज-ग्रेड परिचालन स्थिरता प्राप्त करने का सबसे निश्चित तरीका है।