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
| 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����Ѥ��Ƥ���������
�ؿ�����������桼���������δؿ��ν�ͭ�ԤȤʤ�ޤ���
��������ؿ���̾���Ǥ��ʥ���������̾��ġˡ�
�����Υ⡼�ɤǡ�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����ưŪ�ˤ�ʬ�ह��ɬ�פ����뤳�Ȥ����դ��Ƥ���������
�ܺ٤���33.6�Ȥ��Ƥ���������
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���쥽������������δؿ���̾���Ǥ��� �����ܥ뤬��ά���줿��硢��������SQL�ؿ���̾����Ʊ����ΤǤ���Ȳ��ꤵ��ޤ���
�ؿ��˴ؤ���������ʬŪ�����ƻ��ꤹ������Ū����ˡ�Ǥ��� �����ǻ���Ǥ���°����ʲ��˼����ޤ���
STRICT�ޤ���RETURNS NULL ON NULL INPUT��Ʊ���Ǥ���
isCachable�ϡ�IMMUTABLE��Ʊ���Ǥ����������ѻߤ���Ƥ��ޤ��� �������������ߴ������ݻ����뤿�ᡢ�ޤ�ͭ���Ȥ���Ƥ��ޤ���
°��̾�Ǥϡ���ʸ����ʸ������̤��ޤ���
����˾ܤ��������ؿ��κ�����ˡ�ˤĤ��Ƥ���33.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���ȡˤ���Ѥ���������ʤ��Ȥ�¿������ޤ��� �ɥ���������Ѥ��ʤ��¤ꡢ�ؿ�������ñ��������Хå�����å����ɬ����Ťˤ��ƥ��������פ��ʤ���Фʤ�ޤ���
�ؿ����������ˤϡ��桼���Ϥ��θ����USAGE���¤�ɬ�פǤ���
�����Ǥϡ��鿴�Ը����δ�ñ������Ĥ������ޤ��� ��33.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;
old_path TEXT;
BEGIN
-- ľ����search_path����¸���ޤ����������ؿ���ƤӽФ����Ȥ�μ�
--�ˤ��뤿���current_setting���դ��ʤ���Фʤ�ޤ���
old_path := pg_catalog.current_setting('search_path');
-- ������search_path�����ꡢ�Ĥޤ꿮��Ǥ��륹��������θ��
-- 'pg_temp'�����ꤷ�ޤ���
-- �ؿ�����������˥��顼���������Ȥ��Ƥ�����ͤ����褦
-- ��is_local = true�����ꤷ�ޤ���
PERFORM pg_catalog.set_config('search_path', 'admin, pg_temp', true);
-- ��Ū�ΰ����ʺ�Ȥ�Ԥ��ޤ���
SELECT (pwd = $2) INTO passed
FROM pwds
WHERE username = $1;
-- �ƤӽФ�����search_path���ᤷ�ޤ���
PERFORM pg_catalog.set_config('search_path', old_path, true);
RETURN passed;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;