āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻāĻŽāĻ°āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻāĻŋāĻ¤ āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°ā§āĻāĻŋ
āĻšā§āĻĄāĻžāĻ°
āĻāĻŽāĻ°āĻž āĻāĻā§āĻ āĻŦāĻ˛ā§āĻāĻŋ, āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ¸āĻžāĻ°āĻŋ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§āĻ° āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§ āĻāĻāĻ āĻ¸āĻžāĻĨā§ āĻĨāĻžāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻāĻāĻŋ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖāĻā§ āĻ āĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĨā§āĻā§ āĻāĻ˛āĻžāĻĻāĻž āĻāĻ°āĻž āĻāĻŦāĻļā§āĻ¯āĻā§ˇ āĻāĻ āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ā§, āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§ āĻĻā§āĻāĻŋ āĻāĻŋāĻšā§āĻ¨ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯āĻž āĻāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻāĻ°ā§āĻŽā§āĻ° "āĻ¸āĻŽāĻ¯āĻŧ" āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻāĻ°ā§ (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 āĻ āĻāĻāĻāĻŋ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻāĻ¨ āĻāĻ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋāĻŦāĻĻā§āĻ§ āĻŦāĻŋāĻ āĻ¸ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻŦāĻ āĻāĻŽāĻŋāĻ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻāĻŋāĻ āĻāĻā§ (āĻ¯āĻĻāĻŋāĻ āĻāĻŽāĻ°āĻž āĻāĻāĻ¨āĻ āĻĒā§āĻ°āĻžāĻ-āĻ°ā§āĻāĻ°ā§āĻĄāĻŋāĻ āĻ˛āĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛āĻāĻŋ āĻ¨āĻž)āĨ¤
āĻ¯āĻāĻ¨ āĻ āĻ¨ā§āĻ¯ āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻĒā§āĻˇā§āĻ āĻžāĻāĻŋ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ°ā§ āĻ¯āĻž āĻāĻŽāĻ°āĻž āĻāĻāĻŽāĻžāĻ¤ā§āĻ° āĻĻā§āĻā§āĻāĻŋ, āĻāĻāĻŋāĻā§ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻĒā§āĻ°āĻļā§āĻ¨ā§āĻ° āĻāĻ¤ā§āĻ¤āĻ° āĻĻāĻŋāĻ¤ā§ āĻšāĻŦā§āĨ¤
- xmin āĻ˛ā§āĻ¨āĻĻā§āĻ¨ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ¯āĻŧā§āĻā§? āĻ¯āĻĻāĻŋ āĻ¨āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻ¸ā§āĻā§āĻ°āĻŋāĻāĻ¯āĻŧā§āĻ° āĻ¤ā§āĻ°āĻŋ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖāĻāĻŋ āĻĻā§āĻļā§āĻ¯āĻŽāĻžāĻ¨ āĻšāĻāĻ¯āĻŧāĻž āĻāĻāĻŋāĻ¤ āĻ¨āĻ¯āĻŧāĨ¤
āĻāĻ āĻā§āĻāĻāĻŋ āĻ āĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻžāĻ āĻžāĻŽā§ āĻĻā§āĻā§ āĻ¸āĻā§āĻāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧ, āĻ¯āĻž āĻāĻĻāĻžāĻšāĻ°āĻŖā§āĻ° āĻāĻžāĻ āĻāĻ°āĻž āĻŽā§āĻŽāĻ°āĻŋāĻ¤ā§ āĻ āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ āĻāĻŦāĻ āĻāĻāĻŋāĻā§ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ ProcArrayāĨ¤ āĻāĻāĻŋāĻ¤ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ° āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ (āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧ) āĻ˛ā§āĻ¨āĻĻā§āĻ¨ā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻž āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ - āĻ¯āĻĻāĻŋ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŋāĻāĻžāĻŦā§ - āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻŦāĻž āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻāĻ°ā§? āĻ¯āĻĻāĻŋ āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻ¸āĻžāĻ°āĻŋ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖāĻāĻŋāĻ āĻĻā§āĻļā§āĻ¯āĻŽāĻžāĻ¨ āĻšāĻŦā§ āĻ¨āĻžāĨ¤
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