PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment puis-je désactiver temporairement les contraintes d'intégrité db dans django - postgresql

J'ai la solution.

J'ai dû désactiver les déclencheurs sur la table pour arrêter la vérification des contraintes de clé étrangère.

Désactiver les déclencheurs

def disable_triggers(self):
    with connection.cursor() as cursor:
        cursor.execute('ALTER TABLE "Table Name" DISABLE TRIGGER ALL;')

Activer les déclencheurs

def enable_triggers(self):
    with connection.cursor() as cursor:
        cursor.execute('ALTER TABLE "Table Name" ENABLE TRIGGER ALL;')

Remarques importantes :

  • Selon ce lien doc , vous pouvez passer une liste comme deuxième argument au execute() méthode (par exemple :vous voudrez peut-être transmettre le nom de la table de manière dynamique), mais cela échappera automatiquement aux variables et vous risquez de former une requête PostgreSQL syntaxiquement erronée (ce qui m'a pris beaucoup de temps pour la corriger)

  • Assurez-vous de bien réactiver les déclencheurs

  • Si vous obtenez une erreur d'autorisation refusée Ensuite, vous voudrez peut-être vérifier les autorisations de l'utilisateur de la base de données, je viens d'activer les autorisations de superutilisateur de PgAdmin, ce qui me convenait. et tout retour au travail. Comment faire ?