Preface:
Pénteken megkellett változtatnom egy-két adatot az adatbázisban. Sajnálatos módon, kevés DB tapasztalattal, úgy kezdtem hozzá, hogy
update table_name set column_name = value where condition
És mint aki jól végezte a dolgát, elmentem cigizni. Cigiből vissza, kipróbáltam, hogy valóban megváltoztak-e az adatok. Megdöbbenten tapasztaltam, hogy túlságosan is megváltoztattak.
Gebasz van. WARNING !!!
Problem:
Ezekután próbáltam Rollback-ezni a változtatásokat, de nem lehetet. Miért? Mert nem volt transaction block-ban az utasítás sorozat, szerencsétlen adatbázis honnan tudná, hogy mit kell rollback-ezni.
Solution:
Akár milyen kis, triviális változtatást, mostantól kezdve, mindig
begin;
transaction block-ba kell helyezni. Utána már lehet rollback-ket alkalmazni ha mégis elbasztam volna valamit.
rollback;
Hogyan is működik? Természetesen rollback-ezni lehet egy Work vagy tranzakciót. Részletesebb doksi: http://www.postgresql.org/docs/7.4/interactive/sql-rollback.html
Íme egy példa transaction rollback-re:
Example:
isys=#create table dummy( a varchar(1)); CREATE TABLE isys=#insert into dummy values('a'); INSERT 0 1 isys=#select * from dummy; a --- a (1 row) isys=#begin; BEGIN isys=#update dummy set a = 'b' where a = 'a'; UPDATE 1 isys=#select * from dummy; a --- b (1 row) isys=#rollback; ROLLBACK isys=#select * from dummy; a --- a (1 row)
Enyhén szólva megizzadtam, hogy kijavítsam a hibát. Ezért gondoltam megosztom a hülyeségemet, nehogy mások is elkövessék.