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

CREATE RULE

名前

CREATE RULE -- �������񤭴����롼����������

概要

CREATE [ OR REPLACE ] RULE name AS ON event
    TO table_name [ WHERE condition ]
    DO [ ALSO | INSTEAD ] { NOTHING | command | ( command ; command ... ) }

����

CREATE RULE�ˤ�ꡢ���ꤷ���ơ��֥�ޤ��ϥӥ塼��Ŭ�Ѥ���롼��򿷤�������Ǥ��ޤ��� CREATE OR REPLACE RULE����Ѥ���ȡ��������롼��κ������ޤ��ϡ�Ʊ���ơ��֥��Ʊ��̾���δ�¸�롼����֤������Τ����줫��¹Ԥ��ޤ���

PostgreSQL�Υ롼�륷���ƥ����Ѥ���ȡ��ǡ����١����ơ��֥���Ф����������������������������������ؤȤ��Ƽ¹Ԥ��륢������������Ǥ��ޤ��� ��ñ�˸����С����ꤵ�줿�ơ��֥���Ф��ƻ��ꤵ�줿���ޥ�ɤ��¹Ԥ��줿�����롼��ˤ�ä��ɲäΥ��ޥ�ɤ��¹Ԥ����Ȥ������ȤǤ��� ����¾�ˤ⡢INSTEAD�롼��ˤ�äƻ��ꤵ�줿���ޥ�ɤ�¾�Υ��ޥ�ɤ��֤��������ꡢ�ޤä������ޥ�ɤ�¹Ԥ��ʤ��褦�ˤ��뤳�Ȥ��ǽ�Ǥ��� �ޤ����롼��ϥơ��֥�ӥ塼��������뤿��ˤ�Ȥ��ޤ��� ���פʤΤϡ��롼��Ȥϼºݤ˥��ޥ�ɤ��Ѵ�������Ȥߡ�����������С����ޥ�ɤΥޥ����Ǥ��뤳�ȤǤ��� �롼��ˤ���Ѵ��ϥ��ޥ�ɤμ¹�����ȯ�����ޤ��� ��ʪ���Ԥ���̤���������硢�롼��ǤϤʤ��ȥꥬ����Ѥ��������ɤ��Ǥ��礦�� �롼�륷���ƥ�ˤĤ��Ƥξܺ٤ϡ�第37章�˵��ܤ���Ƥ��ޤ���

�������Ǥϡ�ON SELECT�롼��ϡ���������ʤ�INSTEAD�롼��Ǥʤ���Фʤ�ޤ��󡣤ޤ���ON SELECT�롼�뤬���ĥ��������ϡ�ñ�Ȥ�SELECT���ޥ�ɤΤߤǹ��������ɬ�פ�����ޤ��� �������äơ�ON SELECT�롼���Ȥ��С���ΨŪ�˥ơ��֥��ӥ塼�ˤ��뤳�Ȥ��Ǥ��ޤ������Υӥ塼�Ǥϡ����Υơ��֥�����ƤǤϤʤ����롼��˴ޤޤ��SELECT���ޥ�ɤ��֤��Ԥ����ӥ塼�����ƤȤ����󼨤���ޤ��� ���������ơ��֥뼫�Τ�������������ON SELECT�롼������������ϡ�CREATE VIEW���ޥ�ɤ���Ѥ������򤪴��ᤷ�ޤ���

ON INSERT��ON UPDATE��ON DELETE�롼���ɬ�פ˱�������������ӥ塼���Ф��빹������¾�Υơ��֥���Ф���Ŭ�ڤʹ��������ִ����뤳�Ȥǡ�������ǽ�ʥӥ塼�Ȥ����ºߤ��ʤ����֥������Ȥ�������뤳�Ȥ��Ǥ��ޤ��� INSERT RETURNING�ʤɤ򥵥ݡ��Ȥ�������С������Υ롼���Ŭ�ڤ�RETURNING���μ¤ˤĤ��Ƥ��������� ����¾����ˡ�Ȥ���INSTEAD OF�ȥꥬ����Ѥ��ƹ�����ǽ�ʥӥ塼��������뤳�Ȥ��Ǥ��ޤ���CREATE TRIGGER���ȡˡ�

�ӥ塼�ι����˾���դ��롼�����Ѥ��褦�Ȥ����硢��Ȥ��꤬����ޤ��� ���Υӥ塼�˵��Ĥ��뤽�줾������ˡ���������ʤ�INSTEAD�롼����Ѱդ���ɬ�פ��������ȤǤ��� �롼�뤬����դ��Ǥ��ä��ꡢINSTEAD�Ǥʤ���硢�����ƥ�Ϲ���������ݤ��ޤ��� ���ξ�硢�����ƥब�����ˤ�äƤϡ��ӥ塼�Υ��ߡ��ơ��֥���Ф������ˤʤ��ǽ��������Ȥߤʤ�����Ǥ��� ���Ѥ������ƤΥ������ˤĤ��ƾ���դ��롼������������ϡ���������ʤ�DO INSTEAD NOTHING�롼����ɲä������ߡ��ơ��֥���Ф��빹���ϸƤӽФ���ʤ����Ȥ򥷥��ƥ���������ޤ�������ˡ�����դ��롼��ˤϡ�INSTEAD�Ȼ��ꤷ�ʤ��褦�ˤ��ޤ��� �����ξ�郎�������줿��硢�ǥե���Ȥ�INSTEAD NOTHING���������˥롼��˴ޤޤ�륢��������ɲä���ޤ��� �ʤ��������ߡ�������ˡ�Ǥ�RETURNING�䤤��碌�Υ��ݡ��Ȥ����ޤ�ư��ޤ��󡣡�

�ѥ�᡼��

name

��������롼���̾���Ǥ��� ����̾���ϡ�Ʊ���ơ��֥��¾�Υ롼��Ȥϰۤʤ�̾���ˤ���ɬ�פ�����ޤ��� Ʊ��ơ��֥�˥��٥�Ȥμ��बƱ���롼�뤬ʣ�����ä���硢�롼��̾�ν��֡ʥ���ե��٥åȽ�ˤ�Ŭ�Ѥ���ޤ���

event

���٥�ȤȤϡ�SELECT��INSERT��UPDATE��DELETE�Τ����줫�Ǥ���

table_name

�롼���Ŭ�Ѥ���ơ��֥�ޤ��ϥӥ塼��̾���Ǥ��ʥ������޽���̾��ġˡ�

condition

Ǥ�դ�SQL��P�Ǥ���boolean�����֤��ޤ��ˡ� ��P�Ǥϡ�NEW�����OLD�ʳ��Υơ��֥�ϻ��ȤǤ��ޤ��� �ޤ�������ؿ���ޤ�뤳�Ȥ�Ǥ��ޤ���

INSTEAD

INSTEAD�ϡ����Υ��ޥ�ɤ���������Υ��ޥ�ɤ��¹Ԥ���뤳�Ȥ򼨤��ޤ���

ALSO

ALSO�ϸ��Υ��ޥ�ɤ��ä������Υ��ޥ�ɤ��¹Ԥ���뤳�Ȥ򼨤��ޤ���

ALSO��INSTEAD����ꤵ��ʤ��ä���硢ALSO���ǥե���ȤǤ���

command

�롼��Υ���������������ñ��ޤ���ʣ���Υ��ޥ�ɤǤ��� ͭ���ʥ��ޥ�ɤϡ�SELECT��INSERT��UPDATE��DELETE��NOTIFY�Ǥ���

condition��command�������Ǥϡ��оݤȤ���ơ��֥���ͤ򻲾Ȥ��뤿��ˡ����̤ʥơ��֥�̾NEW��OLD����ѤǤ��ޤ��� NEW�ϡ�ON INSERT��ON UPDATE�롼���ͭ���Ǥ��������ޤ��Ϲ�������뿷�����Ԥ򻲾Ȥ��ޤ��� OLD�ϡ�ON UPDATE��ON DELETE�롼���ͭ���Ǥ��������ޤ��Ϻ��������¸�ιԤ򻲾Ȥ��ޤ���

����

�ơ��֥�˥롼���������롢�ޤ��ϡ����Υ롼����ѹ����뤿��ˤϽ�ͭ�ԤǤʤ���Фʤ�ޤ���

�ӥ塼���INSERT��UPDATE��DELETE�롼��Ǥϡ�RETURNING����ɲä��ơ��ӥ塼������֤����Ȥ��Ǥ��ޤ��� �롼�뤬INSERT RETURNING��UPDATE RETURNING��DELETE RETURNING���ޥ�ɤˤ�äƸƤӽФ��줿��硢���ζ�Ͻ��Ϥ�׻����뤳�Ȥ˻��Ѥ���ޤ��� RETURNING�ʤ��ǥ롼�뤬�ƤӽФ��줿��硢�롼���RETURNING���̵�뤵��ޤ��� ���ߤμ����Ǥϡ�̵����INSTEAD�롼��Τߤ�RETURNING��ޤळ�Ȥ��Ǥ��ޤ��� ����ˡ�Ʊ�쥤�٥���ѤΤ��٤ƤΥ롼������¿���Ƥ�1�Ĥ�RETURNING�����Ĥ��Ȥ��Ǥ��ޤ��� �ʤ���ˤ��μ¤ˡ���̤�׻����뤿��˻��Ѥ����RETURNING��θ��䤬1�ĤΤߤˤʤ�ޤ����� �ӥ塼���RETURNING�䤤��碌�ϡ����Ѳ�ǽ�ʥ롼�뤹�٤Ƥ�RETURNING��¸�ߤ��ʤ����˵��䤵��ޤ���

�롼��ν۴Ĥ����Ф��򤱤�褦���դ��Ƥ��������� �㤨�С�������2�ĤΥ롼��������줾�줬PostgreSQL�˼��������줿��硢�롼�뤬�Ƶ�Ū��Ÿ������뤿�ᡢSELECT���ޥ�ɤ���PostgreSQL�˥��顼��ɽ�������ޤ���

CREATE RULE "_RETURN" AS
    ON SELECT TO t1
    DO INSTEAD
	SELECT * FROM t2;

CREATE RULE "_RETURN" AS
    ON SELECT TO t2
    DO INSTEAD
	SELECT * FROM t1;

SELECT * FROM t1;

���ߡ��롼��Υ���������NOTIFY�䤤��碌���ޤޤ���硢NOTIFY��̵���˼¹Ԥ���ޤ��� �Ĥޤꡢ�롼���Ŭ�Ѥ��٤��Ԥ�¸�ߤ��ʤ��ä��Ȥ��Ƥ⡢NOTIFY��ȯ�Ԥ���ޤ��� �㤨�С�

CREATE RULE notify_me AS ON UPDATE TO mytable DO ALSO NOTIFY mytable;

UPDATE mytable SET name = 'foo' WHERE id = 42;

�Ǥϡ�id = 42�Ȥ������˰��פ���Ԥ����äƤ�ʤ��Ƥ⡢UPDATE�κݡ�1�Ĥ�NOTIFY���٥�Ȥ���������ޤ��� ����ϼ���������¤Ǥ��ꡢ����Υ�꡼���ǤϽ�������뤫�⤷��ޤ���

�ߴ���

�䤤��碌�񤭴��������ƥ�����Ʊ�͡�CREATE RULE��PostgreSQL�γ�ĥ�Ǥ���