PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come disabilitare temporaneamente i vincoli di integrità del db in django - postgresql

Ho la soluzione.

Ho dovuto disabilitare i Trigger sul tavolo per interrompere il controllo del vincolo della chiave esterna.

Disattiva trigger

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

Abilita trigger

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

Note importanti :

  • Secondo questo link al documento , puoi passare una lista come secondo argomento a execute() metodo (es:potresti voler passare il nome della tabella in modo dinamico), ma questo sfuggirà automaticamente alle variabili e potresti finire per formare una query PostgreSQL sintatticamente sbagliata (che ha impiegato molto tempo per risolverlo)

  • Assicurati di riattivare correttamente i trigger

  • Se ricevi un Errore di autorizzazione negata Quindi potresti voler controllare le autorizzazioni utente DB, ho appena attivato le autorizzazioni di superutente da PgAdmin, il che per me andava bene. e tutto torna a funzionare. Come si fa?