MVCC-3. āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ

āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ†āĻŽāĻ°āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāĻ¤ āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ…āĻ¨ā§āĻ¤āĻ°āĻŖ, āĻāĻŦāĻ‚ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻļā§āĻšāĻžāĻĻāĻĒāĻ¸āĻ°āĻŖ āĻ•āĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻŽā§āĻ¨ āĻ¸ā§āĻ¤āĻ°ā§‡ āĻ¤āĻĨā§āĻ¯ āĻ¸āĻ‚āĻ—āĻ āĻŋāĻ¤. āĻāĻŦāĻ‚ āĻ…āĻŦāĻļā§‡āĻˇā§‡ āĻ†āĻŽāĻ°āĻž āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻ…āĻ‚āĻļ āĻĒā§‡āĻ¯āĻŧā§‡āĻ›āĻŋ - āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖāĨ¤

āĻšā§‡āĻĄāĻžāĻ°

āĻ†āĻŽāĻ°āĻž āĻ†āĻ—ā§‡āĻ‡ āĻŦāĻ˛ā§‡āĻ›āĻŋ, āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¸āĻžāĻ°āĻŋ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡ āĻāĻ•āĻ‡ āĻ¸āĻžāĻĨā§‡ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖāĻ•ā§‡ āĻ…āĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĨā§‡āĻ•ā§‡ āĻ†āĻ˛āĻžāĻĻāĻž āĻ•āĻ°āĻž āĻ†āĻŦāĻļā§āĻ¯āĻ•ā§ˇ āĻāĻ‡ āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ā§‡, āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡ āĻĻā§āĻŸāĻŋ āĻšāĻŋāĻšā§āĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž āĻāĻ‡ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡āĻ° āĻ•āĻ°ā§āĻŽā§‡āĻ° "āĻ¸āĻŽāĻ¯āĻŧ" āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°ā§‡ (xmin āĻāĻŦāĻ‚ xmax)ā§ˇ āĻ‰āĻĻā§āĻ§ā§ƒāĻ¤āĻŋāĻ¤ā§‡ - āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨āĻ¯āĻŧ āĻ¯ā§‡āĻŽāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻļā§‡āĻˇ āĻŦā§ƒāĻĻā§āĻ§āĻŋ āĻĒāĻžāĻ˛ā§āĻŸāĻžāĨ¤ āĻ†āĻ° āĻāĻ‡ āĻ•āĻžāĻ‰āĻ¨ā§āĻŸāĻžāĻ° āĻšāĻ˛ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ¨āĻŽā§āĻŦāĻ°āĨ¤

(āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ• āĻšāĻŋāĻ¸āĻžāĻŦā§‡, āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻ¤āĻž āĻ†āĻ°āĻ“ āĻœāĻŸāĻŋāĻ˛: āĻ•āĻžāĻ‰āĻ¨ā§āĻŸāĻžāĻ°ā§‡āĻ° āĻ¸ā§€āĻŽāĻŋāĻ¤ āĻŦāĻŋāĻŸ āĻ•ā§āĻˇāĻŽāĻ¤āĻžāĻ° āĻ•āĻžāĻ°āĻŖā§‡ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ¸āĻŦ āĻ¸āĻŽāĻ¯āĻŧ āĻŦāĻžāĻĄāĻŧāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¨āĻžāĨ¤ āĻ¤āĻŦā§‡ āĻ†āĻŽāĻ°āĻž āĻ¯āĻ–āĻ¨ āĻšāĻŋāĻŽāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻšāĻŦ āĻ¤āĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻāĻ‡ āĻŦāĻŋāĻŦāĻ°āĻŖāĻ—ā§āĻ˛āĻŋ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤āĻ­āĻžāĻŦā§‡ āĻĻā§‡āĻ–āĻŦāĨ¤)

āĻ¯āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ°āĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻ–āĻ¨ xmin āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻ¨āĻŽā§āĻŦāĻ°ā§‡ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¯āĻž INSERT āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻœāĻžāĻ°āĻŋ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ xmax āĻ–āĻžāĻ˛āĻŋ āĻ°āĻžāĻ–āĻž āĻšāĻ¯āĻŧāĨ¤

āĻ¯āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ°āĻŋ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻ–āĻ¨ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡āĻ° xmax āĻŽāĻžāĻ¨āĻŸāĻŋ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻžāĻ° āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻĻāĻŋāĻ¯āĻŧā§‡ āĻšāĻŋāĻšā§āĻ¨āĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

āĻ¯āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ°āĻŋ āĻāĻ•āĻŸāĻŋ UPDATE āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻ¯āĻŧ, āĻ¤āĻ–āĻ¨ āĻĻā§āĻŸāĻŋ āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ˛āĻžāĻĒ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦā§‡ āĻ¸āĻžā§āĻšāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧ: DELETE āĻāĻŦāĻ‚ INSERTā§ˇ āĻ¸āĻžāĻ°āĻŋāĻ° āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖāĻŸāĻŋ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻž āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ¨ xmax āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§‡āĨ¤ āĻāĻ•āĻ‡ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚ āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ; āĻāĻ° xmin āĻŽāĻžāĻ¨ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§€ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡āĻ° xmax āĻŽāĻžāĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻŋāĻ˛ā§‡ āĻ¯āĻžāĻ¯āĻŧāĨ¤

xmin āĻāĻŦāĻ‚ xmax āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋ āĻ¸āĻžāĻ°āĻŋ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻļāĻŋāĻ°ā§‹āĻ¨āĻžāĻŽā§‡ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋ āĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻļāĻŋāĻ°ā§‹āĻ¨āĻžāĻŽā§‡ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ:

  • infomask āĻšāĻ˛ āĻŦāĻŋāĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻŋāĻ°āĻŋāĻœ āĻ¯āĻž āĻāĻ‡ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡āĻ° āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻ•āĻ°ā§‡āĨ¤ āĻ¤āĻžāĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻŦā§‡āĻļ āĻ…āĻ¨ā§‡āĻ• āĻ†āĻ›ā§‡; āĻ†āĻŽāĻ°āĻž āĻ§ā§€āĻ°ā§‡ āĻ§ā§€āĻ°ā§‡ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻŦā§‡āĻļā§€ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻŦā§‡.
  • ctid āĻšāĻ˛ āĻāĻ•āĻ‡ āĻ˛āĻžāĻ‡āĻ¨ā§‡āĻ° āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€, āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ˛āĻŋāĻ™ā§āĻ•āĨ¤ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚ āĻāĻ° āĻ¨āĻ¤ā§āĻ¨āĻ¤āĻŽ, āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯, ctid āĻāĻ‡ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖāĻŸāĻŋāĻ•ā§‡āĻ‡ āĻŦā§‹āĻāĻžāĻ¯āĻŧāĨ¤ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻŸāĻŋāĻ° āĻĢāĻ°ā§āĻŽ (x,y), āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ x āĻšāĻ˛ āĻĒā§ƒāĻˇā§āĻ āĻž āĻ¨āĻŽā§āĻŦāĻ°, y āĻšāĻ˛ āĻ…ā§āĻ¯āĻžāĻ°ā§‡āĻ° āĻ¸ā§‚āĻšāĻ• āĻ¨āĻŽā§āĻŦāĻ°āĨ¤
  • āĻ¨āĻžāĻ˛ āĻŦāĻŋāĻŸāĻŽā§āĻ¯āĻžāĻĒ - āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻĻāĻ¤ā§āĻ¤ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡āĻ° āĻ¸ā§‡āĻ‡ āĻ•āĻ˛āĻžāĻŽāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻšāĻŋāĻšā§āĻ¨āĻŋāĻ¤ āĻ•āĻ°ā§‡ āĻ¯āĻžāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻžāĻ˛ āĻŽāĻžāĻ¨ (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

āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻŦā§‡āĻ¨ āĻĒā§‹āĻ¸ā§āĻŸāĻ—ā§āĻ°ā§‡āĻāĻ¸āĻ•āĻŋāĻ‰āĻāĻ˛-āĻāĻ° āĻšāĻŋāĻĒ āĻļāĻŦā§āĻĻāĻŸāĻŋ āĻŸā§‡āĻŦāĻŋāĻ˛āĻ•ā§‡ āĻŦā§‹āĻāĻžāĻ¯āĻŧāĨ¤ āĻāĻŸāĻŋ āĻļāĻŦā§āĻĻāĻŸāĻŋāĻ° āĻ†āĻ°ā§‡āĻ•āĻŸāĻŋ āĻ…āĻĻā§āĻ­ā§āĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° - āĻāĻ•āĻŸāĻŋ āĻ—āĻžāĻĻāĻž āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻ¤āĻĨā§āĻ¯ āĻ•āĻžāĻ āĻžāĻŽā§‹, āĻ¯āĻž āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻŋāĻ˛ āĻ¨ā§‡āĻ‡āĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻļāĻŦā§āĻĻāĻŸāĻŋ "āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻāĻ•āĻ¸āĻžāĻĨā§‡ āĻ¨āĻŋāĻ•ā§āĻˇā§‡āĻĒ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ" āĻ…āĻ°ā§āĻĨā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ…āĻ°ā§āĻĄāĻžāĻ°āĻ•ā§ƒāĻ¤ āĻ¸ā§‚āĻšāĻ•ā§‡āĻ° āĻŦāĻŋāĻĒāĻ°ā§€āĻ¤ā§‡āĨ¤

āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ āĻĄā§‡āĻŸāĻž āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ "āĻ¯ā§‡āĻŽāĻ¨ āĻ†āĻ›ā§‡", āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§‡ āĻ¯āĻž āĻŦā§‹āĻāĻž āĻ•āĻ āĻŋāĻ¨āĨ¤ āĻāĻŸāĻŋ āĻŦā§‡āĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻ°āĻž āĻ¤āĻĨā§āĻ¯ā§‡āĻ° āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ•āĻŋāĻ›ā§ āĻ…āĻ‚āĻļ āĻ›ā§‡āĻĄāĻŧā§‡ āĻĻā§‡āĻŦ āĻāĻŦāĻ‚ āĻāĻŸāĻŋāĻ° āĻĒāĻžāĻ ā§‹āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°āĻŦ:

=> 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;

āĻ¸ā§‚āĻšāĻ•ā§‡āĻ°

āĻ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ†āĻŽāĻ°āĻž āĻļā§āĻ§ā§ āĻŸā§‡āĻŦāĻŋāĻ˛ āĻĒā§‡āĻœ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛ā§‡āĻ›āĻŋāĨ¤ āĻ‡āĻ¨āĻĄā§‡āĻ•ā§āĻ¸ā§‡āĻ° āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻ•āĻŋ āĻšāĻ¯āĻŧ?

āĻ¸ā§āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ¸ā§‚āĻšāĻ•ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡ āĻ¸ā§‚āĻšā§€ āĻĒāĻžāĻ¤āĻžāĻ° āĻ¤āĻĨā§āĻ¯ āĻŦā§āĻ¯āĻžāĻĒāĻ•āĻ­āĻžāĻŦā§‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻāĻŦāĻ‚ āĻāĻŽāĻ¨āĻ•āĻŋ āĻāĻ• āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ¸ā§‚āĻšāĻ•ā§‡āĻ° āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻĒā§ƒāĻˇā§āĻ āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻāĻ•āĻŸāĻŋ āĻŦāĻŋ-āĻŸā§āĻ°āĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž āĻĒā§ƒāĻˇā§āĻ āĻž āĻāĻŦāĻ‚ "āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤" āĻĒā§ƒāĻˇā§āĻ āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻĒā§ƒāĻˇā§āĻ āĻžāĻ¯āĻŧ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ¸āĻžāĻ°āĻŋ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ°āĻŋāĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ°ā§‡ āĻĨāĻžāĻ•ā§‡ (āĻ āĻŋāĻ• āĻāĻ•āĻŸāĻŋ āĻŸā§‡āĻŦāĻŋāĻ˛ āĻĒā§ƒāĻˇā§āĻ āĻžāĻ° āĻŽāĻ¤ā§‹)āĨ¤ āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻĒā§ƒāĻˇā§āĻ āĻžāĻ° āĻļā§‡āĻˇā§‡ āĻŦāĻŋāĻļā§‡āĻˇ āĻĄā§‡āĻŸāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸ā§āĻĨāĻžāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻ‡āĻ¨āĻĄā§‡āĻ•ā§āĻ¸ā§‡āĻ° āĻ¸āĻžāĻ°āĻŋāĻ—ā§āĻ˛āĻŋāĻ“ āĻ¸ā§‚āĻšāĻ•ā§‡āĻ° āĻ§āĻ°āĻŖā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡ āĻ–ā§āĻŦ āĻ†āĻ˛āĻžāĻĻāĻž āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻāĻ•āĻŸāĻŋ āĻŦāĻŋ-āĻŦā§ƒāĻ•ā§āĻˇā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻĒāĻžāĻ¤āĻžāĻ° āĻĒā§ƒāĻˇā§āĻ āĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāĻ¤ āĻ¸āĻžāĻ°āĻŋāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ‡āĻ¨āĻĄā§‡āĻ•ā§āĻ¸āĻŋāĻ‚ āĻ•ā§€ āĻŽāĻžāĻ¨ āĻāĻŦāĻ‚ āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡āĻ° āĻ¸āĻžāĻ°āĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ°ā§‡āĻĢāĻžāĻ°ā§‡āĻ¨ā§āĻ¸ (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 āĻœāĻžāĻ°āĻŋ āĻ•āĻ°ā§‡āĨ¤ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¸ā§‡āĻ¸ āĻ†āĻ‡āĻĄāĻŋ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŋāĻ•ā§‹āĻ¯āĻŧā§‡āĻ¨ā§āĻ¸ āĻ¨āĻŽā§āĻŦāĻ° āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ—āĻ āĻŋāĻ¤āĨ¤

āĻāĻ‡ āĻ¨āĻŽā§āĻŦāĻ° āĻ‡āĻ¸ā§āĻ¯ā§ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ‡āĻœā§‡āĻļāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻž āĻāĻŦāĻ‚ āĻ¤āĻžāĻ‡ āĻ–ā§āĻŦ āĻĻā§āĻ°ā§āĻ¤āĨ¤ āĻ†āĻŽāĻ°āĻž āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻ¨āĻŽā§āĻŦāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ†āĻ°ā§‡āĻ•āĻŸāĻŋ āĻ•āĻžāĻ°āĻŖā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻšāĻŦ āĻ¯āĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻšāĻŋāĻŽāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛āĻŦāĨ¤

āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻ¨āĻŽā§āĻŦāĻ°āĻ—ā§āĻ˛āĻŋ āĻĄā§‡āĻŸāĻž āĻ¸ā§āĻ¨ā§āĻ¯āĻžāĻĒāĻļāĻŸā§‡ āĻ•ā§‹āĻ¨āĻ“āĻ­āĻžāĻŦā§‡āĻ‡ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻžāĻ¯āĻŧ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤

āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ¸āĻŽāĻ¯āĻŧā§‡, āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ•āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻĄā§‡āĻŸāĻž āĻĒā§ƒāĻˇā§āĻ āĻžāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ˛ā§‡āĻ–āĻž āĻ¯āĻžāĻŦā§‡ āĻ¨āĻž, āĻ•āĻžāĻ°āĻŖ āĻĒāĻ°ā§‡āĻ° āĻŦāĻžāĻ° āĻĒā§ƒāĻˇā§āĻ āĻžāĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ•āĻ°āĻž āĻšāĻ˛ā§‡ āĻāĻŸāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ…āĻ°ā§āĻĨ āĻšāĻžāĻ°āĻŋāĻ¯āĻŧā§‡ āĻĢā§‡āĻ˛āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

=> 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

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨