��PostgreSQL����ե����2025��11��21�����š������å��������
¾�ΥС�������ʸ�� �� 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 FUNCTION

̾��

CREATE FUNCTION -- �������ؿ����������

����

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����Ѥ��Ƥ���������

�ؿ�����������桼���������δؿ��ν�ͭ�ԤȤʤ�ޤ���

�ѥ�᡼��

name

��������ؿ���̾���Ǥ��ʥ������޽���̾��ġˡ�

argmode

�����Υ⡼�ɤǡ�IN��OUT��INOUT�Τ����줫�Ǥ��� ��ά���Υǥե���Ȥ�IN�Ǥ���

argname

������̾���Ǥ��� �������ˤϤ���̾����ؿ����Τǻ��ѤǤ����Τ⤢��ޤ� �ʺ��ΤȤ���PL/pgSQL�ΤߤǤ��ˡ� ¾�θ���Ǥϡ����ϰ�����̾����ñ�ʤ��ɲåɥ�����ȤȤ��ư����ޤ��� �����������ϰ�����̾���ϡ���̤ιԷ�����̾�Ȥʤ�ޤ��Τǽ��פǤ��� �ʽ��ϰ�����̾�����ά������硢�����ƥ�ϥǥե���Ȥ���̾����Ϳ���ޤ�����

argtype

�ؿ��ΰ����Υǡ������Ǥ��ʥ������޽���̾��ġˡ� ���ܥǡ�������ʣ��ǡ��������ɥᥤ�󷿡��ޤ��ϡ��ơ��֥���η��λ��Ȥ���Ѥ��뤳�Ȥ��Ǥ��ޤ���

�ޤ�������μ����˰�¸���ޤ�����cstring�Ȥ��ä�"������"�����Ǥ�����⤢��ޤ��� �������ϡ������η��λ��꤬�Դ����Ǥ��롢�⤷���ϡ��̾��SQL�ǡ������ν����ۤ��Ƥ��뤳�Ȥ򼨤��ޤ���

��η��򻲾Ȥ���ˤϡ�tablename.columnname%TYPE�ȵ��Ҥ��ޤ��� �������Ѥ���ȡ��ơ��֥�������ѹ�����Ƥ�ؿ����ƶ�������ʤ��褦�ˤ���Τ����Ω�Ĥ��Ȥ�����ޤ���

rettype

�ؿ����֤��ǡ����η��Ǥ��ʥ������޽���̾��ġˡ� ���ܷ���ʣ�緿���ɥᥤ�󷿡��ޤ��ϡ��ơ��֥���η��λ��Ȥ����ꤹ�뤳�Ȥ��Ǥ��ޤ��� �ޤ����������Ƥ������ˤ��ޤ�����cstring�Τ褦��"������"����ꤹ�뤳�Ȥ���ǽ�Ǥ��� ���δؿ����ͤ��֤����Ȥ����ꤷ�Ƥ��ʤ����ϡ�����ͤȤ���void����ꤷ�Ƥ���������

OUT�⤷����INOUT�ѥ�᡼����¸�ߤ����硢RETURNS����ά���뤳�Ȥ��Ǥ��ޤ��� ��ά���ʤ����ϡ������ѥѥ�᡼������̣�����̷��˽��ä���Ρ��Ĥޤꡢʣ���ν����ѥѥ�᡼���������RECORD��ñ��ν����ѥѥ�᡼���Ǥ���Ф����Ʊ�������Ǥʤ���Фʤ�ޤ���

SETOF�����Ҥϡ����δؿ�����1�ĤǤϤʤ�ʣ���Υ����ƥ�ν�����֤����Ȥ򼨤��ޤ���

��η��ϡ�tablename.columnname%TYPE�ȵ��Ҥ��뤳�Ȥǻ��Ȥ���ޤ���

langname

�ؿ���������Ƥ�������̾���Ǥ��� ���Υѥ�᡼���ˤϡ�SQL��C��internal���⤷���ϥ桼�������³�������̾��������ǽ�Ǥ��� �����ߴ����ݻ����뤿�ᡢ����̾����ñ�������ǰϤळ�Ȥ�Ǥ��ޤ���

IMMUTABLE
STABLE
VOLATILE

������°���ϡ��ؿ���ư��˴ؤ��������䤤��碌���ץƥ��ޥ������󶡤��ޤ��� �����줫1�ĤΥ�����ɤΤ߻���Ǥ��ޤ��� ���꤬�ʤ����ϡ��ǥե���Ȥ�VOLATILE�Ȳ�ᤵ��ޤ���

IMMUTABLE�ϡ��ǡ����١������Ф����ѹ���Ԥ�ʤ����ȡ�����ӡ����δؿ���Ʊ�������ͤ�Ϳ�������˾��Ʊ����̤��֤����Ȥ򼨤��ޤ��� ����ϡ��ǡ����١����򸡺������ꡢ�����ꥹ�����ľ��¸�ߤ��ʤ��������Ѥ����ꤷ�ʤ��Ȥ������ȤǤ��� ���Υ��ץ���󤬻��ꤵ�줿��硢��������������Ǥ���ؿ��ƤӽФ��ϡ�¨�¤˴ؿ��ͤ��֤������뤳�Ȥ��Ǥ��ޤ���

STABLE�ϡ��ǡ����١������Ф����ѹ���Ԥ�ʤ����ȡ�����ӡ����δؿ���Ʊ�������ͤ�Ϳ������硢1�ơ��֥륹�������Ǿ��Ʊ����̤��֤����� SQLʸ���ۤʤ�ȷ�̤��Ѥ�äƤ��ޤ���ǽ�������뤳�Ȥ򼨤��ޤ��� ����ϡ��ǡ����١���������ʸ��ߤλ����ӤΤ褦�ʡ˥ѥ�᡼���ѿ��ʤɤ˷�̤���¸����ؿ���Ŭ���ޤ��� �ޤ���current_timestamp�Ϥδؿ��ϡ�1�ĤΥȥ�󥶥��������Ǥ��ͤ��Ѳ����ʤ����ᡢSTABLE�Ǥ��뤳�Ȥ����դ��Ƥ���������

VOLATILE�ϡ�1�ơ��֥륹�������ˤ����ƴؿ����ͤ��Ѳ������ǽ�������뤿�ᡢ��Ŭ���Ǥ��ʤ����Ȥ򼨤��ޤ��� ���Τ褦�ʰ�̣����ưŪ��volatile�ˤʥǡ����١����ؿ��ϡ����Ū�����Ǥ��� �㤨�С�random()��currval()��timeofday()�ʤɤ���ưŪ�ʴؿ��Ǥ��� ���������㤨��setval()�ʤɤ������Ѥ�����ؿ��ϡ����η�̤�����ͽ¬�Ǥ���Ȥ��Ƥ⡢�ƤӽФ����Ŭ�����ʤ��褦��VOLATILE����ưŪ�ˤ�ʬ�ह��ɬ�פ����뤳�Ȥ����դ��Ƥ���������

�ܺ٤���33.6�򻲾Ȥ��Ƥ���������

CALLED ON NULL INPUT
RETURNS NULL ON NULL INPUT
STRICT

CALLED ON NULL INPUT�ʥǥե���ȡˤ���ꤹ��ȡ�������NULL���ޤޤ�Ƥ��Ƥ⡢�ؿ����̾��̤�ƤӽФ���ޤ��� ���ξ��ϡ�ɬ�פ˱�����NULL�ͤ��ǧ����Ŭ�ڤ��б��򤹤뤳�Ȥϴؿ������Ԥ���Ǥ�Ǥ���

RETURNS NULL ON NULL INPUT�⤷����STRICT����ꤹ��ȡ��ؿ��ΰ�����NULL�������硢���NULL���֤��ޤ��� ���Υѥ�᡼�������ꤵ���ȡ�NULL�����������硢�ؿ��ϼ¹Ԥ���ޤ��� ����ˡ�NULL�Ȥ�����̤���ưŪ��Ϳ�����ޤ���

[EXTERNAL] SECURITY INVOKER
[EXTERNAL] SECURITY DEFINER

SECURITY INVOKER����ꤹ��ȡ��ؿ���ƤӽФ����桼���θ��¤ǡ����δؿ����¹Ԥ���ޤ��� ���줬�ǥե���ȤǤ��� SECURITY DEFINER����ꤹ��ȡ��ؿ�����������桼���θ��¤ǡ����δؿ����¹Ԥ���ޤ���

EXTERNAL������ɤϡ�SQL�Ȥθߴ������ݤĤ���˵�����Ƥ��ޤ��� ��������SQL�Ȥϰۤʤꡢ���ε�ǽ�ϳ����ؿ��ˤΤ�Ŭ�Ѥ����櫓�ǤϤʤ����ᡢ���Υ�����ɤϾ�ά��ǽ�Ǥ���

definition

�ؿ����������ʸ��������Ǥ��� ���Υѥ�᡼���ΰ�̣�ϸ���˰�¸���ޤ��� ����Ū�ʴؿ�̾�����֥������ȥե�����ؤΥѥ���SQL���ޥ�ɡ���³������ǵ��Ҥ��줿�ƥ����Ȥʤɤ����Ǥ��ޤ���

obj_file, link_symbol

���ι�ʸ��AS��ϡ�C����Υ�������������δؿ�̾��SQL�ؿ���̾����Ʊ���Ǥʤ���硢ưŪ�˥����ɤ����C����ؿ��˻Ȥ��ޤ��� obj_file�Ȥ���ʸ�����ưŪ�˥����ɤǤ��륪�֥������Ȥ�ޤ�ե������̾���ǡ�link_symbol�Ϥ��Υ��֥������ȤΥ�󥯥���ܥ롢�ĤޤꡢC���쥽������������δؿ���̾���Ǥ��� ��󥯥���ܥ뤬��ά���줿��硢��������SQL�ؿ���̾����Ʊ����ΤǤ���Ȳ��ꤵ��ޤ���

attribute

�ؿ��˴ؤ���������ʬŪ�����򤷤ƻ��ꤹ������Ū����ˡ�Ǥ��� �����ǻ���Ǥ���°����ʲ��˼����ޤ���

isStrict

STRICT�ޤ���RETURNS NULL ON NULL INPUT��Ʊ���Ǥ���

isCachable

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�ؿ��ΰ����ʺ���

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;

�ߴ���

CREATE FUNCTION���ޥ�ɤ�SQL:1999�ʹߤ��������Ƥ��ޤ��� PostgreSQL�ˤ�����CREATE FUNCTION������ε�ǽ������ޤ����������ʸߴ����Ϥ���ޤ��� °���ˤϰܿ���������ޤ��󡣤ޤ������Ѳ�ǽ�ʸ����ۤʤ�ޤ���

¾�Υǡ����١��������ƥ�Ȥθߴ����Τ���ˡ�argmode��argname�����˽񤯤��Ȥ��˽񤯤��Ȥ�Ǥ��ޤ��� ��������1���ܤ���ˡ��ɸ��˽��äƤ��ޤ���

��Ϣ����

ALTER FUNCTION, DROP FUNCTION, GRANT, LOAD, REVOKE, createlang