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

अन्योन्याश्रितताओं के साथ sql स्क्रिप्ट चलाना

आप एक साधारण पुनरावर्ती क्वेरी लिख सकते हैं जो उन सभी विचारों से शुरू होती है जो दूसरों पर निर्भर नहीं करते हैं और इन पर निर्भर विचारों को पुनरावर्ती रूप से जोड़ते हैं। फिर इन दृश्यों के लिए दृश्य परिभाषा को सही क्रम में आउटपुट करें, और आपको अपनी स्क्रिप्ट मिल गई है:

WITH RECURSIVE viewids AS (
   /* all views that don't depend on other views */
   SELECT t.oid, 1 as level
   FROM pg_class t
      JOIN pg_rewrite AS r ON r.ev_class = t.oid
   WHERE r.rulename = '_RETURN'
     AND t.relkind = 'v'
     AND t.relnamespace NOT IN ('pg_catalog'::regnamespace,
                                'information_schema'::regnamespace,
                                'pg_toast'::regnamespace)
     AND NOT EXISTS (
            /* depends on a view */
            SELECT 1
            FROM pg_depend AS d
               JOIN pg_class AS t2 ON d.refobjid = t2.oid
            WHERE d.objid = r.oid
              AND d.classid = 'pg_rewrite'::regclass
              AND d.refclassid = 'pg_class'::regclass
              AND d.deptype = 'n'
              AND d.refobjsubid <> 0
              AND t2.relkind = 'v'
         )
     AND NOT EXISTS (
            /* depends on an extension */
            SELECT 1
            FROM pg_depend
            WHERE objid = t.oid
              AND classid = 'pg_class'::regclass
              AND refclassid = 'pg_extension'::regclass
              AND deptype = 'e'
         )
UNION ALL
   /* all views that depend on these views */
   SELECT t.oid, viewids.level + 1
   FROM pg_class AS t
      JOIN pg_rewrite AS r ON r.ev_class = t.oid
      JOIN pg_depend AS d ON d.objid = r.oid
      JOIN viewids ON viewids.oid = d.refobjid
   WHERE t.relkind = 'v'
     AND r.rulename = '_RETURN'
     AND d.classid = 'pg_rewrite'::regclass                            
     AND d.refclassid = 'pg_class'::regclass
     AND d.deptype = 'n'
     AND d.refobjsubid <> 0
)
/* order the views by level, eliminating duplicates */
SELECT format('CREATE VIEW %s AS%s',
              oid::regclass,
              pg_get_viewdef(oid::regclass))
FROM viewids
GROUP BY oid
ORDER BY max(level);



  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 बल्क इंसर्ट/अपडेट/डिलीट पर डेटाबेस ट्रिगर व्यवहार का अनुकरण करता है

  2. Postgresql Windows, क्या कोई डिफ़ॉल्ट पासवर्ड है?

  3. PostgreSQL डेटाबेस बनाएँ

  4. यदि इसमें सक्रिय कनेक्शन हैं तो PostgreSQL डेटाबेस को कैसे छोड़ें?

  5. SQL में डबल कोलन (::) नोटेशन