जावास्क्रिप्ट एसडीके के साथ अपने डेटाबेस को क्वेरी करें
aura.db का रोजमर्रा का प्रवाह, असुरक्षित कॉल को अस्वीकार करने वाले नियम, और पंक्ति-स्तरीय सुरक्षा के साथ तालिका की सुरक्षा कैसे करें।
1. पंक्तियाँ पढ़ें
aura.from('todos') aura.db.from('todos') का शॉर्टकट है। प्रत्येक कॉल { data, error } लौटाती है और कभी फेंकती नहीं है, क्लाइंट विकल्प और त्रुटियां देखें।
फ़िल्टर श्रृंखला: eq, neq, gt, gte, lt, lte, like, ilike, in, is, और डेटाबेस संदर्भ में सूचीबद्ध अन्य। पंक्तियों के एक पृष्ठ के लिए, range(from, to) का उपयोग करें।
2. डालें, अद्यतन करें और हटाएँ
दो नियम आपको गलतियों से बचाते हैं:
- एक बैच इंसर्ट के लिए प्रत्येक पंक्ति में समान कुंजियों की आवश्यकता होती है। विभिन्न कुंजियों वाली पंक्तियाँ
All object keys must matchके साथ400लौटाती हैं। लुप्त कुंजियों कोnullसे भरें। - बिना फ़िल्टर वाले
update()औरdelete()को किसी भी अनुरोध को भेजने से पहले त्रुटि कोडunfiltered_mutationके साथ क्लाइंट द्वारा अस्वीकार कर दिया जाता है। प्रत्येक पंक्ति को जानबूझकर बदलने के लिए, सर्वर से SQL चलाएँ।
3. एक पंक्ति, अनेक पंक्तियाँ, मायने रखती हैं
count: 'exact' प्रत्येक मिलान पंक्ति को गिनता है। 'planned' और 'estimated' बहुत बड़ी तालिकाओं पर तेज़ और अनुमानित हैं।
4. एक मेज को सुरक्षित रखें
नई टेबल पर पंक्ति-स्तरीय सुरक्षा बंद है. सार्वजनिक कुंजी से कोई भी इसे पढ़ और लिख सकता है। इसे सक्षम करें, फिर अपनी आवश्यक नीतियां जोड़ें:
डेटाबेस भूमिकाएँ aura_anon, aura_authenticated और aura_service_role हैं। auth.uid() सार्वजनिक कुंजी के लिए NULL है और साइन-इन उपयोगकर्ता के लिए एक उपयोगकर्ता आईडी है। पंक्ति-स्तरीय सुरक्षा देखें।
service_role कुंजी डिज़ाइन द्वारा RLS को बायपास करती है: इसे अपने सर्वर पर रखें।
5. एसक्यूएल फ़ंक्शन और आरपीसी
किसी सर्वर से एक फ़ंक्शन बनाएं, फिर उसे rpc() से कहीं से भी कॉल करें:
- इसे कॉल करने के लिए
grant_execute_toआवश्यक है। इसके बिना कोई भी फ़ंक्शन निष्पादित नहीं कर सकता। जो भूमिका सूचीबद्ध नहीं है उसे403 permission denied for functionमिलता है।authenticatedऔरaura_authenticatedदोनों स्वीकार किए जाते हैं। - एक नया फ़ंक्शन कुछ सेकंड के बाद कॉल करने योग्य होता है। जब तक एपीआई अपनी स्कीमा को पुनः लोड नहीं करता,
rpc()404 Could not find the functionलौटाता है। - कच्चे SQL (
CREATE FUNCTION) के साथ फ़ंक्शन बनाने से इनकार कर दिया गया है:createFunctionका उपयोग करें।
6. सर्वर से SQL चलाएँ
db.sql() को service_role कुंजी की आवश्यकता है। यह WHERE के बिना DELETE को अस्वीकार कर देता है, और यह pg_class या pg_roles जैसे सिस्टम कैटलॉग को नहीं पढ़ता है। अपनी तालिकाओं को सूचीबद्ध करने के लिए, admin.db.schema() का उपयोग करें।