PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie deaktiviere ich vorübergehend DB-Integritätseinschränkungen in Django - postgresql

Habe die Lösung.

Ich musste die Trigger für die Tabelle deaktivieren, um die Fremdschlüssel-Einschränkungsprüfung zu stoppen.

Auslöser deaktivieren

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

Trigger aktivieren

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

Wichtige Hinweise :

  • Laut diesem Dokumentlink , können Sie eine Liste als zweites Argument an execute() übergeben Methode (z. B.:Sie möchten vielleicht den Tabellennamen dynamisch übergeben), aber dies wird automatisch die Variablen maskieren und Sie könnten am Ende eine syntaktisch falsche PostgreSQL-Abfrage bilden (was viel Zeit gekostet hat, um das zu beheben)

  • Stellen Sie sicher, dass Sie die Auslöser wieder richtig einschalten

  • Wenn Sie einen Fehler "Berechtigung verweigert" erhalten Dann möchten Sie vielleicht die DB-Benutzerberechtigungen überprüfen. Ich habe gerade die Superuser-Berechtigungen von PgAdmin aktiviert, was für mich in Ordnung war. und alles wieder funktionstüchtig. Wie geht das?