Pour supprimer et recréer dynamiquement une contrainte de clé étrangère, vous pouvez tout envelopper dans une fonction ou utiliser le DO
commande :
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$
Vous devez posséder la table pour utiliser ALTER TABLE
.
Sinon, vous pouvez créer une fonction avec LANGUAGE plpgsql SECURITY DEFINER
(utilisant le même corps) et
ALTER FUNCTION foo() OWNER TO postgres;
postgres
être un superutilisateur ici - ou le propriétaire de la table.
Mais assurez-vous de savoir ce que le manuel a à dire sur la sécurité.
Le manuel contient également plus d'informations sur les commandes dynamiques.