ALTER PROCEDURE

ALTER PROCEDURE

ALTER PROCEDURE는 프로시저(procedure)의 정의를 바꾸는 명령이에요. 프로시저의 이름, 소유자, 스키마, 보안 속성, 설정 파라미터 등을 변경할 수 있어요.

출처: PostgreSQL 문서

본문

문법 (Synopsis)

ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    action [ ... ] [ RESTRICT ]
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    RENAME TO new_name
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    SET SCHEMA new_schema
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
    [ NO ] DEPENDS ON EXTENSION extension_name

where action is one of:

    [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
    SET configuration_parameter { TO | = } { value | DEFAULT }
    SET configuration_parameter FROM CURRENT
    RESET configuration_parameter
    RESET ALL

설명 (Description)

ALTER PROCEDURE는 프로시저의 정의를 변경해요.

이 명령을 쓰려면 프로시저의 소유자여야 해요. 프로시저의 스키마를 바꾸려면 새 스키마에 대한 CREATE 권한도 있어야 해요. 소유자를 바꾸려면 새 소유 역할로 SET ROLE 할 수 있어야 하고, 그 역할이 프로시저의 스키마에 대한 CREATE 권한도 가져야 해요. (이런 제약은 소유자 변경을 통해 프로시저를 드롭하고 재생성하는 것 이상의 일을 못 하게 하려는 거예요. 다만 슈퍼유저는 어떤 프로시저의 소유권이든 바꿀 수 있어요.)

파라미터 (Parameters)

name — 기존 프로시저의 이름이에요 (스키마 한정을 써도 돼요). 인자 목록을 지정하지 않으면 이름이 해당 스키마에서 고유해야 해요.

argmode — 인자의 모드예요: IN, OUT, INOUT, VARIADIC. 생략하면 기본값은 IN이에요.

argname — 인자의 이름이에요. ALTER PROCEDURE는 프로시저의 정체를 판별할 때 인자 데이터 타입만 사용하므로, 인자 이름에는 실제로 신경 쓰지 않는다는 점에 유의하세요.

argtype — 프로시저 인자의 데이터 타입(들)이에요 (스키마 한정 가능). 인자 데이터 타입으로 프로시저를 어떻게 찾는지에 대한 자세한 내용은 DROP PROCEDURE를 참고하세요.

new_name — 프로시저의 새 이름이에요.

new_owner — 프로시저의 새 소유자예요. 프로시저가 SECURITY DEFINER로 표시되어 있으면 이후에는 새 소유자로 실행된다는 점에 유의하세요.

new_schema — 프로시저의 새 스키마예요.

extension_name — 이 형태는 프로시저를 확장에 의존하는 것으로 표시해요 (NO를 지정하면 더 이상 의존하지 않게 돼요). 확장에 의존하는 것으로 표시된 프로시저는 cascade를 지정하지 않아도 확장이 드롭될 때 함께 드롭돼요. 프로시저는 여러 확장에 의존할 수 있고, 그중 어느 하나라도 드롭되면 함께 드롭돼요.

[ EXTERNAL ] SECURITY INVOKER / [ EXTERNAL ] SECURITY DEFINER — 프로시저가 security definer인지 여부를 바꿔요. EXTERNAL 키워드는 SQL 표준 호환을 위해 무시돼요. 이 기능에 대한 자세한 내용은 CREATE PROCEDURE를 참고하세요.

configuration_parameter / value — 프로시저가 호출될 때 설정될 구성 파라미터 할당을 추가하거나 바꿔요. valueDEFAULT이거나 동등하게 RESET을 쓰면 프로시저 로컬 설정이 제거되어 프로시저가 자신의 환경에 있는 값으로 실행돼요. RESET ALL을 쓰면 모든 프로시저 로컬 설정을 지워요. SET FROM CURRENTALTER PROCEDURE 실행 시점의 파라미터 값을 저장해 프로시저 진입 시 적용할 값으로 써요.

허용되는 파라미터 이름과 값에 대한 자세한 내용은 SET과 Chapter 19를 참고하세요.

RESTRICT — SQL 표준과의 호환을 위해 무시돼요.

예제 (Examples)

integer 타입 인자 두 개를 가진 프로시저 insert_data의 이름을 insert_record로 바꾸려면:

ALTER PROCEDURE insert_data(integer, integer) RENAME TO insert_record;

integer 타입 인자 두 개를 가진 프로시저 insert_data의 소유자를 joe로 바꾸려면:

ALTER PROCEDURE insert_data(integer, integer) OWNER TO joe;

integer 타입 인자 두 개를 가진 프로시저 insert_data의 스키마를 accounting으로 바꾸려면:

ALTER PROCEDURE insert_data(integer, integer) SET SCHEMA accounting;

프로시저 insert_data(integer, integer)를 확장 myext에 의존하는 것으로 표시하려면:

ALTER PROCEDURE insert_data(integer, integer) DEPENDS ON EXTENSION myext;

프로시저에 자동 설정되는 검색 경로를 조정하려면:

ALTER PROCEDURE check_password(text) SET search_path = admin, pg_temp;

프로시저의 search_path 자동 설정을 끄려면:

ALTER PROCEDURE check_password(text) RESET search_path;

이제 프로시저는 호출자가 사용하는 검색 경로로 실행돼요.

호환성 (Compatibility)

이 문은 SQL 표준의 ALTER PROCEDURE 문과 부분적으로 호환돼요. 표준은 프로시저의 더 많은 속성 수정을 허용하지만, 프로시저 이름 변경, security definer 만들기, 구성 파라미터 값 연결, 소유자·스키마·휘발성 변경 기능은 제공하지 않아요. 표준은 또한 PostgreSQL에서는 선택적인 RESTRICT 키워드를 요구해요.

더 알아보기 (Learn more)

  • 프로시저의 정체는 인자 데이터 타입으로 판별되며, 인자 이름은 무시돼요.
  • SECURITY DEFINER 프로시저는 소유자를 바꾸면 이후 새 소유자로 실행돼요.
  • 확장에 의존하는 프로시저는 확장이 드롭될 때 함께 드롭돼요.