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 타입에 대한 집계 함수 myavgmy_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)