PostgreSQL-เดจเตเดฑเต เดเดจเตเดคเดฐเดฟเด เดธเดเดตเดฟเดงเดพเดจเดเตเดเดณเตเดเต เดชเตเดฐเดคเตเดฏเตเดเดคเดเตพ เดเดฟเดฒ เดธเดพเดนเดเดฐเตเดฏเดเตเดเดณเดฟเตฝ เด เดคเต เดตเดณเดฐเต เดตเตเดเดคเตเดคเดฟเดฒเดพเดเดพเดจเตเด เดฎเดฑเตเดฑเตเดณเตเดณเดตเดฏเดฟเตฝ "เดตเดณเดฐเต เดตเตเดเดคเตเดคเดฟเดฒเดพเดเดพเดคเดฟเดฐเดฟเดเตเดเดพเดจเตเด" เด เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจเต. เดเดฐเต เดกเดฟเดฌเดฟเดเดเดเดธเต เดเดเตเดเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเตเดตเตเดจเตเดจเตเด เด เดคเต เดเดชเดฏเตเดเดฟเดเตเดเต เดกเตเดตเดฒเดชเตเดชเตผ เดเดจเตเดคเตเดเตเดฏเตเดฏเตเดจเตเดจเตเดตเตเดจเตเดจเตเด เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดตเตเดฐเตเดฆเตเดงเตเดฏเดคเตเดคเดฟเดจเตเดฑเต เดเดฐเต เดฎเดฟเดเดเตเด เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ เดเดจเตเดจเต เดจเดฎเตเดฎเตพ เดถเตเดฐเดฆเตเดง เดเตเดจเตเดฆเตเดฐเตเดเดฐเดฟเดเตเดเตเด - เด เดชเตเดกเตเดฑเตเดฑเต vs 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;
เด เดชเตเดฐเดเตเดฐเดฟเดฏเดเตพ เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดชเดฐเดธเตเดชเดฐเด เดธเตเดตเดคเดจเตเดคเตเดฐเดฎเดพเดฏเดฟ เดเดพเดฐเตเดฏเดเตเดเตพ เดเตเดฏเตเดฏเตเดจเตเดจเตเดฃเตเดเตเดเตเดเดฟเดฒเตเด, เดเดฐเต เดเดกเดฟเดฏเดฟเตฝ เดคเดจเตเดจเต, เดเดฆเตเดฏ เดเดเดชเดพเดเต เดชเตเตผเดคเตเดคเดฟเดฏเดพเดเตเดจเตเดจเดคเตเดตเดฐเต เดฐเดฃเตเดเดพเดฎเดคเตเดคเต เดเตเดฒเดฏเดจเตเดฑเต เด เด เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเตฝ "เดฒเตเดเตเดเต" เดเตเดฏเตเดฏเดชเตเดชเตเดเตเด.
เดชเดฐเดฟเดนเดพเดฐเด # 1: เดเตเดฎเดคเดฒ เดฎเตเดฎเตเดชเดคเตเดคเตเดคเดฟเดฒเตเดเตเดเต เดเตเดฐเตเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต
เดจเดฎเตเดเตเดเต เด
เดคเต เดตเตเดฃเตเดเตเด เดเตเตผเดเตเดเดพเด IS DISTINCT FROM
:
UPDATE tbl SET processing = TRUE WHERE pk = $1 AND processing IS DISTINCT FROM TRUE;
เด เดซเตเดฎเดฟเตฝ, เดฐเดฃเตเดเดพเดฎเดคเตเดคเต เด เดญเตเดฏเตผเดคเตเดฅเดจ เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเตฝ เดเดจเตเดจเตเด เดฎเดพเดฑเตเดฑเดฟเดฒเตเดฒ, เดเดฒเตเดฒเดพเด เดเดคเดฟเดจเดเด เดคเดจเตเดจเต เดเดฏเดฟเดฐเดฟเดเตเดเดฃเด - เด เดคเดฟเดจเดพเตฝ, เดคเดเดฏเตฝ เดธเดเดญเดตเดฟเดเตเดเดฟเดฒเตเดฒ. เด เดเตเดคเตเดคเดคเดพเดฏเดฟ, เดชเตเดฐเดฏเตเดเดฟเดเตเด เด เตฝเดเตเดฐเดฟเดคเดคเตเดคเดฟเตฝ เดฑเตเดเตเดเตเตผเดกเต "เดเดฃเตเดเตเดคเตเดคเตเดจเตเดจเดฟเดฒเตเดฒ" เดเดจเตเดจ เดตเดธเตเดคเตเดค เดเดเตเดเตพ เดชเตเดฐเตเดธเดธเตเดธเต เดเตเดฏเตเดฏเตเดจเตเดจเต.
เดชเดฐเดฟเดนเดพเดฐเด # 2: เดเดชเดฆเตเดถเด เดฒเตเดเตเดเตเดเตพ
เดเดฐเต เดชเตเดฐเดคเตเดฏเตเด เดฒเตเดเดจเดคเตเดคเดฟเดจเดพเดฏเตเดณเตเดณ เดเดฐเต เดตเดฒเดฟเดฏ เดตเดฟเดทเดฏเด, เด
เดคเดฟเตฝ เดจเดฟเดเตเดเตพเดเตเดเต เดตเดพเดฏเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด
เดชเดฐเดฟเดนเดพเดฐเด # 3: เดฎเดฃเตเดเตป เดเตเดณเตเดเตพ
เดเดจเตเดจเดพเตฝ เดเดคเตเดคเดจเตเดจเตเดฏเดพเดฃเต เดจเดฟเดเตเดเตพเดเตเดเต เดธเดเดญเดตเดฟเดเตเดเตเดฃเตเดเดคเต เดเดฐเต เดฑเตเดเตเดเตเตผเดกเตเดณเตเดณ เดเดฐเตเดธเดฎเดฏเด เดเตเดฒเดฟ? เด
เดฒเตเดฒเตเดเตเดเดฟเตฝ, เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดเตเดฒเดฏเดจเตเดฑเต เดญเดพเดเดคเตเดคเต เดฌเดฟเดธเดฟเดจเดธเตเดธเต เดฒเตเดเดฟเดเตเดเต เดตเดฟเดณเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด
เตฝเดเตเดฐเดฟเดคเด เดจเดฟเดเตเดเตพ เดเตเดดเดชเตเดชเดคเตเดคเดฟเดฒเดพเดเตเดเดฟเดฏเดฟเดเตเดเตเดฃเตเดเต? เดชเดฟเดจเตเดจเต เดเดฒเตเดเดฟเดเตเดเดพเตฝ?..
เด
เดตเดฒเดเดฌเด: www.habr.com