insert...on conflict... auf Foreign Table

Fragen und Probleme rund um die Abfragespache SQL.
Antworten
Gisman
Erfahrener Benutzer
Beiträge: 1115
Registriert: Fr 20. Jan 2006, 15:30
Wohnort: Pfalz
Kontaktdaten:

insert...on conflict... auf Foreign Table

Beitrag von Gisman » Mi 21. Nov 2018, 15:51

Hallo zusammen!
Ich möchte gerne eine Foreign Table mit dem untenstehenden Statement updaten. Dabei erscheint die folgende Fehlermeldung:

Code: Alles auswählen

FEHLER: es gibt keinen Unique-Constraint oder Exclusion-Constraint, der auf die ON-CONFLICT-Angabe passt
SQL state: 42P10
Die im on conflict angegebene Spalte ist der PK der Remote-Tabelle, sollte also unique sein, andersrum, also Updaten der lokalen Tabelle aus der Foreign Table funktioniert auch entsprechend korrekt mit on conflict. Die PK- bzw. Unique-Information wird aber anscheinend nicht mit der Foreign Table übergeben, im Gegensatz zu Not Null. Wenn ich das on conflict weglasse, funktioniert das Insert auch prima, interessanterweise wird dann auch eine duplicate key-Meldung gezeigt wenn man das provoziert.

Frage: Gibt es da einen Grund warum das so ist? Kann man irgendwie herbeiführen, dass der Unique-Constraint/PK der Remote-Datenbank beachtet wird? Oder muss ich das Upsert in zwei Teilen (Insert neuer und Update bestehender Einträge) ausführen?
Eine etwas unschönere Möglichkeit wäre natürlich, auf der Remote-Datenbank die lokale einzubinden.

Vielen Dank im Voraus und Grüße

Uwe

Code: Alles auswählen

insert into whdb_remote.t_kamptyp as t1(kurz, name, beschreibung,erstellt, erstellt_von, geaendert, geaendert_von)
  select kurz, name, beschreibung,erstellt, erstellt_von, geaendert, geaendert_von
    from whdb.t_kamptyp
  on conflict (kurz) do update set
    name = excluded.name,
    beschreibung = excluded.beschreibung,
    erstellt = excluded.erstellt,
    erstellt_von = excluded.erstellt_von,
    geaendert = excluded.geaendert,
    geaendert_von = excluded.geaendert_von
  where t1.geaendert < excluded.geaendert;

Antworten