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

Il modo migliore per prevenire la duplicazione dei dati sulla copia csv postgresql

Ribaltamento

La Risposta di Linoff è corretto ma può essere leggermente semplificato da Nuova funzione "UPSERT" di Postgres 9.5 (alias MERGE ). Questa nuova funzionalità è implementata in Postgres come INSERT ON CONFLICT sintassi.

Invece di verificare esplicitamente la violazione dell'indice univoco, possiamo lasciare che il ON CONFLICT clausola rilevare la violazione. Quindi DO NOTHING , il che significa che abbandoniamo lo sforzo di INSERT senza preoccuparsi di tentare un UPDATE . Quindi, se non possiamo inserire, passiamo semplicemente alla riga successiva.

Otteniamo gli stessi risultati del codice di Linoff ma perdiamo il WHERE clausola.

INSERT INTO bigtable(col1, … )
    SELECT col1, …
    FROM stagingtable st
ON CONFLICT idx_bigtable_col1_col2_col
DO NOTHING
;