एक विदेशी कुंजी बाधा को गतिशील रूप से छोड़ने और फिर से बनाने के लिए, आप इसे किसी फ़ंक्शन में लपेट सकते हैं या 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
यहाँ एक सुपरयूज़र होने के नाते - या तालिका के स्वामी के रूप में।
लेकिन यह जानना सुनिश्चित करें कि सुरक्षा के बारे में मैनुअल का क्या कहना है।
मैनुअल में डायनेमिक कमांड के बारे में भी बहुत कुछ है।