sql >> Database teknologi >  >> RDS >> PostgreSQL

Upsert-fejl (Opdatering ved konflikt), der peger på dublerede begrænsede værdier

Problemet skyldes det faktum, at nogle indlæg tilsyneladende har flere forfattere. Så den indre joinforbindelse i den udvalgte forespørgsel, som du skrev, vil returnere flere rækker for den samme post og INSERT ... ON CONFLICT kan ikke lide det. Da du kun bruger ReferenceAuthor tabel til filtrering, kan du blot omskrive forespørgslen, så den bruger denne tabel til kun at filtrere poster, der ikke har nogen forfatter ved at gøre en exists på en korreleret underforespørgsel. Sådan gør du:

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. PostgreSQL:Find sætninger tættest på en given sætning

  2. PostgreSQL/performance én generel markør eller opret for hver forespørgsel

  3. Unikt modelfelt i Django og case sensitivity (postgres)

  4. MySQL viser alle datoer i mellem området