PostgreSQL เชจเซ เชเชเชคเชฐเชฟเช เชฎเชฟเชเซเชจเชฟเชเชฎเซเชธเชจเซ เชตเชฟเชถเชฟเชทเซเชเชคเชพเช เชคเซเชจเซ เชเซเชเชฒเซเช เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชเชฎเชพเช เชเซเชฌ เช เชเชกเชชเซ เช เชจเซ เช เชจเซเชฏเชฎเชพเช "เชเซเชฌ เชเชกเชชเซ เชจเชนเซเช" เชฅเชตเชพ เชฆเซ เชเซ. เชเชเซ เชเชชเชฃเซ DBMS เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ เช เชจเซ เชตเชฟเชเชพเชธเชเชฐเซเชคเชพ เชคเซเชจเซ เชธเชพเชฅเซ เชถเซเช เชเชฐเซ เชเซ เชคเซ เชตเชเซเชเซเชจเชพ เชธเชเชเชฐเซเชทเชจเชพ เชเชคเซเชคเชฎ เชเชฆเชพเชนเชฐเชฃ เชชเชฐ เชงเซเชฏเชพเชจ เชเซเชจเซเชฆเซเชฐเชฟเชค เชเชฐเซเชถเซเช - เช เชชเชกเซเช เชตเชฟ MVCC เชธเชฟเชฆเซเชงเชพเชเชคเซ.
เชฎเชพเชเชฅเซ เชธเชเชเซเชทเชฟเชชเซเชค เชตเชพเชฐเซเชคเชพ
เชเซเชฏเชพเชฐเซ เชชเชเชเซเชคเชฟ เช เชชเชกเซเช เชเชฆเซเชถ เชฆเซเชตเชพเชฐเชพ เชธเชเชถเซเชงเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชเชฐเซเชเชฐ เชฌเซ เชเชพเชฎเชเซเชฐเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ: เชเชพเชขเซ เชจเชพเชเซ เช เชจเซ เชฆเชพเชเชฒ เชเชฐเซ. IN เชถเชฌเซเชฆเชฎเชพเชณเชพเชจเซเช เชตเชฐเซเชคเชฎเชพเชจ เชธเชเชธเซเชเชฐเชฃ xmax เช เช เชชเชกเซเช เชเชฐเซเชฒ เชตเซเชฏเชตเชนเชพเชฐเชจเซ เชธเชเชเซเชฏเชพเชจเซ เชฌเชฐเชพเชฌเชฐ เชธเซเช เชเชฐเซเชฒ เชเซ. เชชเชเซ เชคเซ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชจเชตเซ เชเชตเซเชคเซเชคเชฟ เชธเชฎเชพเชจ เชฐเซเชเชพ; เชคเซเชจเซเช xmin เชฎเซเชฒเซเชฏ เช เชเชพเชเชจเชพ เชธเชเชธเซเชเชฐเชฃเชจเชพ xmax เชฎเซเชฒเซเชฏ เชธเชพเชฅเซ เชเชเชฐเซเชช เชเซ.
เช เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชชเซเชฐเซเชฃ เชฅเชฏเชพเชจเชพ เช
เชฎเซเช เชธเชฎเชฏ เชชเชเซ, เชเซเชจเซ เช
เชฅเชตเชพ เชจเชตเซ เชเชตเซเชคเซเชคเชฟ, เชคเซเชจเชพ เชเชงเชพเชฐเซ COMMIT/ROOLBACK
, เชเชณเชเชตเชพเชฎเชพเช เชเชตเชถเซ "เชฎเซเชค" (เชฎเซเชค เชเชชเชฒเซเชธ) เชเซเชฏเชพเชฐเซ เชชเชธเชพเชฐ เชฅเชพเชฏ เชเซ VACUUM
เชเซเชฌเชฒ เช
เชจเซเชธเชพเชฐ เช
เชจเซ เชธเชพเชซ.
เชชเชฐเชเชคเซ เช เชคเชฐเชค เช เชฅเชถเซ เชจเชนเซเช, เชชเชฐเชเชคเซ "เชฎเซเชค" เชธเชพเชฅเซเชจเซ เชธเชฎเชธเซเชฏเชพเช เชเซเชฌ เช เชเชกเชชเชฅเซ เชนเชธเซเชคเชเชค เชเชฐเซ เชถเชเชพเชฏ เชเซ - เชตเชพเชฐเชเชตเชพเชฐ เช
เชฅเชตเชพ
#1: เชฎเชจเซ เชคเซเชจเซ เชเชธเซเชกเชตเชพเชจเซเช เชเชฎเซ เชเซ
เชเชพเชฒเซ เชเชนเซเช เชเซ เชคเชฎเชพเชฐเซ เชชเชฆเซเชงเชคเชฟ เชตเซเชฏเชตเชธเชพเชฏเชจเชพ เชคเชฐเซเช เชชเชฐ เชเชพเชฎ เชเชฐเซ เชฐเชนเซ เชเซ, เช เชจเซ เช เชเชพเชจเช เชคเซเชจเซ เชเซเชฏเชพเชฒ เชเชตเซ เชเซ เชเซ เชเซเชเชฒเชพเช เชฐเซเชเซเชฐเซเชกเชฎเชพเช X เชซเซเชฒเซเชกเชจเซ เช เชชเชกเซเช เชเชฐเชตเซเช เชเชฐเซเชฐเซ เชเซ:
UPDATE tbl SET X = <newX> WHERE pk = $1;
เชชเชเซ, เชเซเชฎ เชเซเชฎ เชเชเซเชเซเชเซเชฏเซเชถเชจ เชเชเชณ เชตเชงเซ เชเซ, เชคเซ เชคเชพเชฐเชฃ เชเชชเซ เชเซ เชเซ Y เชซเซเชฒเซเชกเชจเซ เชชเชฃ เช เชชเชกเซเช เชเชฐเชตเซเช เชเซเชเช:
UPDATE tbl SET Y = <newY> WHERE pk = $1;
... เช เชจเซ เชชเชเซ Z เชชเชฃ - เชถเชพ เชฎเชพเชเซ เชจเชพเชจเชเชกเซ เชตเชธเซเชคเซเช เชชเชฐ เชธเชฎเชฏ เชฌเชเชพเชกเซ?
UPDATE tbl SET Z = <newZ> WHERE pk = $1;
เชกเซเชเชพเชฌเซเชเชฎเชพเช เชนเชตเซ เช เชฐเซเชเซเชฐเซเชกเชจเซ เชเซเชเชฒเซ เชเชตเซเชคเซเชคเชฟเช เชเซ? เชนเชพ, 4 เชเซเชเชกเชพเช! เชเชฎเชพเชเชฅเซ, เชเช เชธเชเชฌเชเชงเชฟเชค เชเซ, เช เชจเซ 3 เชคเชฎเชพเชฐเชพ เชชเชเซ [เชเชเซ]เชตเซเชเซเชฏเซเชฎ เชฆเซเชตเชพเชฐเชพ เชธเชพเชซ เชเชฐเชตเชพเชจเชพ เชฐเชนเซเชถเซ.
เช เชฐเซเชคเซ เชจ เชเชฐเซ! เชตเชพเชชเชฐเชตเซ เชเช เชตเชฟเชจเชเชคเซเชฎเชพเช เชคเชฎเชพเชฎ เชซเซเชฒเซเชก เช เชชเชกเซเช เชเชฐเซ เชฐเชนเซเชฏเชพเช เชเซเช เชฒเชเชญเช เชนเชเชฎเซเชถเชพ เชชเชฆเซเชงเชคเชฟเชจเซ เชคเชฐเซเช เช เชฐเซเชคเซ เชฌเชฆเชฒเซ เชถเชเชพเชฏ เชเซ:
UPDATE tbl SET X = <newX>, Y = <newY>, Z = <newZ> WHERE pk = $1;
#2: เชเชชเชฏเซเช เชเชฐเซ เชคเซเชจเชพเชฅเซ เช เชฒเช เชเซ, เชฒเซเชฏเซเช!
เชคเซเชฅเซ, เชคเชฎเซ เชนเชเซ เชชเชฃ เชเชเซเชเชคเชพ เชนเชคเชพ
UPDATE tbl SET X = <newX> WHERE pk BETWEEN $1 AND $2;
เชฒเชเชญเช เช เชซเซเชฐเซเชฎเชฎเชพเช เชตเชฟเชจเชเชคเซ เชเชฃเซ เชตเชพเชฐ เชฅเชพเชฏ เชเซ เช เชจเซ เชฒเชเชญเช เชนเชเชฎเซเชถเชพ เชเชพเชฒเซ เชจเชตเซเช เชซเซเชฒเซเชก เชญเชฐเชตเชพ เชฎเชพเชเซ เชจเชนเซเช, เชชเชฐเชเชคเซ เชกเซเชเชพเชฎเชพเช เชเซเชเชฒเซเช เชญเซเชฒเซ เชธเซเชงเชพเชฐเชตเชพ เชฎเชพเชเซ. เชคเซ เช เชธเชฎเชฏเซ, เชคเซเชฃเซเช เชชเซเชคเซ เชนเชพเชฒเชจเชพ เชกเซเชเชพเชจเซ เชเซเชเชธเชพเชเชจเซ เชฌเชฟเชฒเชเซเชฒ เชงเซเชฏเชพเชจเชฎเชพเช เชฒเซเชตเชพเชฎเชพเช เชเชตเชคเซ เชจเชฅเซ - เชชเชฐเชเชคเซ เชจเชฟเชฐเชฐเซเชฅเช! เชเชเชฒเซ เชเซ, เชฐเซเชเซเชฐเซเชกเชจเซ เชซเชฐเซเชฅเซ เชฒเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชญเชฒเซ เชคเซเชฎเชพเช เชฌเชฐเชพเชฌเชฐ เชถเซเช เชเซเชเช เชเซ - เชชเชฃ เชถเชพ เชฎเชพเชเซ? เชเชพเชฒเซ เชคเซเชจเซ เช เซเช เชเชฐเซเช:
UPDATE tbl SET X = <newX> WHERE pk BETWEEN $1 AND $2 AND X IS DISTINCT FROM <newX>;
เชเชฃเชพ เชฒเซเชเซ เชเชตเชพ เช
เชฆเซเชญเซเชค เชเชชเชฐเซเชเชฐเชจเชพ เช
เชธเซเชคเชฟเชคเซเชต เชตเชฟเชถเซ เชเชพเชฃเชคเชพ เชจเชฅเซ, เชคเซเชฅเซ เช
เชนเซเช เชเช เชเซเช เชถเซเช เชเซ IS DISTINCT FROM
เช
เชจเซ เช
เชจเซเชฏ เชฒเซเชเชฟเชเชฒ เชเชชเชฐเซเชเชฐเซ เชฎเชฆเชฆ เชเชฐเชตเชพ เชฎเชพเชเซ:
... เช
เชจเซ เชเชเชฟเชฒ เชชเชฐเชจเซ เชเชพเชฎเชเซเชฐเซ เชตเชฟเชถเซ เชฅเซเชกเซเช ROW()
- เช
เชญเชฟเชตเซเชฏเชเซเชคเชฟเช:
#3: เชนเซเช เชฎเชพเชฐเชพ เชชเซเชฐเซเชฎเชฟเชเชพเชจเซ... เชฌเซเชฒเซเช เชเชฐเซเชจเซ เชเชณเชเซเช เชเซเช
เชฒเซเชจเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชฐเชนเซเชฏเชพ เชเซ เชฌเซ เชธเชฎเชพเชจ เชธเชฎเชพเชเชคเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเช, เชเซเชฎเชพเชเชฅเซ เชฆเชฐเซเช เชชเซเชฐเชตเซเชถเชจเซ เชเชฟเชนเซเชจเชฟเชค เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซ เชเซ เชเซ เชคเซ "เชชเซเชฐเชเชคเชฟเชฎเชพเช เชเซ":
UPDATE tbl SET processing = TRUE WHERE pk = $1;
เชเซ เช เชชเซเชฐเชเซเชฐเชฟเชฏเชพเช เชตเชพเชธเซเชคเชตเชฎเชพเช เชเชเชฌเซเชเชพเชฅเซ เชธเซเชตเชคเชเชคเซเชฐ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเชคเซ เชนเซเชฏ, เชชเชฃ เชเช เช IDเชจเซ เช เชเชฆเชฐ, เชชเซเชฐเชฅเชฎ เชตเซเชฏเชตเชนเชพเชฐ เชชเซเชฐเซเชฃ เชจ เชฅเชพเชฏ เชคเซเชฏเชพเช เชธเซเชงเซ เชฌเซเชเชพ เชเซเชฒเชพเชฏเชจเซเชเชจเซ เช เชตเชฟเชจเชเชคเซ เชชเชฐ "เชฒเซเช" เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ.
เชเชเซเชฒ เชจเชเชฌเชฐ 1: เชเชพเชฐเซเชฏ เชชเชพเชเชฒเชพ เชเชเชฎเชพเช เชเชเชพเชกเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ
เชเชพเชฒเซ เชคเซเชจเซ เชซเชฐเซเชฅเซ เชเชฎเซเชฐเซเช IS DISTINCT FROM
:
UPDATE tbl SET processing = TRUE WHERE pk = $1 AND processing IS DISTINCT FROM TRUE;
เช เชซเซเชฐเซเชฎเชฎเชพเช, เชฌเซเชเซ เชตเชฟเชจเชเชคเซ เชซเชเซเชค เชกเซเชเชพเชฌเซเชเชฎเชพเช เชเชเชเชชเชฃ เชฌเชฆเชฒเชถเซ เชจเชนเซเช, เชฌเชงเซเช เชชเชนเซเชฒเซเชฅเซ เชเซเชตเซเช เชนเซเชตเซเช เชเซเชเช เชคเซ เชชเซเชฐเชฎเชพเชฃเซ เชเซ - เชคเซเชฅเซ, เช เชตเชฐเซเชงเชฟเชค เชฅเชถเซ เชจเชนเซเช. เชเชเชณ, เช เชฎเซ เชเชชเซเชฒเชพเชเชก เชเชฒเซเชเซเชฐเชฟเชงเชฎเชฎเชพเช เชฐเซเชเซเชฐเซเชกเชจเซ "เชจ เชถเซเชงเชตเชพ" เชจเซ เชนเชเซเชเชค เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซเช เชเซเช.
เชเชเซเชฒ เชจเชเชฌเชฐ 2: เชธเชฒเชพเชนเชเชพเชฐเซ เชคเชพเชณเชพเช
เชเช เช
เชฒเช เชฒเซเช เชฎเชพเชเซ เชเช เชฎเซเชเซ เชตเชฟเชทเชฏ, เชเซเชจเชพ เชตเชฟเชถเซ เชคเชฎเซ เชตเชพเชเชเซ เชถเชเซ เชเซ
เชเชเซเชฒ เชจเชเชฌเชฐ 3: เชฎเซเชฐเซเช เชเซเชฒเซเชธ
เชชเชฐเชเชคเซ เชคเชฎเชพเชฐเซ เชธเชพเชฅเซ เชเชตเซเช เช เชฅเชตเซเช เชเซเชเช เชธเชฎเชพเชจ เชฐเซเชเซเชฐเซเชก เชธเชพเชฅเซ เชเช เชธเชพเชฅเซ เชเชพเชฎ? เช
เชฅเชตเชพ เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชคเชฎเซ เชเซเชฒเชพเชฏเชเช เชฌเชพเชเซ เชชเชฐ เชฌเชฟเชเชจเซเชธ เชฒเซเชเชฟเชเชจเซ เชเซเชฒ เชเชฐเชตเชพ เชฎเชพเชเซเชจเชพ เช
เชฒเซเชเซเชฐเชฟเชงเชฎเซเชธ เชธเชพเชฅเซ เชเชกเชฌเชก เชเชฐเซ เชนเชคเซ? เช
เชจเซ เชเซ เชคเชฎเซ เชคเซเชจเชพ เชตเชฟเชถเซ เชตเชฟเชเชพเชฐเซ เชเซ? ..
เชธเซเชฐเซเชธ: www.habr.com