2016-04-14 28 views
0

Ich muss Zeilen aus der Tabelle löschen, die 120 Millionen Datensätze hat. Die Daten, die am höchsten (entry_date) und am zweithöchsten (entry_date) sind, sollten nicht gelöscht werden.Löschen von Millionen von Datensatz im Bundle in Postgresql

Tabelle hat viele Einschränkungen. Ein PRIMARY-Schlüssel Zwei FOREIGN-Schlüssel und zwei andere Indizes als der Index des Primärschlüssels.

Ich habe bereits erfolgreich versucht, Methode zu löschen als temporäre Tabelle erstellen und erforderliche Daten in temporäre Tabelle verschieben. Dann die aktuelle Tabelle löschen und dann gefilterte Daten von Temp nach Haupttabelle zurück verschieben. Und es hat gut funktioniert. Aber ich brauche eine Möglichkeit, Datensätze in Haufen zu löschen.

So löschen Sie Datensätze im Bund wie zuerst nur 1 Million Daten sollten gelöscht werden und auf.

+0

Können wir Index und Constraint deaktivieren und versuchen, danach zu löschen.Wenn so kann jeder Körper bitte sagen Sie mir die Syntax der vorübergehenden Deaktivierung Index und Fremdschlüssel in Postgres. – SUDARSHAN

+0

Fügen Sie eine Tabellendefinition und einige Beispieltabellendaten hinzu. – jarlh

+0

vollständige Tabellendefinition hinzugefügt .. – SUDARSHAN

Antwort

0

Dies setzt voraus, dass Sie keine widersprüchlichen Sperren haben. Beachten Sie, dass Sperren von Indexseiten die Vorgänge ebenfalls verlangsamen können.

Recent PostgreSQL ermöglicht Ihnen, ein CTE in einer Löschanweisung zu verwenden. I.e. Sie können:

WITH ids_to_delete (
    SELECT value_id FROM values 
    where ... 
    limit ... 
) 
delete from values where value_id in (select value_id from ids_to_delete) 
+0

Gibt es eine Möglichkeit, die Fremdschlüsseleinschränkung vorübergehend zu deaktivieren und nach dem Löschen zu aktivieren? – SUDARSHAN