¾�ΥС�������ʸ�� �� 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

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

PostgreSQL�ˤ�����ӥ塼�ϥ롼�륷���ƥ��ȤäƼ�������Ƥ��ޤ��� �ºݡ�

CREATE VIEW myview AS SELECT * FROM mytab;

��

CREATE TABLE myview (same column list as mytab);
CREATE RULE "_RETURN" AS ON SELECT TO myview DO INSTEAD
    SELECT * FROM mytab;

��2�ĤΥ��ޥ�ɤδ֤ˤϴ���Ū�ʰ㤤�Ϥ���ޤ��� �ȸ����Τϡ�CREATE VIEW���ޥ�ɤˤ�ä�����Ū�ˤޤä���Ʊ�����ޥ�ɤ��Ԥ��뤫��Ǥ��� ����ˤ������Ѥ⤢��ޤ��� ����1�Ĥ�PostgreSQL�����ƥ५�������Υӥ塼�ˤĤ��Ƥξ���ϥơ��֥�ξ���Ȥޤä���Ʊ��Ǥ���Ȥ������ȤǤ��� ���Τ��ᡢ�ѡ����ˤȤäƤϥơ��֥�ȥӥ塼�δ֤˰㤤�ϰ��ڤ���ޤ��� ������Ʊ����Ρ��Ĥޤ��졼�����Ǥ���

37.2.1. SELECT�롼���ư��

���Ȥ����ޥ�ɤ�INSERT��UPDATE��DELETE�ʤɤǤ��äƤ⡢ON SELECT�롼������Ƥ��䤤��碌���Ф��Ǹ��Ŭ�Ѥ���ޤ��� �����ơ����Υ롼���¾�Υ��ޥ�ɼ���Υ롼��Ȱۤʤ륻�ޥ�ƥ��å�����äƤ��ơ��䤤��碌�ĥ꡼�򿷵������������ˡ������ˤ����Τ������ޤ��� �������ä�SELECT�롼�뤬���ֽ��˵��Ҥ���ʤ���Ф����ޤ���

���ߤΤȤ�����ON SELECT�롼��Ǥ�1�ĤΥ�������󤷤������줺�������INSTEAD�Ǥ���̵����SELECT���������Ǥʤ���Ф����ޤ��� ��������ϡ����̤Υ桼�������򤷤Ƥ⡢�롼�륷���ƥब��ϴ�Ǥ��뤿���ɬ�פǤ��ꡢON SELECT�Υ롼��ϥӥ塼Ʊ�ͤ�ư��˸��ꤵ��ޤ���

�ܾϤ���Ȥ��Ƶ󤲤Ƥ���Τϡ�����äȤ����黻�򤹤�2�Ĥη��Υӥ塼�ȡ����ˤ����ε�ǽ�����Ѥ��뤤���Ĥ��Υӥ塼�Ǥ��� �ǽ���̤����餫����ˡ�ε�ǽ�ˤ�ꤢ������¥ơ��֥�Τ褦�˿��񤦥ӥ塼�ˤʤ�褦�ˡ�����2�ĤΥӥ塼�Τ�����1�Ĥϡ�INSERT��UPDATE��DELETE�����Ф���롼������ɲä��뤳�Ȥǥ������ޥ�������ޤ��� ���Ƴؤ֤������Ȥ��ƤϷ褷�ƴ�ñ�ǤϤʤ���˿ʤळ�Ȥ����������뤫�⤷��ޤ��󤬡�¿�����̡����������Ф���Ƭ�κ���򾷤����⡢���Ƥ������򥹥ƥåפ��Ȥ��ɤ�1�Ĥ����󤲤������ɤ��Ǥ��礦��

������Ǥϡ�2�Ĥ��������龮�����ͤ��֤�����äȤ���min�ؿ���ɬ�פȤ��ޤ��� �ؿ��������ϰʲ��Τ褦�ˤ��ޤ���

CREATE FUNCTION min(integer, integer) RETURNS integer AS $$
    SELECT CASE WHEN $1 < $2 THEN $1 ELSE $2 END
$$ LANGUAGE SQL STRICT;

�ǽ��2�ĤΥ롼�륷���ƥ��������ɬ�פȤ���¥ơ��֥��ʲ��˼����ޤ���

CREATE TABLE shoe_data (
    shoename   text,          -- �ץ饤�ޥꥭ��
    sh_avail   integer,       -- �߸�
    slcolor    text,          -- ˾�ޤ�����ɳ�ο�
    slminlen   real,          -- ��ɳ�κ�û������
    slmaxlen   real,          -- ��ɳ�κ�Ĺ������
    slunit     text           -- Ĺ����ñ��
);

CREATE TABLE shoelace_data (
    sl_name    text,          -- �ץ饤�ޥꥭ��
    sl_avail   integer,       -- �߸�
    sl_color   text,          -- ��ɳ�ο�
    sl_len     real,          -- ��ɳ��Ĺ��
    sl_unit    text           -- Ĺ����ñ��
);

CREATE TABLE unit (
    un_name    text,          -- �ץ饤�ޥꥭ��
    un_fact    real           -- 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�Υ��ԡ��Ǥ��롢1�Ĥ��䤤��碌�ĥ꡼�Ǥ���

注意: pg_rewrite���ܤ�NEW��OLD���Ф���2�Ĥ����̤��ϰϥơ��֥���ܤ�SELECT�롼��ˤϴط�����ޤ���

�ǤϤ�����unit��shoe_data��shoelace_data�˥ǡ��������졢�ӥ塼�˴�ñ���䤤��碌��Ԥ��ޤ���

INSERT INTO unit VALUES ('cm', 1.0);
INSERT INTO unit VALUES ('m', 100.0);
INSERT INTO unit VALUES ('inch', 2.54);

INSERT INTO shoe_data VALUES ('sh1', 2, 'black', 70.0, 90.0, 'cm');
INSERT INTO shoe_data VALUES ('sh2', 0, 'black', 30.0, 40.0, 'inch');
INSERT INTO shoe_data VALUES ('sh3', 4, 'brown', 50.0, 65.0, 'cm');
INSERT INTO shoe_data VALUES ('sh4', 3, 'brown', 40.0, 50.0, 'inch');

INSERT INTO shoelace_data VALUES ('sl1', 5, 'black', 80.0, 'cm');
INSERT INTO shoelace_data VALUES ('sl2', 6, 'black', 100.0, 'cm');
INSERT INTO shoelace_data VALUES ('sl3', 0, 'black', 35.0 , 'inch');
INSERT INTO shoelace_data VALUES ('sl4', 8, 'black', 40.0 , 'inch');
INSERT INTO shoelace_data VALUES ('sl5', 4, 'brown', 1.0 , 'm');
INSERT INTO shoelace_data VALUES ('sl6', 0, 'brown', 0.9 , 'm');
INSERT INTO shoelace_data VALUES ('sl7', 7, 'brown', 60 , 'cm');
INSERT INTO shoelace_data VALUES ('sl8', 1, 'brown', 40 , 'inch');

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;

���Υĥ꡼���롼�륷���ƥ���������ޤ��� �롼�륷���ƥ���ϰϥơ��֥�򻲾Ȥ������餫�Υ�졼�������Ф��ƥ롼�뤬¸�ߤ��뤫Ĵ�٤ޤ��� shoelace�ʸ������Ǥ�ͣ��Υӥ塼�ˤˤĤ��Ƥ��ϰϥơ��֥���ܤ��������ݡ��䤤��碌�ĥ꡼��_RETURN�롼��򸡽Ф��ޤ���

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 old, shoelace new,
       shoelace_data s, unit u
 WHERE 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�ʾ夢�뤫�ɤ������İ������䤤��碌��񤤤Ƥߤޤ��礦��

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)

����Υѡ����ν��Ϥϰʲ����䤤��碌�ĥ꡼�Ǥ���

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 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 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 shoe_ready.total_avail > 2;

���˥ץ��ʤϤ��Υĥ꡼��2��٥���䤤��碌�ĥ꡼�˽̤�ޤ��� ���ֲ���SELECT���ޥ�ɤ��̡��˽�������ɬ�פ�����ޤ���Τ�2���ܤ�SELECT��"����ĥ��夲"���ޤ��� ������2���ܤ�SELECT�Ͻ���ؿ�����Ĥ��ᡢĺ������϶��̤���ޤ��� �⤷���������ĥ��夲�Ƥ��ޤ��Ȱ��־��SELECT��ư����Ѥ��Ƥ��ޤ����Ȥˤʤꡢ����Ϥ���������ޤ��� ���������䤤��碌�ĥ꡼��̤��Ȥ�����Ŭ���򡢽񤭴��������ƥ༫�Ȥǰռ�����ɬ�פϤ���ޤ���

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

����ޤǤΥӥ塼�롼��������Ǥ��䤤��碌�ĥ꡼��2�Ĥξܺ٤ˤĤ��ƿ���ޤ���Ǥ����� �����ϡ����ޥ�ɥ����פȷ�̥�졼�����Ǥ��� �ºݡ����ޥ�ɥ����פϥӥ塼�롼��Ǥ�ɬ�פȤ���ޤ��󤬡���̥�졼����󤬥ӥ塼�ξ��ˤ����̤ʹ�θ��ɬ�פǤ��Τǡ���̥�졼�������䤤��碌��饤����ư��˱ƶ����뤫�⤷��ޤ���

SELECT��¾�Υ��ޥ�ɤ��Ф����䤤��碌�ĥ꡼�δ֤ˤ��礭�ʰ㤤�Ϥ���ޤ��� ���������餫�˰㤦���ޥ�ɥ����פ���äƤ��ơ�SELECT�ʳ��Υ��ޥ�ɤǤϡ���̥�졼�����Ϸ�̤γ�Ǽ��Ȥʤ��ϰϥơ��֥�ι��ܤ�ؤ������ޤ��� ����ʳ��ǤϤޤä���Ʊ���Ǥ��� �Ǥ����顢a��b�������ĥơ��֥�t1��t2���Ф���ʲ���2�Ĥ�ʸ���䤤��碌�ĥ꡼�ϡ��ۤȤ��Ʊ���Ǥ���

SELECT t2.b FROM t1, t2 WHERE t1.a = t2.a;

UPDATE t1 SET b = t2.b FROM t2 WHERE t1.a = t2.a;

�ʲ��ˡ�����Ū�˼����ޤ���

��̤Ȥ��ơ�ξ�����䤤��碌�ĥ꡼�ϻ����褦�ʼ¹Էײ�ˤʤ�ޤ��� �����ϤȤ��2�ĤΥơ��֥�η��Ǥ��� UPDATE�Ǥ�t1����ȴ���Ƥ�����ϥץ��ʤˤ�ä���Ū�ꥹ�Ȥ��ɲä��졢�ǽ����䤤��碌�ĥ꡼�ϡ��ʲ��Τ褦�ˤʤ�ޤ���

UPDATE t1 SET a = t1.a, b = t2.b FROM t2 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���̤ξܺ�����������ޤ��礦�� �ơ��֥�ιԤϾ�񤭤���ޤ���Τǡ�ROLLBACK������®���ΤǤ��� UPDATE�Ǥϡ���CTID�����������˥ơ��֥�˿�������̹Ԥ��������졢CTID���ؤ������Ť��Ԥιԥإå����cmax��xmax���ܤϸ��ߤΥ��ޥ�ɥ����󥿤ȸ��ߤΥȥ�󥶥������ID�����ꤵ��ޤ��� ���Τ褦�ˤ��ơ��Ť��Ԥϱ����졢�ȥ�󥶥�����󤬥��ߥåȤ��줿�塢vacuum�ݽ�������ɬ�פˤʤä��Ԥ򤽤Τ����˺���Ǥ��ޤ���

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

37.2.3. PostgreSQL�ˤ�����ӥ塼��ǽ��

�����ޤǤǡ��롼�륷���ƥब�ɤΤ褦�˥ӥ塼�ν�����򸵤��䤤��碌�ĥ꡼���Ȥ�����뤫����⤷�ޤ����� ��2����Ǥϡ�1�ĤΥӥ塼�����ñ���SELECT�ˤ�äơ��ǽ�Ū��4�ĤΥơ��֥���礹���䤤��碌�ĥ꡼����������ޤ�����unit�ϰ�ä�̾����2��Ȥ��ޤ����ˡ�

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

37.2.4. �ӥ塼�ι����ˤĤ���

�ӥ塼��INSERT��UPDATE��DELETE�ʤɤ���Ū��졼�����Ȥ���̾�դ���줿���Ϥɤ��ʤ�ΤǤ��礦���� ñ��˾�����������褦���ִ��򤹤�ȡ���̥�졼��������䤤��碌���ϰϥơ��֥���ܤ�ؤ��䤤��碌�ĥ꡼���Ǥ��ޤ���������ǤϻȤ��ޤ��� �������ꡢ��饤�������ӥ塼��INSTEAD OF�ȥꥬ�ˤ�äư�����Ȳ��ꤷ�ޤ��� �ʤ⤷���Τ褦�ʥȥꥬ���ʤ���С����������塼���ϥ��顼��ȯ�����ޤ����� ���ξ�硢�񤭴����Ͼ����㤦���ǹԤ��ޤ��� INSERT���Ф��Ƥϡ���饤���ϥӥ塼���������⤻�����䤤��碌�η�̥�졼�����򤽤Τޤޤˤ��ޤ��� UPDATE��DELETE���Ф��Ƥϡ����ޥ�ɤ������⤷���Ϻ�����褦�Ȥ���"�Ť�"�Ԥ��������뤿��˥ӥ塼�䤤��碌��Ÿ������ɬ�פ��ޤ�����ޤ��� ���Τ��ᡢ�ӥ塼���̾��̤�Ÿ������ޤ������⤦��Ĥ�Ÿ������ʤ��ϰϥơ��֥���ܤ���̥�졼�����Ȥ��ƥӥ塼��ɽ���䤤��碌���ɲä���ޤ���

�����ǵ���������ϥӥ塼�ǹ��������Ԥ�ɤΤ褦�����ꤹ�뤫�Ȥ������ȤǤ��� ��̥�졼����󤬥ơ��֥�ξ�硢��������Ԥ�ʪ��Ū�ʰ��֤����ꤹ�뤿������̤�CTID���ܤ���Ū�ꥹ�Ȥ��ɲä���뤳�Ȥ�פ��Ф��Ʋ������� �ӥ塼�ιԤˤϼºݤ�ʪ��Ū�ʰ��֤��ʤ����ᡢ�ӥ塼�ˤ�CTID������ޤ���Τǡ�����Ϸ�̥�졼����󤬥ӥ塼�ξ��ˤϾ�꤯�����ޤ��� �������ꡢUPDATE��DELETE���Ǥϡ����̤��������ι��ܤ���Ū�ꥹ�Ȥ��ɲä���Ƥ��ơ�����ϥӥ塼���餹�٤Ƥ����ޤ�褦��Ÿ������Ƥ��ޤ��� ���������塼�������ͤ�Ȥä�"�Ť�"�Ԥ�INSTEAD OF�ȥꥬ���󶡤��ޤ��� ����ιԤ��ͤ˴�Ť��ƹ��������Τ�׻�����Τϥȥꥬ����Ǥ�Ǥ���

�ӥ塼�򹹿�����INSTEAD OF�ȥꥬ���ʤ���С��ӥ塼�����ϤǤϼ�ưŪ�˹����Ǥ��ޤ���Τǥ��顼��ȯ�����ޤ��� ������Ѥ��뤿��ˡ��ӥ塼��INSERT��UPDATE��DELETE���ޥ�ɤ�ư����Ѥ���롼�������Ǥ��ޤ��� �����Υ롼��ϡ��ӥ塼�ǤϤʤ����ޥ�ɤ�񤭴����ޤ��� �̾��1�Ĥ⤷����ʣ���Υơ��֥�򹹿����륳�ޥ�ɤ˽񤭴����ޤ��� ���줬���������ˤʤ�ޤ���

�롼�뤬�ǽ��ɾ�����졢�����䤤��碌���ײ褵��¹Ԥ�������ˤ����񤭴����뤳�Ȥ����դ��Ʋ������� ���Τ���ӥ塼��INSTEAD OF�ȥꥬ��INSERT��UPDATE��DELETE�˴ؤ���롼�뤬���ä���硢�롼�뤬�ǽ��ɾ�����졢���η�̤�äƤϥȥꥬ�������Ȥ��ʤ����⤷��ޤ���