sql >> Database >  >> RDS >> PostgreSQL

De beste manier om dubbele gegevens te voorkomen bij het kopiëren van csv postgresql

Upsert

Het Antwoord van Linoff is correct, maar kan een beetje vereenvoudigd worden door Postgres 9.5 nieuwe "UPSERT"-functie (ook bekend als MERGE ). Die nieuwe functie is geïmplementeerd in Postgres als INSERT ON CONFLICT syntaxis.

In plaats van expliciet te controleren op schending van de unieke index, kunnen we de ON CONFLICT clausule de overtreding op te sporen. Dan DO NOTHING , wat betekent dat we afzien van de inspanning om INSERT zonder de moeite te nemen om een ​​UPDATE . te proberen . Dus als we niet kunnen invoegen, gaan we gewoon door naar de volgende rij.

We krijgen dezelfde resultaten als de code van Linoff, maar verliezen de WHERE clausule.

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


  1. Doorgaan met een transactie na een fout in de primaire sleutel

  2. MySQL vindt alle ouders recursief

  3. Converteer de nieuwe rij naar XML binnen een Oracle Trigger

  4. Hoe kan ik een batch invoegen in een Oracle-database met Python?