ALTER AGGREGATE — 집계 함수 정의 변경하기
ALTER AGGREGATE — 집계 함수 정의 변경하기
ALTER AGGREGATE는 이미 존재하는 집계 함수의 정의를 바꾸는 명령이에요. 이름을 바꾸거나, 소유자를 바꾸거나, 스키마를 옮길 때 쓰죠. 집계 함수의 로직 자체를 고치는 건 CREATE OR REPLACE AGGREGATE 같은 별도 방법을 통해서 해요.
출처: PostgreSQL 문서
본문
시놉시스 (Synopsis)
ALTER AGGREGATE name ( aggregate_signature ) RENAME TO new_name
ALTER AGGREGATE name ( aggregate_signature )
OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER AGGREGATE name ( aggregate_signature ) SET SCHEMA new_schema
where aggregate_signature is:
* |
[ argmode ] [ argname ] argtype [ , ... ] |
[ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]
설명 (Description)
ALTER AGGREGATE는 집계 함수의 정의를 변경해요. ALTER AGGREGATE를 쓰려면 집계 함수의 소유자여야 해요. 집계 함수의 스키마를 바꾸려면 새 스키마에 대한 CREATE 권한도 있어야 하고, 소유자를 바꾸려면 새 소유 역할로 SET ROLE할 수 있어야 하며 그 역할이 집계 함수의 스키마에 CREATE 권한을 가져야 해요. (이런 제약은 소유자를 바꾸는 게 집계 함수를 드롭하고 다시 만드는 것 이상의 일을 하지 못하게 막아 주는 거예요. 다만 슈퍼유저는 어떤 집계 함수든 소유권을 바꿀 수 있어요.)
매개변수 (Parameters)
name— 기존 집계 함수의 이름(선택적으로 스키마 한정)이에요.argmode— 인자의 모드로IN또는VARIADIC이에요. 생략하면 기본값은IN이에요.argname— 인자의 이름이에요.ALTER AGGREGATE는 집계 함수의 정체성을 결정할 때 인자 데이터 타입만 필요하므로 인자 이름에는 실제로 신경 쓰지 않아요.argtype— 집계 함수가 동작하는 입력 데이터 타입이에요. 인자가 없는 집계 함수를 참조하려면 인자 명세 목록 자리에*를 쓰세요. ordered-set 집계 함수를 참조하려면 직접(direct) 인자 명세와 집계(aggregated) 인자 명세 사이에ORDER BY를 쓰세요.new_name— 집계 함수의 새 이름이에요.new_owner— 집계 함수의 새 소유자예요.new_schema— 집계 함수의 새 스키마예요.
참고 (Notes)
ordered-set 집계를 참조할 때 권장하는 문법은 CREATE AGGREGATE와 같은 방식으로 직접 인자 명세와 집계 인자 명세 사이에 ORDER BY를 쓰는 거예요. 다만 ORDER BY를 생략하고 두 인자 명세를 하나의 목록으로 이어 붙여도 동작해요. 이 축약 형태에서 직접 인자 목록과 집계 인자 목록 양쪽에 VARIADIC "any"를 썼다면 VARIADIC "any"는 한 번만 쓰세요.
예제 (Examples)
integer 타입에 대한 집계 함수 myavg를 my_average로 이름을 바꾸려면:
ALTER AGGREGATE myavg(integer) RENAME TO my_average;
integer 타입에 대한 집계 함수 myavg의 소유자를 joe로 바꾸려면:
ALTER AGGREGATE myavg(integer) OWNER TO joe;
직접 인자가 float8 타입이고 집계 인자가 integer 타입인 ordered-set 집계 mypercentile을 스키마 myschema로 옮기려면:
ALTER AGGREGATE mypercentile(float8 ORDER BY integer) SET SCHEMA myschema;
이렇게 써도 동작해요:
ALTER AGGREGATE mypercentile(float8, integer) SET SCHEMA myschema;
호환성 (Compatibility)
SQL 표준에는 ALTER AGGREGATE 문이 없어요.
더 알아보기 (Learn more)
- CREATE AGGREGATE — 새 집계 함수를 만드는 명령이에요.
- DROP AGGREGATE — 집계 함수를 삭제하는 명령이에요.
- CREATE FUNCTION — 함수와 프로시저를 만드는 명령이에요.