Sicherer Update

Hallo,

vielleicht gibt es bereits eine Antwort auf meine Frag aber ich weiss nicht genau wie ich meine Suche formulieren soll.

Bei MySQL gibt es eine Einstellung, die einen update einer Tabelle nur erlaubt, wenn eine WHERE Klausel
vorhanden ist.
Also :
UPDATE … WHERE …

Gibt es bei PG auch so eine Einstellungs- bzw. Konfigurations-Moeglichkeit?
Wenn ja, wo und wie?

Wie kann ich mich sonst davor schuetzen, dass eine Tabelle global geaendert wird, wenn eine Spezifikation des Satzes fehlt?

Viele Dank fuer einen Tipp im Voraus.

K.D.J

Postgres hat so eine Einstellung nicht.

Entweder unterstützt Dein SQL Tool so etwas oder arbeitest einfach grundsätzlich ohne autocommit.

Wenn dann auf einmal anstatt “1 row(s) deleted” die Meldung “204834 row(s) deleted” angezeigt wird (oder wie auch immer die Meldung Deines SQL Tools lautet), machst Du einfach ein ROLLBACK, und alles ist gut.

Im übrigen hilft die Einstellung bei MySQL auch nicht viel, denn ein DELETE FROM foo WHERE 1 wird auch einfach alle Datensätze löschen obwohl ein WHERE vorhanden ist.

Meinst Du sowas?

test=# create table kdjanzen as select * from generate_series(1,10) as s;
SELECT 10
test=*# update kdjanzen set s= 20 where s <= 5;
UPDATE 5
test=*# select * from kdjanzen ;
 s
----
  6
  7
  8
  9
 10
 20
 20
 20
 20
 20
(10 rows)

Ansonsten: Transaktionen funktionieren unter PG in ALLEN Storage-Engines …


Andreas

Hallo castorp,

vielen Dank fuer die schnelle Antwort.
Jetzt weiss ich Bescheid und werde eben immer sehr vorsichtig sein.

Hallo akretschmer,

genau so etwas habe ich gemeint.
Und wenn ich nun das ‘where <= 5’ weglasse, wird eben die ganze Tabelle geaendert, obwohl eigentlich nur eben z.B. die 5 Eintraege aendern wollte.

Die Antwort von castorp war dazu eben hilfreich.

Danke.

K.D.J.

Tja, eine funktionierende Implementierung eines Gedankenlesers fehlt halt noch. Ohne WHERE bekommst beim SELECT halt alle Rows, und beim UPDATE diese geändert.
Wenn Du Auto fährst und nach links lenkst, obwohl Du eigentlich nach rechts willst, was passiert dann?

Die Antwort von castorp war dazu eben hilfreich.

Danke.

K.D.J.

ACK. Wenn man interaktiv auf wichtigen Daten arbytet sollte man autocommit abschalten.


Andreas