search_path - Amazon Redshift

search_path

값(기본값은 굵은 글꼴로 표시)

'$ user', 공개, schema_names

기존 스키마 이름이 쉼표로 구분된 목록입니다. '$ user'가 있으면 SESSION_USER 과 같은 이름을 가진 스키마가 대체되고, 그렇지 않으면 무시됩니다.

설명

스키마 구성요소가 없는 단순 이름으로 객체(테이블, 함수 등)를 참조할 때 스키마의 검색 순서를 지정합니다.

  • 외부 스키마 및 테이블에서는 검색 경로가 지원되지 않습니다. 외부 테이블은 명시적으로 외부 스키마로 정규화해야 합니다.

  • 특정 대상 스키마 없이 생성된 객체는 검색 경로에서 첫 번째 스키마 자리에 위치합니다. 검색 경로가 비어 있으면 시스템이 오류를 반환합니다.

  • 다른 스키마에 동일한 이름의 객체가 존재할 경우 검색 경로에서 먼저 발견되는 객체가 사용됩니다.

  • 검색 경로에서 어떤 스키마에도 존재하지 않는 객체는 정규화(점으로 구분된) 이름으로 자신이 속하는 스키마를 지정해야만 참조할 수 있습니다.

  • 시스템 카탈로그 스키마인 pg_catalog는 항상 검색됩니다. 이 스키마가 경로에 언급되면 지정된 순서에 따라 검색됩니다. 그렇지 않으면 모든 경로 항목 이전에 검색됩니다.

  • 현재 세션의 임시 테이블 스키마인 pg_temp_nnn은 존재하는 경우에 한해 항상 검색됩니다. 별칭인 pg_temp를 사용하여 경로에 명시적으로 나열할 수도 있습니다. 경로에 나열되지 않으면 pg_catalog까지도 앞서서 가장 먼저 검색됩니다. 다만 임시 스키마에서는 릴레이션 이름(테이블, 뷰)만 검색됩니다. 함수 이름은 검색되지 않습니다.

다음은 ENTERPRISE 스키마를 생성한 후 search_path를 새로운 스키마로 설정하는 예입니다.

create schema enterprise; set search_path to enterprise; show search_path; search_path ------------- enterprise (1 row)

다음은 ENTERPRISE 스키마를 기본 search_path에 추가하는 예입니다.

set search_path to '$user', public, enterprise; show search_path; search_path ----------------------------- "$user", public, enterprise (1 row)

다음은 FRONTIER 테이블을 ENTERPRISE 스키마에 추가하는 예입니다.

create table enterprise.frontier (c1 int);

이때 PUBLIC.FRONTIER 테이블을 동일한 데이터베이스에 생성한 후에 사용자가 쿼리에서 스키마 이름을 지정하지 않으면 PUBLIC.FRONTIER가 ENTERPRISE.FRONTIER보다 우선합니다.

create table public.frontier(c1 int); insert into enterprise.frontier values(1); select * from frontier; frontier ---- (0 rows) select * from enterprise.frontier; c1 ---- 1 (1 row)