Ich frage mich, wie man am effizientesten eine große Anzahl von Zeilen aus PostgreSQL löschen kann. Dieser Vorgang ist Teil einer täglichen wiederkehrenden Aufgabe, um Daten (ein Delta aus Einfügungen und Löschungen) in eine Tabelle zu importieren. Möglicherweise müssen Tausende, möglicherweise Millionen Zeilen gelöscht werden.
Ich habe eine Datei mit Primärschlüsseln, eine pro Zeile. Die beiden Optionen, über die ich nachgedacht habe, sind im folgenden Sinne, aber ich kenne / verstehe die Interna von PostgreSQL nicht genug, um eine fundierte Entscheidung zu treffen, die am besten wäre.
- Führen Sie eine
DELETE
Abfrage für jede Zeile in der Datei mit einem einfachenWHERE
Primärschlüssel aus (oder gruppieren Sie die Löschvorgänge in Gruppen,n
indem Sie eineIN()
Klausel verwenden). - Importieren Sie die Primärschlüssel mithilfe des
COPY
Befehls in eine temporäre Tabelle und löschen Sie sie anschließend mithilfe eines Joins aus der Haupttabelle
Anregungen werden sehr geschätzt!