PostgreSQL เจฆเฉ เจ เฉฐเจฆเจฐเฉเจจเฉ เจฎเจเฉเจจเจฟเจเจผเจฎ เจฆเฉเจเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจเจธ เจจเฉเฉฐ เจเฉเจ เจธเจฅเจฟเจคเฉเจเจ เจตเจฟเฉฑเจ เจฌเจนเฉเจค เจคเฉเจเจผ เจนเฉเจฃ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเฉเจเจ เจนเจจ เจ เจคเฉ เจฆเฉเจเจฟเจเจ เจตเจฟเฉฑเจ "เจฌเจนเฉเจค เจคเฉเจเจผ เจจเจนเฉเจ"เฅค เจ เฉฑเจ เจ เจธเฉเจ เจเฉฑเจ DBMS เจเจฟเจตเฉเจ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉ เจ เจคเฉ เจกเจฟเจตเฉเจฒเจชเจฐ เจเจธเจฆเฉ เจจเจพเจฒ เจเฉ เจเจฐเจฆเจพ เจนเฉ เจฆเฉ เจตเจฟเจเจเจพเจฐ เจเฉฑเจ เจเจเจฐเจพเจ เจฆเฉ เจเฉฑเจ เจธเจผเจพเจจเจฆเจพเจฐ เจเจฆเจพเจนเจฐเจฃ 'เจคเฉ เจงเจฟเจเจจ เจเฉเจเจฆเจฐเจค เจเจฐเจพเจเจเฉ - เจ เฉฑเจชเจกเฉเจ เจฌเจจเจพเจฎ MVCC เจธเจฟเจงเจพเจเจค.
เจคเฉเจ เจธเฉฐเจเฉเจช เจเจนเจพเจฃเฉ
เจเจฆเฉเจ เจเฉฑเจ เจเจคเจพเจฐ เจจเฉเฉฐ เจเฉฑเจ เจ เฉฑเจชเจกเฉเจ เจเจฎเจพเจเจก เจฆเฉเจเจฐเจพ เจธเฉฐเจธเจผเฉเจงเจฟเจค เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ, เจ เจธเจฒ เจตเจฟเฉฑเจ เจฆเฉ เจเจชเจฐเฉเจธเจผเจจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเจจ: DELETE เจ เจคเฉ INSERT. 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: เจตเจฐเจคเฉ 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