PostgreSQL เชจเซ เชเชเชคเชฐเชฟเช เชชเชฆเซเชงเชคเชฟเช เชเซ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ เชคเซเชจเชพ เชเชพเชฐเชฃเซ เชคเซ เชเซเชเชฒเซเช เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชเชฎเชพเช เชเซเชฌ เช เชเชกเชชเซ เชฌเชจเซ เชเซ เช เชจเซ เช เชจเซเชฏเชฎเชพเช เชเชเชฒเซเช เชเชกเชชเซ เชจเชฅเซ. เชเชเซ, เชเชชเชฃเซ DBMS เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ เช เชจเซ เชกเซเชตเชฒเชชเชฐ เชคเซเชจเซ เชธเชพเชฅเซ เชถเซเช เชเชฐเซ เชเซ เชคเซ เชตเชเซเชเซเชจเชพ เชธเชเชเชฐเซเชทเชจเซเช เชเช เชเชคเซเชคเชฎ เชเชฆเชพเชนเชฐเชฃ เชเซเชเชถเซเช: เช เชชเชกเซเช เชตเชฟเชฐเซเชฆเซเชง MVCC เชธเชฟเชฆเซเชงเชพเชเชคเซ.
เชธเชเชเซเชทเชฟเชชเซเชค เชชเซเชฒเซเช :
เชเซเชฏเชพเชฐเซ เชเซเช เชชเชเชเซเชคเชฟเชจเซ UPDATE เชเชฆเซเชถ เชฆเซเชตเชพเชฐเชพ เชธเซเชงเชพเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชตเชพเชธเซเชคเชตเชฎเชพเช เชฌเซ เชเชพเชฎเชเซเชฐเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ: เชเช DELETE เช เชจเซ เชเช INSERT. เชฒเชพเชเชจเชจเซเช เชตเชฐเซเชคเชฎเชพเชจ เชธเชเชธเซเชเชฐเชฃ xmax เช UPDATE เชเชฐเซเชฒเชพ เชตเซเชฏเชตเชนเชพเชฐเชจเชพ เชจเชเชฌเชฐ เชชเชฐ เชธเซเช เชฅเชฏเซเชฒ เชเซ. เชชเชเซ เชคเซ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชจเชตเซ เชเชตเซเชคเซเชคเชฟ เช เช เชฒเชพเชเชจ; เชคเซเชจเซเช 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;เชกเซเชเชพเชฌเซเชเชฎเชพเช เช เชเชจเซเชเซเชฐเซเชจเชพ เชเซเชเชฒเชพ เชตเชฐเซเชเชจ เชเซ? เชนเชพ, เชเชพเชฐ! เชคเซเชฎเชพเชเชฅเซ เชเช เชตเชฐเซเชคเชฎเชพเชจ เชเซ, เช เชจเซ เชคเซเชฐเชฃเชจเซ [เชเชเซ]เชตเซเชเซเชฏเซเชฎ เชฆเซเชตเชพเชฐเชพ เชธเชพเชซ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ.
เชเชตเซเช เชจเชพ เชเชฐเซ! เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเซ! เชเช เชตเชฟเชจเชเชคเซเชฎเชพเช เชฌเชงเชพ เชเซเชทเซเชคเซเชฐเซเชจเซ เช เชชเชกเซเช เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช โ เชฒเชเชญเช เชนเชเชฎเซเชถเชพ เชชเชฆเซเชงเชคเชฟเชจเซ เชคเชฐเซเช เช เชฐเซเชคเซ เชฌเชฆเชฒเซ เชถเชเชพเชฏ เชเซ:
UPDATE tbl SET X = <newX>, Y = <newY>, Z = <newZ> WHERE pk = $1;#2: เชเชชเชฏเซเช เชเชฐเซ "IS DISTINCT FROM, เชฒเซเชฏเซเช!"
เชคเซ, เชคเชฎเซ เชนเชเซ เชชเชฃ เชเชเซเชเชคเชพ เชนเชคเชพ เชเซ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชธเซเชเซเชฐเชฟเชชเซเช เช เชฅเชตเชพ เชเชจเซเชตเชฐเซเชเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเชคเซ เชตเชเชคเซ). เช เชจเซ เชเชจเชพ เชเซเชตเซเช เชเชเชเช เชธเซเชเซเชฐเชฟเชชเซเชเชฎเชพเช เชจเชพเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ:
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
