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.

 

 

A bejegyzés trackback címe:

https://devfuck.blog.hu/api/trackback/id/tr90956936

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása