Mi chiedo quale sia il modo più efficiente per eliminare un gran numero di righe da PostgreSQL, questo processo sarebbe parte di un'attività ricorrente ogni giorno per importare in blocco i dati (un delta di inserzioni + eliminazioni) in una tabella. Potrebbero esserci migliaia, potenzialmente milioni di righe da eliminare.
Ho un file di chiavi primarie, una per riga. Le due opzioni a cui stavo pensando erano sulla falsariga di quanto sotto, ma non conosco / capisco abbastanza gli interni di PostgreSQL per prendere una decisione informata che sarebbe meglio.
- Esegui una
DELETE
query per ogni riga nel file, con una sempliceWHERE
chiave primaria (o raggruppa le eliminazioni in batchn
utilizzando unaIN()
clausola) - Importa le chiavi primarie in una tabella temporanea usando il
COPY
comando e quindi eliminando dalla tabella principale usando un join
Ogni suggerimento sarà molto apprezzato!