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

PostgreSQL डेटाबेस के सभी स्कीमा में एक तालिका में एक कॉलम जोड़ें

DO
$do$
DECLARE
  _schema text;
  _sp
BEGIN
   FOR _schema IN
      SELECT quote_ident(nspname)  -- prevent SQL injection
      FROM   pg_namespace n
      WHERE  nspname !~~ 'pg_%'
      AND    nspname <>  'information_schema'
   LOOP
      EXECUTE 'SET LOCAL search_path = ' || _schema;
      ALTER TABLE product ADD COLUMN show_price boolean NOT NULL DEFAULT TRUE;
   END LOOP;
END
$do$

आप सिस्टम कैटलॉग टेबल में प्रविष्टियों के माध्यम से एक DO कथन . 9.0 या बाद के संस्करण पोस्ट करना आवश्यक है .
आप एक फ़ंक्शन भी बना सकते हैं . DO कथन प्रक्रियात्मक भाषा plpgsql का उपयोग करता है डिफ़ॉल्ट रूप से।

आपको केवल सिस्टम कैटलॉग की आवश्यकता है pg_namespace , डेटाबेस के स्कीमा धारण करना। ज्ञात सिस्टम स्कीमा को छोड़कर सभी स्कीमा के माध्यम से लूप करें।

सुनिश्चित करें कि आप सही डेटाबेस से जुड़े हैं!

तालिका में एक शून्य नहीं के साथ एक कॉलम जोड़ने के लिए बाधा, आपको नया कॉलम भरने के लिए एक डिफ़ॉल्ट मान भी प्रदान करना होगा। तार्किक रूप से असंभव अन्यथा। मैंने डिफ़ॉल्ट सत्य जोड़ा है , अपनी आवश्यकताओं के अनुसार समायोजित करें।

सिस्टम कैटलॉग टेबल से ठीक से प्राप्त पहचानकर्ताओं को उद्धृत करके SQL इंजेक्शन से बचें। quote_ident() इस मामले में। [और भी विकल्प हैं। देखें:

आपको गतिशील एसक्यूएल की आवश्यकता है। प्राथमिक "चाल" बस सेट करना है search_path गतिशील रूप से, इसलिए एक ही कथन को बार-बार चलाया जा सकता है। SET LOCAL का प्रभाव लेन-देन के अंत तक रहता है। आप reSET search_path . का उपयोग कर सकते हैं या पिछली स्थिति को सहेजें और इसे रीसेट करें यदि आपको इसके साथ एक ही लेनदेन में और अधिक करने की आवश्यकता है (संभावना नहीं):

SHOW search_path INTO _text_var;
...
EXECUTE 'SET search_path = ' || _text_var;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक बड़े Django QuerySet के माध्यम से बड़ी मात्रा में स्मृति का उपभोग क्यों कर रहा है?

  2. क्या मुझे Laravel5 पर प्लक (सूचियों) के लिए कस्टम दिनांक प्रारूप मिल सकता है?

  3. तैयार कथन में '' (टाइमस्टैम्प) के साथ स्ट्रिंग कैसे पास करें?

  4. PostgreSQL में भौतिक प्रतिकृति तंत्र

  5. pgAdmin में pgsql स्क्रिप्ट कैसे निष्पादित करें?