Om dynamisch een externe-sleutelbeperking te verwijderen en opnieuw te maken, kunt u deze allemaal in een functie inpakken of de DO
gebruiken commando:
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$
U moet eigenaar zijn van de tabel om ALTER TABLE
te gebruiken .
Anders kunt u een functie maken met LANGUAGE plpgsql SECURITY DEFINER
(met dezelfde body) en
ALTER FUNCTION foo() OWNER TO postgres;
postgres
hier een superuser zijn - of de eigenaar van de tafel.
Maar zorg ervoor dat je weet wat de handleiding te zeggen heeft over beveiliging.
De handleiding bevat ook meer over dynamische commando's.