MVCC-3. แƒกแƒ˜แƒ›แƒ”แƒ‘แƒ˜แƒแƒœแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒ˜

แƒแƒกแƒ” แƒ แƒแƒ›, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ”แƒ‘แƒ˜ แƒ˜แƒ–แƒแƒšแƒแƒชแƒ˜แƒ, แƒ“แƒ แƒฃแƒ™แƒแƒœ แƒ“แƒแƒ˜แƒฎแƒ˜แƒ แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ“แƒแƒ‘แƒแƒš แƒ“แƒแƒœแƒ”แƒ–แƒ” แƒแƒ แƒ’แƒแƒœแƒ˜แƒ–แƒ”แƒ‘แƒ. แƒ“แƒ แƒ‘แƒแƒšแƒแƒก แƒ›แƒ˜แƒ•แƒ”แƒ“แƒ˜แƒ— แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒœแƒแƒฌแƒ˜แƒšแƒแƒ›แƒ“แƒ” - แƒกแƒ˜แƒ›แƒ”แƒ‘แƒ˜แƒแƒœแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒ˜.

แƒกแƒแƒ—แƒแƒฃแƒ แƒ˜

แƒ แƒแƒ’แƒแƒ แƒช แƒฃแƒ™แƒ•แƒ” แƒ•แƒ—แƒฅแƒ•แƒ˜แƒ—, แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒแƒ“ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ“แƒ”แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜. แƒ”แƒ แƒ—แƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒ แƒแƒ’แƒแƒ แƒ›แƒ” แƒฃแƒœแƒ“แƒ แƒ’แƒแƒœแƒ•แƒแƒกแƒฎแƒ•แƒแƒ•แƒแƒ— แƒ›แƒ”แƒแƒ แƒ˜แƒกแƒ’แƒแƒœ, แƒแƒ› แƒ›แƒ˜แƒ–แƒœแƒ˜แƒ— แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒก แƒแƒฅแƒ•แƒก แƒแƒ แƒ˜ แƒœแƒ˜แƒจแƒแƒœแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก แƒแƒ› แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒก โ€žแƒ“แƒ แƒแƒกโ€œ (xmin แƒ“แƒ xmax). แƒ‘แƒ แƒญแƒงแƒแƒšแƒ”แƒ‘แƒจแƒ˜ - แƒ˜แƒ›แƒ˜แƒขแƒแƒ›, แƒ แƒแƒ› แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒ แƒ แƒ“แƒ แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒแƒกแƒ”แƒ—แƒ˜, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒ–แƒแƒ แƒ“แƒ˜ แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ˜. แƒ“แƒ แƒ”แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ˜ แƒแƒ แƒ˜แƒก แƒ’แƒแƒ แƒ˜แƒ’แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜.

(แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ˜แƒกแƒแƒ›แƒ”แƒ‘แƒ , แƒ แƒ”แƒแƒšแƒแƒ‘แƒ แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜แƒ: แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜ แƒ›แƒฃแƒ“แƒ›แƒ˜แƒ•แƒแƒ“ แƒ•แƒ”แƒ  แƒ’แƒแƒ˜แƒ–แƒแƒ แƒ“แƒ”แƒ‘แƒ แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ˜แƒก แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒฃแƒšแƒ˜ แƒ‘แƒ˜แƒขแƒ˜แƒก แƒกแƒ˜แƒ›แƒซแƒšแƒแƒ•แƒ แƒ˜แƒก แƒ’แƒแƒ›แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ› แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒก แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒแƒ“ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ•แƒ—, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ’แƒแƒงแƒ˜แƒœแƒ•แƒแƒก แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ—.)

แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜ แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ, xmin แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ›แƒแƒช แƒ’แƒแƒกแƒชแƒ INSERT แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ แƒ“แƒ xmax แƒ แƒฉแƒ”แƒ‘แƒ แƒชแƒแƒ แƒ˜แƒ”แƒšแƒ˜.

แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜ แƒฌแƒแƒ˜แƒจแƒšแƒ”แƒ‘แƒ, แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก xmax แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒแƒฆแƒ˜แƒœแƒ˜แƒจแƒœแƒ”แƒ‘แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒ›แƒ แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ›แƒแƒช แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒ DELETE.

แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜ แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ UPDATE แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒ”แƒแƒšแƒฃแƒ แƒแƒ“ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒ แƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ: DELETE แƒ“แƒ INSERT. แƒ แƒ˜แƒ’แƒ˜แƒก แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒแƒ“แƒ’แƒ”แƒœแƒก xmax แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒก แƒขแƒแƒšแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ›แƒแƒช แƒ’แƒแƒœแƒแƒฎแƒšแƒ“แƒ. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒแƒฎแƒแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ; แƒ›แƒ˜แƒกแƒ˜ xmin แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ แƒฌแƒ˜แƒœแƒ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก xmax แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก.

xmin แƒ“แƒ xmax แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ“แƒ˜แƒก แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒกแƒแƒ—แƒแƒฃแƒ แƒจแƒ˜. แƒแƒ› แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ“แƒ, แƒกแƒแƒ—แƒแƒฃแƒ แƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒกแƒฎแƒ•แƒ แƒ•แƒ”แƒšแƒ”แƒ‘แƒก, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“:

  • infomask แƒแƒ แƒ˜แƒก แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒกแƒ”แƒ แƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก แƒแƒ› แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒ—แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ”แƒ‘แƒก. แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ‘แƒ”แƒ•แƒ แƒ˜แƒ; แƒฉแƒ•แƒ”แƒœ แƒ—แƒแƒœแƒ“แƒแƒ—แƒแƒœ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ•แƒ— แƒ›แƒ—แƒแƒ•แƒแƒ แƒ”แƒ‘แƒก.
  • ctid แƒแƒ แƒ˜แƒก แƒ‘แƒ›แƒฃแƒšแƒ˜ แƒ˜แƒ›แƒแƒ•แƒ” แƒฎแƒแƒ–แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒฃแƒคแƒ แƒ แƒแƒฎแƒแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒกแƒ™แƒ”แƒœ. แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒฃแƒแƒฎแƒšแƒ”แƒกแƒ˜, แƒฃแƒแƒฎแƒšแƒ”แƒกแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก ctid แƒ”แƒฎแƒ”แƒ‘แƒ แƒ—แƒแƒ•แƒแƒ“ แƒแƒ› แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒก. แƒ แƒ˜แƒชแƒฎแƒ•แƒก แƒแƒฅแƒ•แƒก แƒคแƒแƒ แƒ›แƒ (x,y), แƒกแƒแƒ“แƒแƒช x แƒแƒ แƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜, y แƒแƒ แƒ˜แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜ แƒ›แƒแƒกแƒ˜แƒ•แƒจแƒ˜.
  • null bitmap - แƒแƒฆแƒœแƒ˜แƒจแƒœแƒแƒ•แƒก แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒ˜แƒ› แƒกแƒ•แƒ”แƒขแƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก null แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก (NULL). NULL แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒขแƒ˜แƒžแƒ˜แƒก แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒœแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒแƒขแƒ แƒ˜แƒ‘แƒฃแƒขแƒ˜ แƒชแƒแƒšแƒ™แƒ” แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒจแƒ”แƒœแƒแƒฎแƒฃแƒšแƒ˜.

แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒกแƒแƒ—แƒแƒฃแƒ แƒ˜ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ“แƒ˜แƒ“แƒ˜แƒ - แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ› 23 แƒ‘แƒแƒ˜แƒขแƒ˜ แƒฎแƒแƒ–แƒ˜แƒก แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒ›แƒ”แƒขแƒ˜ NULL แƒ‘แƒ˜แƒขแƒ›แƒแƒžแƒ˜แƒก แƒ’แƒแƒ›แƒ. แƒ—แƒฃ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ "แƒ•แƒ˜แƒฌแƒ แƒแƒ" (แƒแƒœแƒฃ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒ•แƒ”แƒขแƒก), แƒ–แƒ”แƒ“แƒœแƒแƒ“แƒ”แƒ‘แƒ›แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒ”แƒขแƒ˜ แƒ“แƒแƒ˜แƒญแƒ˜แƒ แƒแƒก, แƒ•แƒ˜แƒ“แƒ แƒ” แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ.

แƒฉแƒแƒ“แƒ”แƒ—

แƒ›แƒแƒ“แƒ˜แƒ— แƒฃแƒคแƒ แƒ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒแƒ“ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒ“แƒแƒœแƒ˜แƒก แƒกแƒ˜แƒ›แƒ”แƒ‘แƒ˜แƒแƒœแƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜, แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฉแƒแƒกแƒ›แƒ.

แƒ”แƒฅแƒกแƒžแƒ”แƒ แƒ˜แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒแƒฎแƒแƒšแƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒแƒ แƒ˜ แƒกแƒ•แƒ”แƒขแƒ˜แƒ— แƒ“แƒ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒ— แƒ”แƒ แƒ—-แƒ”แƒ แƒ— แƒ›แƒแƒ—แƒ’แƒแƒœแƒ–แƒ”:

=> CREATE TABLE t(
  id serial,
  s text
);
=> CREATE INDEX ON t(s);

แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒแƒ•แƒกแƒ•แƒแƒ— แƒ”แƒ แƒ—แƒ˜ แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜.

=> BEGIN;
=> INSERT INTO t(s) VALUES ('FOO');

แƒแƒฅ แƒแƒ แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜:

=> SELECT txid_current();
 txid_current 
--------------
         3664
(1 row)

แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒก. pageinspect แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ˜แƒก heap_page_items แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ›แƒ˜แƒ˜แƒฆแƒแƒ— แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ”แƒ‘แƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘:

=> SELECT * FROM heap_page_items(get_raw_page('t',0)) gx
-[ RECORD 1 ]-------------------
lp          | 1
lp_off      | 8160
lp_flags    | 1
lp_len      | 32
t_xmin      | 3664
t_xmax      | 0
t_field3    | 0
t_ctid      | (0,1)
t_infomask2 | 2
t_infomask  | 2050
t_hoff      | 24
t_bits      | 
t_oid       | 
t_data      | x0100000009464f4f

แƒ’แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ—, แƒ แƒแƒ› แƒกแƒ˜แƒขแƒงแƒ•แƒ heap PostgreSQL-แƒจแƒ˜ แƒ”แƒฎแƒ”แƒ‘แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒก. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒขแƒ”แƒ แƒ›แƒ˜แƒœแƒ˜แƒก แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒฃแƒชแƒœแƒแƒฃแƒ แƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ - แƒ’แƒ แƒแƒ•แƒ แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒแƒฅแƒ•แƒก แƒกแƒแƒ”แƒ แƒ—แƒ แƒ›แƒแƒ’แƒ˜แƒ“แƒแƒกแƒ—แƒแƒœ. แƒแƒฅ แƒกแƒ˜แƒขแƒงแƒ•แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ "แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ”แƒ แƒ—แƒแƒ“ แƒ’แƒแƒ“แƒแƒงแƒ แƒ˜แƒšแƒ˜" แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒ—, แƒ›แƒแƒฌแƒ”แƒกแƒ แƒ˜แƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ˜แƒ—.

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก โ€žแƒ แƒแƒ’แƒแƒ แƒช แƒแƒ แƒ˜แƒกโ€œ, แƒ แƒ—แƒฃแƒšแƒแƒ“ แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘ แƒคแƒแƒ แƒ›แƒแƒขแƒจแƒ˜. แƒแƒ›แƒ˜แƒก แƒ’แƒแƒกแƒแƒ แƒ™แƒ•แƒ”แƒ•แƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒขแƒแƒ•แƒ”แƒ‘แƒ— แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒœแƒแƒฌแƒ˜แƒšแƒก แƒ“แƒ แƒ’แƒแƒ•แƒจแƒ˜แƒคแƒ แƒแƒ•แƒ—:

=> SELECT '(0,'||lp||')' AS ctid,
       CASE lp_flags
         WHEN 0 THEN 'unused'
         WHEN 1 THEN 'normal'
         WHEN 2 THEN 'redirect to '||lp_off
         WHEN 3 THEN 'dead'
       END AS state,
       t_xmin as xmin,
       t_xmax as xmax,
       (t_infomask & 256) > 0  AS xmin_commited,
       (t_infomask & 512) > 0  AS xmin_aborted,
       (t_infomask & 1024) > 0 AS xmax_commited,
       (t_infomask & 2048) > 0 AS xmax_aborted,
       t_ctid
FROM heap_page_items(get_raw_page('t',0)) gx
-[ RECORD 1 ]-+-------
ctid          | (0,1)
state         | normal
xmin          | 3664
xmax          | 0
xmin_commited | f
xmin_aborted  | f
xmax_commited | f
xmax_aborted  | t
t_ctid        | (0,1)

แƒแƒ˜ แƒ แƒ แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ—:

  • แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒก แƒ“แƒแƒฃแƒ›แƒแƒขแƒ แƒœแƒฃแƒšแƒ˜, แƒ แƒแƒ—แƒ แƒ˜แƒก แƒ˜แƒกแƒ”แƒ—แƒ˜แƒ•แƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒแƒ“แƒ”แƒก, แƒ แƒแƒ’แƒแƒ แƒช t_ctid: (แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜, แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜).
  • แƒ’แƒแƒจแƒ˜แƒคแƒ แƒฃแƒšแƒ˜แƒ lp_flags แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ. แƒแƒฅ แƒ˜แƒก แƒแƒ แƒ˜แƒก "แƒœแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒ˜" - แƒ”แƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ แƒ”แƒแƒšแƒฃแƒ แƒแƒ“ แƒ”แƒฎแƒ”แƒ‘แƒ แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒก. แƒฉแƒ•แƒ”แƒœ แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ•แƒ— แƒกแƒฎแƒ•แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒก.
  • แƒงแƒ•แƒ”แƒšแƒ แƒกแƒแƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ‘แƒ˜แƒขแƒ˜แƒ“แƒแƒœ, แƒฏแƒ”แƒ แƒฏแƒ”แƒ แƒแƒ‘แƒ˜แƒ— แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ แƒ˜ แƒฌแƒงแƒ•แƒ˜แƒšแƒ˜แƒ แƒ’แƒแƒ›แƒแƒ•แƒšแƒ”แƒœแƒ˜แƒšแƒ˜. xmin_committed แƒ“แƒ xmin_aborted แƒ‘แƒ˜แƒขแƒ˜ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก, แƒแƒ แƒ˜แƒก แƒ—แƒฃ แƒแƒ แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜ xmin แƒฉแƒแƒ“แƒ”แƒœแƒ˜แƒšแƒ˜ (แƒจแƒ”แƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ˜). แƒแƒ แƒ˜ แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒ‘แƒ˜แƒขแƒ˜ แƒ”แƒฎแƒ”แƒ‘แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒก xmax.

แƒ แƒแƒก แƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ—? แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜แƒก แƒฉแƒแƒกแƒ›แƒ˜แƒกแƒแƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜ แƒœแƒแƒ›แƒ”แƒ แƒ˜ 1, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ“แƒ แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ— แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒ–แƒ”.

แƒกแƒ˜แƒ›แƒ”แƒ‘แƒ˜แƒแƒœแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒจแƒ˜ xmin แƒ•แƒ”แƒšแƒ˜ แƒ˜แƒ•แƒกแƒ”แƒ‘แƒ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒ›แƒ แƒ˜แƒ—. แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› xmin_committed แƒ“แƒ xmin_aborted แƒ‘แƒ˜แƒขแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜.

แƒ แƒ˜แƒ’แƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก ctid แƒ•แƒ”แƒšแƒ˜ แƒ”แƒฎแƒ”แƒ‘แƒ แƒ˜แƒ›แƒแƒ•แƒ” แƒ แƒ˜แƒ’แƒก. แƒ”แƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒแƒฎแƒแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก.

xmax แƒ•แƒ”แƒšแƒ˜ แƒ˜แƒ•แƒกแƒ”แƒ‘แƒ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒœแƒแƒ›แƒ แƒ˜แƒ— 0, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜แƒก แƒ”แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒฌแƒแƒจแƒšแƒ˜แƒšแƒ˜ แƒ“แƒ แƒแƒฅแƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜แƒ. แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒแƒก แƒแƒ  แƒ›แƒ˜แƒแƒฅแƒชแƒ”แƒ•แƒก แƒแƒ› แƒ แƒ˜แƒชแƒฎแƒ•แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ xmax_aborted แƒ‘แƒ˜แƒขแƒ˜ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ.

แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒ“แƒ’แƒแƒ— แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒ’แƒแƒกแƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒšแƒแƒ“ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒ›แƒ แƒ”แƒ‘แƒ–แƒ” แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—. แƒ“แƒ แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒแƒ แƒแƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒ“แƒแƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ:

=> CREATE FUNCTION heap_page(relname text, pageno integer)
RETURNS TABLE(ctid tid, state text, xmin text, xmax text, t_ctid tid)
AS $$
SELECT (pageno,lp)::text::tid AS ctid,
       CASE lp_flags
         WHEN 0 THEN 'unused'
         WHEN 1 THEN 'normal'
         WHEN 2 THEN 'redirect to '||lp_off
         WHEN 3 THEN 'dead'
       END AS state,
       t_xmin || CASE
         WHEN (t_infomask & 256) > 0 THEN ' (c)'
         WHEN (t_infomask & 512) > 0 THEN ' (a)'
         ELSE ''
       END AS xmin,
       t_xmax || CASE
         WHEN (t_infomask & 1024) > 0 THEN ' (c)'
         WHEN (t_infomask & 2048) > 0 THEN ' (a)'
         ELSE ''
       END AS xmax,
       t_ctid
FROM heap_page_items(get_raw_page(relname,pageno))
ORDER BY lp;
$$ LANGUAGE SQL;

แƒแƒ› แƒคแƒแƒ แƒ›แƒ˜แƒ—, แƒ’แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ— แƒœแƒแƒ—แƒ”แƒšแƒ˜แƒ, แƒ แƒ แƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒกแƒแƒ—แƒแƒฃแƒ แƒจแƒ˜:

=> SELECT * FROM heap_page('t',0);
 ctid  | state  | xmin | xmax  | t_ctid 
-------+--------+------+-------+--------
 (0,1) | normal | 3664 | 0 (a) | (0,1)
(1 row)

แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒœแƒแƒ“ แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ“ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒ“แƒแƒœ, แƒคแƒกแƒ”แƒ•แƒ“แƒ-แƒกแƒ•แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— xmin แƒ“แƒ xmax:

=> SELECT xmin, xmax, * FROM t;
 xmin | xmax | id |  s  
------+------+----+-----
 3664 |    0 |  1 | FOO
(1 row)

แƒคแƒ˜แƒฅแƒกแƒแƒชแƒ˜แƒ

แƒ—แƒฃ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒแƒกแƒ แƒฃแƒšแƒ“แƒ, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒฎแƒกแƒแƒ•แƒ“แƒ”แƒ— แƒ›แƒ˜แƒกแƒ˜ แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜ - แƒ’แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ—, แƒ แƒแƒ› แƒ˜แƒก แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ แƒกแƒแƒฎแƒ”แƒšแƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒ— XACT (แƒ“แƒ แƒ›แƒ”-10 แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒ›แƒ“แƒ” แƒ›แƒแƒก แƒ”แƒ แƒฅแƒ•แƒ CLOG (แƒ™แƒแƒ›แƒ˜แƒขแƒแƒชแƒ˜แƒ˜แƒก แƒŸแƒฃแƒ แƒœแƒแƒšแƒ˜) แƒ“แƒ แƒ”แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒ™แƒ•แƒšแƒแƒ• แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒžแƒแƒ•แƒแƒ— แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒแƒ“แƒ’แƒ˜แƒšแƒแƒก).

XACT แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ™แƒแƒขแƒแƒšแƒแƒ’แƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜; แƒ”แƒก แƒแƒ แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ PGDATA/pg_xact แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜. แƒ›แƒแƒ— แƒแƒฅแƒ•แƒ— แƒแƒ แƒ˜ แƒ‘แƒ˜แƒขแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก: แƒฉแƒแƒ“แƒ”แƒœแƒ˜แƒšแƒ˜ แƒ“แƒ แƒจแƒ”แƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ˜ - แƒ˜แƒกแƒ”แƒ•แƒ”, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒกแƒแƒ—แƒแƒฃแƒ แƒจแƒ˜. แƒ”แƒก แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ“แƒแƒงแƒแƒคแƒ˜แƒšแƒ˜แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒคแƒแƒ˜แƒšแƒแƒ“ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒฃแƒšแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก; แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒฃแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ˜แƒ— แƒแƒ› แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒก, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ•แƒ— แƒ’แƒแƒงแƒ˜แƒœแƒ•แƒแƒก. แƒ“แƒ แƒแƒ› แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒ“แƒแƒœ แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ”, แƒ˜แƒกแƒ”แƒ•แƒ” แƒ แƒแƒ’แƒแƒ แƒช แƒงแƒ•แƒ”แƒšแƒ แƒกแƒฎแƒ•แƒแƒกแƒ—แƒแƒœ.

แƒแƒกแƒ” แƒ แƒแƒ›, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒฉแƒแƒ“แƒ”แƒœแƒ˜แƒšแƒ˜แƒ XACT-แƒจแƒ˜, แƒฉแƒแƒ“แƒ”แƒœแƒ˜แƒšแƒ˜ แƒ‘แƒ˜แƒขแƒ˜ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒ› แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ“แƒ แƒ”แƒก แƒแƒ แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜, แƒ แƒแƒช แƒฎแƒ“แƒ”แƒ‘แƒ แƒฉแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒ“แƒ แƒแƒก (แƒ—แƒฃแƒ›แƒชแƒ แƒฏแƒ”แƒ  แƒแƒ  แƒ•แƒกแƒแƒฃแƒ‘แƒ แƒแƒ‘แƒ— แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒŸแƒฃแƒ แƒœแƒแƒšแƒ–แƒ”).

แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒกแƒฎแƒ•แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒฌแƒ•แƒ“แƒ”แƒ‘แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒก, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒฎแƒšแƒแƒฎแƒแƒœ แƒจแƒ”แƒ•แƒฎแƒ”แƒ“แƒ”แƒ—, แƒ›แƒแƒก แƒ›แƒแƒฃแƒฌแƒ”แƒ•แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ™แƒ˜แƒ—แƒฎแƒ•แƒแƒ–แƒ” แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒ’แƒแƒชแƒ”แƒ›แƒ.

  1. แƒ“แƒแƒกแƒ แƒฃแƒšแƒ“แƒ xmin แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ? แƒ—แƒฃ แƒแƒ แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒฎแƒ˜แƒšแƒฃแƒšแƒ˜.
    แƒ”แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒกแƒฎแƒ•แƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ“แƒแƒ—แƒ•แƒแƒšแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒก แƒ˜แƒœแƒกแƒขแƒแƒœแƒชแƒ˜แƒ˜แƒก แƒกแƒแƒ”แƒ แƒ—แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒ“แƒ แƒ”แƒฌแƒแƒ“แƒ”แƒ‘แƒ ProcArray. แƒ˜แƒ’แƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒงแƒ•แƒ”แƒšแƒ แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒฉแƒแƒ›แƒแƒœแƒแƒ—แƒ•แƒแƒšแƒก แƒ“แƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ–แƒ” แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” (แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜) แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜.
  2. แƒ—แƒฃ แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒ แƒแƒ’แƒแƒ  - แƒฉแƒแƒ“แƒ”แƒœแƒ˜แƒ— แƒแƒœ แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒ˜แƒ—? แƒ—แƒฃ แƒ’แƒแƒฃแƒฅแƒ›แƒ“แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒช แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒฎแƒ˜แƒšแƒฃแƒšแƒ˜.
    แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ˜แƒก, แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒช แƒแƒ แƒ˜แƒก XACT. แƒ›แƒแƒ’แƒ แƒแƒ›, แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› XACT-แƒ˜แƒก แƒ‘แƒแƒšแƒ แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ˜ แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ RAM-แƒ˜แƒก แƒ‘แƒฃแƒคแƒ”แƒ แƒ”แƒ‘แƒจแƒ˜, แƒ›แƒแƒ˜แƒœแƒช แƒซแƒ•แƒ˜แƒ แƒ˜แƒ XACT-แƒ˜แƒก แƒงแƒแƒ•แƒ”แƒš แƒฏแƒ”แƒ แƒ–แƒ” แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ. แƒ›แƒแƒจแƒแƒกแƒแƒ“แƒแƒ›แƒ”, แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜แƒก แƒ“แƒแƒ“แƒ’แƒ”แƒœแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ˜แƒ’แƒ˜ แƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก xmin_committed แƒ“แƒ xmin_aborted แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒ–แƒ”. แƒ—แƒฃ แƒแƒ› แƒ‘แƒ˜แƒขแƒ˜แƒ“แƒแƒœ แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ, แƒ›แƒแƒจแƒ˜แƒœ xmin แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ แƒ’แƒแƒœแƒ˜แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜ แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒก แƒแƒ  แƒ›แƒแƒฃแƒฌแƒ”แƒ•แƒก XACT-แƒ–แƒ” แƒฌแƒ•แƒ“แƒแƒ›แƒ.

แƒ แƒแƒขแƒแƒ› แƒแƒ  แƒแƒ แƒ˜แƒก แƒ”แƒก แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒ˜ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒฉแƒแƒกแƒ›แƒ˜แƒกแƒแƒก? แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒฉแƒแƒกแƒ›แƒ แƒฎแƒ“แƒ”แƒ‘แƒ, แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒ› แƒฏแƒ”แƒ  แƒแƒ  แƒ˜แƒชแƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ—แƒฃ แƒแƒ แƒ. แƒฉแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒ›แƒแƒ›แƒ”แƒœแƒขแƒจแƒ˜ แƒ™แƒ˜ แƒฃแƒ™แƒ•แƒ” แƒ’แƒแƒฃแƒ’แƒ”แƒ‘แƒแƒ แƒ˜แƒ แƒ แƒแƒ›แƒ”แƒš แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ”แƒ‘แƒจแƒ˜ แƒ แƒแƒ›แƒ”แƒš แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ–แƒ” แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒ. แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒแƒกแƒ”แƒ—แƒ˜ แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜ แƒ˜แƒงแƒแƒก แƒ“แƒ แƒ›แƒแƒ—แƒ˜ แƒ“แƒแƒ›แƒแƒฎแƒกแƒแƒ•แƒ แƒ”แƒ‘แƒ แƒฌแƒแƒ›แƒ’แƒ”แƒ‘แƒ˜แƒแƒœแƒ˜แƒ. แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ“แƒ”แƒ•แƒœแƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ˜ แƒฅแƒ”แƒจแƒ˜แƒ“แƒแƒœ แƒ“แƒ˜แƒกแƒ™แƒ–แƒ”; แƒ›แƒแƒ—แƒ˜ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒชแƒ•แƒšแƒ”แƒšแƒแƒ“ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒœแƒแƒ“ แƒจแƒ”แƒแƒœแƒ”แƒšแƒ”แƒ‘แƒก แƒฉแƒแƒ“แƒ”แƒœแƒแƒก.

แƒ“แƒแƒœแƒแƒ–แƒแƒ’แƒ˜แƒก แƒฃแƒแƒ แƒงแƒแƒคแƒ˜แƒ—แƒ˜ แƒ›แƒฎแƒแƒ แƒ” แƒ˜แƒก แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒก (แƒ—แƒฃแƒœแƒ“แƒแƒช แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒกแƒแƒก - SELECT) แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ“แƒแƒ˜แƒฌแƒงแƒแƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒš แƒฅแƒ”แƒจแƒจแƒ˜.

แƒ›แƒแƒจ, แƒ’แƒแƒ›แƒแƒ•แƒแƒกแƒฌแƒแƒ แƒแƒ— แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ.

=> COMMIT;

แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒšแƒ (แƒ›แƒแƒ’แƒ แƒแƒ› แƒ•แƒ˜แƒชแƒ˜แƒ—, แƒ แƒแƒ› แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜ แƒฃแƒ™แƒ•แƒ” แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ XACT-แƒจแƒ˜):

=> SELECT * FROM heap_page('t',0);
 ctid  | state  | xmin | xmax  | t_ctid 
-------+--------+------+-------+--------
 (0,1) | normal | 3664 | 0 (a) | (0,1)
(1 row)

แƒแƒฎแƒšแƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒ›, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜ แƒจแƒ”แƒ“แƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ”, แƒฃแƒœแƒ“แƒ แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒก xmin แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜ แƒ“แƒ แƒฉแƒแƒฌแƒ”แƒ แƒแƒก แƒ˜แƒ’แƒ˜ แƒกแƒแƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒ–แƒ”:

=> SELECT * FROM t;
 id |  s  
----+-----
  1 | FOO
(1 row)

=> SELECT * FROM heap_page('t',0);
 ctid  | state  |   xmin   | xmax  | t_ctid 
-------+--------+----------+-------+--------
 (0,1) | normal | 3664 (c) | 0 (a) | (0,1)
(1 row)

แƒ›แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒ

แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜ แƒฌแƒแƒ˜แƒจแƒšแƒ”แƒ‘แƒ, แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒฌแƒแƒจแƒšแƒ˜แƒก แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜ แƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก xmax แƒ•แƒ”แƒšแƒจแƒ˜ แƒ“แƒ xmax_aborted แƒ‘แƒ˜แƒขแƒ˜ แƒฌแƒแƒ˜แƒจแƒšแƒ”แƒ‘แƒ.

แƒ’แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ—, แƒ แƒแƒ› xmax-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ”แƒกแƒแƒ‘แƒแƒ›แƒ”แƒ‘แƒ แƒแƒฅแƒขแƒ˜แƒฃแƒ  แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒก, แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒก แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜แƒก แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ•แƒ. แƒ—แƒฃ แƒกแƒฎแƒ•แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒก แƒกแƒฃแƒ แƒก แƒแƒ› แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ แƒแƒœ แƒฌแƒแƒจแƒšแƒ, แƒ˜แƒก แƒ˜แƒซแƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ“แƒแƒ”แƒšแƒแƒ“แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก xmax แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก. แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ•แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒ“แƒแƒฌแƒ•แƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ”แƒ‘แƒ—. แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒแƒฆแƒ•แƒœแƒ˜แƒจแƒœแƒแƒ•แƒ—, แƒ แƒแƒ› แƒ แƒ˜แƒ’แƒ˜แƒก แƒฉแƒแƒ›แƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒจแƒ”แƒฃแƒ–แƒฆแƒฃแƒ“แƒแƒ•แƒ˜แƒ. แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒแƒ  แƒ˜แƒ™แƒแƒ•แƒ”แƒ‘แƒ”แƒœ แƒแƒ“แƒ’แƒ˜แƒšแƒก RAM-แƒจแƒ˜ แƒ“แƒ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒแƒ  แƒ’แƒแƒœแƒ˜แƒชแƒ“แƒ˜แƒก แƒ›แƒแƒ— แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒก. แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒ, โ€žแƒ’แƒ แƒซแƒ”แƒšโ€œ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒก แƒกแƒฎแƒ•แƒ แƒฃแƒแƒ แƒงแƒแƒคแƒ˜แƒ—แƒ˜ แƒ›แƒฎแƒแƒ แƒ”แƒ”แƒ‘แƒ˜แƒช แƒแƒฅแƒ•แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ›แƒแƒ–แƒ” แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒ›แƒแƒ“แƒ˜แƒ— แƒฌแƒแƒ•แƒจแƒแƒšแƒแƒ— แƒฎแƒแƒ–แƒ˜.

=> BEGIN;
=> DELETE FROM t;
=> SELECT txid_current();
 txid_current 
--------------
         3665
(1 row)

แƒฉแƒ•แƒ”แƒœ แƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒ แƒแƒ› แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜ แƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ xmax แƒ•แƒ”แƒšแƒจแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜:

=> SELECT * FROM heap_page('t',0);
 ctid  | state  |   xmin   | xmax | t_ctid 
-------+--------+----------+------+--------
 (0,1) | normal | 3664 (c) | 3665 | (0,1)
(1 row)

แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒ

แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฌแƒงแƒ•แƒ”แƒขแƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒฉแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒแƒ“, แƒ›แƒฎแƒแƒšแƒแƒ“ XACT-แƒจแƒ˜ แƒจแƒ”แƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ˜ แƒ‘แƒ˜แƒขแƒ˜ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒ แƒ˜แƒกแƒ”แƒ—แƒ˜แƒ•แƒ” แƒกแƒฌแƒ แƒแƒคแƒ˜แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒ“แƒ”แƒœแƒ. แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒแƒก แƒฃแƒฌแƒแƒ“แƒ”แƒ‘แƒ”แƒœ ROLLBACK, แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒแƒ  แƒฎแƒ“แƒ”แƒ‘แƒ แƒฃแƒ™แƒแƒœ: แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜, แƒ แƒ˜แƒกแƒ˜ แƒจแƒ”แƒชแƒ•แƒšแƒแƒช แƒ›แƒแƒแƒฎแƒ”แƒ แƒฎแƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒ› แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ–แƒ”, แƒฃแƒชแƒ•แƒšแƒ”แƒšแƒ˜ แƒ แƒฉแƒ”แƒ‘แƒ.

=> ROLLBACK;
=> SELECT * FROM heap_page('t',0);
 ctid  | state  |   xmin   | xmax | t_ctid 
-------+--------+----------+------+--------
 (0,1) | normal | 3664 (c) | 3665 | (0,1)
(1 row)

แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒกแƒแƒก, แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ“แƒ”แƒ‘แƒ แƒ“แƒ xmax_aborted แƒ›แƒ˜แƒœแƒ˜แƒจแƒœแƒ”แƒ‘แƒ แƒ‘แƒ˜แƒขแƒ˜ แƒ“แƒแƒงแƒ”แƒœแƒ“แƒ”แƒ‘แƒ แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒ–แƒ”. แƒ—แƒแƒ•แƒแƒ“ xmax แƒœแƒแƒ›แƒ”แƒ แƒ˜ แƒ แƒฉแƒ”แƒ‘แƒ แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒก แƒแƒ แƒแƒ•แƒ˜แƒœ แƒ“แƒแƒฎแƒ”แƒ“แƒแƒ•แƒก.

=> SELECT * FROM t;
 id |  s  
----+-----
  1 | FOO
(1 row)

=> SELECT * FROM heap_page('t',0);
 ctid  | state  |   xmin   |   xmax   | t_ctid 
-------+--------+----------+----------+--------
 (0,1) | normal | 3664 (c) | 3665 (a) | (0,1)
(1 row)

แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ

แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ˜แƒกแƒ”, แƒ—แƒ˜แƒ—แƒฅแƒแƒก แƒ›แƒแƒœ แƒฏแƒ”แƒ  แƒฌแƒแƒจแƒแƒšแƒ แƒ แƒ˜แƒ’แƒ˜แƒก แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒแƒกแƒ•แƒ แƒแƒฎแƒแƒšแƒ˜.

=> BEGIN;
=> UPDATE t SET s = 'BAR';
=> SELECT txid_current();
 txid_current 
--------------
         3666
(1 row)

แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒแƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒก แƒ”แƒ แƒ— แƒฎแƒแƒ–แƒก (แƒแƒฎแƒแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ):

=> SELECT * FROM t;
 id |  s  
----+-----
  1 | BAR
(1 row)

แƒ›แƒแƒ’แƒ แƒแƒ› แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” แƒฉแƒ•แƒ”แƒœ แƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ— แƒแƒ แƒ˜แƒ•แƒ” แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒก:

=> SELECT * FROM heap_page('t',0);
 ctid  | state  |   xmin   | xmax  | t_ctid 
-------+--------+----------+-------+--------
 (0,1) | normal | 3664 (c) | 3666  | (0,2)
 (0,2) | normal | 3666     | 0 (a) | (0,2)
(2 rows)

แƒฌแƒแƒจแƒšแƒ˜แƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ xmax แƒ•แƒ”แƒšแƒจแƒ˜ แƒแƒฆแƒ˜แƒœแƒ˜แƒจแƒœแƒ”แƒ‘แƒ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒ›แƒ แƒ˜แƒ—. แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜แƒช, แƒ”แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ แƒซแƒ•แƒ”แƒšแƒ–แƒ”, แƒ แƒแƒ“แƒ’แƒแƒœ แƒฌแƒ˜แƒœแƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒ’แƒแƒฃแƒฅแƒ›แƒ“แƒ. แƒ“แƒ xmax_aborted แƒ‘แƒ˜แƒขแƒ˜ แƒ’แƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜ แƒฏแƒ”แƒ  แƒแƒ  แƒแƒ แƒ˜แƒก แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜.

แƒฎแƒแƒ–แƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒแƒฎแƒšแƒ แƒ›แƒแƒ˜แƒฎแƒกแƒ”แƒœแƒ˜แƒ”แƒ‘แƒก แƒ›แƒ”แƒแƒ แƒ”แƒก (t_ctid แƒ•แƒ”แƒšแƒก), แƒ แƒแƒ’แƒแƒ แƒช แƒฃแƒคแƒ แƒ แƒแƒฎแƒแƒšแƒก.

แƒ›แƒ”แƒแƒ แƒ” แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜ แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” แƒ“แƒ แƒ›แƒ”แƒแƒ แƒ” แƒ แƒ˜แƒ’แƒ˜ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก แƒ›แƒ”แƒแƒ แƒ” แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒ–แƒ” แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ”.

แƒ˜แƒกแƒ”แƒ•แƒ”, แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒแƒจแƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒจแƒ˜ xmax แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก, แƒ แƒแƒ› แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜ แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ˜แƒšแƒ˜แƒ.

แƒแƒ‘แƒ, แƒ“แƒแƒ•แƒแƒกแƒ แƒฃแƒšแƒแƒ— แƒ’แƒแƒ แƒ˜แƒ’แƒ”แƒ‘แƒ.

=> COMMIT;

แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜

แƒแƒฅแƒแƒ›แƒ“แƒ” แƒ›แƒฎแƒแƒšแƒแƒ“ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ–แƒ” แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ”แƒ—. แƒ แƒ แƒฎแƒ“แƒ”แƒ‘แƒ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ—?

แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ–แƒ” แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒœแƒแƒ“ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ“แƒ”แƒ‘แƒ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒขแƒ˜แƒžแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—. แƒ“แƒ แƒ—แƒฃแƒœแƒ“แƒแƒช แƒ”แƒ แƒ—แƒ˜ แƒขแƒ˜แƒžแƒ˜แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒก แƒแƒฅแƒ•แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒขแƒ˜แƒžแƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ˜. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, B-แƒฎแƒ”แƒก แƒแƒฅแƒ•แƒก แƒ›แƒ”แƒขแƒแƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜ แƒ“แƒ โ€žแƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜โ€œ แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ˜.

แƒ—แƒฃแƒ›แƒชแƒ, แƒ’แƒ•แƒ”แƒ แƒ“แƒก แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒแƒฅแƒ•แƒก แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ—แƒแƒ•แƒแƒ“ แƒ แƒ˜แƒ’แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒกแƒ˜แƒ•แƒ˜ (แƒ˜แƒกแƒ”แƒ•แƒ”, แƒ แƒแƒ’แƒแƒ แƒช แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜). แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒ‘แƒแƒšแƒแƒก แƒแƒ แƒ˜แƒก แƒแƒ“แƒ’แƒ˜แƒšแƒ˜ แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒจแƒ˜ แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ”แƒ‘แƒก แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒฐแƒฅแƒแƒœแƒ“แƒ”แƒ— แƒซแƒแƒšแƒ˜แƒแƒœ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ, แƒ แƒแƒช แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒขแƒ˜แƒžแƒ–แƒ”. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, B-แƒฎแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒคแƒฃแƒ แƒชแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก แƒ“แƒ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒแƒก (ctid) แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒก แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ–แƒ”. แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒงแƒแƒก แƒกแƒ แƒฃแƒšแƒ˜แƒแƒ“ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒ–แƒ˜แƒ—.

แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒ˜แƒก แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒ˜ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒขแƒ˜แƒžแƒ˜แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒจแƒ˜. แƒ™แƒแƒ แƒ’แƒแƒ“, แƒแƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ•แƒ˜แƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ—, แƒ แƒแƒ› แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒฎแƒแƒ–แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜แƒ แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒ—. แƒกแƒฎแƒ•แƒ แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜แƒ— แƒ แƒแƒ› แƒ•แƒ—แƒฅแƒ•แƒแƒ—, แƒแƒ  แƒแƒ แƒ˜แƒก xmin แƒ“แƒ xmax แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜แƒก แƒกแƒแƒ—แƒแƒฃแƒ แƒจแƒ˜. แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ•แƒ˜แƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ—, แƒ แƒแƒ› แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒ“แƒแƒœ แƒ‘แƒ›แƒฃแƒšแƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒ•แƒงแƒแƒ•แƒแƒ แƒ— แƒ แƒ˜แƒ’แƒ”แƒ‘แƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒ›แƒ“แƒ” - แƒแƒกแƒ” แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ”แƒ แƒ™แƒ•แƒœแƒ”แƒœ, แƒ—แƒฃ แƒ แƒแƒ›แƒ”แƒš แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒก แƒ“แƒแƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒ“แƒแƒ—แƒ•แƒแƒšแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒ—. (แƒ แƒแƒ’แƒแƒ แƒช แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก, แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒ—แƒ”แƒšแƒ˜ แƒกแƒ˜แƒ›แƒแƒ แƒ—แƒšแƒ”. แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ— แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒฎแƒ˜แƒšแƒ•แƒแƒ“แƒแƒ‘แƒ˜แƒก แƒ แƒฃแƒ™แƒแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ›แƒแƒก แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒฃแƒคแƒ แƒ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒแƒ“ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ•แƒ—.)

แƒแƒ›แƒแƒ•แƒ“แƒ แƒแƒฃแƒšแƒแƒ“, แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” แƒ•แƒžแƒแƒฃแƒšแƒแƒ‘แƒ— แƒแƒ แƒ˜แƒ•แƒ” แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ”แƒ‘แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ›แƒŸแƒแƒ›แƒ˜แƒœแƒ“แƒ”แƒšแƒก, แƒแƒกแƒ”แƒ•แƒ” แƒซแƒ•แƒ”แƒšแƒก:

=> SELECT itemoffset, ctid FROM bt_page_items('t_s_idx',1);
 itemoffset | ctid  
------------+-------
          1 | (0,2)
          2 | (0,1)
(2 rows)

แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜

แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒแƒจแƒ˜, PostgreSQL แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก แƒ›แƒแƒก "แƒจแƒ”แƒœแƒแƒฎแƒแƒก" แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒ›แƒ แƒ”แƒ‘แƒ˜.

แƒ—แƒฃ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒก, แƒ”แƒก แƒแƒ  แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒก แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒฎแƒ˜แƒšแƒ•แƒแƒ“แƒแƒ‘แƒแƒ–แƒ”. แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜ แƒ’แƒแƒกแƒชแƒ”แƒ›แƒก แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒก แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ  xid-แƒก. แƒœแƒแƒ›แƒ”แƒ แƒ˜ แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก ID แƒ“แƒ แƒ แƒ˜แƒ’แƒ˜แƒ—แƒ˜ แƒœแƒแƒ›แƒ แƒ˜แƒกแƒ’แƒแƒœ.

แƒแƒ› แƒœแƒแƒ›แƒ แƒ˜แƒก แƒ’แƒแƒชแƒ”แƒ›แƒ แƒแƒ  แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒก แƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒ˜แƒ–แƒแƒชแƒ˜แƒแƒก แƒงแƒ•แƒ”แƒšแƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒจแƒแƒ แƒ˜แƒก แƒ“แƒ, แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“, แƒซแƒแƒšแƒ˜แƒแƒœ แƒกแƒฌแƒ แƒแƒคแƒ˜แƒ. แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒœแƒแƒ›แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ— แƒ›แƒ˜แƒ–แƒ”แƒ–แƒก แƒ’แƒแƒงแƒ˜แƒœแƒ•แƒแƒ–แƒ” แƒกแƒแƒฃแƒ‘แƒ แƒ˜แƒกแƒแƒก แƒ’แƒแƒ•แƒ”แƒชแƒœแƒแƒ‘แƒ˜แƒ—.

แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒœแƒแƒ›แƒ แƒ”แƒ‘แƒ˜ แƒแƒ แƒแƒœแƒแƒ˜แƒ แƒแƒ“ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ’แƒแƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒœแƒ”แƒžแƒจแƒแƒขแƒ”แƒ‘แƒจแƒ˜.

แƒ“แƒ แƒแƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ›แƒแƒ›แƒ”แƒœแƒขแƒจแƒ˜, แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒจแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒฃแƒ™แƒ•แƒ” แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒœแƒแƒ›แƒ แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒ”แƒก แƒœแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒ˜แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒกแƒ”แƒ—แƒ˜ แƒ แƒ˜แƒชแƒฎแƒ•แƒ˜ แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒฉแƒแƒ˜แƒฌแƒ”แƒ แƒแƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ–แƒ”, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒแƒ›แƒ“แƒ”แƒ•แƒœแƒ แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒกแƒแƒก แƒ›แƒแƒœ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ™แƒแƒ แƒ’แƒแƒก แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ.

=> BEGIN;
=> SELECT txid_current_if_assigned();
 txid_current_if_assigned 
--------------------------
                         
(1 row)

แƒ—แƒฃ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒ˜แƒฌแƒงแƒ”แƒ‘แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒจแƒ”แƒชแƒ•แƒšแƒแƒก, แƒ›แƒแƒก แƒ”แƒซแƒšแƒ”แƒ•แƒ แƒ แƒ”แƒแƒšแƒฃแƒ แƒ˜, แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜.

=> UPDATE accounts SET amount = amount - 1.00;
=> SELECT txid_current_if_assigned();
 txid_current_if_assigned 
--------------------------
                     3667
(1 row)

=> COMMIT;

แƒฉแƒแƒ“แƒ’แƒ›แƒฃแƒšแƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜

แƒฅแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ

แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ˜แƒ SQL-แƒจแƒ˜ แƒฅแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ (savepoint), แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ’แƒแƒแƒฃแƒฅแƒ›แƒแƒ— แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒ›แƒ˜แƒกแƒ˜ แƒกแƒ แƒฃแƒšแƒ˜ แƒจแƒ”แƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒแƒ  แƒฏแƒ“แƒ”แƒ‘แƒ แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒš แƒ“แƒ˜แƒแƒ’แƒ แƒแƒ›แƒแƒจแƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒก แƒแƒฅแƒ•แƒก แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜ แƒ›แƒ˜แƒกแƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒคแƒ˜แƒ–แƒ˜แƒ™แƒฃแƒ แƒแƒ“ แƒแƒ แƒชแƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜.

แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒšแƒแƒ“, แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ˜แƒก แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜แƒ— แƒ’แƒแƒ แƒ˜แƒ’แƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒคแƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒชแƒแƒšแƒ™แƒ” แƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ (แƒฅแƒ•แƒ”แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ), แƒ แƒแƒ›แƒšแƒ˜แƒก แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒชแƒแƒšแƒ™แƒ”.

แƒฉแƒแƒ“แƒ’แƒ›แƒฃแƒš แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒก แƒแƒฅแƒ•แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒœแƒแƒ›แƒ”แƒ แƒ˜ (แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒ แƒ˜แƒชแƒฎแƒ•แƒ–แƒ” แƒ›แƒ”แƒขแƒ˜). แƒฉแƒแƒ“แƒ’แƒ›แƒฃแƒšแƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜ แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ แƒฉแƒ•แƒ”แƒฃแƒšแƒ˜ แƒฌแƒ”แƒกแƒ˜แƒ— XACT-แƒจแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒกแƒขแƒแƒขแƒฃแƒกแƒ–แƒ”: แƒ—แƒฃ แƒ˜แƒก แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒงแƒ•แƒ”แƒšแƒ แƒฉแƒแƒกแƒ›แƒฃแƒšแƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒช แƒ’แƒแƒฃแƒฅแƒ›แƒ“แƒ”แƒ‘แƒ.

แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒ‘แƒฃแƒ“แƒ”แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜ PGDATA/pg_subtrans แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜. แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ–แƒ” แƒฌแƒ•แƒ“แƒแƒ›แƒ แƒฎแƒ“แƒ”แƒ‘แƒ แƒ˜แƒœแƒกแƒขแƒแƒœแƒชแƒ˜แƒ˜แƒก แƒกแƒแƒ”แƒ แƒ—แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒฃแƒคแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒ แƒ’แƒแƒœแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ˜แƒกแƒ”แƒ•แƒ”, แƒ แƒแƒ’แƒแƒ แƒช XACT แƒ‘แƒฃแƒคแƒ”แƒ แƒ”แƒ‘แƒ˜.

แƒแƒ  แƒแƒฃแƒ แƒ˜แƒแƒ— แƒฉแƒแƒ“แƒ’แƒ›แƒฃแƒšแƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒแƒ•แƒขแƒแƒœแƒแƒ›แƒ˜แƒฃแƒ  แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒจแƒ˜. แƒแƒ•แƒขแƒแƒœแƒแƒ›แƒ˜แƒฃแƒ แƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒแƒ แƒแƒœแƒแƒ˜แƒ แƒแƒ“ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ–แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒ. แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒš PostgreSQL-แƒจแƒ˜ แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒแƒ•แƒขแƒแƒœแƒแƒ›แƒ˜แƒฃแƒ แƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ“แƒ, แƒแƒšแƒ‘แƒแƒ—, แƒกแƒแƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒแƒ“: แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒซแƒแƒšแƒ˜แƒแƒœ, แƒซแƒแƒšแƒ˜แƒแƒœ แƒ˜แƒจแƒ•แƒ˜แƒแƒ—แƒแƒ“ แƒ“แƒ แƒ›แƒแƒ—แƒ˜ แƒงแƒแƒคแƒœแƒ แƒกแƒฎแƒ•แƒ DBMS-แƒ”แƒ‘แƒจแƒ˜ แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒจแƒ”แƒฃแƒ แƒแƒชแƒฎแƒงแƒแƒคแƒแƒก, แƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒช แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒงแƒ•แƒ”แƒšแƒ แƒ’แƒแƒœแƒ˜แƒชแƒ“แƒ˜แƒก.

แƒ’แƒแƒ•แƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒแƒ— แƒชแƒฎแƒ แƒ˜แƒšแƒ˜, แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒแƒ— แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒ“แƒ แƒฉแƒแƒ•แƒกแƒ•แƒแƒ— แƒ›แƒฌแƒ™แƒ แƒ˜แƒ•แƒ˜:

=> TRUNCATE TABLE t;
=> BEGIN;
=> INSERT INTO t(s) VALUES ('FOO');
=> SELECT txid_current();
 txid_current 
--------------
         3669
(1 row)

=> SELECT xmin, xmax, * FROM t;
 xmin | xmax | id |  s  
------+------+----+-----
 3669 |    0 |  2 | FOO
(1 row)

=> SELECT * FROM heap_page('t',0);
 ctid  | state  | xmin | xmax  | t_ctid 
-------+--------+------+-------+--------
 (0,1) | normal | 3669 | 0 (a) | (0,1)
(1 row)

แƒแƒฎแƒšแƒ แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒแƒ— แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ˜แƒก แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜ แƒ“แƒ แƒฉแƒแƒ•แƒกแƒ•แƒแƒ— แƒกแƒฎแƒ•แƒ แƒฎแƒแƒ–แƒ˜.

=> SAVEPOINT sp;
=> INSERT INTO t(s) VALUES ('XYZ');
=> SELECT txid_current();
 txid_current 
--------------
         3669
(1 row)

แƒ’แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ—, แƒ แƒแƒ› txid_current() แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒ›แƒ—แƒแƒ•แƒแƒ  แƒœแƒแƒ›แƒ”แƒ แƒก แƒ“แƒ แƒแƒ แƒ แƒฉแƒแƒ“แƒ’แƒ›แƒฃแƒš แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒก.

=> SELECT xmin, xmax, * FROM t;
 xmin | xmax | id |  s  
------+------+----+-----
 3669 |    0 |  2 | FOO
 3670 |    0 |  3 | XYZ
(2 rows)

=> SELECT * FROM heap_page('t',0);
 ctid  | state  | xmin | xmax  | t_ctid 
-------+--------+------+-------+--------
 (0,1) | normal | 3669 | 0 (a) | (0,1)
 (0,2) | normal | 3670 | 0 (a) | (0,2)
(2 rows)

แƒ“แƒแƒ•แƒฃแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ— แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ˜แƒก แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒก แƒ“แƒ แƒฉแƒแƒ•แƒกแƒ•แƒแƒ— แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒฎแƒแƒ–แƒ˜.

=> ROLLBACK TO sp;
=> INSERT INTO t(s) VALUES ('BAR');
=> SELECT xmin, xmax, * FROM t;
 xmin | xmax | id |  s  
------+------+----+-----
 3669 |    0 |  2 | FOO
 3671 |    0 |  4 | BAR
(2 rows)

=> SELECT * FROM heap_page('t',0);
 ctid  | state  |   xmin   | xmax  | t_ctid 
-------+--------+----------+-------+--------
 (0,1) | normal | 3669     | 0 (a) | (0,1)
 (0,2) | normal | 3670 (a) | 0 (a) | (0,2)
 (0,3) | normal | 3671     | 0 (a) | (0,3)
(3 rows)

แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘แƒ— แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒแƒก แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฉแƒแƒ“แƒ’แƒ›แƒฃแƒšแƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ .

แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ— แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒก.

=> COMMIT;
=> SELECT xmin, xmax, * FROM t;
 xmin | xmax | id |  s  
------+------+----+-----
 3669 |    0 |  2 | FOO
 3671 |    0 |  4 | BAR
(2 rows)

=> SELECT * FROM heap_page('t',0);
 ctid  | state  |   xmin   | xmax  | t_ctid 
-------+--------+----------+-------+--------
 (0,1) | normal | 3669 (c) | 0 (a) | (0,1)
 (0,2) | normal | 3670 (a) | 0 (a) | (0,2)
 (0,3) | normal | 3671 (c) | 0 (a) | (0,3)
(3 rows)

แƒแƒฎแƒšแƒ แƒ—แƒฅแƒ•แƒ”แƒœ แƒœแƒแƒ—แƒšแƒแƒ“ แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒ แƒแƒ› แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒฉแƒแƒ“แƒ’แƒ›แƒฃแƒš แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒก แƒแƒฅแƒ•แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜.

แƒ’แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ—, แƒ แƒแƒ› แƒฉแƒแƒ“แƒ’แƒ›แƒฃแƒšแƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒแƒก แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  SQL-แƒจแƒ˜, แƒแƒœแƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒ  แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒ˜แƒฌแƒงแƒแƒ— แƒแƒฎแƒแƒšแƒ˜ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. แƒ”แƒก แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ˜ แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ“แƒ”แƒ‘แƒ แƒ˜แƒ›แƒžแƒšแƒ˜แƒชแƒ˜แƒขแƒฃแƒ แƒแƒ“ แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ˜แƒก แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒแƒก, แƒแƒกแƒ”แƒ•แƒ” PL/pgSQL แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒกแƒแƒก แƒ“แƒ แƒกแƒฎแƒ•แƒ, แƒฃแƒคแƒ แƒ แƒ”แƒ’แƒ–แƒแƒขแƒ˜แƒ™แƒฃแƒ  แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ”แƒ‘แƒจแƒ˜.

=> BEGIN;
BEGIN
=> BEGIN;
WARNING:  there is already a transaction in progress
BEGIN
=> COMMIT;
COMMIT
=> COMMIT;
WARNING:  there is no transaction in progress
COMMIT

แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒแƒขแƒแƒ›แƒฃแƒ แƒแƒ‘แƒ

แƒ แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ, แƒ—แƒฃ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒ›แƒแƒฎแƒ“แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ? แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒแƒกแƒ”:

=> BEGIN;
=> SELECT * FROM t;
 id |  s  
----+-----
  2 | FOO
  4 | BAR
(2 rows)

=> UPDATE t SET s = repeat('X', 1/(id-4));
ERROR:  division by zero

แƒ›แƒแƒฎแƒ“แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ. แƒแƒฎแƒšแƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒจแƒ”แƒฌแƒงแƒ•แƒ”แƒขแƒฃแƒšแƒแƒ“ แƒ˜แƒ—แƒ•แƒšแƒ”แƒ‘แƒ แƒ“แƒ แƒ›แƒแƒกแƒจแƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜:

=> SELECT * FROM t;
ERROR:  current transaction is aborted, commands ignored until end of transaction block

แƒ“แƒ แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒชแƒ“แƒ˜แƒšแƒแƒ‘แƒ— แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒแƒก, PostgreSQL แƒจแƒ”แƒแƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒก แƒจแƒ”แƒฌแƒงแƒ•แƒ”แƒขแƒแƒก:

=> COMMIT;
ROLLBACK

แƒ แƒแƒขแƒแƒ› แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ“แƒ”แƒก แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ แƒฌแƒแƒ แƒฃแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’? แƒคแƒแƒฅแƒขแƒ˜แƒ, แƒ แƒแƒ› แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒฌแƒแƒ แƒ›แƒแƒ˜แƒจแƒ•แƒแƒก แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒแƒ— แƒฌแƒ•แƒ“แƒแƒ›แƒ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ–แƒ” - แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒ™แƒ˜ แƒแƒ แƒ, แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒแƒขแƒแƒ›แƒฃแƒ แƒแƒ‘แƒ แƒ“แƒแƒ˜แƒ แƒฆแƒ•แƒ”แƒก. แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒ•แƒ”แƒœแƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜, แƒกแƒแƒ“แƒแƒช แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ›แƒ แƒ›แƒแƒแƒฎแƒ”แƒ แƒฎแƒ แƒ”แƒ แƒ—แƒ˜ แƒฎแƒแƒ–แƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒ›แƒ“แƒ”:

=> SELECT * FROM heap_page('t',0);
 ctid  | state  |   xmin   | xmax  | t_ctid 
-------+--------+----------+-------+--------
 (0,1) | normal | 3669 (c) | 3672  | (0,4)
 (0,2) | normal | 3670 (a) | 0 (a) | (0,2)
 (0,3) | normal | 3671 (c) | 0 (a) | (0,3)
 (0,4) | normal | 3672     | 0 (a) | (0,4)
(4 rows)

แƒฃแƒœแƒ“แƒ แƒ˜แƒ—แƒฅแƒ•แƒแƒก, แƒ แƒแƒ› psql-แƒก แƒแƒฅแƒ•แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ™แƒ•แƒšแƒแƒ• แƒ˜แƒซแƒšแƒ”แƒ•แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒฌแƒแƒ แƒฃแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ—แƒ˜แƒ—แƒฅแƒแƒก แƒ›แƒชแƒ“แƒแƒ แƒ˜ แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒฃแƒ™แƒแƒœ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ.

=> set ON_ERROR_ROLLBACK on
=> BEGIN;
=> SELECT * FROM t;
 id |  s  
----+-----
  2 | FOO
  4 | BAR
(2 rows)

=> UPDATE t SET s = repeat('X', 1/(id-4));
ERROR:  division by zero

=> SELECT * FROM t;
 id |  s  
----+-----
  2 | FOO
  4 | BAR
(2 rows)

=> COMMIT;

แƒซแƒœแƒ”แƒšแƒ˜ แƒ›แƒ˜แƒกแƒแƒฎแƒ•แƒ”แƒ“แƒ แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› แƒแƒ› แƒ แƒ”แƒŸแƒ˜แƒ›แƒจแƒ˜ psql แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒฌแƒ˜แƒœ แƒ แƒ”แƒแƒšแƒฃแƒ แƒแƒ“ แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ˜แƒ›แƒžแƒšแƒ˜แƒชแƒ˜แƒขแƒฃแƒ  แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ˜แƒก แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒก แƒ“แƒ แƒฌแƒแƒ แƒฃแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ˜แƒฌแƒงแƒ”แƒ‘แƒก แƒ›แƒแƒกแƒ–แƒ” แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒแƒก. แƒ”แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜ แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“ แƒแƒ  แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ˜แƒก แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ (แƒ—แƒฃแƒœแƒ“แƒแƒช แƒ›แƒแƒ—แƒ–แƒ” แƒ’แƒแƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”) แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœ แƒ–แƒ”แƒ“แƒ›แƒ”แƒข แƒฎแƒแƒ แƒฏแƒ”แƒ‘แƒก.

แƒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘แƒ.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ