ALTER FUNCTION — 함수 정의 변경하기
ALTER FUNCTION — 함수 정의 변경하기
ALTER FUNCTION은 이미 존재하는 함수의 정의를 바꾸는 명령이에요. 이름·소유자·스키마를 바꾸거나, 함수의 동작 속성(변동성, 보안, 병렬 안전성 등)이나 비용·행 수 추정값, 확장 의존성을 조정할 때 씁니다. 함수의 본문을 고치는 건 CREATE OR REPLACE FUNCTION이 담당해요.
출처: PostgreSQL 문서
본문
시놉시스 (Synopsis)
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
action [ ... ] [ RESTRICT ]
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
RENAME TO new_name
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
SET SCHEMA new_schema
ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
[ NO ] DEPENDS ON EXTENSION extension_name
where action is one of:
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 execution_cost
ROWS result_rows
SUPPORT support_function
SET configuration_parameter { TO | = } { value | DEFAULT }
SET configuration_parameter FROM CURRENT
RESET configuration_parameter
RESET ALL
설명 (Description)
ALTER FUNCTION은 함수의 정의를 변경해요. ALTER FUNCTION을 쓰려면 함수의 소유자여야 해요. 함수의 스키마를 바꾸려면 새 스키마에 대한 CREATE 권한도 있어야 하고, 소유자를 바꾸려면 새 소유 역할로 SET ROLE할 수 있어야 하며 그 역할이 함수의 스키마에 CREATE 권한을 가져야 해요. (이런 제약은 소유자를 바꾸는 게 함수를 드롭하고 다시 만드는 것 이상의 일을 하지 못하게 막아 주는 거예요. 다만 슈퍼유저는 어떤 함수든 소유권을 바꿀 수 있어요.)
매개변수 (Parameters)
name— 기존 함수의 이름(선택적으로 스키마 한정)이에요. 인자 목록을 지정하지 않으면 이름이 그 스키마에서 유일해야 해요.argmode— 인자의 모드로IN,OUT,INOUT,VARIADIC이에요. 생략하면 기본값은IN이에요.ALTER FUNCTION은 함수의 정체성을 결정할 때 입력 인자만 필요하므로OUT인자에는 실제로 신경 쓰지 않아요. 그래서IN,INOUT,VARIADIC인자만 나열하면 충분해요.argname— 인자의 이름이에요.ALTER FUNCTION은 함수의 정체성을 결정할 때 인자 데이터 타입만 필요하므로 인자 이름에는 신경 쓰지 않아요.argtype— 함수 인자의 데이터 타입(선택적으로 스키마 한정)이 있으면 그 타입이에요.new_name— 함수의 새 이름이에요.new_owner— 함수의 새 소유자예요. 함수가SECURITY DEFINER로 표시되어 있으면 이후 새 소유자로 실행될 것이라는 점에 주의하세요.new_schema— 함수의 새 스키마예요.DEPENDS ON EXTENSION extension_name,NO DEPENDS ON EXTENSION extension_name— 이 형식은 함수를 확장에 의존하는 것으로 표시하거나,NO를 지정하면 더 이상 그 확장에 의존하지 않는 것으로 표시해요. 확장에 의존하는 것으로 표시된 함수는CASCADE를 지정하지 않아도 확장이 드롭될 때 드롭돼요. 함수는 여러 확장에 의존할 수 있고, 그 중 어떤 확장이든 드롭되면 드롭돼요.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— 함수가 security definer인지 여부를 변경해요. 키워드EXTERNAL은 SQL 호환성을 위해 무시돼요. 이 기능에 대한 자세한 내용은 CREATE FUNCTION을 보세요.PARALLEL— 함수가 병렬 실행에 안전한 것으로 간주되는지 변경해요. 자세한 내용은 CREATE FUNCTION을 보세요.LEAKPROOF— 함수가 leakproof로 간주되는지 변경해요. 이 기능에 대한 자세한 내용은 CREATE FUNCTION을 보세요.COST execution_cost— 함수의 예상 실행 비용을 변경해요. 자세한 내용은 CREATE FUNCTION을 보세요.ROWS result_rows— 집합 반환 함수가 반환하는 예상 행 수를 변경해요. 자세한 내용은 CREATE FUNCTION을 보세요.SUPPORT support_function— 이 함수에 사용할 플래너 지원 함수를 설정하거나 변경해요. 자세한 내용은 36.11절을 보세요. 이 옵션을 쓰려면 슈퍼유저여야 해요. 이 옵션은 새 지원 함수를 이름으로 지정해야 하므로 지원 함수를 완전히 제거하는 데는 쓸 수 없어요. 그렇게 하려면CREATE OR REPLACE FUNCTION을 사용하세요.configuration_parameter,value— 함수가 호출될 때 구성 매개변수에 적용될 할당을 추가하거나 변경해요.value가DEFAULT이거나 동등하게RESET을 쓰면 함수 지역 설정이 제거되어 함수가 자기 환경에 있는 값으로 실행돼요.RESET ALL을 쓰면 모든 함수 지역 설정을 지워요.SET FROM CURRENT는ALTER FUNCTION이 실행될 때 현재인 매개변수 값을 함수에 들어갈 때 적용될 값으로 저장해요. 허용되는 매개변수 이름과 값에 대한 자세한 내용은 SET과 19장을 보세요.RESTRICT— SQL 표준 준수를 위해 무시돼요.
예제 (Examples)
integer 타입에 대한 함수 sqrt를 square_root로 이름을 바꾸려면:
ALTER FUNCTION sqrt(integer) RENAME TO square_root;
integer 타입에 대한 함수 sqrt의 소유자를 joe로 바꾸려면:
ALTER FUNCTION sqrt(integer) OWNER TO joe;
integer 타입에 대한 함수 sqrt의 스키마를 maths로 바꾸려면:
ALTER FUNCTION sqrt(integer) SET SCHEMA maths;
integer 타입에 대한 함수 sqrt를 확장 mathlib에 의존하는 것으로 표시하려면:
ALTER FUNCTION sqrt(integer) DEPENDS ON EXTENSION mathlib;
함수에 자동으로 설정되는 검색 경로를 조정하려면:
ALTER FUNCTION check_password(text) SET search_path = admin, pg_temp;
함수에 대한 search_path 자동 설정을 비활성화하려면:
ALTER FUNCTION check_password(text) RESET search_path;
이제 함수는 호출자가 사용하는 검색 경로로 실행될 거예요.
호환성 (Compatibility)
이 문은 SQL 표준의 ALTER FUNCTION 문과 부분적으로 호환돼요. 표준은 함수의 더 많은 속성 수정을 허용하지만, 함수 이름 바꾸기, security definer로 만들기, 함수에 구성 매개변수 값 붙이기, 소유자·스키마·변동성 변경 능력은 제공하지 않아요. 표준은 PostgreSQL에서 선택적인 RESTRICT 키워드를 요구해요.
더 알아보기 (Learn more)
- CREATE FUNCTION — 새 함수를 만들거나 정의를 교체하는 명령이에요.
- DROP FUNCTION — 함수를 삭제하는 명령이에요.
- ALTER PROCEDURE — 프로시저의 정의를 바꾸는 명령이에요.