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

Eliminare un indice con psycopg2 ha effetto prima o dopo il commit?

commit esegue il commit di qualsiasi transazione in corso nel tuo database.

Quello che stai effettivamente chiedendo se l'eliminazione degli indici e quindi la copia all'interno della stessa transazione fornirà la stessa velocità dell'eliminazione degli indici prima in una transazione e quindi della copia dei dati in una nuova transazione.

La citazione diretta da docs dice che:

La parte in grassetto indica indirettamente che è necessario eseguire il commit dopo aver eliminato gli indici, poiché l'eliminazione degli indici senza eseguire il commit (completamento della transazione) non dovrebbe avere alcun impatto sugli altri utenti del database.

Quindi la soluzione dovrebbe essere qualcosa del genere:

rilascia i tuoi indici, esegui il commit, copia i dati, crea nuovi indici e esegui nuovamente il commit.

Nota che quando dividi la tua transazione in due transazioni, perdi l'atomicità. Cioè. è possibile che i tuoi indici vengano eliminati, ma nessun dato viene copiato (se l'alimentazione o la rete, ad esempio, viene persa durante la transazione di copia) e gli indici non vengono mai ricreati.