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

अप्रयुक्त अनुक्रमों को कैसे हटाएं?

सबसे पहले, एक क्रम जो एक सीरियल कॉलम के लिए स्वचालित रूप से बनाया जाता है स्वचालित रूप से हटा दिया जाता है , जब कॉलम (या वह तालिका जिसमें वह है) को हटा दिया जाता है। आप जिस समस्या का वर्णन कर रहे हैं वह प्रारंभ में मौजूद नहीं होनी चाहिए। केवल बहुत PostgreSQL के पुराने संस्करणों ने ऐसा नहीं किया। 7.4 या उससे अधिक?

समस्या का समाधान:

यह क्वेरी सभी "अनबाउंड" अनुक्रमों को हटाने के लिए डीडीएल कमांड उत्पन्न करेगी डेटाबेस में इसे निष्पादित किया जाता है:

SELECT string_agg('DROP SEQUENCE ' || c.oid::regclass, '; ') || ';' AS ddl
FROM   pg_class       c
LEFT   JOIN pg_depend d ON d.refobjid = c.oid
                       AND d.deptype <> 'i'
WHERE  c.relkind = 'S'
AND    d.refobjid IS NULL;

regclass . के लिए कास्ट करें c.oid::regclass . में वर्तमान search_path . के अनुसार जहां आवश्यक हो वहां स्वचालित रूप से स्कीमा-योग्य अनुक्रम नाम . देखें:

परिणाम:

DROP SEQUENCE foo_id_seq;
DROP SEQUENCE bar_id_seq;
...

उन सभी अनुक्रमों को छोड़ने के लिए परिणाम निष्पादित करें जो किसी सीरियल कॉलम (या किसी अन्य कॉलम) से बंधे नहीं हैं। यहां कॉलम और टेबल का अर्थ पढ़ें। ।

सावधान यद्यपि! यह नहीं . करता है इसका मतलब है कि वे क्रम अन्यथा उपयोग में नहीं हैं। ऐसे कई उपयोग मामले हैं जहां अनुक्रम स्टैंडअलोन ऑब्जेक्ट के रूप में बनाए जाते हैं। उदाहरण के लिए यदि आप चाहते हैं कि एक से अधिक कॉलम एक अनुक्रम साझा करें। आपको ठीक-ठीक पता होना चाहिए कि आप क्या कर रहे हैं।

हालांकि, आप नहीं एक serial . के लिए बाध्य अनुक्रम हटाएं इस तरह स्तंभ। तो ऑपरेशन इस . में सुरक्षित है सम्मान।

DROP SEQUENCE test_id_seq

परिणाम:

ERROR:  cannot drop sequence test_id_seq because other objects depend on it
DETAIL:  default for table test column id depends on sequence test_id_seq
HINT:  Use DROP ... CASCADE to drop the dependent objects too.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्टग्रेज में ISO-8601 ग्रेगोरियन डेट टेबल कैसे बनाएं

  2. PostgreSQL:अंतराल '10 दिन' और वर्तमान पंक्ति के बीच की सीमा

  3. त्रुटि:संबंध का स्तंभ मौजूद नहीं है PostgreSQL ,इन्सर्ट क्वेरी चलाने में असमर्थ

  4. मैं Django Postgres DateRangeField के कुछ हिस्सों को कैसे निकाल सकता हूं?

  5. पोस्टग्रेस्क्ल परिणाम को बैश वैरिएबल में स्टोर करें