ALTER FUNCTION — 함수 정의 바꾸기
ALTER FUNCTION이름
[ ( [ [인자모드
] [인자이름
]인자자료형
[, ...] ] ) ]작업
[ ... ] [ RESTRICT ] ALTER FUNCTION이름
[ ( [ [인자모드
] [인자이름
]인자자료형
[, ...] ] ) ] RENAME TO새이름
ALTER FUNCTION이름
[ ( [ [인자모드
] [인자이름
]인자자료형
[, ...] ] ) ] OWNER TO {새소유주
| CURRENT_USER | SESSION_USER } ALTER FUNCTION이름
[ ( [ [인자모드
] [인자이름
]인자자료형
[, ...] ] ) ] SET SCHEMA새스키마
ALTER FUNCTION이름
[ ( [ [인자모드
] [인자이름
]인자자료형
[, ...] ] ) ] [ NO ] DEPENDS ON EXTENSION확장모듈이름
작업
자리에는: CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER PARALLEL { UNSAFE | RESTRICTED | SAFE } COST실행비용
ROWS반환자료수
SUPPORTsupport_function
SET환경설정_매개변수
{ TO | = } {값
| DEFAULT } SET환경설정_매개변수
FROM CURRENT RESET환경설정_매개변수
RESET ALL
ALTER FUNCTION
명령은 함수 정의를 바꾼다.
ALTER FUNCTION
명령은 해당 함수 소유주가 실행할 수 있다.
스키마를 바꾸는 경우, 새 스키마에 대한 CREATE
권한이 있어야 한다.
소유주를 바꾸는 경우, 현재 소유주는 직간접적으로 새 소유주의
구성원이어야 하며, 새 소유주는 해당 스키마에 대해서
CREATE
권한이 있어야 한다. (새 사용자가
그 함수를 지우거나, 새로 만들 수 있어야 하기 때문이다.
슈퍼유저는 이런 제한 없이 작업할 수 있다.)
이름
작업 대상 함수 이름(스키마 이름 포함). 인자 목록을 지정하지 않는다면, 그 함수 이름과 같은 함수는 해당 스키마 안에 딱 하나만 있어야한다.
인자모드
사용할 수 모드값은 IN
, OUT
,
INOUT
, VARIADIC
.
생략하면 IN
으로 간주한다.
ALTER FUNCTION
명령에서 해당 함수를 식별할
때 OUT
인자를 고려하지 않고, 단지 입력 인자만
고려한다. 그래서, IN
, INOUT
,
VARIADIC
인자만 지정해도 된다.
인자이름
인자 이름. ALTER FUNCTION
명령에서는
해당 함수를 식별할 때 이 이름은 전혀 고려하지 않는다.
인자자료형
해당 인자의 자료형(필요하다면 스키마 이름도 포함).
새이름
바뀔 새 함수 이름.
새소유주
해당 함수의 바뀔 새 소유주 이름.
해당 함수에 SECURITY DEFINER
속성이
있다면, 새 소유주 자격으로 실행 될 것이다.
새스키마
바뀔 새 스키마 이름.
DEPENDS ON EXTENSION 확장모듈이름
NO DEPENDS ON EXTENSION 확장모듈이름
해당 함수가 이 확장 모듈의 구성 요소가 되도록 의존 관계를 맺음
(NO
옵션을 추가하면 의존 관계 끊음). 의존관계를 맺으면,
해당 확장 모듈이 삭제 될 때 이 함수도 함께 삭제 된다.
CALLED ON NULL INPUT
RETURNS NULL ON NULL INPUT
STRICT
CALLED ON NULL INPUT
:
몇몇 또는 모든 입력 인자가 null 값인 경우에도 함수 본문을
실행함.
RETURNS NULL ON NULL INPUT
또는 STRICT
: 입력 인자값이 null 이면 함수
본문을 실행하지 않고 무조건 null 값을 반환함.
CREATE FUNCTION 참조.
IMMUTABLE
STABLE
VOLATILE
함수 휘발성 속성 지정. CREATE FUNCTION 참조.
[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] SECURITY DEFINER
함수 본문 실행을 호출자(현재 사용자, INVOKER)로 할지,
정의자(만든이, DEFINER)로 할지
지정함. EXTERNAL
키워드는
SQL 호환성 때문에 있음. 무시됨.
CREATE FUNCTION 참조.
PARALLEL
병렬 처리 속성 지정. CREATE FUNCTION 참조.
LEAKPROOF
leakproof 지정. CREATE FUNCTION 참조.
COST
실행비용
쿼리 최적화기가 사용할 실행 비용 추정값. CREATE FUNCTION 참조.
ROWS
반환자료수
집합 반환 함수에서 반환될 자료수 추정값. 쿼리 최적화기가 이 값을 참조함. CREATE FUNCTION 참조.
SUPPORT
support_function
Set or change the planner support function to use for this function. See 37.11절 for details. You must be superuser to use this option.
This option cannot be used to remove the support function altogether,
since it must name a new support function. Use CREATE OR
REPLACE FUNCTION
if you need to do that.
환경설정_매개변수
값
해당 함수가 호출 될 때 사용할 서버 환경 설정 매개 변수 값 지정.
값
으로 DEFAULT
를
지정하거나, RESET
구문을 쓰면, 해당 설정 값을
지우고, RESET ALL
구문을 쓰면, 해당 함수에
따로 지정된 모든 설정값을 지운다.
SET FROM CURRENT
구문은
ALTER FUNCTION
명령을 실행하는 그 세션의 현재
설정값을 지정한다.
RESTRICT
표준 SQL 호환성 때문에 있는 키워드. 아무 작업 안함.
함수 이름 바꾸기:
ALTER FUNCTION sqrt(integer) RENAME TO square_root;
함수 소유주 바꾸기:
ALTER FUNCTION sqrt(integer) OWNER TO joe;
함수 스키마 바꾸기:
ALTER FUNCTION sqrt(integer) SET SCHEMA maths;
해당 함수를 확장 모듈 구성 요소로 지정하기:
ALTER FUNCTION sqrt(integer) DEPENDS ON EXTENSION mathlib;
함수 본문을 실행 할 때 사용할 search_path 값 지정:
ALTER FUNCTION check_password(text) SET search_path = admin, pg_temp;
이미 지정된 search_path
값 지우기:
ALTER FUNCTION check_password(text) RESET search_path;
이 경우 search_path 값은 호출하는 세션의 값을 사용하게 된다.
ALTER FUNCTION
구문은 부분적으로 표준 SQL 구문을
준수한다. 표준 구문에서도 많은 속성 변경이 가능하지만,
함수 이름 바꾸기, 정의자 보안, 환경 설정 매개 변수 값 지정,
소유주, 스키마 바꾸기, 함수 휘발성 지정 같은 기능은 없다.
표준 SQL에서는 RESTRICT
키워드가 필수지만,
PostgreSQL에서는 선택 사항이다.