Postgresql में नाम से बाधा को हटा दें


83

मैं सिर्फ नाम जानकर Postgresql में एक बाधा नाम कैसे छोड़ सकता हूं? मेरे पास उन बाधाओं की एक सूची है जो एक 3 पार्टी स्क्रिप्ट द्वारा ऑटोजेनरेटेड हैं। मुझे टेबल का नाम सिर्फ बाधा नाम जानने के बिना उन्हें हटाने की आवश्यकता है।


आप पीजी के किस संस्करण पर हैं?
कुबेरचुन

जवाबों:


135

आपको निम्नलिखित क्वेरी चलाकर तालिका नामों को पुनः प्राप्त करना होगा:

SELECT *
FROM information_schema.constraint_table_usage
WHERE table_name = 'your_table'

वैकल्पिक रूप से आप pg_constraintइस जानकारी को पुनः प्राप्त करने के लिए उपयोग कर सकते हैं

select n.nspname as schema_name,
       t.relname as table_name,
       c.conname as constraint_name
from pg_constraint c
  join pg_class t on c.conrelid = t.oid
  join pg_namespace n on t.relnamespace = n.oid
where t.relname = 'your_table_name';

तब आप आवश्यक चेतावनी बयान चला सकते हैं:

ALTER TABLE your_table DROP CONSTRAINT constraint_name;

बेशक आप क्वेरी को पूर्ण परिवर्तन कथन वापस कर सकते हैं:

SELECT 'ALTER TABLE '||table_name||' DROP CONSTRAINT '||constraint_name||';'
FROM information_schema.constraint_table_usage
WHERE table_name in ('your_table', 'other_table')

अगर वहाँ एक ही टेबल के साथ कई स्कीमा हैं, तो तालिका को जहां (और पूर्व कथन) में table_schema को शामिल करना न भूलें।


14

यदि आपके पीजी के 9.x पर आप इसे चलाने के लिए DO स्टेटमेंट का उपयोग कर सकते हैं। बस वही करें जो a_horse_with_no_name ने किया था, लेकिन इसे DO स्टेटमेंट पर लागू करें।

DO $$DECLARE r record;
    BEGIN
        FOR r IN SELECT table_name,constraint_name
                 FROM information_schema.constraint_table_usage
                 WHERE table_name IN ('your_table', 'other_table')
        LOOP
            EXECUTE 'ALTER TABLE ' || quote_ident(r.table_name)|| ' DROP CONSTRAINT '|| quote_ident(r.constraint_name) || ';';
        END LOOP;
    END$$;

4

- सही विदेशी कुंजी बाधा छोड़ें

ALTER TABLE affiliations
DROP CONSTRAINT affiliations_organization_id_fkey;

ध्यान दें:

संबद्धता -> तालिका का नाम

एफिलिएशन_ऑर्गनाइजेशन_आईडी_फेक -> कॉन्ट्रिंट नाम

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.