PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách tốt nhất để ngăn dữ liệu trùng lặp trên bản sao csv postgresql

Nâng cấp

Câu trả lời của Linoff là đúng nhưng có thể đơn giản hóa một chút bằng tính năng "UPSERT" mới của Postgres 9.5 (a.k.a. MERGE ). Tính năng mới đó được triển khai trong Postgres với tên INSERT ON CONFLICT cú pháp.

Thay vì kiểm tra rõ ràng xem có vi phạm chỉ mục duy nhất hay không, chúng tôi có thể để ON CONFLICT khoản phát hiện vi phạm. Sau đó, chúng tôi DO NOTHING , nghĩa là chúng tôi từ bỏ nỗ lực INSERT mà không cần phải thử UPDATE . Vì vậy, nếu chúng tôi không thể chèn, chúng tôi chỉ cần chuyển sang hàng tiếp theo.

Chúng tôi nhận được kết quả tương tự như mã của Linoff nhưng mất WHERE mệnh đề.

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. flask-migrate không thể thả bảng vì các đối tượng khác phụ thuộc vào nó

  2. Nhập tệp hình dạng trong postgresql trong Linux bằng pgadmin 4

  3. K-Nearest Neighbor Query trong PostGIS

  4. Làm thế nào để sử dụng lại kết quả cho các mệnh đề SELECT, WHERE và ORDER BY?

  5. Docker - PG ::ConnectionBad