Ich habe eine TabellePostgres - KONFLIKT - Wie kann man wissen, ob ein Update statt einer INSERT aufgetreten
CREATE TABLE foo
(
f0 int,
time_stamp timestamp,
CONSTRAINT foo_pk PRIMARY KEY (f0)
)
Ich muss diese Tabelle in großen Mengen schreiben, so dass Leistung ist der Schlüssel. Manchmal schreibe ich einen Datensatz mit einem vorhandenen Wert für f0
und aktualisiere nur den time_stamp
auf die aktuelle Zeit. Dazu verwende ich eine ON CONFLICT..DO UPDATE
Klausel.
Das Problem ist, dass ich wissen muss, ob eine INSERT
aufgetreten ist oder eine UPDATE
.
Ich obwohl auf eine zweite is_update
Spalte verwenden. Beim Einfügen einfügen false
und
`ON CONFLICT .. DO UPDATE set is_update=true`
Dann RETURNING is_update
verwenden zu bekommen, was ich will. Das Problem dabei ist die Einführung einer zusätzlichen Spalte, die nicht mit den Daten selbst zusammenhängt.
[Wie um herauszufinden, ob ein Upsert ein Update mit PostgreSQL 9.5+ UPSERT war?] (Http: //stackoverflow.com/questions/34762732/how-to-find-out-if-an-upsert-was-an-update-with-postgresql-9-5-upsert) – lad2025
@ lad2025 Diese Frage konnte ich nicht finden, Vielen Dank. Die vorgeschlagene Lösung ist jedoch, was ich gesagt habe, dass ich versucht habe, aber wegen der zusätzlichen Spalte in meiner Tabelle für einige Funktionalität vermeiden möchte, die ich von dieser "UPSERT/ON CONFLICT" -Funktion vermisse. – Sagi
[PostgreSQL Upsert unterscheidet zwischen eingefügten und aktualisierten Zeilen mithilfe der Systemspalten XMIN, XMAX und anderen] (https://stackoverflow.com/q/39058213/1995738) – klin