2
일련의 쿼리를 만들 스키마에서 함수를 만듭니다. 마치 함수의 스키마가 검색 경로에서 처음 인 것처럼 모든 쿼리를 작성하기를 원합니다. 함수의 컨텍스트 내에서 검색 경로를 변경할 수는 있지만 함수에서 내 함수가 포함 된 스키마를 배우는 방법을 찾을 수는 없습니다.내 기능과 동일한 스키마의 테이블을 어떻게 참조합니까?
일련의 쿼리를 만들 스키마에서 함수를 만듭니다. 마치 함수의 스키마가 검색 경로에서 처음 인 것처럼 모든 쿼리를 작성하기를 원합니다. 함수의 컨텍스트 내에서 검색 경로를 변경할 수는 있지만 함수에서 내 함수가 포함 된 스키마를 배우는 방법을 찾을 수는 없습니다.내 기능과 동일한 스키마의 테이블을 어떻게 참조합니까?
당신은 get diagnostics
의 pg_context
반환 값 구문 분석을 시도 할 수 있습니다 :
create or replace function test_schema.test_function_2()
returns text language sql as $$
select nspname::text
from pg_namespace n
join pg_proc p on n.oid = pronamespace
where proname = 'test_function_2'
$$;
select test_schema.test_function_2() as schema_name;
schema_name
-------------
test_schema
(1 row)
내가 돈 ': 함수 이름을 사용하면 시스템 카탈로그
pg_namespace
를 쿼리 스키마 이름을 얻을 수있는 유일한 경우을 첫 번째 해결책을 사랑하지 마십시오. 그것은 매우 많은 해킹 인 것으로 보이는데, 이것은 단지 포스트그레스가하도록 설계된 것이 아니라는 것을 암시합니다. 두 번째는 훨씬 깔끔하지만 도움이되지 않습니다. 중복 된 이름을 처리하기 위해 스키마를 처음 사용하고 있습니다. 그 때마다 스키마 이름을 텍스트 매개 변수로 추가 할 것입니다. –
여러 스키마에서 같은 이름을 가진 서로 다른 함수가 반 패턴이므로 장래에 이상한 문제가 발생할 수 있습니다. – klin
이것은 부당하게 모호하게 보입니다. 비슷한 이름의 함수를 사용하고 있는데, 그 이유는 각 스키마에서 동일한 목적을 수행하지만 동일한 내용을 가지고 있지 않기 때문입니다. 예를 들어, 각 스키마에는 동일한 데이터 형식에 대해 작동하는 집계 함수가 있지만 스키마에서 스키마로 가중치 집계가 어떻게 변경 될 수 있습니다. '이상한 문제'에 대한 정보가 없으면, 어떻게 그런 일을 더 잘 수행 할 수 있을까요? –