CREATE [ OR REPLACE ] FUNCTION
name ( [ [ argmode ] [ argname ] argtype [, ...] ] )
[ RETURNS rettype ]
{ LANGUAGE langname
| IMMUTABLE | STABLE | VOLATILE
| CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
| COST execution_cost
| ROWS result_rows
| SET configuration_parameter { TO value | = value | FROM CURRENT }
| AS 'definition'
| AS 'obj_file', 'link_symbol'
} ...
[ WITH ( attribute [, ...] ) ]CREATE FUNCTION�Ͽ������ؿ���������ޤ��� CREATE OR REPLACE FUNCTION�ϡ��������ؿ��κ������ޤ��ϡ���¸������ִ��Τɤ��餫��Ԥ��ޤ���
��������̾���ޤޤ�Ƥ����硢�ؿ��ϻ��ꤵ�줿�������ޤǺ�������ޤ��� ��������̾���ʤ���С��ؿ��ϸ��ߤΥ������ޤǺ�������ޤ��� Ʊ�������������Ʊ�������ǡ���������Ĵ�¸�δؿ���̾���ϡ��������ؿ���̾���Ȥ��ƻ��ѤǤ��ޤ��� ���������ۤʤ�����ǡ���������Ĵؿ��Ǥ���С�̾������ʣ���Ƥ���ޤ��� �ʤ���������С��������ȸ����ޤ��ˡ�
��¸�δؿ�����������ؤ���ˤϡ�CREATE OR REPLACE FUNCTION����Ѥ��Ƥ��������� ������ˡ�Ǥϴؿ���̾��������η����ѹ����뤳�ȤϤǤ��ʤ����Ȥ����դ��Ƥ������� �ʤ����Ԥä���硢�������̤δؿ�����������ޤ��ˡ� �ޤ���CREATE OR REPLACE FUNCTION�Ǥϡ���¸�δؿ�������ͤη����ѹ����뤳�ȤϤǤ��ޤ��� ����ͤη����ѹ����������ϡ����δؿ������������ٺ������Ƥ��������� �ʤ���ϡ�OUT�ѥ�������Ѥ��Ƥ����硢�ؿ��������ʤ��¤�OUT�ѥ�����̾���䷿���ѹ��Ǥ��ʤ����Ȥ��̣���ޤ�����
�ؿ��������ƺ���������硢�������ؿ��ϸŤ���Τ�Ʊ�����ΤˤϤʤ�ޤ��� �Ť��ؿ��Ȥ��롢��¸�Υ롼�롢�ӥ塼���ȥꥬ�ʤɤ������ʤ���Фʤ�ʤ��Ǥ��礦�� �ؿ��Ȥ��륪�֥������Ȥ��˲����ʤ��褦�˴ؿ�������ѹ�����ˤϡ�CREATE OR REPLACE FUNCTION����Ѥ��Ƥ��������� �ޤ���ALTER FUNCTION����Ѥ��ơ���¸�δؿ������°���ΤۤȤ�ɤ��ѹ����뤳�Ȥ��Ǥ��ޤ���
�ؿ�����������桼���������δؿ��ν�ͭ�ԤȤʤ�ޤ���
��������ؿ���̾���Ǥ��ʥ���������̾��ġˡ�
�����Υ⡼�ɤǡ�IN��OUT��INOUT�Τ����줫�Ǥ��� ��ά���Υǥե���Ȥ�IN�Ǥ���
������̾���Ǥ��� �������ˤϤ���̾����ؿ����Τǻ��ѤǤ����Τ⤢��ޤ� �ʺ��ΤȤ���PL/pgSQL�ΤߤǤ��ˡ� ¾�θ���Ǥϡ����ϰ�����̾����ñ�ʤ��ɲåɥ�����ȤȤ��ư����ޤ��� �����������ϰ�����̾���ϡ���̤ιԷ�����̾�Ȥʤ�ޤ��Τǽ��פǤ��� �ʽ��ϰ�����̾�����ά������硢�����ƥ�ϥǥե���Ȥ���̾����Ϳ���ޤ�����
�ؿ��ΰ����Υǡ������Ǥ��ʥ���������̾��ġˡ� ���ܥǡ�������ʣ��ǡ��������ɥᥤ���ޤ��ϡ��ơ��֥���η��λ��Ȥ���Ѥ��뤳�Ȥ��Ǥ��ޤ���
�ޤ�������μ����˰�¸���ޤ�����cstring�Ȥ��ä�"������"�����Ǥ�����⤢��ޤ��� �������ϡ������η��λ��꤬�Դ����Ǥ��롢�⤷���ϡ��̾��SQL�ǡ������ν����ۤ��Ƥ��뤳�Ȥ��ޤ���
��η��Ȥ���ˤϡ�tablename.columnname%TYPE�ȵ��Ҥ��ޤ��� �������Ѥ���ȡ��ơ��֥�������ѹ�����Ƥ�ؿ����ƶ�������ʤ��褦�ˤ���Τ����Ω�Ĥ��Ȥ�����ޤ���
�ؿ����֤��ǡ����η��Ǥ��ʥ���������̾��ġˡ� ���ܷ���ʣ�緿���ɥᥤ���ޤ��ϡ��ơ��֥���η��λ��Ȥ����ꤹ�뤳�Ȥ��Ǥ��ޤ��� �ޤ����������Ƥ������ˤ��ޤ�����cstring�Τ褦��"������"����ꤹ�뤳�Ȥ���ǽ�Ǥ��� ���δؿ����ͤ��֤����Ȥ����ꤷ�Ƥ��ʤ����ϡ�����ͤȤ���void����ꤷ�Ƥ���������
OUT�⤷����INOUT�ѥ�����¸�ߤ����硢RETURNS����ά���뤳�Ȥ��Ǥ��ޤ��� ��ά���ʤ����ϡ������ѥѥ�������̣�����̷��˽��ä���Ρ��Ĥޤꡢʣ���ν����ѥѥ����������RECORD��ñ��ν����ѥѥ����Ǥ���Ф����Ʊ�������Ǥʤ���Фʤ�ޤ���
SETOF�����Ҥϡ����δؿ�����1�ĤǤϤʤ�ʣ���Υ����ƥ�ν�����֤����Ȥ��ޤ���
��η��ϡ�tablename.columnname%TYPE�ȵ��Ҥ��뤳�Ȥǻ��Ȥ���ޤ���
�ؿ���������Ƥ�������̾���Ǥ��� ���Υѥ����ˤϡ�SQL��C��internal���⤷���ϥ桼�������³�������̾��������ǽ�Ǥ��� �����ߴ����ݻ����뤿�ᡢ����̾����ñ�������ǰϤळ�Ȥ�Ǥ��ޤ���
������°���ϡ��ؿ���ư��˴ؤ��������䤤��碌���ץƥ��ޥ��������ޤ��� �����줫1�ĤΥ�����ɤΤ���Ǥ��ޤ��� ���꤬�ʤ����ϡ��ǥե���Ȥ�VOLATILE�Ȳ�ᤵ��ޤ���
IMMUTABLE�ϡ��ǡ����١������Ф����ѹ���Ԥ�ʤ����ȡ�����ӡ����δؿ���Ʊ�������ͤ�Ϳ�������˾��Ʊ����̤��֤����Ȥ��ޤ��� ����ϡ��ǡ����١����������ꡢ�����ꥹ�����ľ��¸�ߤ��ʤ��������Ѥ����ꤷ�ʤ��Ȥ������ȤǤ��� ���Υ��ץ�����ꤵ�줿��硢��������������Ǥ���ؿ��ƤӽФ��ϡ�¨�¤˴ؿ��ͤ��֤������뤳�Ȥ��Ǥ��ޤ���
STABLE�ϡ��ǡ����١������Ф����ѹ���Ԥ�ʤ����ȡ�����ӡ����δؿ���Ʊ�������ͤ�Ϳ������硢1�ơ��֥륹�������Ǿ��Ʊ����̤��֤�����
SQLʸ���ۤʤ�ȷ�̤��Ѥ�äƤ��ޤ���ǽ�������뤳�Ȥ��ޤ���
����ϡ��ǡ����١���������ʸ��ߤλ����ӤΤ褦�ʡ˥ѥ����ѿ��ʤɤ˷�̤���¸����ؿ���Ŭ���ޤ���
�ޤ���current_timestamp�Ϥδؿ��ϡ�1�ĤΥȥ���������Ǥ��ͤ��Ѳ����ʤ����ᡢSTABLE�Ǥ��뤳�Ȥ����դ��Ƥ���������
VOLATILE�ϡ�1�ơ��֥륹�������ˤ����ƴؿ����ͤ��Ѳ������ǽ�������뤿�ᡢ��Ŭ���Ǥ��ʤ����Ȥ��ޤ��� ���Τ褦�ʰ�̣����ưŪ��volatile�ˤʥǡ����١����ؿ��ϡ����Ū�����Ǥ��� �㤨�С�random()��currval()��timeofday()�ʤɤ���ưŪ�ʴؿ��Ǥ��� ���������㤨��setval()�ʤɤ������Ѥ�����ؿ��ϡ����η�̤�����ͽ¬�Ǥ���Ȥ��Ƥ⡢�ƤӽФ����Ŭ�����ʤ��褦��VOLATILE����ưŪ�ˤ�ʬ�ह��ɬ�פ����뤳�Ȥ����դ��Ƥ���������
�ܺ٤�項34.6�Ȥ��Ƥ���������
CALLED ON NULL INPUT�ʥǥե���ȡˤ���ꤹ��ȡ�������NULL���ޤޤ�Ƥ��Ƥ⡢�ؿ����̾��̤�ƤӽФ���ޤ��� ���ξ��ϡ�ɬ�פ˱�����NULL�ͤ��ǧ����Ŭ�ڤ��б��뤳�Ȥϴؿ������Ԥ���Ǥ�Ǥ���
RETURNS NULL ON NULL INPUT�⤷����STRICT����ꤹ��ȡ��ؿ��ΰ�����NULL�������硢���NULL���֤��ޤ��� ���Υѥ��������ꤵ���ȡ�NULL�����������硢�ؿ��ϼ¹Ԥ���ޤ��� ����ˡ�NULL�Ȥ�����̤���ưŪ��Ϳ�����ޤ���
SECURITY INVOKER����ꤹ��ȡ��ؿ���ƤӽФ����桼���θ��¤ǡ����δؿ����¹Ԥ���ޤ��� ���줬�ǥե���ȤǤ��� SECURITY DEFINER����ꤹ��ȡ��ؿ�����������桼���θ��¤ǡ����δؿ����¹Ԥ���ޤ���
EXTERNAL������ɤϡ�SQL�Ȥθߴ������ݤĤ���˵�����Ƥ��ޤ��� ��������SQL�Ȥϰۤʤꡢ���ε�ǽ�ϳ����ؿ��ˤΤ�Ŭ�Ѥ����櫓�ǤϤʤ����ᡢ���Υ�����ɤϾ�ά��ǽ�Ǥ���
���δؿ��ο���¹ԥ����Ȥ�ɽ�������ǡ�ñ�̤�cpu_operator_cost�Ǥ��� �ؿ���������֤���硢�����1��������Υ����ȤȤʤ�ޤ��� ���Υ����Ȥ����ꤵ��ʤ���硢C���줪��������ؿ��Ǥ�1��¾�Τ��٤Ƥθ���Ǥ�100�Ȥʤ�ޤ��� �ͤ����礭������ȡ��ץ��ʤ�ɬ�װʾ�����ˤ˴ؿ���ɾ�����ʤ��褦�ˤʤ�ޤ���
�ץ��ʤ����ꤹ�롢���δؿ����֤��Կ��ο����ͤ�ɽ�������Ǥ��� ����ϡ��ؿ���������֤���Τ�������줿���Τߵ�����ޤ��� �ǥե���ȿ����ͤ�1000�ԤǤ���
SET��ˤ�ꡢ�ؿ����Ϥޤä����˻��ꤷ������ѥ�������ꤷ���ͤ����ꤷ���ؿ��ν�λ���ˤ����������ͤ��᤹���Ȥ��Ǥ��ޤ��� SET FROM CURRENT�ϡ����å����ˤ�����ѥ����θ����ͤ�ؿ����Ϥޤä�����Ŭ�Ѥ����ͤȤ����ݴɤ��ޤ���
�ؿ����������ʸ��������Ǥ��� ���Υѥ����ΰ�̣�ϸ���˰�¸���ޤ��� ����Ū�ʴؿ�̾�����֥������ȥե�����ؤΥѥ���SQL���ޥ�ɡ���³������ǵ��Ҥ��줿�ƥ����Ȥʤɤ����Ǥ��ޤ���
���ι�ʸ��AS��ϡ�C����Υ�������������δؿ�̾��SQL�ؿ���̾����Ʊ���Ǥʤ���硢ưŪ�˥����ɤ����C����ؿ��˻Ȥ��ޤ��� obj_file�Ȥ���ʸ�����ưŪ�˥����ɤǤ��륪�֥������Ȥ�ޤ�ե������̾���ǡ�link_symbol�Ϥ��Υ��֥������ȤΥ����ܥ롢�ĤޤꡢC���쥽������������δؿ���̾���Ǥ��� �����ܥ뤬��ά���줿��硢��������SQL�ؿ���̾����Ʊ����ΤǤ���Ȳ��ꤵ��ޤ���
�ؿ��˴ؤ���������ʬŪ�����ƻ��ꤹ������Ū����ˡ�Ǥ��� �����ǻ���Ǥ���°����ʲ��˼����ޤ���
STRICT�ޤ���RETURNS NULL ON NULL INPUT��Ʊ���Ǥ���
isCachable�ϡ�IMMUTABLE��Ʊ���Ǥ����������ѻߤ���Ƥ��ޤ��� �������������ߴ������ݻ����뤿�ᡢ�ޤ�ͭ���Ȥ���Ƥ��ޤ���
°��̾�Ǥϡ���ʸ����ʸ������̤��ޤ���
����˾ܤ��������ؿ��κ�����ˡ�ˤĤ��Ƥ�項34.3�Ȥ��Ƥ���������
���Υ��ޥ�ɤǤϡ�SQL���ι�ʸ�ˤ��������ϰ���������ͤ��θ���ޤ��� ��������������κ������㤨��numeric�������٥ե�����ɤʤɡˤϡ����δؿ��μ�������Ǥ�����ꡢCREATE FUNCTION���ޥ�ɤǤϷٹ𤹤뤳�Ȥʤ����Ƥ��ޤ��ʤ����κ�����ǧ������ޤ��ޤ����������Ф��ơ�����λ��ͤ������뤳�Ȥ⤢��ޤ���ˡ�
PostgreSQL�ϴؿ��������С�����������Ĥ��ޤ��� �Ĥޤꡢ�����η����ۤʤäƤ���С�ʣ���δؿ���Ʊ��̾������Ѥ��뤳�Ȥ��Ǥ��ޤ��� �����������Ƥδؿ���C����ˤ�����̾���ϡ���ʣ���ƤϤ����ޤ��� �������äơ������С������ɤ���C����ؿ��ˤϡ��ۤʤ�C�����̾����Ϳ����ɬ�פ�����ޤ� ���㤨�С�C����ˤ�����̾���ΰ����˰����η�����Ѥ��Ƥ��������ˡ�
Ʊ��̾����Ʊ���������ѥ���������ľ�硢2�Ĥδؿ���Ʊ��Ǥ���Ȥߤʤ���ޤ��� OUT�ѥ�����̵�뤵��ޤ��� �������äơ��㤨�аʲ���3�Ĥ�����϶��礷�Ƥ��ޤ���
CREATE FUNCTION foo(int) ... CREATE FUNCTION foo(int, out text) ...
Ʊ�쥪�֥������ȥե�����Ȥ��롢CREATE FUNCTION�ƤӽФ��������֤��줿��硢���Υե�����ϥ��å������˰��٤��������ɤ���ޤ��� �ʤ����餯��ȯ�ʳ��ǡ˥ե����������ɤ��ƥ����ɤ���ˤϡ�LOAD���ޥ�ɤ���Ѥ��Ƥ���������
�桼������δؿ���������ˤ�DROP FUNCTION����Ѥ��Ƥ���������
�ؿ����������ʸ����Ҥ���ݤˡ��̾��ñ�������ǤϤʤ����ɥ�������項4.1.2.2���ȡˤ���Ѥ���������ʤ��Ȥ�¿������ޤ��� �ɥ���������Ѥ��ʤ��¤ꡢ�ؿ�������ñ��������Хå�����å����ɬ����Ťˤ��ƥ��������פ��ʤ���Фʤ�ޤ���
�ؿ��˲��餫��SET�礬�դ��Ƥ����硢�ؿ������Ǽ¹Ԥ����SET LOCAL���ޥ�ɤ�Ʊ���ѿ����Ф�����̤Ϥ��δؿ������¤���ޤ��� ����ѥ����������ͤϴؿ�����λ������˸������ޤ��� ���������̾�Ρ�LOCAL���ʤ���SET���ޥ�ɤ�SET������ޤ��� ����ϲ��˹Ԥ�줿SET LOCAL���ޥ�ɤ��Ф��Ƥ�ۤ�Ʊ���Ǥ��� ���Υ��ޥ�ɤθ��̤ϡ����ߤΥȥ�����������Хå�����ʤ��¤ꡢ�ؿ�����λ��������³������ޤ���
�ؿ����������ˤϡ��桼���Ϥ��θ����USAGE���¤�ɬ�פǤ���
�����Ǥϡ��鿴�Ը����δ�ñ������Ĥ������ޤ��� 項34.3�ˤϡ����¿���ξ�����㤬���ܤ���Ƥ��ޤ���
CREATE FUNCTION add(integer, integer) RETURNS integer
AS 'select $1 + $2;'
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT;
PL/pgSQL�ǡ�����̾����Ѥ��ơ�������1���䤷�ޤ���
CREATE OR REPLACE FUNCTION increment(i integer) RETURNS integer AS $$
BEGIN
RETURN i + 1;
END;
$$ LANGUAGE plpgsql;
ʣ���ν����ѥѥ�������ĥ쥳���ɤ��֤��ޤ���
CREATE FUNCTION dup(in int, out f1 int, out f2 text)
AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$
LANGUAGE SQL;
SELECT * FROM dup(42);���Ʊ�����Ȥ�����Ū��̾�����դ���ʣ�緿����Ѥ��ơ�����Ĺ�˹Ԥ����Ȥ��Ǥ��ޤ���
CREATE TYPE dup_result AS (f1 int, f2 text);
CREATE FUNCTION dup(int) RETURNS dup_result
AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$
LANGUAGE SQL;
SELECT * FROM dup(42);
SECURITY DEFINER�ؿ��ϴؿ�����������桼���θ��¤Ǽ¹Ԥ���ޤ��Τǡ����δؿ���ְ�äƻ��ѤǤ��ʤ����Ȥ�μ¤ˤ��ʤ���Фʤ�ޤ��� �����塢search_path�ϡ�����Ǥ��ʤ��桼�������߲�ǽ�ʥ������ޤ������������ꤵ��ޤ��� ����ϡ����դΤ���桼�������δؿ��ǻ��Ѥ���륪�֥������Ȥ��褦�ʥ��֥������Ȥ�������뤳�Ȥ��ɤ��ޤ��� �������ä˽��פʤ��Ȥϡ�����ơ��֥륹�����ޤǤ��� ���Υ������ޤϥǥե���ȤǺǽ�˸������졢�����ơ��̾�ï�Ǥ���߲�ǽ�Ǥ��� ����������ޤθ�������Ū�˺Ǹ�ˤ��뤳�Ȥǡ��������ƥ���Ĵ���Ǥ��ޤ��� ���Τ���ˤϡ�pg_temp��search_path�κǸ�ι��ܤȤ��Ƶ��ܤ��Ƥ��������� ���δؿ��ΰ����ʻ�����ˡ��ʲ��˼����ޤ���
CREATE FUNCTION check_password(uname TEXT, pass TEXT)
RETURNS BOOLEAN AS $$
DECLARE passed BOOLEAN;
BEGIN
SELECT (pwd = $2) INTO passed
FROM pwds
WHERE username = $1;
RETURN passed;
END;
$$ LANGUAGE plpgsql
SECURITY DEFINER
-- ����Ǥ��륹�����ޡ����θ��pg_temp�Ȥ������search_path����������ꤷ�ޤ���
SET search_path = admin, pg_temp;PostgreSQL�С������8.3������Ǥϡ�SET���ץ��������ѤǤ��ޤ��� ���Τ���Ť��ؿ��ˤϡ�search_path���ݴɤ������ꡢ�����Ƹ����᤹�Ȥ�����¿��ʣ���ʥ����å����ޤޤ�Ƥ��뤫�⤷��ޤ��� ����������Ū��SET���ץ�������Ѥ���ȡ����ʤ��ñ�ˤʤ�ޤ���
����¾�����դ��٤����Ȥ��ơ��������������줿�ؿ��Ǥϥǥե���ȤǼ¹Ը��¤�PUBLIC����Ϳ����Ƥ��뤳�Ȥ�����ޤ��� �ʾܺ٤�GRANT�Ȥ��Ƥ����������� SECURITY DEFINER�ؿ��λ��Ѥ�����Υ桼���Τߤ����¤��������ȤϤ褯����ޤ��� ���Τ���ˤϡ��ǥե���Ȥ�PUBLIC���¤���夲�������ơ��¹Ը��¤���Ϳ�����ƹԤäƤ��������� �������ؿ������٤ƤΥ桼���˼¹Բ�ǽ�Ȥʤ��֤�¸�ߤ��뤳�Ȥ��ɤ�����ˤϡ�ñ��ȥ���������Ǻ����ȸ��������ԤäƤ��������� �ʲ�������ޤ���
BEGIN; CREATE FUNCTION check_password(uname TEXT, pass TEXT) ... SECURITY DEFINER; REVOKE ALL ON FUNCTION check_password(uname TEXT, pass TEXT) FROM PUBLIC; GRANT EXECUTE ON FUNCTION check_password(uname TEXT, pass TEXT) TO admins; COMMIT;