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

अज्ञात नाम के साथ PostgreSQL ड्रॉप बाधा

एक विदेशी कुंजी बाधा को गतिशील रूप से छोड़ने और फिर से बनाने के लिए, आप इसे किसी फ़ंक्शन में लपेट सकते हैं या DO का उपयोग कर सकते हैं आदेश:

DO
$body$
DECLARE
   _con text := (
      SELECT quote_ident(conname)
      FROM   pg_constraint
      WHERE  conrelid = 'myschema.mytable'::regclass
      AND    confrelid = 'myschema.myreftable'::regclass
      LIMIT 1 -- there could be multiple fk constraints. Deal with it ...
      );

BEGIN
   EXECUTE '
      ALTER TABLE wuchtel12.bet DROP CONSTRAINT ' || _con;

   -- do stuff here

   EXECUTE '
      ALTER TABLE myschema.mytable
      ADD CONSTRAINT ' || _con || ' FOREIGN KEY (col)
      REFERENCES myschema.myreftable (col)';
END
$body$

ALTER TABLE . का उपयोग करने के लिए आपके पास तालिका का स्वामी होना चाहिए .
अन्यथा आप LANGUAGE plpgsql SECURITY DEFINER के साथ एक फ़ंक्शन बना सकते हैं (उसी शरीर का उपयोग करके) और

ALTER FUNCTION foo() OWNER TO postgres;

postgres यहाँ एक सुपरयूज़र होने के नाते - या तालिका के स्वामी के रूप में।
लेकिन यह जानना सुनिश्चित करें कि सुरक्षा के बारे में मैनुअल का क्या कहना है।

मैनुअल में डायनेमिक कमांड के बारे में भी बहुत कुछ है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जॉइन के बाद ग्रुप या DISTINCT डुप्लीकेट लौटाता है

  2. तालिका Grupo Cakephp के लिए FROM-क्लॉज प्रविष्टि गुम है

  3. MSSQL से PostgreSQL में माइग्रेट करना - आपको क्या पता होना चाहिए

  4. PostgreSQL कॉलम को पंक्तियों में बदलें? स्थानान्तरण?

  5. Django कनेक्शन निरस्त त्रुटि:[WinError 10053] एक स्थापित कनेक्शन आपके होस्ट मशीन में सॉफ़्टवेयर द्वारा निरस्त कर दिया गया था