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

Das Löschen eines Index mit psycopg2 wird vor oder nach dem Commit wirksam?

commit schreibt einfach jede laufende Transaktion in Ihre Datenbank.

Was Sie eigentlich fragen, ob das Löschen von Indizes und das anschließende Kopieren innerhalb derselben Transaktion die gleiche Beschleunigung bringt wie das erste Löschen von Indizes in einer Transaktion und das anschließende Kopieren von Daten in einer neuen Transaktion.

Das direkte Zitat aus docs sagt das:

Der fettgedruckte Teil weist indirekt darauf hin, dass Sie nach dem Löschen der Indizes einen Commit durchführen sollten, da das Löschen von Indizes ohne Commit (Abschluss der Transaktion) keine Auswirkungen auf andere Benutzer der Datenbank haben sollte.

Die Lösung sollte also in etwa so aussehen:

lösche deine Indizes, übertrage, kopiere die Daten, erstelle neue Indizes und übertrage erneut.

Beachten Sie, dass Sie die Atomarität verlieren, wenn Sie Ihre Transaktion in zwei Transaktionen aufteilen. D.h. Es ist möglich, dass Ihre Indizes gelöscht werden, aber keine Daten kopiert werden (wenn beispielsweise die Stromversorgung oder das Netzwerk während des Kopiervorgangs unterbrochen wird) und die Indizes niemals neu erstellt werden.