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)
;