PostgreSQL�ˤ�����ӥ塼�ϥ롼�륷���ƥ��ȤäƼ�������Ƥ��ޤ������Ȥ��аʲ��Τ褦��CREAT VIEWʸ������Ȥ��ޤ���
CREATE VIEW myview AS SELECT * FROM mytab;
�ºݡ�����ȡ��ʲ���2�ĤΥ��ޥ�ɤδ֤ˤϤޤä����㤤������ޤ���
CREATE TABLE myview (same attribute list as for mytab); CREATE RULE "_RETmyview" AS ON SELECT TO myview DO INSTEAD SELECT * FROM mytab;
�Ȥ����Τϡ�CREATE VIEW���ޥ�ɤˤ�ä�����Ū�ˤޤä���Ʊ���������Ԥ��뤫��Ǥ��������������Ѥ⤢��ޤ�������1�Ĥ� PostgreSQL�����ƥ५�������Υӥ塼�ˤĤ��Ƥξ���ϥơ��֥�ξ����Ʊ��ʤΤǡ��ѡ����ˤȤäƤ�ơ��֥�ȥӥ塼��Ʊ����Τˤʤ�Ȥ������ȤǤ���������Ʊ����Ρ��Ĥޤꡢ��졼�����Ǥ�������ϸ������ν��ײ���Ǥ���
���Ȥ����ޥ�ɤ�INSERT��UPDATE��DELETE�ʤɤǤ��äƤ⡢ON SELECT�롼��Ϥ��٤Ƥ��䤤��碌���Ф��Ǹ��Ŭ�Ѥ���ޤ��������ơ����줾���¾�Ȱۤʤ륻�ޥ�ƥ��å�����äƤ��ƹ�ʸ���ϥĥ�������������ˡ������ˤ����Τ������ޤ����������ä�SELECT�롼�뤬���ֽ���ɾ������ʤ���Ф����ޤ���
���ߤΤȤ�����ON SELECT�롼��Ǥ�1�ĤΥ�������������줺�������INSTEAD�Ǥ���̵����SELECT���������Ǥʤ���Ф����ޤ���������ϰ��̤Υ桼�������Ƥ�롼�륷���ƥब��ϴ�Ǥ��뤿���ɬ�����Ǥ��ꡢON SELECT�Υ롼��ϼ¼�Ū��view�Υ롼��Τߤ˸��ꤵ��ޤ���
���Υɥ�����Ȥ���Ȥ��ƵƤ���Τϡ�����äȤ����黻��2�Ĥη��Υӥ塼�ȡ����ˤ����ε�ǽ�����Ѥ��뤤���Ĥ��Υӥ塼�Ǥ����ǽ���̤����餫����ˡ�ε�ǽ�ˤ�ꤢ������¥ơ��֥�Τ褦�˿����ӥ塼�ˤʤ�褦�ˡ��Ϥ��2�ĤΥӥ塼�����1�Ĥϡ�INSERT��UPDATE��DELETE�����Ф���롼������ɲä��뤳�Ȥǥ������ޥ�������ޤ����Ϥ�Ƴؤ֤������Ȥ��ƤϷ褷�ƴ�ñ�ǤϤʤ���˿ʤळ�Ȥ����������뤫�⤷��ޤ���¿�����̡����������Ф���Ƭ�κ�������⡢���٤Ƥ������ƥåפ��Ȥ��ɤ�1 �Ĥ�����ۤ��������Ǥ��礦��
��Ȥ�������ǡ����١�����̾����al_bundy�Ǥ����ʤ����Τ褦��̾���ʤΤ��Ϥ����ˤ狼��Ǥ��礦��2�Ĥ��������龮�����ͤ��֤�����äȤ���min()�ؿ���ɬ�פȤ��ޤ��Τǡ���³������ PL/pgSQL�����ȡ��뤵��Ƥ���ɬ�פ�����ޤ����ؿ��������ϰʲ��Τ褦�ˤ��ޤ���
CREATE FUNCTION min(integer, integer) RETURNS integer AS ' BEGIN IF $1 < $2 THEN RETURN $1; END IF; RETURN $2; END; ' LANGUAGE plpgsql;
�Ϥ��2�ĤΥ롼�륷���ƥ��������ɬ�פʼºݤΥơ��֥�ϰʲ��Τ�ΤǤ���
CREATE TABLE shoe_data ( shoename char(10), -- �ץ饤�ޥꥭ�� sh_avail integer, -- �߸� slcolor char(10), -- ˾�ޤ�����ɳ�ο� slminlen float, -- ��ɳ�κ�û������ slmaxlen float, -- ��ɳ�κ�Ĺ������ slunit char(8) -- Ĺ���Υ����� ); CREATE TABLE shoelace_data ( sl_name char(10), -- �ץ饤�ޥꥭ�� sl_avail integer, -- �߸� sl_color char(10), -- ��ɳ�ο� sl_len float, -- ��ɳ��Ĺ�� sl_unit char(8) -- Ĺ����ñ�� ); CREATE TABLE unit ( un_name char(8), -- �ץ饤�ޥꥭ�� un_fact float -- cm���Ѵ�����ե����� );
�ɼԤΤۤȤ�ɤ����������Ǥ��礦���餳�Υǡ����ϳΤ��˻Ȥ���Ϥ��Ǥ����������������ˤϷ�ɳ�Τ���ʤ����⤢��ޤ���������Ǥϥ�������褬����Ω���ޤ���Τ�̵�뤹�뤳�Ȥˤ��ޤ���
�ӥ塼�ϼ��Τ褦�ˤ��ƺ���ޤ���
CREATE VIEW shoe AS SELECT sh.shoename, sh.sh_avail, sh.slcolor, sh.slminlen, sh.slminlen * un.un_fact AS slminlen_cm, sh.slmaxlen, sh.slmaxlen * un.un_fact AS slmaxlen_cm, sh.slunit FROM shoe_data sh, unit un WHERE sh.slunit = un.un_name; CREATE VIEW shoelace AS SELECT s.sl_name, s.sl_avail, s.sl_color, s.sl_len, s.sl_unit, s.sl_len * u.un_fact AS sl_len_cm FROM shoelace_data s, unit u WHERE s.sl_unit = u.un_name; CREATE VIEW shoe_ready AS SELECT rsh.shoename, rsh.sh_avail, rsl.sl_name, rsl.sl_avail, min(rsh.sh_avail, rsl.sl_avail) AS total_avail FROM shoe rsh, shoelace rsl WHERE rsl.sl_color = rsh.slcolor AND rsl.sl_len_cm >= rsh.slminlen_cm AND rsl.sl_len_cm <= rsh.slmaxlen_cm;
shoelace�ӥ塼�ʺ�������ִ�ñ�ʥӥ塼���Ѥ�CREATE VIEW���ޥ�ɤϡ�shoelace��졼�����ȡ��䤤��碌�ϰϥơ��֥�����shoelace��졼������Ȥ����Ȥ��Ϥ��ĤǤ⡢Ŭ�Ѥ����٤������롼���¸�ߤ����ܤ�pg_rewrite�˺��ޤ����롼��ϥ롼�����SELECT�롼��ϸ����Ĥ��Ȥ��Ǥ��ޤ���Τǡ���SELECT�롼��ΤȤ����Ǽ�ꤢ�����ޤ��ˤ�����ʤ�INSTEAD�Ǥ����롼��ξ��ϡ��䤤��碌�ξ��Ȥϰۤʤ뤳�Ȥ����դ��Ƥ�������!���롼�륢���������䤤��碌������äƤ��ޤ���
�롼�륢�������ϥӥ塼�������ޥ�ɤ�SELECTʸ�Ȥޤä���Ʊ���䤤��碌�ĥ�Ǥ���
����: pg_rewrite���ܤ�NEW��OLD�����Ū����ͳ�ˤ�ꡢ�����Ѥ��䤤��碌�ĥ�ǤϤ����*NEW*��*CURRENT*�Ȥ���̾�����դ��Ƥ��ޤ��ˤ��Ф���2�Ĥ����̤��ϰϥơ��֥���ܤ�SELECT�롼��ˤϴط�����ޤ���
�ǤϤ�����unit��shoe_data�� shoelace_data�˥ǡ���������ޤ�������Ϥ����ǿ������SELECT�����Ϥ��ޤ���
al_bundy=> INSERT INTO unit VALUES ('cm', 1.0); al_bundy=> INSERT INTO unit VALUES ('m', 100.0); al_bundy=> INSERT INTO unit VALUES ('inch', 2.54); al_bundy=> al_bundy=> INSERT INTO shoe_data VALUES al_bundy-> ('sh1', 2, 'black', 70.0, 90.0, 'cm'); al_bundy=> INSERT INTO shoe_data VALUES al_bundy-> ('sh2', 0, 'black', 30.0, 40.0, 'inch'); al_bundy=> INSERT INTO shoe_data VALUES al_bundy-> ('sh3', 4, 'brown', 50.0, 65.0, 'cm'); al_bundy=> INSERT INTO shoe_data VALUES al_bundy-> ('sh4', 3, 'brown', 40.0, 50.0, 'inch'); al_bundy=> al_bundy=> INSERT INTO shoelace_data VALUES al_bundy-> ('sl1', 5, 'black', 80.0, 'cm'); al_bundy=> INSERT INTO shoelace_data VALUES al_bundy-> ('sl2', 6, 'black', 100.0, 'cm'); al_bundy=> INSERT INTO shoelace_data VALUES al_bundy-> ('sl3', 0, 'black', 35.0 , 'inch'); al_bundy=> INSERT INTO shoelace_data VALUES al_bundy-> ('sl4', 8, 'black', 40.0 , 'inch'); al_bundy=> INSERT INTO shoelace_data VALUES al_bundy-> ('sl5', 4, 'brown', 1.0 , 'm'); al_bundy=> INSERT INTO shoelace_data VALUES al_bundy-> ('sl6', 0, 'brown', 0.9 , 'm'); al_bundy=> INSERT INTO shoelace_data VALUES al_bundy-> ('sl7', 7, 'brown', 60 , 'cm'); al_bundy=> INSERT INTO shoelace_data VALUES al_bundy-> ('sl8', 1, 'brown', 40 , 'inch'); al_bundy=> al_bundy=> SELECT * FROM shoelace; sl_name |sl_avail|sl_color |sl_len|sl_unit |sl_len_cm ----------+--------+----------+------+--------+--------- sl1 | 5|black | 80|cm | 80 sl2 | 6|black | 100|cm | 100 sl7 | 7|brown | 60|cm | 60 sl3 | 0|black | 35|inch | 88.9 sl4 | 8|black | 40|inch | 101.6 sl8 | 1|brown | 40|inch | 101.6 sl5 | 4|brown | 1|m | 100 sl6 | 0|brown | 0.9|m | 90 (8 rows)
���뤬�Ԥ��ӥ塼���Ф���Ǥ��ñ��SELECT�Ǥ��Τǡ�����ǥӥ塼�δ��ܥ롼����������ޤ���SELECT * FROM shoelace�ϥѡ����ˤ�äƽ������졢���ι�ʸ���ϥĥ����������ޤ���
SELECT shoelace.sl_name, shoelace.sl_avail, shoelace.sl_color, shoelace.sl_len, shoelace.sl_unit, shoelace.sl_len_cm FROM shoelace shoelace;
�������ϥ롼�륷���ƥ���������ޤ����롼�륷���ƥ���ϰϥơ��֥�Ȥ������餫�Υ�졼�������Ф��ƥ롼�뤬 pg_rewrite��¸�ߤ��뤫Ĵ�٤ޤ��� shoelace�ʸ������ǤϤ��ä�1�ĤΥơ��֥�ˤ��Ф����ϰϥơ��֥���ܤ��������Ȥ��ˡ���ʸ���ϥĥ�ǥ롼�� _RETshoelace�Ĥ��Ф��ޤ���
SELECT s.sl_name, s.sl_avail, s.sl_color, s.sl_len, s.sl_unit, float8mul(s.sl_len, u.un_fact) AS sl_len_cm FROM shoelace *OLD*, shoelace *NEW*, shoelace_data s, unit u WHERE bpchareq(s.sl_unit, u.un_name);
�ѡ��������黻�ȸ�������Ŭ�ڤʴؿ��θƤӽФ����Ѵ��������Ȥ����ܤ��Ƥ����������������ºݤϡ�����ϲ����ѹ����ޤ���
�ӥ塼��Ÿ�����뤿��ˡ������ƥ�Ǥ�ñ��˥롼��Υ��������ʸ���ϥĥ��������䤤��碌�ϰϥơ��֥�ι��ܤ��ꡢ�ӥ塼�Ȥ��Ƥ��������ϰϥơ��֥���֤������ޤ���������줿��̤ι�ʸ���ϥĥ�ϥ��뤬�ʲ��Τ褦�����Ϥ������Ȥۤܤ��ʤ��Ǥ���
SELECT shoelace.sl_name, shoelace.sl_avail, shoelace.sl_color, shoelace.sl_len, shoelace.sl_unit, shoelace.sl_len_cm FROM (SELECT s.sl_name, s.sl_avail, s.sl_color, s.sl_len, s.sl_unit, s.sl_len * u.un_fact AS sl_len_cm FROM shoelace_data s, unit u WHERE s.sl_unit = u.un_name) shoelace;
������1�Ĥ����㤤������ޤ������䤤��碌���ϰϥơ��֥뤬2�Ĥ�;ʬ�ʹ���shoelace *OLD*��shoelace *NEW*����äƤ��뤳�ȤǤ��������ι��ܤ����䤤��碌�η��ĥ����Ū�ꥹ�Ȥ˻��Ȥ���ʤ��Τǡ�ľ���䤤��碌�ǤϻȤ��ޤ����������ƥ�ǤϤ����ӥ塼�Ȥ����ϰϥơ��֥�ι��ܤˤ�Ȥ��¸�ߤ��������������³�ǧ������Ǽ���뤿��˻Ȥ��ޤ���������ˡ�ǡ�������줿�䤤��碌��ľ�ܥӥ塼����Ѥ��Ƥ��ʤ��Ƥ⡢���������塼���ϥ桼�������Υӥ塼�˥����������뤿������������¤���äƤ��뤫��ǧ���ޤ���
���줬�ǽ��Ŭ�Ѥ����롼��Ǥ����롼�륷���ƥ�ϻϤ���䤤��碌�ʤ�����ǤϤ���ʾ�Ϥ���ޤ���ˤλĤ���ϰϥơ��֥�ι��ܤ�����å���³���ޤ��������ƥ롼�륷���ƥ�ϡ��ɲä��줿���䤤��碌�ι��ܤ��ӥ塼�Ȥ��뤫��Ƶ�Ū�˳�ǧ���ޤ��ʤ�����*OLD*��*NEW*��Ÿ�����ޤ������Ǥʤ����̵�ºƵ��ˤʤäƤ��ޤ��ޤ����ˡ�������Ǥ�shoelace_data��unit�Τ���ν����롼��Ϥ���ޤ��Ǥ���������ϴ��뤷���嵭���ץ��ʤ��Ϥ����ǽ�Ū�ʷ�̤Ȥʤ�ޤ���
�����ǡ��֥롼���֥饶�����������㤤�ˤ�Ź�ˤ�ä���ơ��֥롼���֥饶�����Ǥ����顢Ʊ���������������ȸ����ޤ������������������ΤǷ�ɳ��ɬ�פǤ���
Ź���֤��Ƥ��뷤ɳ�ʤο��ȥ������ˤ˰��פ��뷤���ɤ�ǡ������˰��פ����Τκ߸ˤ�2�Ȱʾ夢�뤫�ɤ�������Τ�ʤ���Ф����ޤ�����ϥǡ����١������䤤��碌�뤳�Ȥ�ɬ�פǤ���
al_bundy=> SELECT * FROM shoe_ready WHERE total_avail >= 2; shoename |sh_avail|sl_name |sl_avail|total_avail ----------+--------+----------+--------+----------- sh1 | 2|sl1 | 5| 2 sh3 | 4|sl7 | 7| 4 (2 rows)
����Ϸ��ˤĤ��Ƥ�����ȤǤ��Τǡ�sh1���η����������뤳�Ȥ��狼��ޤ���sl7�η�ɳ���㿧�ǡ�����˹礦�㿧�η��ϥ֥롼���֥饶�����ι��ߤǤϤ���ޤ���ˡ�
����Υѡ����ν��Ϥϰʲ��ι�ʸ���ϥĥ�Ǥ���
SELECT shoe_ready.shoename, shoe_ready.sh_avail, shoe_ready.sl_name, shoe_ready.sl_avail, shoe_ready.total_avail FROM shoe_ready shoe_ready WHERE int4ge(shoe_ready.total_avail, 2);
���ֻϤ��Ŭ�Ѥ����롼���shoe_ready�ӥ塼�ѤΤ�Τǹ�ʸ���ϥĥ�ˤ������̤ϰʲ��Τ褦�ˤʤ�ޤ���
SELECT shoe_ready.shoename, shoe_ready.sh_avail, shoe_ready.sl_name, shoe_ready.sl_avail, shoe_ready.total_avail FROM (SELECT rsh.shoename, rsh.sh_avail, rsl.sl_name, rsl.sl_avail, min(rsh.sh_avail, rsl.sl_avail) AS total_avail FROM shoe rsh, shoelace rsl WHERE rsl.sl_color = rsh.slcolor AND rsl.sl_len_cm >= rsh.slminlen_cm AND rsl.sl_len_cm <= rsh.slmaxlen_cm) shoe_ready WHERE int4ge(shoe_ready.total_avail, 2);
Ʊ���褦�ˡ�shoe��shoelace �Υ롼������䤤��碌���ϰϥơ��֥�Ȥ������Ѥ��졢��٥�3�κǽ��䤤��碌�ĥ�ؤ�Ƴ���ޤ���
SELECT shoe_ready.shoename, shoe_ready.sh_avail, shoe_ready.sl_name, shoe_ready.sl_avail, shoe_ready.total_avail FROM (SELECT rsh.shoename, rsh.sh_avail, rsl.sl_name, rsl.sl_avail, min(rsh.sh_avail, rsl.sl_avail) AS total_avail FROM (SELECT sh.shoename, sh.sh_avail, sh.slcolor, sh.slminlen, sh.slminlen * un.un_fact AS slminlen_cm, sh.slmaxlen, sh.slmaxlen * un.un_fact AS slmaxlen_cm, sh.slunit FROM shoe_data sh, unit un WHERE sh.slunit = un.un_name) rsh, (SELECT s.sl_name, s.sl_avail, s.sl_color, s.sl_len, s.sl_unit, s.sl_len * u.un_fact AS sl_len_cm FROM shoelace_data s, unit u WHERE s.sl_unit = u.un_name) rsl WHERE rsl.sl_color = rsh.slcolor AND rsl.sl_len_cm >= rsh.slminlen_cm AND rsl.sl_len_cm <= rsh.slmaxlen_cm) shoe_ready WHERE int4ge(shoe_ready.total_avail, 2);
�ץ��ʤϤ��Υĥ��2��٥���䤤��碌�ĥ�˽̤�ޤ������ֲ���select�ϥХ�Х�˽�������ɬ�פ��ʤ��Τ�2����select��"����ĥ��夲"���ޤ���������2���ܤΥ��쥯�ȤϽ���ؿ�����Ĥ��ᡢĺ������϶��̤���ޤ����⤷���������ĥ��夲�Ƥ��ޤ��Ȱ��־��select��ư����Ѥ��Ƥ��ޤ����Ȥˤʤꡢ����Ϥ���������ޤ����������䤤��碌�ĥ��̤�뤳�ȤϽ��������ƥब��ʬ�ǰռ�����ɬ�פ�����ޤ���
Note: �롼�륷���ƥ�ˤ����ơ�¾�Υ롼����̤Ǥ����˥ӥ塼�롼��κƵ���������ߤ��뵡���Ϥ���ޤ�����̵�¥롼�סʥ���θ³�����ã���ƥХå�����ɤ��˲������ˤ�����������ˤϡ��ơ��֥�������CREATE RULE�ˤ����Ȥǡ��ߤ������礦�褦�ʥӥ塼�롼������ꤹ�뤳�Ȥˤ��Τ߲�ǽ�Ǥ����顢���ۤɿ��������ǤϤ���ޤ��Ϥ��CREATE VIEW�Ǥϡ�2 ���ܤΥ�졼������¸�ߤ�����1�Υӥ塼����2�Υӥ塼�����뤳�ȤϤ��ꤨ�ޤ��餳�Τ褦�ʾ�����CREATE VIEW�Ǥϵ��������ޤ���
����ޤǤΥӥ塼�롼��������ǤϹ�ʸ���ϥĥ��2�Ĥξܺ٤ˤĤ��ƿ���ޤ���Ǥ����������ϡ����ޥ�ɥ����פȷ�̥�졼�����Ǥ����ºݡ��ӥ塼�Υ롼��Ϥ����ξ����ɬ�פȤ��ޤ���
SELECT��¾�Υ��ޥ�ɤ��Ф��빽ʸ���ϥĥ�δ֤ˤ��礭�ʰ㤤�Ϥ���ޤ����������餫�˰㤦���ޥ�ɥ����פ���äƤ��ơ�����Ϸ�̥�졼�����Ϸ�̤��ɤ��˹Ԥ��Τ����ϰϥơ��֥�ι��ܤ�ؤ������ޤ�������ʳ��ǤϤޤä���Ʊ���Ǥ����Ǥ����顢a��b��°������ĥơ��֥�t1��t2���Ф���ʲ���2�Ĥ�̿��ʸ�ι�ʸ���ϥĥ�ϤۤȤ��Ʊ���Ǥ���
SELECT t2.b FROM t1, t2 WHERE t1.a = t2.a; UPDATE t1 SET b = t2.b WHERE t1.a = t2.a;
�ϰϥơ��֥�ˤϥơ��֥�t1��t2���Ф�����ܤ�����ޤ���
��Ū�ꥹ�Ȥˤϥơ��֥�t2���Ф����ϰϥơ��֥���ܤ�°��b��ؤ�����1�Ĥ��ѿ�������ޤ���
��P��ξ�����ϰϥơ��֥��°��a������������Ӥ���ޤ���
�����η��ĥ��t1��t2��ñ��ʷ���ɽ���Ƥ��ޤ���
��̤Ȥ��ơ�ξ���ι�ʸ���ϥĥ�ϻ����褦�ʼ¹Էײ�ˤʤ�ޤ��������϶���2�ĤΥơ��֥�η��Ǥ���UPDATE�Ǥ� t1����ȴ���Ƥ�����ϥץ��ʤ���Ū�ꥹ�Ȥ��ɲä����ǽ��ι�ʸ���ϥĥ�ϡ��ʲ��Τ褦�ˤʤ�ޤ���
UPDATE t1 SET a = t1.a, b = t2.b WHERE t1.a = t2.a;
����¹Ԥ������������塼���ϡ��ʲ��Υ��ޥ�ɤη�̥��åȤ�����Ʊ����̥��åȤ�������ޤ���
SELECT t1.a, t2.b FROM t1, t2 WHERE t1.a = t2.a;
�ȤϤ��äƤ�UPDATE�ˤϤ���äȤ������꤬����ޤ������������塼���ϡ���礬�Ԥ������η�̤������̣���Ƥ��뤫�˴�Ϳ���ޤ����������塼����ñ�˷�̤Ȥʤ�ԤΥ��åȤ������������Ǥ���1�Ĥ�SELECT���ޥ�ɤǤ⤦1�Ĥ�UPDATE���ޥ�ɤǤ������㤤�ϥ��������塼����ƤӽФ�¦�ǰ����뤳�ȤǤ����ƤӽФ�¦�ϡʹ�ʸ���ϥĥ�ơˡ����줬UPDATE�Ǥ���Ȥ狼�äƤ��ơ����η�̤��ơ��֥�t1������ʤ���Ф����ʤ����Ȥ��ΤäƤ��ޤ������������ɤιԤ��������Ԥˤ�ä��ִ�����ʤ���Фʤ�ʤ��ΤǤ��礦����
����������褹�뤿�ᡢUPDATEʸ��DELETEʸ��ˤ���Ū�ꥹ�Ȥ��̤ι��ܤ��դ��ä����ޤ�������ϸ��ߤΥ��ץ�ID��CTID�ˤǤ�������ϥե�����Υ֥��å��ֹ�Ȥ��ιԤΥ֥��å���ΰ��֤���ĥ����ƥ�°���Ǥ����ơ��֥뤬�狼�äƤ����硢CTID�ϸ���t1�Ԥι�������Ф��뤿��˻Ȥ����Ȥ��Ǥ��ޤ���CTID����Ū�ꥹ�Ȥ��ɲä�����ϡ��䤤��碌�ϰʲ��Τ褦�ˤʤ�ޤ���
SELECT t1.a, t2.b, t1.ctid FROM t1, t2 WHERE t1.a = t2.a;
�Ǥϡ�PostgreSQL���̤ξܺ�����������ޤ��礦�����ΤȤ������ơ��֥�ιԤϾ����ʤ��Τ�ABORT TRANSACTION������®���ΤǤ���UPDATE�Ǥϡ���CTID������������ȡ˥ơ��֥�˿�������̤ιԤ��������졢���ιԤΥ��ץ�إå���Ǥ�cmax��ؤ�����CTID��xmax�ι��ܤ����ߤΥ��ޥ�ɥ����ȸ��ߤΥȥ�������ID�˥��åȤ���ޤ������Τ褦�ˤ��ơ��Ť��Ԥϱ�����ȥ��������ߥåȤ��줿���Ȥ�vacuum���ºݤ˺�����뤳�Ȥ��Ǥ��ޤ���
�����ξܺ٤���������Ǥ���С��ɤ�ʥ��ޥ�ɤ��Ф��Ƥ�ޤä���Ʊ���褦�ˤ��ƥӥ塼�Υ롼����ñ��Ŭ�Ѥ��뤳�Ȥ��Ǥ��ޤ��������ˤϺ��ۤ�����ޤ���
�����ޤǤǡ��ӥ塼�ν���������ι�ʸ���ϥĥ�ˤɤΤ褦�˴�Ϳ���뤫����⤷�ޤ�������2����Ǥϡ�1�ĤΥӥ塼�����ñ���SELECT�ˤ�äơ��ǽ�Ū��4�ĤΥơ��֥���礹�빽ʸ���ϥĥ����������ޤ�����ñ��(unit)�ϰ�ä�̾����2��Ȥ��ޤ��ˡ�
�ӥ塼��롼�륷���ƥ�ȤȤ�˼������������ϡ��ץ��ʤ����ɤΥơ��֥����٤����������Υơ��֥�֤δ�Ϣ�����ӥ塼���������������䤤��碌��������1�ĤΥѡ����ĥ�˻��äƤ��뤳�ȤǤ��������䤤��碌�����Ǥ˥ӥ塼���Ф�����Ǥ���Ȥ���Ʊ�ͤǤ����ץ��ʤϤ����Ǥɤ줬�䤤��碌�����κ�Ŭ��ϩ������ꤷ�ʤ���Фʤ�ޤ�����¿�����¿���ۤɡ��ץ��ʤϤ��褤��������Ȥ��Ǥ��ޤ��������� PostgreSQL�˼�������Ƥ���롼�륷���ƥ�Ϥ��줬�������ǡ�����Ƥ��뤹�٤Ƥξ���Ǥ��뤳�Ȥ��ݾڤ��ޤ���
�ӥ塼��INSERT��UPDATE��DELETE�ʤɤ���Ū��졼�����Ȥ���̾�դ���줿���Ϥɤ��ʤ�ΤǤ��礦���� ������������褦���ִ������Ȥˡ���̥�졼��������䤤��碌���ϰϥơ��֥���ܤ�ؤ��䤤��碌�ĥ���Ǥ��ޤ�������ǤϻȤ��ޤ���Τǡ����������ƥब���Τ褦�ʤ�ΤĤ���ȥ��顼��ȯ�����ޤ���
������Ѥ��뤿��ˤ���SELECT�䤤��碌��ư����Ѥ���롼���������뤳�Ȥ��Ǥ��ޤ������줬�����������ˤʤ�ޤ���