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

PostgreSQL में संग्रहीत कार्यविधि से डेटाबेस छोड़ें या बनाएं

त्रुटि संदेश केवल मैनुअल के रूप में स्पष्ट है इस पर:

एक plgpsql फ़ंक्शन स्वचालित रूप से एक लेनदेन ब्लॉक से घिरा होता है। इसका लंबा और छोटा:आप ऐसा नहीं कर सकते - सीधे। क्या कोई विशेष कारण है कि आप डीडीएल कमांड को कॉल नहीं कर सकते हैं?

DROP database $mydb;

आप कर सकते हैं अतिरिक्त मॉड्यूल dblink के साथ इन प्रतिबंधों को दरकिनार करें as @Igor सुझाव दिया। आपको प्रति डेटाबेस एक बार इसे स्थापित करने की आवश्यकता है - वह जहां आप dblink फ़ंक्शन कहते हैं, न कि (अन्य) जिसे आप कमांड निष्पादित करते हैं।
आपको
dblink_exec() इस तरह:

CREATE OR REPLACE FUNCTION f_drop_db(text)
  RETURNS text LANGUAGE sql AS
$func$
SELECT dblink_exec('port=5432 dbname=postgres'
                  ,'DROP DATABASE ' || quote_ident($1))
$func$;

quote_ident() संभावित SQL इंजेक्शन को रोकता है।

कॉल करें:

SELECT f_drop_db('mydb');

सफलता पर आप देखते हैं:

कनेक्शन स्ट्रिंग उसी डीबी को इंगित कर सकती है जिसमें आपका सत्र चलता है। आदेश लेनदेन ब्लॉक के बाहर चलता है, जिसके दो परिणाम होते हैं:

  • इसे वापस नहीं लाया जा सकता।
  • यह आपको DROP DATABASE . पर कॉल करने की अनुमति देता है किसी फ़ंक्शन के भीतर से "प्रॉक्सी के माध्यम से"।

आप एक FOREIGN DATA WRAPPER बना सकते हैं और एक FOREIGN SERVER कनेक्शन स्टोर करने और कॉल को आसान बनाने के लिए:

CREATE FOREIGN DATA WRAPPER postgresql VALIDATOR postgresql_fdw_validator;

CREATE SERVER your_fdw_name_here FOREIGN DATA WRAPPER postgresql
OPTIONS (hostaddr '12.34.56.78', port '5432', dbname 'postgres');

डिफ़ॉल्ट रखरखाव db का उपयोग करना postgres , जो स्पष्ट विकल्प होगा। लेकिन कोई भी डीबी संभव है।

इसका उपयोग करने वाला सरलीकृत कार्य:

CREATE OR REPLACE FUNCTION f_drop_db(text)
  RETURNS text LANGUAGE sql AS
$func$
SELECT dblink_exec('your_fdw_name_here', 'DROP DATABASE ' || quote_ident($1))
$func$;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. plpgsql फ़ंक्शन में इनपुट सरणी के तत्वों से मेल खाने वाली पंक्तियाँ लौटाएँ

  2. CSV डेटा के साथ वेरिएबल से कॉपी पोस्ट करता है

  3. QPSQL ड्राइवर ने Qt लोड नहीं किया

  4. स्प्रिंग बूट ऐप कुबेरनेट्स सीक्रेट से क्रेडेंशियल्स का उपयोग करके PostgreSQL तक नहीं पहुंच सकता है

  5. विंडोज के लिए पोस्टग्रेएसक्यूएल विकसित करना, भाग 1