Je migre l'environnement de test existant vers Amazon RDS PostgreSQL. Le cadre de test a la particularité de recharger les données de certaines tables dans un état antérieur. Pour cela, il désactive les clés étrangères, supprime les données existantes, charge l'état de sauvegarde et active à nouveau les clés étrangères.
Actuellement, le framework de test désactive les clés étrangères en désactivant tous les déclencheurs (bien sûr, cela nécessite un superutilisateur):
alter table tablename disable trigger all;
Sur RDS, cela échoue avec:
ERREUR: autorisation refusée: "RI_ConstraintTrigger_a_20164" est un déclencheur système
Comment puis-je désactiver temporairement les clés étrangères dans Amazon RDS PostgreSQL?
Remarque: une question similaire a déjà été posée ( PostgreSQL sur RDS: comment importer en masse des données avec des contraintes FK? ) Mais il s'agissait spécifiquement de l'importation hors ligne et la solution est également spécifique à l'importation hors ligne.
la source
Réponses:
session_replication_role
J'ai trouvé un autre moyen de désactiver les clés étrangères - https://stackoverflow.com/a/18709987
Et les réactiver avec
Cela fonctionne sur RDS mais nécessite toujours des privilèges inhabituels (c'est-à-dire non accordés par défaut).
suppression et recréation de FK
Une solution alternative consiste, comme suggéré dans les commentaires, à supprimer temporairement les FK. Cela apporte un avantage supplémentaire: les données sont vérifiées lorsque les FK sont réactivés.
Goutte
Recréer
la source