เด
เดคเดฟเดจเดพเตฝ, เดเดคเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเตเดเตเด เดชเตเดฐเดถเตเดจเดเตเดเตพ เดเดเตเดเตพ เดชเดฐเดฟเดเดฃเดฟเดเตเดเต
เดนเตเดกเตเดกเตผ
เดเดเตเดเตพ เดเดคเดฟเดจเดเด เดชเดฑเดเตเดเดคเตเดชเตเดฒเต, เดเดฐเต เดตเดฐเดฟเดฏเตเด เดเดฐเตเดธเดฎเดฏเด เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดฒเต เดจเดฟเดฐเดตเดงเดฟ เดชเดคเดฟเดชเตเดชเตเดเดณเดฟเตฝ เดจเดฟเดฒเดจเดฟเตฝเดเตเดเตเด. เดเดฐเต เดชเดคเดฟเดชเตเดชเต เดเดเตเดเดจเตเดฏเตเดเตเดเดฟเดฒเตเด เดฎเดฑเตเดฑเตเดจเตเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเตผเดคเดฟเดฐเดฟเดเตเดเตเดฃเตเดเดคเดพเดฃเต. เด เดเดตเดถเตเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ, เดเดฐเต เดชเดคเดฟเดชเตเดชเดฟเดจเตเด เด เดชเดคเดฟเดชเตเดชเดฟเดจเตเดฑเต (xmin, xmax) เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดฑเต "เดธเดฎเดฏเด" เดจเดฟเตผเดฃเตเดฃเดฏเดฟเดเตเดเตเดจเตเดจ เดฐเดฃเตเดเต เด เดเดฏเดพเดณเดเตเดเดณเตเดฃเตเดเต. เดเดฆเตเดงเดฐเดฃเดฟเดเดณเดฟเตฝ - เดเดพเดฐเดฃเด เดเดคเต เดธเดฎเดฏเดฎเดฒเตเดฒ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเต, เดชเดเตเดทเต เดเดฐเต เดชเตเดฐเดคเตเดฏเตเด เดตเตผเดฆเตเดงเดฟเดเตเดเตเดตเดฐเตเดจเตเดจ เดเตเดฃเตเดเตผ. เด เดเตเดฃเตเดเดฑเดพเดฃเต เดเดเดชเดพเดเต เดจเดฎเตเดชเตผ.
(เดชเดคเดฟเดตเตเดชเตเดฒเต, เดฏเดพเดฅเดพเตผเดคเตเดฅเตเดฏเด เดเตเดเตเดคเตฝ เดธเดเตเดเตเตผเดฃเตเดฃเดฎเดพเดฃเต: เดเตเดฃเตเดเดฑเดฟเดจเตเดฑเต เดชเดฐเดฟเดฎเดฟเดคเดฎเดพเดฏ เดฌเดฟเดฑเตเดฑเต เดถเตเดทเดฟ เดเดพเดฐเดฃเด เดเดเดชเดพเดเต เดจเดฎเตเดชเตผ เดเดฒเตเดฒเดพเดฏเตโเดชเตเดชเตเดดเตเด เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเดฟเดฒเตเดฒ. เดเดจเตเดจเดพเตฝ เดซเตเดฐเตเดธเดฟเดเดเดฟเตฝ เดเดคเตเดคเตเดฎเตเดชเตเตพ เดเดเตเดเตพ เด เดตเดฟเดถเดฆเดพเดเดถเดเตเดเตพ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเด.)
เดเดฐเต เดตเดฐเดฟ เดธเตเดทเตเดเดฟเดเตเดเตเดฎเตเดชเตเตพ, INSERT เดเดฎเดพเตปเดกเต เดจเตฝเดเดฟเดฏ เดเดเดชเดพเดเต เดจเดฎเตเดชเดฑเดฟเดฒเตเดเตเดเต xmin เดธเดเตเดเตเดเดฐเดฟเดเตเดเตเด, เดเตเดเดพเดคเต xmax เดถเตเดจเตเดฏเดฎเดพเดฏเดฟ เด
เดตเดถเตเดทเดฟเดเตเดเตเดจเตเดจเต.
เดเดฐเต เดตเดฐเดฟ เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเดฎเตเดชเตเตพ, เดจเดฟเดฒเดตเดฟเดฒเต เดชเดคเดฟเดชเตเดชเดฟเดจเตเดฑเต xmax เดฎเตเดฒเตเดฏเด DELETE เดจเดเดคเตเดคเดฟเดฏ เดเดเดชเดพเดเดฟเดจเตเดฑเต เดเดฃเตเดฃเด เดเตเดฃเตเดเต เด เดเดฏเดพเดณเดชเตเดชเตเดเตเดคเตเดคเตเดจเตเดจเต.
เด เดชเตโเดกเตเดฑเตเดฑเต เดเดฎเดพเตปเดกเต เดเดชเดฏเตเดเดฟเดเตเดเต เดเดฐเต เดตเดฐเดฟ เดชเดฐเดฟเดทเตโเดเตเดเดฐเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดฐเดฃเตเดเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเตพ เดจเดเดคเตเดคเตเดจเตเดจเต: เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเด, เดเตเตผเดเตเดเตเด. เดตเดฐเดฟเดฏเตเดเต เดจเดฟเดฒเดตเดฟเดฒเต เดชเดคเดฟเดชเตเดชเต เด เดชเตโเดกเตเดฑเตเดฑเต เดจเดเดคเตเดคเดฟเดฏ เดเดเดชเดพเดเดฟเดจเตเดฑเต เดเดฃเตเดฃเดคเตเดคเดฟเดจเต เดคเตเดฒเตเดฏเดฎเดพเดฏ xmax เดธเดเตเดเตเดเดฐเดฟเดเตเดเตเดจเตเดจเต. เด เดคเต เดธเตเดเตเดฐเดฟเดเดเดฟเดจเตเดฑเต เดเดฐเต เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเต เดชเดฟเดจเตเดจเตเดเต เดธเตเดทเตเดเดฟเดเตเดเดชเตเดชเตเดเตเดจเตเดจเต; เด เดคเดฟเดจเตเดฑเต xmin เดฎเตเดฒเตเดฏเด เดฎเตเดฎเตเดชเดคเตเดคเต เดชเดคเดฟเดชเตเดชเดฟเดจเตเดฑเต xmax เดฎเตเดฒเตเดฏเดตเตเดฎเดพเดฏเดฟ เดชเตเดฐเตเดคเตเดคเดชเตเดชเตเดเตเดจเตเดจเต.
xmin, xmax เดซเตเตฝเดกเตเดเตพ เดตเดฐเดฟ เดชเดคเดฟเดชเตเดชเต เดคเดฒเดเตเดเตเดเตเดเดฟเตฝ เดเตพเดชเตเดชเตเดเตเดคเตเดคเดฟเดฏเดฟเดเตเดเตเดฃเตเดเต. เด เดซเตเตฝเดกเตเดเตพเดเตเดเต เดชเตเดฑเดฎเต, เดคเดฒเดเตเดเตเดเตเดเดฟเตฝ เดฎเดฑเตเดฑเตเดณเตเดณเดตเดฏเตเด เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต, เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต:
- เด เดชเดคเดฟเดชเตเดชเดฟเดจเตเดฑเต เดธเดตเดฟเดถเตเดทเดคเดเตพ เดจเดฟเตผเดตเดเดฟเดเตเดเตเดจเตเดจ เดฌเดฟเดฑเตเดฑเตเดเดณเตเดเต เดเดฐเต เดชเดฐเดฎเตเดชเดฐเดฏเดพเดฃเต infomask. เด เดตเดฏเดฟเตฝ เดงเดพเดฐเดพเดณเด เดเดฃเตเดเต; เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเดต เดเดเตเดเตพ เดเตเดฐเดฎเตเดฃ เดชเดฐเดฟเดเดฃเดฟเดเตเดเตเด.
- ctid เด เดคเต เดตเดฐเดฟเดฏเตเดเต เด เดเตเดคเตเดค, เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเดฟเดฒเตเดเตเดเตเดณเตเดณ เดเดฐเต เดฒเดฟเดเตเดเดพเดฃเต. เดเดฐเต เดธเตเดเตเดฐเดฟเดเดเดฟเดจเตเดฑเต เดเดฑเตเดฑเดตเตเด เดชเตเดคเดฟเดฏเดคเตเด เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณเดคเตเดฎเดพเดฏ เดชเดคเดฟเดชเตเดชเดฟเดจเต, ctid เด เดชเดคเดฟเดชเตเดชเดฟเดจเต เดคเดจเตเดจเต เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต. เดจเดฎเตเดชเดฑเดฟเดจเต เดซเตเด (x,y) เดเดฃเตเดเต, เดเดตเดฟเดเต x เดเดจเตเดจเดคเต เดชเตเดเต เดจเดฎเตเดชเดฑเดพเดฃเต, y เดเดจเตเดจเดคเต เด เดฑเตเดฏเดฟเดฒเต เดธเตเดเดฟเด เดธเดเดเตเดฏเดฏเดพเดฃเต.
- null เดฌเดฟเดฑเตเดฑเตเดฎเดพเดชเตเดชเต - เดเดฐเต เดถเตเดจเตเดฏ เดฎเตเดฒเตเดฏเด (NULL) เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดคเดจเตเดจเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดชเดคเดฟเดชเตเดชเดฟเดจเตเดฑเต เด เดจเดฟเดฐเดเดณเต เด เดเดฏเดพเดณเดชเตเดชเตเดเตเดคเตเดคเตเดจเตเดจเต. NULL เดเดจเตเดจเดคเต เดธเดพเดงเดพเดฐเดฃ เดกเดพเดฑเตเดฑเดพ เดคเดฐเด เดฎเตเดฒเตเดฏเดเตเดเดณเดฟเตฝ เดเดจเตเดจเดฒเตเดฒ, เด เดคเดฟเดจเดพเตฝ เดเดเตเดฐเดฟเดฌเตเดฏเตเดเตเดเต เดชเตเดฐเดคเตเดฏเตเดเด เดธเดเดญเดฐเดฟเดเตเดเดฟเดฐเดฟเดเตเดเดฃเด.
เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดคเดฒเดเตเดเตเดเตเดเต เดตเดณเดฐเต เดตเดฒเตเดคเดพเดฃเต - เดตเดฐเดฟเดฏเตเดเต เดเดฐเต เดชเดคเดฟเดชเตเดชเดฟเดจเตเด เดเตเดฑเดเตเดเดคเต 23 เดฌเตเดฑเตเดฑเตเดเตพ, เดเตเดเดพเดคเต เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ NULL เดฌเดฟเดฑเตเดฑเตเดฎเดพเดชเตเดชเต เดเดพเดฐเดฃเด เดเตเดเตเดคเตฝ. เดชเดเตเดเดฟเด "เดเดเตเดเตเดเดฟเดฏเดคเต" เดเดฃเตเดเตเดเดฟเตฝ (เด เดคเดพเดฏเดคเต, เดเตเดฑเดเตเดเต เดจเดฟเดฐเดเตพ เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต), เดเดตเตผเดนเตเดกเต เดเดชเดฏเตเดเดชเตเดฐเดฆเดฎเดพเดฏ เดตเดฟเดตเดฐเดเตเดเดณเตเดเตเดเดพเตพ เดเตเดเตเดคเตฝ เดเดเตเดคเตเดคเตเดเตเดเดพเด.
เดเตเดเตเดเดฟเดเตเดเตเดฐเตเดเตเดเตเด
เดเตปเดธเตเตผเดทเตป เดฎเตเดคเตฝ เดฒเต-เดฒเตเดตเตฝ เดธเตเดเตเดฐเดฟเดเดเต เดเดชเตเดชเดฑเตเดทเดจเตเดเตพ เดเดเตเดเดจเตเดฏเดพเดฃเต เดจเดเดคเตเดคเตเดจเตเดจเดคเต เดเดจเตเดจเต เดจเดฎเตเดเตเดเต เด เดเตเดคเตเดคเดฑเดฟเดฏเดพเด.
เดชเดฐเตเดเตเดทเดฃเดเตเดเตพเดเตเดเดพเดฏเดฟ, เดฐเดฃเตเดเต เดจเดฟเดฐเดเดณเตเด เด เดตเดฏเดฟเดฒเตเดจเตเดจเดฟเตฝ เดเดฐเต เดธเตเดเดฟเดเดฏเตเด เดเดณเตเดณ เดเดฐเต เดชเตเดคเดฟเดฏ เดชเดเตเดเดฟเด เดธเตเดทเตเดเดฟเดเตเดเดพเด:
=> CREATE TABLE t(
id serial,
s text
);
=> CREATE INDEX ON t(s);
เดเดฐเต เดเดเดชเดพเดเต เดเดฐเดเดญเดฟเดเตเดเดคเดฟเดจเต เดถเตเดทเด เดจเดฎเตเดเตเดเต เดเดฐเต เดตเดฐเดฟ เดคเดฟเดฐเตเดเดพเด.
=> BEGIN;
=> INSERT INTO t(s) VALUES ('FOO');
เดเดเตเดเดณเตเดเต เดจเดฟเดฒเดตเดฟเดฒเต เดเดเดชเดพเดเต เดจเดฎเตเดชเตผ เดเดคเดพ:
=> SELECT txid_current();
txid_current
--------------
3664
(1 row)
เดชเตเดเดฟเดจเตเดฑเต เดเดณเตเดณเดเดเตเดเด เดจเตเดเตเดเดพเด. เดชเตเดเตเดเตปเดธเตโเดชเตเดเตเดฑเตเดฑเต เดตเดฟเดชเตเดฒเตเดเดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต 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 เดเดเดชเดพเดเต เดชเตเตผเดคเตเดคเดฟเดฏเดพเดฏเต? เดเดฒเตเดฒเตเดเตเดเดฟเตฝ, เดธเตเดเตเดฐเดฟเดเดเดฟเดจเตเดฑเต เดธเตเดทเตโเดเดฟเดเตเด เดชเดคเดฟเดชเตเดชเต เดฆเตเดถเตเดฏเดฎเดพเดเดฐเตเดคเต.
เดฎเดฑเตเดฑเตเดฐเต เดเดเดจ เดจเตเดเตเดเดฟเดฏเดพเดฃเต เด เดชเดฐเดฟเดถเตเดงเดจ เดจเดเดคเตเดคเตเดจเตเดจเดคเต, เด เดคเต เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต เดชเดเตเดเดฟเดเตเด เดฎเตเดฎเตเดฎเดฑเดฟเดฏเดฟเตฝ เดธเตเดฅเดฟเดคเดฟเดเตเดฏเตเดฏเตเดจเตเดจเต, เด เดคเดฟเดจเต 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 เดชเตเตผเดคเตเดคเดฟเดฏเดพเดเตเดจเตเดจเดคเตเดตเดฐเต เดเดพเดคเตเดคเดฟเดฐเดฟเดเตเดเดพเตป เด เดคเต เดจเดฟเตผเดฌเดจเตเดงเดฟเดคเดฐเดพเดเตเด. เดคเดเดฏเตเดจเตเดจเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเต เดชเดฟเดจเตเดจเตเดเต เดเตเดเตเดคเตฝ เดธเดเดธเดพเดฐเดฟเดเตเดเดพเด. เดเดชเตเดชเตเตพ, เดตเดฐเดฟ เดฒเตเดเตเดเตเดเดณเตเดเต เดเดฃเตเดฃเด เดชเดฐเดฟเดงเดฟเดฏเดฟเดฒเตเดฒเดพเดคเตเดคเดคเดพเดฃเตเดจเตเดจเต เดเดเตเดเตพ เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเดจเตเดจเต. เด เดต เดฑเดพเดฎเดฟเตฝ เดเดเด เดเดเตเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ, เดเตเดเดพเดคเต เดธเดฟเดธเตเดฑเตเดฑเด เดชเตเดฐเดเดเดจเด เด เดตเดฐเตเดเต เดจเดฎเตเดชเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดทเตเดเดชเตเดชเตเดเตเดจเตเดจเดฟเดฒเตเดฒ. เดถเดฐเดฟเดฏเดพเดฃเต, "เดฆเตเตผเดเดฎเดพเดฏ" เดเดเดชเดพเดเตเดเตพเดเตเดเต เดฎเดฑเตเดฑเต เดฆเตเดทเดเตเดเดณเตเดฎเตเดฃเตเดเต, เดเดจเตเดจเดพเตฝ เดชเดฟเดจเตเดจเตเดเต เดเตเดเตเดคเตฝ.
เดจเดฎเตเดเตเดเต เดฒเตเตป เดเดฒเตเดฒเดพเดคเดพเดเตเดเดพเด.
=> 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-เตฝ เดจเดฟเตผเดตเดเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต เดชเตเดฏเดฟเดจเตเดฑเตเดเตพ เดธเดเดฐเดเตเดทเดฟเดเตเดเตเด (เดธเตเดตเตเดชเตเดฏเดฟเดจเตเดฑเต), เดเดคเต เดเดฐเต เดเดเดชเดพเดเดฟเดจเตเดฑเต เดเดฐเต เดญเดพเดเด เดชเตเตผเดฃเตเดฃเดฎเดพเดฏเตเด เดคเดเดธเตเดธเดชเตเดชเตเดเตเดคเตเดคเดพเดคเต เดคเดจเตเดจเต เดฑเดฆเตเดฆเดพเดเตเดเดพเตป เดจเดฟเดเตเดเดณเต เด เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจเต. เดเดจเตเดจเดพเตฝ เดเดคเต เดฎเตเดเดณเดฟเดฒเตเดณเตเดณ เดกเดฏเดเตเดฐเดพเดฎเตเดฎเดพเดฏเดฟ เดฏเตเดเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ, เดเดพเดฐเดฃเด เดเดเดชเดพเดเดฟเดจเต เด เดคเดฟเดจเตเดฑเต เดเดฒเตเดฒเดพ เดฎเดพเดฑเตเดฑเดเตเดเตพเดเตเดเตเด เดเดฐเต เดจเดฟเดฒเดฏเตเดฃเตเดเต, เดเตเดเดพเดคเต เดญเตเดคเดฟเดเดฎเดพเดฏเดฟ เดเดฐเต เดกเดพเดฑเตเดฑเดฏเตเด เดคเดฟเดฐเดฟเดเต เดจเตฝเดเดฟเดฒเตเดฒ.
เด เดชเตเดฐเดตเตผเดคเตเดคเดจเด เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ, เดเดฐเต เดธเตเดตเต เดชเตเดฏเดฟเดจเตเดฑเต เดเดณเตเดณ เดเดฐเต เดเดเดชเดพเดเต เดชเดฒ เดญเดพเดเดเตเดเดณเดพเดฏเดฟ เดตเดฟเดญเดเดฟเดเตเดเดชเตเดชเตเดเตเดจเตเดจเต เดจเตเดธเตเดฑเตเดฑเดกเต เดเดเดชเดพเดเตเดเตพ (เดธเดฌเตเดเตเดฐเดพเตปเดธเดเตเดทเตป), เดเดคเดฟเดจเตเดฑเต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดธเต เดชเตเดฐเดคเตเดฏเตเดเด เดเตเดเดพเดฐเตเดฏเด เดเตเดฏเตเดฏเดพเดตเตเดจเตเดจเดคเดพเดฃเต.
เดจเตเดธเตเดฑเตเดฑเดกเต เดเดเดชเดพเดเตเดเตพเดเตเดเต เด เดตเดฐเตเดเตเดคเดพเดฏ เดจเดฎเตเดชเตผ เดเดฃเตเดเต (เดชเตเดฐเดงเดพเดจ เดเดเดชเดพเดเดฟเดจเตเดฑเต เดเดฃเตเดฃเดคเตเดคเตเดเตเดเดพเตพ เดเดฏเตผเดจเตเดจเดคเต). เดจเตเดธเตเดฑเตเดฑเดกเต เดเดเดชเดพเดเตเดเดณเตเดเต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดธเต 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