PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

क्या PostgreSQL में PL/pgSQL और SQL दोनों ही SQL/PSM मानक के समान स्तर पर हैं, बजाय केवल SQL मानक के?

शब्दावली साफ़ करने के लिए:

SQL एक क्वेरी है एक रिलेशनल डेटाबेस में डेटा को चुनने, अपडेट करने, हटाने या बनाने के लिए उपयोग की जाने वाली भाषा। इसमें कोई प्रक्रियात्मक तत्व नहीं है। लूप की तरह (FOR , WHILE ) या सशर्त बयान (IF , ELSE ) या चर या कर्सर।

CREATE FUNCTION वास्तव में एक "एसक्यूएल स्टेटमेंट" है, लेकिन कोड के एक ब्लॉक को निर्दिष्ट करने के लिए केवल एक "रैपर" है जिसे एसक्यूएल क्वेरी "इंजन" से अलग कुछ द्वारा निष्पादित किया जाता है। Postgres (अन्य DBMS के विपरीत) कई "रनटाइम इंजन" का समर्थन करता है जो कोड के ब्लॉक को निष्पादित कर सकते हैं जो "CREATE FUNCTION" स्टेटमेंट को पास किया गया था - इसका एक आर्टिफैक्ट यह है कि कोड वास्तव में एक स्ट्रिंग है इसलिए CREATE FUNCTION कोड> केवल एक स्ट्रिंग देखता है, और कुछ नहीं।

चूंकि SQL में कोई प्रक्रियात्मक तत्व नहीं हैं, इसलिए आप प्रक्रियात्मक कोड और SQL कोड को नहीं मिला सकते हैं। यदि आप प्रक्रियात्मक कोड चलाना चाहते हैं तो आपको सर्वर को यह बताना होगा कि आप किसी तरह "इंजन" स्विच कर रहे हैं। यह (एसक्यूएल) DO . के माध्यम से किया जाता है कमांड जो फिर से एक स्ट्रिंग लेता है कि यह नहीं जानता कि क्या करना है, इसे सर्वर पर भेजता है और कहता है "यहां कोड का एक टुकड़ा है जहां उपयोगकर्ता ने दावा किया है कि इंजन 'xyz' निष्पादित कर सकता है" - xyz या तो पीएल/पीजीएसक्यूएल, पायथन, पर्ल या कुछ पूरी तरह से अलग है।

यह Oracle में एक अनाम PL/SQL ब्लॉक के समान है जिसे आप DECLARE . से शुरू करते हैं - उसके बाद सब कुछ सर्वर पर एक अलग रनटाइम इंजन द्वारा निष्पादित किया जाता है। MySQL में ऐसी कोई सुविधा नहीं है। प्रक्रियात्मक कोड चलाने का एकमात्र तरीका एक प्रक्रिया (या फ़ंक्शन) बनाना है, फिर उसे चलाएं। इसलिए DO . जैसी कोई चीज़ नहीं है MySQL में।

एकमात्र डीबीएमएस उत्पाद जो प्रक्रियात्मक कोड और "सादा एसक्यूएल" के बीच स्पष्ट रूप से अंतर नहीं करता है वह एसक्यूएल सर्वर है:टी-एसक्यूएल एसक्यूएल भाषा का विस्तार है जो आपको बैकएंड को बताए बिना "नियमित एसक्यूएल" और प्रक्रियात्मक एसक्यूएल को मिश्रण करने की अनुमति देता है कि कोड चलाने के लिए एक अलग इंजन की आवश्यकता होती है (जो SQL सर्वर से Postgres या Oracle में माइग्रेट करने वाले लोगों के लिए बहुत भ्रम का स्रोत है)।

SQL/PSM एक मानक है जो प्रक्रियात्मक तत्वों को परिभाषित करता है जिसे डेटाबेस इंजन में एम्बेड किया जा सकता है जो SQL को अपनी क्वेरी भाषा के रूप में उपयोग करता है। मुझे कोई डीबीएमएस उत्पाद नहीं पता है जो वास्तव में एसक्यूएल/पीएसएम लागू करता है। पोस्टग्रेज़ 'पीएल/पीजीएसक्यूएल, ओरेकल की पीएल/एसक्यूएल, माईएसक्यूएल की प्रक्रियात्मक बोली कुछ हद तक समान है, लेकिन एसक्यूएल/पीएसएम मानक के अनुरूप होने से बहुत दूर है। मुझे लगता है कि SQL/PSM मानक के सबसे निकट DB2 है और शायद HSQLDB

यह सच है। लेकिन फिर, नहीं डीबीएमएस पूरी तरह से एसक्यूएल मानक को लागू करता है - लेकिन पोस्टग्रेज का कार्यान्वयन शायद मानक के सबसे करीब है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या डेटा प्रकार NUMERIC स्टोर हस्ताक्षरित मानों को पोस्टग्रेज़ कर सकता है?

  2. PostgreSQL कनेक्ट नहीं हो सकता:सेवा परिभाषा नहीं मिली

  3. SQLException:यह परिणामसेट बंद है

  4. एकाधिक भाषाओं में पाठ संग्रहीत करने के लिए डेटाबेस स्कीमा कैसे डिज़ाइन करें?

  5. अवैध निर्देश:4 Django चलाते समय