2016-06-27 31 views
2

PostgreSQL hat „INSERT ... ON CONFLICT UPDATE“ konstruieren, aber in meinen Anfragen in den meisten Fällen wir UPDATE müssen.PostgreSQL: AKTUALISIEREN ... AUF FEHLENDEN INSERT?

Also ich will nicht, dass DB versucht einfügen und nur dann aktualisieren, ich will, dass es UPDATE versuchen wird und wenn der Datensatz nicht existiert - wird INSERT.

Ist es möglich? Wird es die Leistung erhöhen?

+0

Was erwartest du damit zu gewinnen? –

+0

Ich erwarte, Leistungssteigerung, weil ich die erste Update versuchen würde, die eher zum Erfolg in meiner Situation ist –

+0

Sie könnten tun 'UPDATE' und wenn die Zeilenanzahl null ist, dann' INSERT .. KONFLIKT UPDATE'. Vergleichen Sie die Methoden mit Ihren tatsächlichen Daten, um zu prüfen, ob sie schneller sind. –

Antwort

0

Es wird die Leistung zu erhöhen, und es hängt auch davon, welchen Code Sie haben. Wenn Sie eine Tabelle erstellen und dann eine separate Funktion verwenden, um zu überprüfen, ob die Daten hinzugefügt werden, die Sie hinzufügen möchten, oder nicht, und führen Sie anschließend eine entsprechende Funktion aus (falls vorhanden, fügen Sie andernfalls "Nein" ein). In diesem Fall benötigt Ihr Code einen Teil des Speichers. Diese Methode ist gut, wenn sie mit Massendaten arbeiten, sogar einen kleinen Teil memmory zu sparen

+0

Kann ich es mit einer einzelnen SQL-Anweisung ohne Funktionen tun? –

+0

Ja, sicher. Sie können dies beim Einfügen mit where-Anweisung tun. Versuchen Sie dies als Beispiel: –

0
INSERT INTO hundred(name, name_slug, status) 
SELECT DISTINCT name, name_slug, status 
FROM hundred 
WHERE NOT EXISTS ( 
SELECT 'X' 
FROM temp_data 
WHERE temp_data.name = hundred.name AND temp_data.name_slug = hundred.name_slug AND temp_data.status = status); 

zu vereinfachen, „where“ Aussage ist der entscheidende Punkt zu tun, was Sie wollen:

INSERT INTO table (id, field, field2) 
    SELECT 3, 'C', 'Z' 
    WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3); 
+0

Ist das, was Sie meinten, @Pavel Bernshtam –

+0

Sorry, ich sehe nicht, wo ich UPDATE tun in Ihrem Beispiel? Ich will versuchen, zuerst die Tabelle –

+0

UPDATE Tabelle UPDATE (id, Feld, field2) SET id = 3, Feld = 'C', field2 = 'Z' WHERE NOT EXISTS (SELECT 1 FROM Tabelle WHERE id = 3); –