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, STRICTCALLED 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 — 함수가 호출될 때 구성 매개변수에 적용될 할당을 추가하거나 변경해요. valueDEFAULT이거나 동등하게 RESET을 쓰면 함수 지역 설정이 제거되어 함수가 자기 환경에 있는 값으로 실행돼요. RESET ALL을 쓰면 모든 함수 지역 설정을 지워요. SET FROM CURRENTALTER FUNCTION이 실행될 때 현재인 매개변수 값을 함수에 들어갈 때 적용될 값으로 저장해요. 허용되는 매개변수 이름과 값에 대한 자세한 내용은 SET과 19장을 보세요.
  • RESTRICT — SQL 표준 준수를 위해 무시돼요.

예제 (Examples)

integer 타입에 대한 함수 sqrtsquare_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 — 프로시저의 정의를 바꾸는 명령이에요.