postgresql
PL / pgSQL के साथ प्रोग्रामिंग
खोज…
टिप्पणियों
PL / pgSQL PostgreSQL की बिल्ट-इन प्रोग्रामिंग लैंग्वेज है जो उन फंक्शन्स को लिखने के लिए है जो डेटाबेस में ही चलते हैं, जिन्हें अन्य डेटाबेस में संग्रहित प्रक्रियाओं के रूप में जाना जाता है। यह SQL को छोरों, सशर्त और वापसी प्रकारों के साथ विस्तारित करता है। यद्यपि इसका सिंटैक्स कई डेवलपर्स के लिए अजीब हो सकता है, यह एप्लिकेशन सर्वर पर चलने वाली किसी भी चीज़ की तुलना में बहुत तेज़ है क्योंकि डेटाबेस से कनेक्ट करने का ओवरहेड समाप्त हो जाता है, जो विशेष रूप से उपयोगी है जब आपको अन्यथा किसी क्वेरी को निष्पादित करने की आवश्यकता होगी, तो परिणाम की प्रतीक्षा करें, और दूसरी क्वेरी सबमिट करें।
हालाँकि, PostgreSQL के लिए कई अन्य प्रक्रियात्मक भाषाएँ मौजूद हैं, जैसे PL / Python, PL / Perl, और PLV8, PL / pgSQL उन डेवलपर्स के लिए एक सामान्य शुरुआती बिंदु है जो अपना पहला PostgreSQL फ़ंक्शन लिखना चाहते हैं क्योंकि SQL पर उनका सिंटैक्स बनाता है। यह पीएल / एसक्यूएल, ओरेकल की मूल प्रक्रियात्मक भाषा के समान है, इसलिए पीएल / एसक्यूएल से परिचित किसी भी डेवलपर को भाषा परिचित होगी, और कोई भी डेवलपर जो भविष्य में ओरेकल अनुप्रयोगों को विकसित करने का इरादा रखता है, लेकिन एक मुफ्त डेटाबेस के साथ शुरू करना चाहता है। PL / pgSQL से PL / SQL सापेक्ष आसानी से।
इस बात पर जोर दिया जाना चाहिए कि अन्य प्रक्रियात्मक भाषाएं मौजूद हैं और PL / pgSQL उनके लिए आवश्यक नहीं है, जिसमें गति भी शामिल है, लेकिन PL / pgSQL में उदाहरण PostgreSQL फ़ंक्शन लिखने के लिए उपयोग की जाने वाली अन्य भाषाओं के लिए एक सामान्य संदर्भ बिंदु के रूप में काम कर सकते हैं। PL / pgSQL में सभी PLs के सबसे अधिक ट्यूटोरियल और किताबें हैं और कम प्रलेखन वाली भाषाओं को सीखने के लिए एक स्प्रिंगबोर्ड हो सकता है।
यहाँ PL / pgSQL पर कुछ मुफ्त गाइड और पुस्तकों के लिंक दिए गए हैं:
- आधिकारिक दस्तावेज: https://www.postgresql.org/docs/current/static/plpgsql.html
- w3resource.com ट्यूटोरियल: http://www.w3resource.com/PostgreSQL/pl-pgsql-tutorial.php
- postgres.cz ट्यूटोरियल: http://postgres.cz/wiki/PL/pgSQL_(en)
- PostgreSQL सर्वर प्रोग्रामिंग, दूसरा संस्करण: https://www.packtpub.com/big-data-and-business-intelligence/postgresql-server-programming-second-edition
- PostgreSQL डेवलपर की मार्गदर्शिका: https://www.packtpub.com/big-data-and-business-intelligence/postgresql-developers-guide
बेसिक PL / pgSQL फ़ंक्शन
एक साधारण PL / pgSQL फ़ंक्शन:
CREATE FUNCTION active_subscribers() RETURNS bigint AS $$
DECLARE
-- variable for the following BEGIN ... END block
subscribers integer;
BEGIN
-- SELECT must always be used with INTO
SELECT COUNT(user_id) INTO subscribers FROM users WHERE subscribed;
-- function result
RETURN subscribers;
EXCEPTION
-- return NULL if table "users" does not exist
WHEN undefined_table
THEN RETURN NULL;
END;
$$ LANGUAGE plpgsql;
यह सिर्फ एसक्यूएल स्टेटमेंट के साथ हासिल किया जा सकता था लेकिन एक फ़ंक्शन की मूल संरचना को दर्शाता है।
फ़ंक्शन को निष्पादित करने के लिए:
select active_subscribers();
PL / pgSQL सिंटैक्स
CREATE [OR REPLACE] FUNCTION functionName (someParameter 'parameterType')
RETURNS 'DATATYPE'
AS $_block_name_$
DECLARE
--declare something
BEGIN
--do something
--return something
END;
$_block_name_$
LANGUAGE plpgsql;
रिटर्न्स ब्लॉक
PL / pgSQL फ़ंक्शन में लौटने के लिए विकल्प:
कस्टम अपवाद
कस्टम अपवाद 'P2222' बनाना:
create or replace function s164() returns void as
$$
begin
raise exception using message = 'S 164', detail = 'D 164', hint = 'H 164', errcode = 'P2222';
end;
$$ language plpgsql
;
कस्टम अपवाद बनाने के लिए इरोम नहीं असाइन करना:
create or replace function s165() returns void as
$$
begin
raise exception '%','nothing specified';
end;
$$ language plpgsql
;
बुला:
t=# do
$$
declare
_t text;
begin
perform s165();
exception when SQLSTATE 'P0001' then raise info '%','state P0001 caught: '||SQLERRM;
perform s164();
end;
$$
;
INFO: state P0001 caught: nothing specified
ERROR: S 164
DETAIL: D 164
HINT: H 164
CONTEXT: SQL statement "SELECT s164()"
PL/pgSQL function inline_code_block line 7 at PERFORM
यहां कस्टम P0001 संसाधित है, और P2222, निष्पादन को निरस्त नहीं कर रहा है।
इसके अलावा, अपवादों की तालिका रखने के लिए यह बहुत बड़ा अर्थ रखता है, जैसे यहाँ: http://stackoverflow.com/a/2700312/5315374