CREATE [ OR REPLACE ] FUNCTION name ( [ argtype [, ...] ] ) RETURNS rettype { LANGUAGE langname | IMMUTABLE | STABLE | VOLATILE | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT | [EXTERNAL] SECURITY INVOKER | [EXTERNAL] SECURITY DEFINER | AS 'definition' | AS 'obj_file', 'link_symbol' } ... [ WITH ( attribute [, ...] ) ]
CREATE FUNCTION �Ͽ������ؿ���������ޤ���CREATE OR REPLACE FUNCTION �ϡ��������ؿ��κ������ޤ��ϡ���¸������ִ��Τɤ��餫��Ԥʤ��ޤ���
�ؿ�����������桼�������δؿ��ν�ͭ�Ԥˤʤ�ޤ���
�ѥ���
��������ؿ���̾���Ǥ��� ��������̾���ޤޤ�Ƥ����硢�ؿ��ϻ��ꤵ�줿�������ޤǺ�������ޤ��� ��������̾���ʤ���С��ؿ��ϸ��ߤΥ������� (�����ѥ������ˤ��륹�����ޡ�CURRENT_SCHEMA() ����) �Ǻ�������ޤ��� �������ؿ���̾���ˤϡ�Ʊ�������������Ʊ�������ǡ���������Ĵ�¸�δؿ���Ʊ��̾���ϻ��ѤǤ��ޤ��� ���������ۤʤ�����ǡ���������Ĵؿ��Ǥ���С�Ʊ��̾���Ǥ���ޤ��� (����������С������� �ȸ����ޤ�)��
�⤷����С��ؿ��ΰ����Υǡ������Ǥ��� ���Ϸ��ˤϡ����ܷ���ʣ�緿���ɥᥤ���⤷���ϴ�¸����η���Ʊ��������Ѥ��뤳�Ȥ��Ǥ��ޤ��� ��η��Ȥ���ˤϡ�tablename.columnname%TYPE �ȵ��Ҥ��ޤ������η�����Ѥ���ȡ��ơ��֥�������ѹ�����Ƥ�ؿ����ƶ�������ʤ��褦�ˤ��뤳�Ȥ��Ǥ����礬����ޤ��� �ޤ����������Ƥ������ˤ�ꡢcstring �Τ褦�ʡֵ����ǡ������פ���ꤹ�뤳�Ȥ���ǽ�Ǥ��� �����ǡ����������Ѥ���Ƥ����硢�ºݤΰ����Υǡ������ϡ����꤬�Դ����Ǥ��뤫���⤷�����̾�� SQL �ǡ������Υ��åȤǤϤʤ��ǡ������Ǥ���
�֤����ǡ������Ǥ��� �֤����ǡ������ϡ����ܷ���ʣ�緿���ɥᥤ���⤷���ϴ�¸����η���Ʊ���������ꤹ�뤳�Ȥ��Ǥ��ޤ��� �ޤ����������Ƥ������ˤ�ꡢcstring �Τ褦�ʡֵ����ǡ������פ���ꤹ�뤳�Ȥ���ǽ�Ǥ���setof �����ҤϤ��δؿ�����1 �ĤΥ����ƥ�ǤϤʤ������ƥ�ν�����֤����Ȥ��ޤ���
�ؿ���������Ƥ�������̾���Ǥ��� ���Υѥ����ˤϡ�SQL��C��internal���⤷���ϥ桼�������³�������̾��������ǽ�Ǥ��� (createlang �⻲�Ȥ��Ƥ���������)�����ߴ��Τ��ᡢ����̾����ñ�������dz�뤳�Ȥ�Ǥ��ޤ���
�嵭��°������ꤹ��ȡ��¹Ի��κ�Ŭ���Τ��ᡢ�ؿ���ʣ����ɾ���� 1 �Ĥ�ɾ�����֤������Ƥ�����ʤ����ɤ����Ȥ�����������ƥ�����뤳�Ȥ��Ǥ��ޤ��� ���ꤹ��Τϡ������줫 1 �ĤΤߤǤ��� ���꤬�ʤ����ϡ�VOLATILE ���ǥե���Ȳ��Ǥ���
IMMUTABLE ����ꤹ��ȡ����δؿ���Ʊ�������ͤ�Ϳ������硢���Ʊ����̤��֤��ޤ����Ĥޤꡢ�ǡ����١����������ꡢ���ΰ����ꥹ�����¸�ߤ�������ľ�ܻ��Ѥ�����Ϥ��ޤ��� ���Υ��ץ�����ꤵ�줿��硢����������Ǥ���ؿ����ƤӽФ����Ȥ������ؿ��ͤ��֤������뤳�Ȥ��Ǥ��ޤ���
STABLE ����ꤹ��ȡ����δؿ���Ʊ�������ͤ�Ϳ����줿��硢1 �ơ��֥륹�������Ǿ��Ʊ����̤��֤����Ȥ��Ǥ��ޤ��������������η�̤ϡ�SQL ʸ���ۤʤ���Ѥ�äƤ��ޤ���ǽ��������ޤ��� ����ϡ��ؿ��η�̤����ǡ����١��������� (���ߤΥ����ॾ����Τ褦��) �ѥ����ѿ��ʤɤ˰�¸����ؿ��ˤ�����Ŭ�ڤ�����Ȥ����ޤ��� �ޤ����ؿ��� CURRENT_TIMESTAMP �ե��ߥ�ϡ������ͤ��ȥ�����������ѹ�����ʤ����ᡢSTABLE �Ǥ��뤳�Ȥ����դ��Ƥ���������
VOLATILE ����ꤹ��ȡ�1 �ơ��֥륹�������Ǥ⤽�δؿ����ͤ��ѹ����뤳�Ȥ���ǽ�ˤʤ�ޤ����������äơ���Ŭ����Ԥʤ����ȤϤǤ��ޤ��� ���Τ褦�ʰ�̣�Ǵ�ȯŪ (volatile) �ʥǡ����١����ؿ��ϡ����Ū�����Ǥ������Ȥ��С�random()��currval()��timeofday() �ʤɤǤ��� �ޤ��������Ѥ�����ؿ� (���Ȥ��� setval()) �ϡ����η�̤�����ͽ¬�Ǥ���Ȥ��Ƥ⡢�ƤӽФ����Ŭ�����ʤ��褦����ȯŪ��ʬ�ह��ɬ�פ����뤳�Ȥ����դ��Ƥ���������
CALLED ON NULL INPUT (�ǥե����) ����ꤹ��ȡ����δؿ��ΰ����� NULL ��������Ǥ⡢�̾��̤�ƤӽФ���ޤ��� ���ξ��ϡ�ɬ�פ˱����� NULL �ͤ��ǧ����Ŭ�ڤ��б��뤳�Ȥ��ؿ��κ����Ԥ���Ǥ�ˤʤ�ޤ���
RETURNS NULL ON NULL INPUT �⤷���� STRICT ����ꤹ��ȡ��ؿ��ΰ����� NULL �������硢��� NULL ���֤��ޤ��� ���Υѥ��������ꤵ���ȡ����δؿ��� NULL ������������¹Ԥ���ޤ��� ����ˡ�NULL �Ȥ�����̤���ưŪ�˲��ꤵ��ޤ���
SECURITY INVOKER ����ꤹ��ȡ��ؿ���ƤӽФ����桼���θ��¤ǡ����δؿ����¹Ԥ���ޤ��� ���줬�ǥե���ȤǤ��� SECURITY DEFINER ����ꤹ��ȡ��ؿ�����������桼���θ��¤ǡ����δؿ����¹Ԥ���ޤ���
������� EXTERNAL �ϡ�SQL �Ȥθߴ������ݤĤ����¸�ߤ��Ƥ��ޤ�����������SQL �Ȥϰۤʤꡢ���ε�ǽ�ϳ����ؿ��ˤΤ�Ŭ�Ѥ����櫓�ǤϤʤ����ᡢ���Υ�����ɤϥ��ץ����Ǥ���
�ؿ����������ʸ����Ǥ��� ���ΰ�̣�ϸ���˰�¸���ޤ�������Ū�ʴؿ�̾�����֥������ȥե�����ؤΥѥ���SQL�䤤��碌����³������ǽ줿�ƥ����Ȥʤɤ����Ǥ��ޤ���
���η�����AS��ϡ�C����Υ�������������δؿ�̾��SQL�ؿ���̾����Ʊ���Ǥʤ���硢ưŪ�˥���줿C����ؿ��˻Ȥ��ޤ���ʸ����obj_file��ưŪ�˥����ɤǤ��륪�֥������Ȥ�ޤ�ե������̾���ǡ�link_symbol��C���쥽������������δؿ���̾���Ǥ��륪�֥������ȤΥ����ܥ�Ǥ���
�ؿ��˴ؤ���������ʬŪ�����ƻ��ꤹ������Ū����ˡ�Ǥ��� �����Ǵ�Ϣ����Τϡ��ʲ���°���Ǥ���
STRICT �ޤ��� RETURNS NULL ON NULL INPUT ��Ʊ���Ǥ���
isCachable �ϡ�IMMUTABLE ��Ʊ���Ǥ��������Ǥ��ѻߤ���Ƥ��ޤ��������������̸ߴ����Τ��ᡢ�ޤ������դ��뤳�ȤϤǤ��ޤ���
°��̾�Ǥϡ���ʸ����ʸ������̤��ޤ���
����˾ܤ��������ؿ��ν����ˤĤ��Ƥ� PostgreSQL �ץ�����ޥ������Ρ��ؿ���Ȥä� PostgreSQL �γ�ĥ�˴ؤ���ϤȤ��Ƥ���������
���٤Ƥ�SQL�η��ι�ʸ�����ϰ������֤��ͤ�ǧ����Ƥ��ޤ�����������������Τ����Ĥ��κ����ʤ��Ȥ���numeric�������٥ե�����ɡˤϡ����δؿ��μ����λ�������Ǥ�����ꡢCREATE FUNCTION ���ޥ�ɤˤ�äƷٹ�ʤ���ޤ���ޤ��ʤĤޤ�ǧ���䶯���Ϥ���ޤ���ˡ�
PostgreSQL�ϴؿ��������С�����������Ĥ��ޤ��� ����ϡ��ۤʤ�����η�����äƤ�����̤δؿ���Ʊ��̾����Ȥ����Ȥ��Ǥ���Ȥ������ȤǤ������������ε�ǽ��������C����ؿ��Ǥ����դ��ƻȤ�ʤ��ƤϤʤ�ޤ���
2�Ĥ������ؿ���Ʊ��C��̾������äƤ���ȡ�����˥��顼��ȯ�����ޤ����������뤿��ˤϡ�2�Ĥδؿ��˰ۤʤ�C��̾����Ϳ���ʤ��Ȥ��С�C��̾���ΰ����Ȥ��ư����η��ʤɤ�Ȥ��ޤ��ˡ������Ƥ�����̾���� CREATE FUNCTION��AS�����ǻ��ꤷ�ޤ��� �⤷���� AS �礬���Τޤޤξ��ϡ�CREATE FUNCTION �Ϥ��δؿ��� C ��̾���� SQL ��̾����Ʊ���Ǥ���Ȳ��ꤷ�ޤ���
Ʊ�ͤˡ�SQL�ؿ�̾��ʣ����C����ؿ��ǥ����С������ɤ���Ȥ��ϡ����줾���C����ؿ��Υ����˰ۤʤ�̾����Ϳ�������줾��Υ����С������ɤ��줿SQL�ؿ��Τդ��路��C������������뤿���CREATE FUNCTION��ʸ�����AS������ط�����Ȥ��ޤ���
Ʊ�쥪�֥������ȥե�����Ȥ��롢CREATE FUNCTION �ƤӽФ��������֤��줿��硢���Υե�����ϰ��٤��������ɤ���ޤ���(�����餯��ȯ�ʳ���)�ե����������ɤ��ƥ����ɤ���ˤϡ�LOAD ����Ѥ��ޤ���
�桼������δؿ���������ˤ� DROP FUNCTION ����Ѥ��ޤ���
��¸�δؿ����������ˤϡ�CREATE OR REPLACE FUNCTION ����Ѥ��ޤ���������ˡ�Ǥϴؿ���̾��������η����ѹ����뤳�ȤϤǤ��ʤ����Ȥ����դ��Ʋ������� (�����Ԥʤä���硢�������̤δؿ��������� �������Ǥ���)�ޤ���CREATE OR REPLACE FUNCTION �Ǥϡ���¸�ؿ�������ͤη����ѹ������뤳�ȤϤǤ��ޤ����Τ���ˤϡ����δؿ������������ٺ������Ʋ�������
�ؿ��������ƺ���������硢�������ؿ��ϸŤ���Τ�Ʊ�����ΤˤϤʤ�ޤ��� �Ť��ؿ��Ȥ��롢��¸�Υ롼�롢�ӥ塼���ȥꥬ�ʤɤϲ���Ƥ��ޤ��ޤ����ؿ��Ȥ��륪�֥������Ȥ��˲����ʤ��褦�ˡ��ؿ�������ѹ�����ˤ� CREATE OR REPLACE FUNCTION ����Ѥ��ޤ���
�ؿ��������ǽ�ˤ���ˤϡ��桼�������θ�����Ф� USAGE ���¤����ɬ�פ�����ޤ���
�ǥե���ȤǤϡ��ؿ��ν�ͭ�� (������) �Τߡ����δؿ���¹Ԥ��븢�¤��ݻ����Ƥ��ޤ��� ¾�Υ桼�����ؿ�����Ѥ��뤿��ˤϡ����δؿ��� EXECUTE ���¤�Ϳ������ɬ�פ�����ޤ���
ñ���SQL�ؿ����������ˤϰʲ��Τ褦�ˤ��ޤ���
CREATE FUNCTION one() RETURNS integer AS 'SELECT 1 AS RESULT;' LANGUAGE SQL; SELECT one() AS answer; answer -------- 1
������ϡ��桼��������(��ĥ�Ҥϥץ�åȥե�����ˤ�ä��礭���Ѥ��)funcs.so�Ȥ���̾���ζ�ͭ�饤�֥�꤫��롼�����ƤӽФ����Ȥˤ�� C �ؿ���������ޤ�����ͭ�饤�֥��ե�����ϥ����Ф�ưŪ�饤�֥�긡���ѥ����鸡������ޤ��� ��������Υ롼����Ϸ���������ѥ����Ȥ����Ϥ�����ͤ���������С�TRUE ���֤��ޤ�������� CHECK������ǻ��Ѥ���뤳�Ȥ�տޤ��Ƥ��ޤ���
CREATE FUNCTION ean_checkdigit(char, char) RETURNS boolean AS 'funcs' LANGUAGE C; CREATE TABLE product ( id char(8) PRIMARY KEY, eanprefix char(8) CHECK (eanprefix ~ '[0-9]{2}-[0-9]{5}') REFERENCES brandname(ean_prefix), eancode char(6) CHECK (eancode ~ '[0-9]{6}'), CONSTRAINT ean CHECK (ean_checkdigit(eanprefix, eancode)) );
������ǡ��桼������ǡ����� complex �����Ȥ߹��ߥǡ����� point �ؤη��Ѵ���Ԥʤ��ؿ���������ޤ��� ���δؿ��ϡ�C �Υ��������饳��ѥ��뤵�줿ưŪ�˥����ɤ���륪�֥������Ȥˤ�äƼ�������Ƥ��ޤ� (��ͭ���֥������ȥե���������Хե�����̾�ǻ��ꤹ��Ȥ��������ߤϴ�����ʤ���ˡ���������Ƥ��ޤ�)��PostgreSQL �˷��Ѵ��ؿ���ưŪ�˸��Ф����뤿��ˡ����� SQL �ؿ�����귿��Ʊ��̾��������ʤ���Фʤ�ޤ���Τǡ������С������ɤ��� �뤳�Ȥ��Ǥ��ޤ��ؿ�̾�� SQL ������ AS ��� 2 ���ܤη�����Ȥäƥ����С������ɤ���ޤ���
CREATE FUNCTION point(complex) RETURNS point AS '/home/bernie/pgsql/lib/complex.so', 'complex_to_point' LANGUAGE C STRICT;
�ؿ��� C ����ϰʲ��Τ褦�ˤʤ�ޤ���
Point * complex_to_point (Complex *z) { Point *p; p = (Point *) palloc(sizeof(Point)); p->x = z->x; p->y = z->y; return p; }
�ؿ��ˡָ��� (strict)�פȵ��Ҥ���Ƥ��뤳�Ȥ����դ��Ƥ�������������ˤ�ꡢ�ؿ����Τ� NULL ���ϤΥ����å����åפ��뤳�Ȥ��Ǥ��ޤ���