Để tự động thả và tạo lại ràng buộc khóa ngoại, bạn có thể gói tất cả nó trong một hàm hoặc sử dụng DO
lệnh:
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$
Bạn phải sở hữu bảng để sử dụng ALTER TABLE
.
Nếu không, bạn có thể tạo một hàm với LANGUAGE plpgsql SECURITY DEFINER
(sử dụng cùng một phần thân) và
ALTER FUNCTION foo() OWNER TO postgres;
postgres
là siêu người dùng ở đây - hoặc chủ nhân của bảng.
Nhưng hãy nhớ biết hướng dẫn sử dụng nói gì về bảo mật.
Sách hướng dẫn cũng có nhiều hơn về các lệnh động.