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

Błąd upsert (w przypadku aktualizacji konfliktu) wskazujący na zduplikowane ograniczone wartości

Problem jest spowodowany tym, że podobno niektóre wpisy mają wielu autorów. Tak więc sprzężenie wewnętrzne w napisanym zapytaniu wybierającym zwróci wiele wierszy dla tego samego wpisu i INSERT ... ON CONFLICT tego nie lubi. Ponieważ używasz tylko ReferenceAuthor tabeli do filtrowania, możesz po prostu przepisać zapytanie, aby używało tej tabeli tylko do filtrowania wpisów, które nie mają żadnego autora, wykonując exists na skorelowanym podzapytaniu. Oto jak:

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. LISTEN limit czasu zapytania z node-postgres?

  2. Psycopg2 copy_from rzuca DataError:nieprawidłowa składnia wejściowa dla liczby całkowitej

  3. SELECT DISTINCT jest wolniejszy niż oczekiwano na moim stole w PostgreSQL

  4. Jak zaimportować plik sql bazy danych northwind do PostgreSQL?

  5. PSQLException:nazwa kolumny clazz_ nie została znaleziona w tym zestawie wyników