เชคเซเชฅเซ, เช
เชฎเซ เชธเชเชฌเชเชงเชฟเชค เชฎเซเชฆเซเชฆเชพเช เชชเชฐ เชตเชฟเชเชพเชฐ เชเชฐเซเชฏเซ เชเซ
เชนเซเชกเชฐ
เชเชชเชฃเซ เชชเชนเซเชฒเซเชฅเซ เช เชเชนเซเชฏเซเช เชเซ เชคเซเชฎ, เชฆเชฐเซเช เชชเชเชเซเชคเชฟ เชเชเชธเชพเชฅเซ เชกเซเชเชพเชฌเซเชเชฎเชพเช เช เชจเซเช เชธเชเชธเซเชเชฐเชฃเซเชฎเชพเช เช เชธเซเชคเชฟเชคเซเชตเชฎเชพเช เชนเซเช เชถเชเซ เชเซ. เชเช เชธเชเชธเซเชเชฐเชฃ เชเซเชเช เชฐเซเชคเซ เชฌเซเชเชพเชฅเซ เช เชฒเช เชนเซเชตเซเช เชเซเชเช. เช เชนเซเชคเซ เชฎเชพเชเซ, เชฆเชฐเซเช เชธเชเชธเซเชเชฐเชฃเชฎเชพเช เชฌเซ เชเซเชฃ เชเซ เชเซ เช เชธเชเชธเซเชเชฐเชฃเชจเซ เชเซเชฐเชฟเชฏเชพเชจเซ "เชธเชฎเชฏ" เชจเชเซเชเซ เชเชฐเซ เชเซ (xmin เช เชจเซ xmax). เช เชตเชคเชฐเชฃเชฎเชพเช - เชเชพเชฐเชฃ เชเซ เชคเซ เชธเชฎเชฏเชจเซ เชเชชเชฏเซเช เชฅเชคเซ เชจเชฅเซ, เชชเชฐเชเชคเซ เชเช เชตเชฟเชถเซเชท เชตเชงเชคเซ เชเชพเชเชจเซเชเชฐ เชเซ. เช เชจเซ เช เชเชพเชเชจเซเชเชฐ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชจเชเชฌเชฐ เชเซ.
(เชนเชเชฎเซเชถเชจเซ เชเซเชฎ, เชตเชพเชธเซเชคเชตเชฟเชเชคเชพ เชตเชงเซ เชเชเชฟเชฒ เชเซ: เชเชพเชเชจเซเชเชฐเชจเซ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชฌเซเช เชเซเชทเชฎเชคเชพเชจเซ เชเชพเชฐเชฃเซ เชตเซเชฏเชตเชนเชพเชฐ เชจเชเชฌเชฐ เชธเชคเชค เชตเชงเซ เชถเชเชคเซ เชจเชฅเซ. เชชเชฐเชเชคเซ เชเซเชฏเชพเชฐเซ เชเชชเชฃเซ เช เชเชกเซเช เชฅเช เชเชเชถเซเช เชคเซเชฏเชพเชฐเซ เช
เชฎเซ เช เชตเชฟเชเชคเซเชจเซ เชตเชฟเชเชคเชตเชพเชฐ เชเซเชเชถเซเช.)
เชเซเชฏเชพเชฐเซ เชชเชเชเซเชคเชฟ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ xmin เช เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชจเชเชฌเชฐ เชชเชฐ เชธเซเช เชฅเชพเชฏ เชเซ เชเซเชฃเซ INSERT เชเชฆเซเชถ เชเชพเชฐเซ เชเชฐเซเชฏเซ เชนเชคเซ, เช
เชจเซ xmax เชเชพเชฒเซ เชเซเชกเซ เชฆเซเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชเซเชฏเชพเชฐเซ เชเซเช เชชเชเชเซเชคเชฟ เชเชพเชขเซ เชจเชพเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชตเชฐเซเชคเชฎเชพเชจ เชธเชเชธเซเชเชฐเชฃเชจเซเช xmax เชฎเซเชฒเซเชฏ เชคเซ เชตเซเชฏเชตเชนเชพเชฐเชจเซ เชธเชเชเซเชฏเชพ เชธเชพเชฅเซ เชเชฟเชนเซเชจเชฟเชค เชฅเชพเชฏ เชเซ เชเซเชฃเซ เชเชพเชขเซ เชจเชพเชเซเชฏเซเช เชนเชคเซเช.
เชเซเชฏเชพเชฐเซ เชชเชเชเซเชคเชฟ เช เชชเชกเซเช เชเชฆเซเชถ เชฆเซเชตเชพเชฐเชพ เชธเชเชถเซเชงเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชเชฐเซเชเชฐ เชฌเซ เชเชพเชฎเชเซเชฐเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ: เชเชพเชขเซ เชจเชพเชเซ เช เชจเซ เชฆเชพเชเชฒ เชเชฐเซ. เชชเชเชเซเชคเชฟเชจเซเช เชตเชฐเซเชคเชฎเชพเชจ เชธเชเชธเซเชเชฐเชฃ xmax เชจเซ เช เชชเชกเซเช เชเชฐเซเชฒ เชตเซเชฏเชตเชนเชพเชฐเชจเซ เชธเชเชเซเชฏเชพเชจเซ เชฌเชฐเชพเชฌเชฐ เชธเซเช เชเชฐเซ เชเซ. เชคเซ เช เชถเชฌเซเชฆเชฎเชพเชณเชพเชจเซเช เชจเชตเซเช เชธเชเชธเซเชเชฐเชฃ เชชเชเซ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ; เชคเซเชจเซเช xmin เชฎเซเชฒเซเชฏ เช เชเชพเชเชจเชพ เชธเชเชธเซเชเชฐเชฃเชจเชพ xmax เชฎเซเชฒเซเชฏ เชธเชพเชฅเซ เชเชเชฐเซเชช เชเซ.
xmin เช เชจเซ xmax เชเซเชทเซเชคเซเชฐเซ เชชเชเชเซเชคเชฟ เชธเชเชธเซเชเชฐเชฃ เชนเซเชกเชฐเชฎเชพเช เชถเชพเชฎเซเชฒ เชเซ. เช เชเซเชทเซเชคเซเชฐเซ เชเชชเชฐเชพเชเชค, เชนเซเชกเชฐเชฎเชพเช เช เชจเซเชฏ เชถเชพเชฎเซเชฒ เชเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ:
- เชเชจเซเชซเซเชฎเชพเชธเซเช เช เชฌเชฟเชเซเชธเชจเซ เชถเซเชฐเซเชฃเซ เชเซ เชเซ เช เชธเชเชธเซเชเชฐเชฃเชจเชพ เชเซเชฃเชงเชฐเซเชฎเซเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเซ เชเซ. เชคเซเชฎเชพเชเชจเชพ เชเชฃเชพ เชฌเชงเชพ เชเซ; เช เชฎเซ เชงเซเชฎเซ เชงเซเชฎเซ เชฎเซเชเซเชฏ เชฎเซเชฆเซเชฆเชพเช เชงเซเชฏเชพเชจเชฎเชพเช เชฒเชเชถเซเช.
- 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
เชจเซเชเชง เชเชฐเซ เชเซ 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 เชฎเชพเช เชเซเช เชตเซเชฏเชตเชนเชพเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ เช เชตเซเชฏเชตเชนเชพเชฐ เชฎเชพเชเซ เชชเซเชฐเชคเชฟเชฌเชฆเซเชง เชฌเซเช เชธเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เช เชจเซ เช เชฌเชงเซเช เชเชฎเชฟเชเชฟเชเช เชฆเชฐเชฎเชฟเชฏเชพเชจ เชฅเชพเชฏ เชเซ (เชเซเชเซ เช เชฎเซ เชนเชเซ เชธเซเชงเซ เชชเซเชฐเซ-เชฐเซเชเซเชฐเซเชกเชฟเชเช เชฒเซเช เชตเชฟเชถเซ เชตเชพเชค เชเชฐเซ เชฐเชนเซเชฏเชพ เชจเชฅเซ).
เชเซเชฏเชพเชฐเซ เช เชจเซเชฏ เชเซเชฐเชพเชจเซเชเซเชเซเชถเชจ เชเซเชฌเชฒ เชชเซเชเชจเซ เชเชเซเชธเซเชธ เชเชฐเซ เชเซ เชเซ เช เชฎเซ เชนเชฎเชฃเชพเช เช เชเซเชฏเซเช เชเซ, เชคเซเชฏเชพเชฐเซ เชคเซเชจเซ เชเชฃเชพ เชชเซเชฐเชถเซเชจเซเชจเชพ เชเชตเชพเชฌ เชเชชเชตเชพ เชชเชกเชถเซ.
- เชถเซเช xmin เชตเซเชฏเชตเชนเชพเชฐ เชชเซเชฐเซเชฃ เชฅเชฏเซ เชเซ? เชเซ เชจเชนเชฟเช, เชคเซ เชถเชฌเซเชฆเชฎเชพเชณเชพเชจเซเช เชฌเชจเชพเชตเซเชฒ เชธเชเชธเซเชเชฐเชฃ เชฆเซเชถเซเชฏเชฎเชพเชจ เชนเซเชตเซเช เชเซเชเช เชจเชนเซเช.
เช เชคเชชเชพเชธ เช เชจเซเชฏ เชธเซเชเซเชฐเชเซเชเชฐเชจเซ เชเซเชเชจเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชเซ เชเชฆเชพเชนเชฐเชฃเชจเซ เชตเชนเซเชเชเชพเชฏเซเชฒ เชฎเซเชฎเชฐเซเชฎเชพเช เชธเซเชฅเชฟเชค เชเซ เช เชจเซ เชคเซเชจเซ เชชเซเชฐเซเชเชเชฐเซ เชเชนเซเชตเชพเชฏ เชเซ. เชคเซ เชฌเชงเซ เชธเชเซเชฐเชฟเชฏ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชเชจเซ เชธเซเชเชฟ เชงเชฐเชพเชตเซ เชเซ, เช เชจเซ เชฆเชฐเซเช เชฎเชพเชเซ เชคเซเชจเชพ เชตเชฐเซเชคเชฎเชพเชจ (เชธเชเซเชฐเชฟเชฏ) เชตเซเชฏเชตเชนเชพเชฐเชจเซ เชธเชเชเซเชฏเชพ เชฆเชฐเซเชถเชพเชตเซเชฒ เชเซ. - เชเซ เชชเซเชฐเซเชฃ เชฅเชพเชฏ, เชคเซ เชเซเชตเซ เชฐเซเชคเซ - เชชเซเชฐเชคเชฟเชฌเชฆเซเชง เช
เชฅเชตเชพ เชฐเชฆ เชเชฐเซเชจเซ? เชเซ เชฐเชฆ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ, เชคเซ เชชเชเชเซเชคเชฟ เชธเชเชธเซเชเชฐเชฃ เชชเชฃ เชฆเซเชถเซเชฏเชฎเชพเชจ เชนเซเชตเซเช เชเซเชเช เชจเชนเซเช.
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 เชชเซเชฐเซเชฃ เชฅเชพเชฏ เชคเซเชฏเชพเช เชธเซเชงเซ เชฐเชพเชน เชเซเชตเชพเชจเซ เชซเชฐเช เชชเชพเชกเชตเชพเชฎเชพเช เชเชตเชถเซ. เช เชฎเซ เชชเชเซเชฅเซ เช เชตเชฐเซเชงเชฟเชค เชเชฐเชตเชพ เชตเชฟเชถเซ เชตเชงเซ เชตเชพเชค เชเชฐเซเชถเซเช. เชนเชฎเชฃเชพเช เชฎเชพเชเซ, เช เชฎเซ เชซเชเซเชค เชจเซเชเชงเซเช เชเซเช เชเซ เชชเชเชเซเชคเชฟ เชคเชพเชณเชพเชเชจเซ เชธเชเชเซเชฏเชพ เช เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชเซ. เชคเซเช เชฐเซเชฎเชฎเชพเช เชเชเซเชฏเชพ เชฒเซเชคเชพ เชจเชฅเซ เช เชจเซ เชธเชฟเชธเซเชเชฎเชจเซ เชเชพเชฎเชเซเชฐเซ เชคเซเชฎเชจเซ เชธเชเชเซเชฏเชพเชฅเซ เชชเซเชกเชพเชคเซ เชจเชฅเซ. เชธเชพเชเซเช, "เชฒเชพเชเชฌเชพ" เชตเซเชฏเชตเชนเชพเชฐเซเชจเชพ เช เชจเซเชฏ เชเซเชฐเชซเชพเชฏเชฆเชพ เชเซ, เชชเชฐเชเชคเซ เชคเซ เชชเชเซเชฅเซ เชตเชงเซ.
เชเชพเชฒเซ เชฒเซเชเซ เชเชพเชขเซ เชจเชพเชเซเช.
=> 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 hint เชฌเชฟเช เชชเชเชเซเชคเชฟ เชธเชเชธเซเชเชฐเชฃ เชชเชฐ เชธเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ. 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 เชฎเชพเช เชเซเช เชธเซเชตเชพเชฏเชคเซเชค เชตเซเชฏเชตเชนเชพเชฐเซ เชจเชฅเซ, เช เชจเซ, เชเชฆเชพเช, เชถเซเชฐเซเชทเซเช เชฎเชพเชเซ: เชคเซ เชเซเชฌ เช เชญเชพเชเซเชฏเซ เช เชเชฐเซเชฐเซ เชเซ, เช เชจเซ เช เชจเซเชฏ DBMSs เชฎเชพเช เชคเซเชฎเชจเซ เชนเชพเชเชฐเซ เชฆเซเชฐเซเชชเชฏเซเชเชจเซ เชเชคเซเชคเซเชเชฟเชค เชเชฐเซ เชเซ, เชเซเชจเชพเชฅเซ เชฆเชฐเซเช เชตเซเชฏเชเซเชคเชฟ เชชเซเชกเชพเชฏ เชเซ.
เชเชพเชฒเซ เชเซเชทเซเชเช เชธเชพเชซ เชเชฐเซเช, เชตเซเชฏเชตเชนเชพเชฐ เชถเชฐเซ เชเชฐเซเช เช เชจเซ เชชเชเชเซเชคเชฟ เชฆเชพเชเชฒ เชเชฐเซเช:
=> 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