UDF 이름 지정 - Amazon Redshift

UDF 이름 지정

UDF를 실행하기 전에 명명 규칙을 고려하여 잠재적 충돌이나 뜻밖의 결과를 피할 수 있습니다. 함수 이름은 오버로딩될 수 있기 때문에 이전이나 이후의 Amazon Redshift 함수 이름과 충돌을 일으키기 쉽습니다. 이번 주제에서는 오버로딩에 대해서 설명하면서 충돌을 피할 수 있는 전략을 제시하겠습니다.

함수 이름 오버로드

함수는 이름과 서명으로 구분합니다. 여기에서 서명이란 입력 인수의 수와 데이터 형식을 말합니다. 서명만 다르다면 동일한 스키마의 함수 2개가 이름이 같을 수도 있습니다. 다시 말해서 함수 이름은 중복 정의, 즉 오버로딩이 가능합니다.

쿼리를 실행하면 쿼리 엔진이 입력 인수의 수와 데이터 형식을 기준으로 호출할 함수를 결정합니다. 이때 오버로딩을 사용하면 다수의 인수를 바꿔가며 CREATE FUNCTION 명령에서 허용하는 최대 수까지 함수를 시뮬레이션할 수 있습니다.

UDF 이름 충돌 방지

접두사 f_를 사용하여 모든 UDF의 이름을 지정하는 것이 좋습니다. Amazon Redshift는 UDF에 한해 접두사 f_를 예약하기 때문에 UDF 이름에 접두사 f_,\를 사용하면 UDF 이름이 이전은 물론이고 이후로도 Amazon Redshift 내장 SQL 함수 이름과 충돌을 일으킬 일은 없습니다. 예를 들어 새로운 UDF의 이름을 f_sum으로 지정하면 Amazon Redshift SUM 함수와 충돌이 일어나지 않습니다. 마찬가지로 새로운 함수의 이름을 f_fibonacci로 지정하면 향후 버전에서 FIBONACCI라는 함수가 Amazon Redshift에 추가되더라도 충돌에 대한 걱정을 할 필요 없습니다.

UDF와 내장 함수가 서로 다른 스키마에 속하는 경우에는 함수 이름의 오버로딩 없이도 기존 Amazon Redshift 내장 SQL 함수와 동일한 이름과 서명으로 UDF를 생성할 수 있습니다. 내장 함수는 시스템 카탈로그 스키마인 pg_catalog에 존재하기 때문에 퍼블릭이나 사용자 정의 스키마처럼 다른 스키마의 함수와 동일한 이름으로 UDF를 생성할 수 있습니다. 경우에 따라 스키마 이름으로 명시적으로 규정되지 않은 함수를 호출할 수 있습니다. 이 경우 Amazon Redshift는 기본적으로 pg_catalog 스키마를 먼저 검색합니다. 따라서 기본 제공 함수는 같은 이름의 새 UDF보다 먼저 실행됩니다.

마지막에 pg_catalog를 배치하도록 검색 경로를 설정하여 이 동작을 변경할 수 있습니다. 이렇게 하면 UDF가 기본 제공 함수보다 우선하지만 실행하면 예기치 않은 결과가 발생할 수 있습니다. 따라서 예약된 접두사인 f_를 사용하는 것처럼 고유한 명명 전략을 도입하는 것이 훨씬 안정적입니다. 자세한 내용은 SETsearch_path 섹션을 참조하세요.