sql >> Databasteknik >  >> RDS >> PostgreSQL

Bästa sättet att förhindra dubbletter av data på kopia csv postgresql

Upsert

Svar av Linoff är korrekt men kan förenklas lite genom Postgres 9.5 nya ”UPSERT“-funktion (a.k.a. SAMMANSLUTNING ). Den nya funktionen är implementerad i Postgres som code>INSERT ON CONFLICT syntax.

Istället för att uttryckligen leta efter brott mot det unika indexet kan vi låta ON CONFLICT klausul upptäcka överträdelsen. Sedan GÖR INGENTING , vilket betyder att vi överger ansträngningarna att INSERT utan att bry sig om att försöka UPDATE . Så om vi inte kan infoga går vi bara vidare till nästa rad.

Vi får samma resultat som Linoffs kod men förlorar WHERE klausul.

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


  1. MySQL:Hur man tillåter fjärranslutning till mysql

  2. Ställ in standardgräns för pg_trgm

  3. Hur ignorerar man platshållaruttryck för Flyway?

  4. Skiftlägesokänsligt namn på tabeller och egenskaper i Entity Framework 7