¾�ΥС�������ʸ�� �� 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

16.3. �ӥ塼�ȥ롼�륷���ƥ�

16.3.1. PostgreSQL�ˤ�����ӥ塼�μ���

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�����ƥ५�������Υӥ塼�ˤĤ��Ƥξ���ϥơ��֥�ξ����Ʊ��ʤΤǡ��ѡ����ˤȤäƤ�ơ��֥�ȥӥ塼��Ʊ����Τˤʤ�Ȥ������ȤǤ���������Ʊ����Ρ��Ĥޤꡢ��졼�����Ǥ�������ϸ������ν��ײ���Ǥ���

16.3.2. SELECT�롼���ư��

���Ȥ����ޥ�ɤ�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�Ǥϵ��������ޤ���

16.3.3. ��SELECTʸ�Υӥ塼�롼��

����ޤǤΥӥ塼�롼��������ǤϹ�ʸ���ϥĥ꡼��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;

��̤Ȥ��ơ�ξ���ι�ʸ���ϥĥ꡼�ϻ����褦�ʼ¹Էײ�ˤʤ�ޤ��������϶���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���ºݤ˺�����뤳�Ȥ��Ǥ��ޤ���

�����ξܺ٤���������Ǥ���С��ɤ�ʥ��ޥ�ɤ��Ф��Ƥ�ޤä���Ʊ���褦�ˤ��ƥӥ塼�Υ롼����ñ��Ŭ�Ѥ��뤳�Ȥ��Ǥ��ޤ��������ˤϺ��ۤ�����ޤ���

16.3.4. PostgreSQL�ˤ�����ӥ塼��ǽ��

�����ޤǤǡ��ӥ塼�ν���������ι�ʸ���ϥĥ꡼�ˤɤΤ褦�˴�Ϳ���뤫����⤷�ޤ�������2����Ǥϡ�1�ĤΥӥ塼�����ñ���SELECT�ˤ�äơ��ǽ�Ū��4�ĤΥơ��֥���礹�빽ʸ���ϥĥ꡼����������ޤ�����ñ��(unit)�ϰ�ä�̾����2��Ȥ��ޤ��ˡ�

16.3.4.1. ����

�ӥ塼��롼�륷���ƥ�ȤȤ�˼������������ϡ��ץ��ʤ����ɤΥơ��֥�򥹥���󤹤٤����������Υơ��֥�֤δ�Ϣ�����ӥ塼���������������䤤��碌��������1�ĤΥѡ����ĥ꡼�˻��äƤ��뤳�ȤǤ��������䤤��碌�����Ǥ˥ӥ塼���Ф�����Ǥ���Ȥ���Ʊ�ͤǤ����ץ��ʤϤ����Ǥɤ줬�䤤��碌�����κ�Ŭ��ϩ������ꤷ�ʤ���Фʤ�ޤ��󡣾���¿�����¿���ۤɡ��ץ��ʤϤ��褤����򲼤����Ȥ��Ǥ��ޤ��������� PostgreSQL�˼�������Ƥ���롼�륷���ƥ�Ϥ��줬�������ǡ��󶡤���Ƥ��뤹�٤Ƥξ���Ǥ��뤳�Ȥ��ݾڤ��ޤ���

16.3.5. �ӥ塼�ι����ˤĤ���

�ӥ塼��INSERT��UPDATE��DELETE�ʤɤ���Ū��졼�����Ȥ���̾�դ���줿���Ϥɤ��ʤ�ΤǤ��礦���� ������������褦���ִ��򤷤����Ȥˡ���̥�졼��������䤤��碌���ϰϥơ��֥���ܤ�ؤ��䤤��碌�ĥ꡼���Ǥ��ޤ�������ǤϻȤ��ޤ���Τǡ��񤭴��������ƥब���Τ褦�ʤ�Τ򸫤Ĥ���ȥ��顼��ȯ�����ޤ���

������Ѥ��뤿��ˤ���SELECT�䤤��碌��ư����Ѥ���롼���������뤳�Ȥ��Ǥ��ޤ������줬�����������ˤʤ�ޤ���