PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Najlepszy sposób, aby zapobiec duplikowaniu danych w kopii csv postgresql

Do góry

Odpowiedź Linoffa jest poprawny, ale można go nieco uprościć dzięki nowej funkcji „UPSERT” Postgres 9.5 (vel MERGE ). Ta nowa funkcja została zaimplementowana w Postgres jako INSERT ON CONFLICT składnia.

Zamiast jawnie sprawdzać, czy nie doszło do naruszenia unikalnego indeksu, możemy pozwolić na ON CONFLICT klauzula wykrycia naruszenia. Następnie DO NOTHING , co oznacza, że ​​rezygnujemy z wysiłku INSERT bez zawracania sobie głowy próbą UPDATE . Więc jeśli nie możemy wstawić, po prostu przechodzimy do następnego wiersza.

Uzyskujemy takie same wyniki jak kod Linoffa, ale tracimy WHERE klauzula.

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Osiąganie wysokowydajnych transakcji podczas rozszerzania PostgreSQL o funkcje C

  2. Postgres wstawia wiersz tylko wtedy, gdy liczba wierszy jest poniżej limitu

  3. Zapytanie o niestandardowy parametr postgresql za pomocą instrukcji SELECT

  4. Heroku psql:FATAL:pozostałe gniazda są zarezerwowane dla połączeń superużytkownika bez replikacji

  5. Postgres on Rails FATAL:baza danych nie istnieje