PostgreSQL เด†เดจเตเดฑเดฟเดชเดพเดฑเตเดฑเต‡เดฃเตเด•เตพ: "เดฎเดฐเดฟเดšเตเดšเดตเดฐเตเดŸเต†" เด•เต‚เดŸเตเดŸเดคเตเดคเดฟเดจเต†เดคเดฟเดฐเดพเดฏ เดชเต‹เดฐเดพเดŸเตเดŸเด‚

PostgreSQL-เดจเตเดฑเต† เด†เดจเตเดคเดฐเดฟเด• เดธเด‚เดตเดฟเดงเดพเดจเด™เตเด™เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เดฐเต€เดคเดฟ เดšเดฟเดฒ เดธเดพเดนเดšเดฐเตเดฏเด™เตเด™เดณเดฟเตฝ เด…เดคเต เดตเดณเดฐเต† เดตเต‡เด—เดคเตเดคเดฟเดฒเดพเด•เดพเดจเตเด‚ เดฎเดฑเตเดฑเตเดณเตเดณเดตเดฏเดฟเตฝ เด…เดคเตเดฐ เดตเต‡เด—เดคเตเดคเดฟเดฒเดพเด•เดพเดคเดฟเดฐเดฟเด•เตเด•เดพเดจเตเด‚ เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดจเตเดจเต, เด’เดฐเต DBMS เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดคเตเด‚ เด’เดฐเต เดกเต†เดตเดฒเดชเตเดชเตผ เด…เดคเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŽเดจเตเดคเตเดšเต†เดฏเตเดฏเตเดจเตเดจเต เดŽเดจเตเดจเดคเตเด‚ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดตเตˆเดฐเตเดฆเตเดงเตเดฏเดคเตเดคเดฟเดจเตเดฑเต† เด’เดฐเต เด•เตเดฒเดพเดธเดฟเด•เต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดจเดฎเตเดฎเตพ เดจเต‹เด•เตเด•เดพเด‚: เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต vs. MVCC เดคเดคเตเดตเด™เตเด™เตพ.

เดŽเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด’เดฐเต เดšเต†เดฑเดฟเดฏ เดชเตเดฒเต‹เดŸเตเดŸเต เดฎเดฟเด•เดšเตเดš เดฒเต‡เด–เดจเด‚:

เด’เดฐเต UPDATE เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เดตเดฐเดฟเดฏเดฟเตฝ เดฎเดพเดฑเตเดฑเด‚ เดตเดฐเตเดคเตเดคเตเดฎเตเดชเต‹เตพ, เดฐเดฃเตเดŸเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดจเดŸเด•เตเด•เตเดจเตเดจเต: เด’เดฐเต DELETE เด‰เด‚ เด’เดฐเต INSERT เด‰เด‚. เดตเดฐเดฟเดฏเตเดŸเต† เดจเดฟเดฒเดตเดฟเดฒเต† เดชเดคเดฟเดชเตเดชเต เด…เดชเตเดกเต‡เดฑเตเดฑเต เดจเดŸเดคเตเดคเดฟเดฏ เด‡เดŸเดชเดพเดŸเดฟเดจเตเดฑเต† เดจเดฎเตเดชเดฑเดพเดฏเดฟ xmax เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดคเตเดŸเตผเดจเตเดจเต เด…เดคเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต. เด’เดฐเต เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเต เด…เดคเต‡ เดตเดฐเดฟเดฏเดฟเตฝ เดคเดจเตเดจเต†; เด…เดคเดฟเดจเตเดฑเต† xmin เดฎเต‚เดฒเตเดฏเด‚ เดฎเตเตป เดชเดคเดฟเดชเตเดชเดฟเดจเตเดฑเต† xmax เดฎเต‚เดฒเตเดฏเดตเตเดฎเดพเดฏเดฟ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดจเตเดจเต.

เดˆ เด‡เดŸเดชเดพเดŸเต เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเดฏเดฟ เด•เตเดฑเดšเตเดšเต เดธเดฎเดฏเดคเตเดคเดฟเดจเต เดถเต‡เดทเด‚, เดชเดดเดฏเดคเต‹ เดชเตเดคเดฟเดฏเดคเต‹ เด†เดฏ เดชเดคเดฟเดชเตเดชเต, เด…เดจเตเดธเดฐเดฟเดšเตเดšเต COMMIT/ROOLBACK, เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเดชเตเดชเต†เดŸเตเด‚ เดกเต†เดกเต เดŸเตเดฏเต‚เดชเตเดชเดฟเตพเดธเต เด•เดŸเดจเตเดจเตเดชเต‹เด•เตเดฎเตเดชเต‹เตพ VACUUM เดฎเต‡เดถ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต เดตเตƒเดคเตเดคเดฟเดฏเดพเด•เตเด•เดฟ.

PostgreSQL เด†เดจเตเดฑเดฟเดชเดพเดฑเตเดฑเต‡เดฃเตเด•เตพ: "เดฎเดฐเดฟเดšเตเดšเดตเดฐเตเดŸเต†" เด•เต‚เดŸเตเดŸเดคเตเดคเดฟเดจเต†เดคเดฟเดฐเดพเดฏ เดชเต‹เดฐเดพเดŸเตเดŸเด‚

เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เด‰เดŸเดจเดŸเดฟ เดธเด‚เดญเดตเดฟเด•เตเด•เดฟเดฒเตเดฒ, เดชเด•เตเดทเต‡ "เดฎเดฐเดฟเดšเตเดšเดตเดฐเตเดฎเดพเดฏเตเดณเตเดณ" เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เดตเดณเดฐเต† เดตเต‡เด—เดคเตเดคเดฟเตฝ เดจเต‡เดŸเดฟเดฏเต†เดŸเตเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ - เด†เดตเตผเดคเตเดคเดฟเดšเตเดšเตเดณเตเดณเดคเต‹ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฐเต‡เด–เด•เดณเตเดŸเต† เด•เต‚เดŸเตเดŸ เดชเตเดคเตเด•เตเด•เตฝ เด’เดฐเต เดตเดฒเดฟเดฏ เดฎเต‡เดถเดฏเดฟเตฝ, เด•เตเดฑเดšเตเดšเต เด•เดดเดฟเดžเตเดžเต เด’เดฐเต เดธเดพเดนเดšเดฐเตเดฏเด‚ เดจเต‡เดฐเดฟเดŸเตเดจเตเดจเต เดตเดพเด•เตเดตเด‚ เดธเดนเดพเดฏเดฟเด•เตเด•เดฟเดฒเตเดฒ.

#1: เดŽเดจเดฟเด•เตเด•เต เด…เดคเต เดจเต€เด•เตเด•เดพเตป เด‡เดทเตเดŸเดฎเดพเดฃเต

เดจเดฟเด™เตเด™เดณเตเดŸเต† เดฌเดฟเดธเดฟเดจเดธเต เดฒเต‹เดœเดฟเด•เต เดฐเต€เดคเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเตเด‚ เดเดคเต‹ เดฑเต†เด•เตเด•เต‹เตผเดกเดฟเดฒเต† เดซเต€เตฝเดกเต X เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต†เดจเตเดจเต เดชเต†เดŸเตเดŸเต†เดจเตเดจเต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเตเด‚ เด•เดฐเตเดคเตเด•:

UPDATE tbl SET X = <newX> WHERE pk = $1;

เดชเดฟเดจเตเดจเต†, เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดทเตป เดชเตเดฐเต‹เด—เดฎเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, Y เดซเต€เตฝเดกเตเด‚ เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต†เดจเตเดจเต เด…เดคเต เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเต:

UPDATE tbl SET Y = <newY> WHERE pk = $1;

... เดชเดฟเดจเตเดจเต† เด‡เดธเดกเตเด‚ เด‰เดฃเตเดŸเต - เดšเต†เดฑเดฟเดฏ เด•เดพเดฐเตเดฏเด™เตเด™เดณเดฟเตฝ เดŽเดจเตเดคเดฟเดจเดพเดฃเต เดตเดฟเดทเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเต?

UPDATE tbl SET Z = <newZ> WHERE pk = $1;

เดˆ เดŽเตปเดŸเตเดฐเดฟเดฏเตเดŸเต† เดŽเดคเตเดฐ เดชเดคเดฟเดชเตเดชเตเด•เตพ เด‡เดชเตเดชเต‹เตพ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเตฝ เด‰เดฃเตเดŸเต? เด…เดคเต†, เดจเดพเดฒเต! เด…เดตเดฏเดฟเดฒเตŠเดจเตเดจเต เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณเดคเดพเดฃเต, เดฎเต‚เดจเตเดจเต†เดฃเตเดฃเด‚ [เด“เดŸเตเดŸเต‹] เดตเดพเด•เตเดตเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดตเตƒเดคเตเดคเดฟเดฏเดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เด…เดคเต เดšเต†เดฏเตเดฏเดฐเตเดคเต! เด…เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เต‚! เด’เดฐเต เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเตฝ เดŽเดฒเตเดฒเดพ เดซเต€เตฝเดกเตเด•เดณเตเด‚ เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต โ€” เดฎเดฟเด•เตเด•เดตเดพเดฑเตเด‚ เดŽเดฒเตเดฒเดพเดฏเตโ€Œเดชเตเดชเต‹เดดเตเด‚ เดฐเต€เดคเดฟเดฏเตเดŸเต† เดฏเตเด•เตเดคเดฟ เด‡เดคเตเดชเต‹เดฒเต† เดฎเดพเดฑเตเดฑเดพเด‚:

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 เดธเดนเดพเดฏเดฟเด•เตเด•เดพเตป เดฎเดฑเตเดฑเต เดฒเต‹เดœเดฟเด•เตเด•เตฝ เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผเดฎเดพเดฐเตเด‚:
PostgreSQL เด†เดจเตเดฑเดฟเดชเดพเดฑเตเดฑเต‡เดฃเตเด•เตพ: "เดฎเดฐเดฟเดšเตเดšเดตเดฐเตเดŸเต†" เด•เต‚เดŸเตเดŸเดคเตเดคเดฟเดจเต†เดคเดฟเดฐเดพเดฏ เดชเต‹เดฐเดพเดŸเตเดŸเด‚
โ€ฆเดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เด•เตเดฑเดšเตเดšเตเด•เต‚เดŸเดฟ ROW()- เดŽเด•เตเดธเตเดชเตเดฐเดทเดจเตเด•เตพ:
PostgreSQL เด†เดจเตเดฑเดฟเดชเดพเดฑเตเดฑเต‡เดฃเตเด•เตพ: "เดฎเดฐเดฟเดšเตเดšเดตเดฐเตเดŸเต†" เด•เต‚เดŸเตเดŸเดคเตเดคเดฟเดจเต†เดคเดฟเดฐเดพเดฏ เดชเต‹เดฐเดพเดŸเตเดŸเด‚

#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