जैसा कि आप PostgreSQL 10 तक के सभी संस्करणों में जानते होंगे, PostgreSQL में एक प्रक्रिया बनाना संभव नहीं था। PostgreSQL 11 में, PROCEDURE को एक नए स्कीमा ऑब्जेक्ट के रूप में जोड़ा गया था जो FUNCTION के समान ऑब्जेक्ट है, लेकिन बिना रिटर्न वैल्यू के।
वर्षों से कई लोग कार्यक्षमता के लिए उत्सुक थे और इसे अंततः PostgreSQL 11 में जोड़ा गया था। परंपरागत रूप से, PostgreSQL ने कार्यों को लिखने के लिए सभी साधन प्रदान किए हैं (जिन्हें संग्रहीत कार्यविधियाँ कहा जाता है) हालाँकि, एक फ़ंक्शन में आप लेनदेन नहीं चला सकते हैं। आप वास्तव में अपवादों का उपयोग कर सकते हैं, जो मूल रूप से बचत बिंदु हैं। एक फ़ंक्शन बॉडी के अंदर आप केवल एक लेन-देन नहीं कर सकते हैं या एक नया नहीं खोल सकते हैं। नई CREATE PROCEDURE वह सब बदल देगी और प्रक्रियात्मक कोड के अंदर लेनदेन चलाने के लिए एक कार्यक्षमता प्रदान करेगी।
संग्रहीत कार्यविधियों का उपयोग करने के लाभ
- लेन-देन नियंत्रण हमें प्रक्रियाओं के भीतर COMMIT और रोलबैक करने की अनुमति देता है।
- Oracle से PostgreSQL माइग्रेशन के लिए बहुत उपयोगी, नई प्रक्रिया कार्यक्षमता एक महत्वपूर्ण समय बचाने वाली हो सकती है।
- जैसा कि आप देख सकते हैं कि CREATE FUNCTION और CREATE PROCEDURE के बीच कुछ समानताएं हैं, इसलिए अधिकांश अंतिम उपयोगकर्ताओं के लिए चीजें वास्तव में आसान होनी चाहिए।
PostgreSQL में संग्रहित प्रक्रिया का उपयोग कैसे करें
PostgreSQL 11 में एक नई प्रक्रिया बनाने के लिए CREATE PROCEDURE का उपयोग करें, यह आपको अन्य डेटाबेस की तरह ही प्रक्रिया लिखने की अनुमति देगा। PROCEDURE लगभग बिना किसी रिटर्न वैल्यू के FUNCTION जैसा ही है। PostgreSQL 11 में CREATE PROCEDURE स्टेटमेंट के साथ PROCEDURE बनाया गया है। CREATE FUNCTION स्टेटमेंट के विपरीत, कोई रिटर्न क्लॉज, ROWS क्लॉज आदि नहीं हैं।
वाक्यविन्यास
postgres=# \h CREATE PROCEDURE
Command: CREATE PROCEDURE
Description: define a new procedure
Syntax:
CREATE [ OR REPLACE ] PROCEDURE
name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] )
{ LANGUAGE lang_name
| TRANSFORM { FOR TYPE type_name } [, ... ]
| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
| SET configuration_parameter { TO value | = value | FROM CURRENT }
| AS 'definition'
| AS 'obj_file', 'link_symbol'
} ...
उदाहरण
CREATE PROCEDURE procedure1(INOUT p1 TEXT)
AS $$
BEGIN
RAISE NOTICE 'Procedure Parameter: %', p1 ;
END ;
$$
LANGUAGE plpgsql ;
PostgreSQL में प्रक्रिया निष्पादित करें
PostgreSQL में PROCEDURE को निष्पादित करने के लिए, SELECT स्टेटमेंट के बजाय CALL स्टेटमेंट का उपयोग करें। यह प्रक्रिया और कार्य के बीच के अंतरों में से एक है।
postgres=# CALL procedure1 (' CREATE PROCEDURE functionality supported in PostgreSQL 11! ');
NOTICE: Procedure Parameter: CREATE PROCEDURE functionality supported in PostgreSQL 11!
p1
--------------------------------------------------------------
CREATE PROCEDURE functionality supported in PostgreSQL 11!
(1 row)
आप कॉल स्टेटमेंट में पैरामीटर नाम भी निर्दिष्ट कर सकते हैं। यह प्रक्रिया निष्पादित करने का एक और तरीका है।
postgres=# CALL procedure1 (p1=>'CREATE PROCEDURE functionality supported in PostgreSQL 11!');
NOTICE: Procedure Parameter: CREATE PROCEDURE functionality supported in PostgreSQL 11!
p1
------------------------------------------------------------
CREATE PROCEDURE functionality supported in PostgreSQL 11!
(1 row)
बनाई गई प्रक्रिया की प्रदर्शन सूची
आप बनाई गई प्रक्रिया की परिभाषा psql कमांड यानी '\ df' से देख सकते हैं। psql कमांड '\df' का उपयोग बनाए गए FUNCTION की परिभाषा को प्रदर्शित करने के लिए भी किया जाता है।
PROCEDURE टाइप कॉलम को "proc" के रूप में दिखाता है और यदि यह FUNCTION है तो टाइप कॉलम "func" में बदल गया।
कार्यों की नीचे दी गई सूची में, हमने एक PROCEDURE बनाया है ताकि टाइप कॉलम "proc" में बदल जाए।
postgres=# \df
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+------------+------------------+---------------------+------
public | procedure1 | | INOUT p1 text | proc
(1 row)
यहां, हम टाइप कॉलम की जांच के लिए एक FUNCTION बना सकते हैं।
CREATE FUNCTION function1(INOUT p1 TEXT)
AS $$
BEGIN
RAISE NOTICE 'Function Parameter: %', p1 ;
END ;
$$
LANGUAGE plpgsql ;
SELECT कमांड का उपयोग करके FUNCTION निष्पादित करें।
postgres=# SELECT function1('CREATE PROCEDURE functionality supported in PostgreSQL 11!');
NOTICE: Function Parameter: CREATE PROCEDURE functionality supported in PostgreSQL 11!
function1
------------------------------------------------------------
CREATE PROCEDURE functionality supported in PostgreSQL 11!
(1 row)
अब आप टाइप कॉलम को चेक कर सकते हैं और अंतर देख सकते हैं। FUNCTION function1 के लिए, टाइप कॉलम "func" में बदल गया। आप यहां एक और अंतर देख सकते हैं, PROCEDURE लगभग बिना किसी रिटर्न वैल्यू के FUNCTION जैसा ही है।
postgres=# \df
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+------------+------------------+---------------------+------
public | function1 | text | INOUT p1 text | func
public | procedure1 | | INOUT p1 text | proc
(2 rows)
PostgreSQL में प्रदर्शन प्रक्रिया परिभाषा
बनाई गई प्रक्रिया की परिभाषा प्रदर्शित करने के लिए '\sf' का प्रयोग करें।
postgres=# \sf procedure1
CREATE OR REPLACE PROCEDURE public.procedure1(INOUT p1 text)
LANGUAGE plpgsql
AS $procedure$
BEGIN
RAISE NOTICE 'Procedure Parameter: %', p1 ;
END ;
$procedure$
आज श्वेतपत्र डाउनलोड करें क्लस्टरकंट्रोल के साथ पोस्टग्रेएसक्यूएल प्रबंधन और स्वचालन इस बारे में जानें कि पोस्टग्रेएसक्यूएल को तैनात करने, मॉनिटर करने, प्रबंधित करने और स्केल करने के लिए आपको क्या जानना चाहिए। श्वेतपत्र डाउनलोड करें प्रक्रिया में लेन-देन नियंत्रण
लेन-देन नियंत्रण हमें प्रक्रियाओं के अंदर COMMIT और रोलबैक करने की अनुमति देता है। फ़ंक्शन बनाएं फ़ंक्शन के अंदर लेनदेन का समर्थन नहीं करता है। PostgreSQL में FUNCTION और PROCEDURE के बीच यही मुख्य अंतर है।
आइए एक सरल संग्रहित प्रक्रिया बनाएं जो लेनदेन को संभालती है।
CREATE OR REPLACE PROCEDURE transaction_test()
LANGUAGE plpgsql
AS $$
DECLARE
BEGIN
CREATE TABLE committed_table (id int);
INSERT INTO committed_table VALUES (1);
COMMIT;
CREATE TABLE rollback_table (id int);
INSERT INTO rollback_table VALUES (1);
ROLLBACK;
END $$;
कॉल स्टेटमेंट का उपयोग करके प्रक्रिया को निष्पादित करें।
postgres=# CALL transaction_test();
CALL
निष्पादन परिणाम की जाँच करें।
postgres=# \d
List of relations
Schema | Name | Type | Owner
--------+-----------------+-------+----------
public | committed_table | table | postgres
(1 row)
postgres=# SELECT * FROM committed_table;
id
----
1
(1 row)
इस ब्लॉग में हमने PL/pgSQL भाषा का उपयोग करते हुए CREATE PROCEDURE के लिए लेन-देन नियंत्रण देखा है, लेकिन PL/Python, PL/Tcl, PL/Perl जैसी अन्य भाषाओं में भी लेन-देन नियंत्रण प्रदान किया गया है।
अन्य भाषाओं में लेनदेन नियंत्रण के लिए वाक्य रचना इस प्रकार है:
- पीएल/पायथन
- plpy.commit()
- plpy.rollback()
- पीएल/टीसीएल
- प्रतिबद्ध करें
- रोलबैक
- पीएल/पर्ल
- spi_commit()
- spi_rollback()
निष्कर्ष
क्रिएट प्रोसेस निश्चित रूप से पोस्टग्रेएसक्यूएल 11 में महत्वपूर्ण और वांछनीय सुविधाओं में से एक है। यह सुविधा ओरेकल से पोस्टग्रेएसक्यूएल माइग्रेशन और कई अलग-अलग उपयोग के मामलों के लिए बहुत उपयोगी है और कई लोग निश्चित रूप से इसका स्वागत करते हैं।