¾�ΥС�������ʸ�� �� 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.4. �롼��ȸ���

PostgreSQL�Υ롼�륷���ƥ�ˤ���䤤��碌�ν񤭴����ˤ�äơ����ꥸ�ʥ���䤤��碌�ǻȤ�줿��ΤǤϤʤ�¾�Υơ��֥�/�ӥ塼��������������ޤ��� �����롼���Ȥ����Ȥˤ�äƥơ��֥�ؤν񤭹��ߥ�����������ޤ��뤳�Ȥ��Ǥ��ޤ���

�񤭴����롼����̡��ν�ͭ�ԤϤ��ޤ��� ��졼�����ʥơ��֥�ޤ��ϥӥ塼�ˤν�ͭ�Ԥϼ�ưŪ�ˤ����������줿�񤭴����롼��ν�ͭ�ԤȤʤ�ޤ��� PostgreSQL�Υ롼�륷���ƥ�ϥǥե���ȤΥ����������楷���ƥ�ο��񤤤��ѹ����ޤ��� �롼��ˤ�äƻ��Ѥ�����졼�����ϡ��롼���ư�����桼���θ��¤ǤϤʤ����롼���ͭ�Ԥθ��¤ǥ����å�����ޤ��� ���Τ��Ȥϡ��桼�����䤤��碌����������ơ��֥�/�ӥ塼���Ф��Ƥθ��¤�������Ф褤���Ȥ򼨤��Ƥ��ޤ���

�㤨�С��ʲ��Τ褦�ˤ��ޤ��� ����桼�����������Ĥ��ϸĿ��ѤΡ�����¾�ϻ�̳���������Ѥ��뤿��Ρ������ֹ�Υꥹ�Ȥ���äƤ����Ȥ��ޤ��� �桼���ϼ��Τ褦�ˤ��ƹ��ۤ��뤳�Ȥ��Ǥ��ޤ���

CREATE TABLE phone_data (person text, phone text, private boolean);
CREATE VIEW phone_number AS
    SELECT person, CASE WHEN NOT private THEN phone END AS phone
    FROM phone_data;
GRANT SELECT ON phone_number TO secretary;

���Υ桼���ʤȥǡ����١����Υ����ѡ��桼���˰ʳ���phone_data�ơ��֥�˥��������Ǥ��ޤ��� ��������GRANT�ˤ������phone_number�ӥ塼���Ф�SELECT�Ǥ��ޤ��� �롼�륷���ƥ��phone_number�����SELECT����phone_data�����SELECT���˽񤭴����ޤ��� ���Υ桼����phone_number�ν�ͭ�ԡ��������äƥ롼��ν�ͭ�ԤǤ����顢phone_data���ɤ߹��ߤ��Ф��륢�������Ϥ��Υ桼���θ��¤˽��äƥ����å����졢�䤤��碌������դ��Ƥ�褤���Ȥˤʤ�ޤ��� phone_number�ؤΥ�������������å�����ޤ���������ϸƤӽФ����桼�����Ф��ƹԤ��ޤ��Τǡ����ȥ桼���ʳ��ϻȤ����Ȥ��Ǥ��ޤ���

���¤ϥ롼�뤴�Ȥ˥����å�����ޤ��� �Ǥ����������������ΤȤ��������������ֹ�򻲾Ȥ��뤳�Ȥ��Ǥ��ޤ��� �������������̤Υӥ塼��������������PUBLIC���Ф��륢���������Ĥ�Ϳ���뤳�Ȥ��Ǥ��ޤ��� ������������Υӥ塼���̤���ï�⤬phone_number�ǡ����򸫤뤳�Ȥ��Ǥ��ޤ��� ��񤬤Ǥ��ʤ����Ȥ�phone_data��ľ�ܥ�����������ӥ塼���뤳�ȤǤ� �ʼºݤˤϺ����ϤǤ��ޤ������������������ơ����¥����å��ǵ��䤵��ޤ��ˡ� �����ơ�����ȼ���phone_number�ӥ塼�򳫤������Ȥ˥桼�������դ��������ǡ����θ��¤���夲�뤳�Ȥ��Ǥ��ޤ��� ���Υӥ塼�ؤΥ���������¨�¤˼��Ԥ˽����ޤ���

���Υ롼�뤴�ȤΥ����å����������ƥ��ۡ���ˤʤ�ȹͤ���ͤ����뤫�⤷��ޤ��󤬡��ºݤˤϤ����ǤϤ���ޤ��� �⤷���Τ褦�˵�ǽ���ʤ��Ȥʤ�ȡ�����phone_number��Ʊ�������ä��ơ��֥���Ѱդ��ơ�1��1��ǡ����򤽤��˥��ԡ����뤫�⤷��ޤ��� �����ʤ�ȡ��ǡ�������Τ�ΤǤ����顢ï�˥�����������Ϳ���褦����μ�ͳ�Ǥ��� GRANT��"���ʤ����Ѥ��Ƥ��ޤ�"�Ȥ������ȤǤ��� ���Ѥ��Ƥ���ï�������Τ褦�ʤ��Ȥ�Ԥä����ϡ��ͤ����Ѥ���REVOKE���Ƥ���������

��˼������褦�ʼ�ˡ��ȤäƤ���������Ƥ򱣤��Τ˥ӥ塼�ϻȤ��ޤ����������ʤ��Ԥˤ���ǡ������ꤷ�Ʊ����ΤˤϻȤ��ʤ����Ȥ����դ��Ƥ��������� �㤨�С��ʲ��Υӥ塼�ϰ����ǤϤ���ޤ���

CREATE VIEW phone_number AS
    SELECT person, phone FROM phone_data WHERE phone NOT LIKE '412%';

�롼�륷���ƥबphone_number�����SELECT��phone_data�����SELECT�˽񤭴�����phone��412�ǻϤޤ�ʤ����ܤΤߤ�ɬ�פ��Ȥ��������ɲä��ޤ��Τǡ����Υӥ塼�ϰ����˸����ޤ��� ���������桼�������Ȥδؿ�������Ǥ���ΤǤ���С�NOT LIKE�������˥桼������δؿ���¹Ԥ���褦�ץ��ʤ��������뤳�Ȥ��񤷤�����ޤ��� �㤨�аʲ����̤�Ǥ���

CREATE FUNCTION tricky(text, text) RETURNS bool AS $$
BEGIN
    RAISE NOTICE '% => %', $1, $2;
    RETURN true;
END
$$ LANGUAGE plpgsql COST 0.0000000000000000000001;

SELECT * FROM phone_number WHERE tricky(person, phone);

�ץ��ʤϤ������NOT LIKE�����˰²���tricky�ؿ���¹Ԥ��뤳�Ȥ����Ӥޤ��Τǡ�phone_data�ơ��֥�οͤ������ֹ�Ϥ��٤�NOTICE�Ȥ���ɽ������ޤ��� ���Ȥ��桼�����������ؿ�������Ǥ��ʤ����Ǥ⡢Ʊ�ͤι�����Ȥ߹��ߴؿ����Ȥ��ޤ��� ���㤨�С��ۤȤ�ɤη��Ѵ��ؿ����������륨�顼��å������������ͤ˴ޤ�Ǥ��ޤ�����

Ʊ�ͤι�θ�Ϲ����롼��ˤ�Ŭ�ѤǤ��ޤ��� �������ˤ����ơ��ǡ����١����Υơ��֥�ν�ͭ�Ԥ�shoelace�ӥ塼���Ф���ï����SELECT��INSERT��UPDATE��DELETE���¤�Ϳ���뤳�Ȥ��Ǥ��ޤ��� ��������shoelace_log���Ф��Ƥ�SELECT�����Ǥ��� �������ܤ�񤭹���롼�륢�������ϻپ�ʤ��¹Ԥ��졢�ޤ���¾�Υ桼���ϥ������ܤ򸫤뤳�Ȥ��Ǥ��ޤ��� ��������¾�Υ桼���Ϲ��ܤ���¤�����ꡢ����¸�ߤ�����ܤ����롢���뤤�Ϻ�����뤳�ȤϤǤ��ޤ��� ���ξ�硢shoelace_log�򻲾Ȥ��Ƥ���롼��Ͼ��Τʤ�INSERT�����Ǥ��Τǡ����ν�����Ѥ���褦�˥ץ��ʤ��������뤳�Ȥǥ롼����˲������ǽ���Ϥ���ޤ��� ����Ϥ��ʣ���ʾ����Ǥ��������ʤ����⤷��ޤ���