Ich möchte eine Zeile mit einer Insert-Anweisung aktualisieren. In der Tat kann ich Zeilen einfügen, aber wenn das eindeutige Attribut bereits existiert, möchte ich den Inhalt aktualisieren.Neuen Wert für Konflikt aktualisieren
Also habe ich diese Tabellen
CREATE TABLE dtest (
"id" text,
followers_count int4,
someuniq int4
);
CREATE UNIQUE INDEX dtest_idx ON dtest USING btree (someuniq);
CREATE TABLE temp_data (
tid text,
tfo int4,
tuniq int4);
Betrachten sie, dass ich ein temporäres Register, und ich insert/update Daten aus dieser Tabelle
INSERT INTO temp_data VALUES ('id1',4,1);
INSERT INTO temp_data VALUES ('id2',0,2);
INSERT INTO temp_data VALUES ('id3',40,3);
INSERT INTO dtest("id","followers_count","someuniq")
SELECT t.tid, t.tfo, t.tuniq
FROM temp_data t
ON CONFLICT DO NOTHING;
Statt einen Einsatz zu tun, und dann ein Update Ich würde gerne wissen, ob es möglich ist, die Werte mit so etwas zu aktualisieren
INSERT INTO dtest("id","followers_count","someuniq")
SELECT tid, tfo, tuniq
FROM temp_data
ON CONFLICT ("someuniq")
DO UPDATE SET followers_count =
(SELECT tfo FROM temp_data where tid = EXCLUDED.tid)
WHERE EXCLUDED.id = tid;
Wic h bedeutet, "Aktualisieren Sie einige Felder, wenn die Zeile bereits existiert", was mache ich falsch?