이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 36.6. 토토 커뮤니티 과부하버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

13.5. 함수 오버로딩

하나 이상의 함수가 동일한 이름으로 정의될 수 있으므로 그들이 취하는 주장이 다른 한. 즉, 함수 이름은 다음과 같습니다.과부하됨. 에이 함수는 속성과 동일한 이름을 가질 수도 있습니다. 이 경우 복합 유형의 함수 사이에 모호함이 있음 복합 유형의 속성인 경우 속성은 항상 사용할 수 있습니다.

13.5.1. 이름 공간 충돌

현재포스트그레스7.0, SQL에 대한 AS 절의 대체 형식함수 생성명령은 SQL을 분리합니다 C 소스 코드의 함수 이름에서 가져온 함수 이름입니다. 이 이제 기능을 수행하는 데 선호되는 기술입니다. 과부하.

13.5.1.1. 7.0 이전

C로 작성된 함수의 경우 선언된 SQL 이름함수 생성정확히 다음과 같아야 합니다. C 코드에 있는 함수의 실제 이름과 동일합니다(따라서 유효한 C 함수 이름이어야 합니다.)

이 제한에는 미묘한 의미가 있습니다: 대부분의 운영 체제에서 동적 로딩 루틴은 다음과 같습니다. 공유된 콘텐츠를 원하는 만큼 로드할 수 있게 되어 매우 기쁩니다. 충돌하는(동일한 이름의) 라이브러리가 포함된 라이브러리 함수 이름은 실제로 로드를 망칠 수 있습니다. 흥미로운 방법. 예를 들어, 동적으로 로드되는 함수 DEC OSF/1 동적 Postgres에 내장된 함수로 이름을 지정합니다. 로더는 Postgres가 자체 내에서 함수를 호출하도록 합니다. Postgres가 함수를 호출하도록 허용하는 대신. 따라서, 당신의 기능을 다른 용도로 사용하고 싶다면 아키텍처에서는 C를 오버로드하지 않는 것이 좋습니다. 함수 이름.

문제를 해결하는 영리한 방법이 있습니다. 설명했습니다. SQL을 오버로딩하는데 문제가 없기 때문에 함수를 사용하여 C 함수 집합을 정의할 수 있습니다. 이름을 지정한 다음 동일한 이름의 SQL 함수 세트를 정의합니다. 적절한 인수 유형을 취하고 호출하는 래퍼 일치하는 C 함수.

또 다른 해결책은 동적 로딩을 사용하는 것이 아니라 함수를 백엔드에 정적으로 연결하고 선언하세요. 내부 기능으로 사용됩니다. 그러면 함수에는 모두 다음이 있어야 합니다. 서로 다른 C 이름이지만 동일한 SQL로 선언할 수 있습니다. 이름(물론 인수 유형이 다른 한). 이 방법은 SQL 래퍼 함수의 오버헤드를 방지합니다. 사용자 정의 백엔드를 준비하는 데 더 많은 노력이 필요합니다. 실행 가능. (이 옵션은 버전 6.5에서만 사용할 수 있으며 나중에 이전 버전에서는 내부 기능이 필요했기 때문에 C 코드와 SQL의 이름이 동일합니다.)