PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kesalahan upsert (Saat Konflik Lakukan Pembaruan) menunjuk ke duplikat nilai yang dibatasi

Masalahnya disebabkan oleh fakta bahwa ternyata beberapa entri memiliki banyak penulis. Jadi gabungan bagian dalam dalam kueri pemilihan yang Anda tulis akan mengembalikan beberapa baris untuk entri yang sama dan INSERT ... ON CONFLICT tidak suka itu. Karena Anda hanya menggunakan ReferenceAuthor tabel untuk pemfilteran, Anda cukup menulis ulang kueri sehingga tabel tersebut hanya digunakan untuk memfilter entri yang tidak memiliki penulis dengan melakukan exists pada subquery yang berkorelasi. Begini caranya:

INSERT INTO new.bookmonographs  (citavi_id, abstract, createdon, edition, title, year)
SELECT "ID", "Abstract", "CreatedOn"::timestamp, "Edition", "Title", "Year"
FROM old."Reference"
WHERE old."Reference"."ReferenceType" = 'Book'
    AND old."Reference"."Year" IS NOT NULL
    AND old."Reference"."Title" IS NOT NULL
    AND exists(SELECT FROM old."ReferenceAuthor" WHERE old."ReferenceAuthor"."ReferenceID" = old."Reference"."ID")
    --Year, Title and Author must be present in the data, otherwise the entry is deemed useless, hence won't be included
ON CONFLICT (citavi_id) DO UPDATE 
    SET (abstract, createdon, edition, title, year) = (excluded.abstract, excluded.createdon, excluded.edition, excluded.title, excluded.year)
; 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa perbedaan antara lokal C dan Posix di Postgres?

  2. Postgres:\copy kesalahan sintaks dalam file .sql

  3. Kesalahan Database Postgres:relasi tidak ada

  4. Hitung frekuensi array atau objek jsonb

  5. Array Enum di Postgres dengan SQLAlchemy