본문으로 건너뛰기

search_path

버전기본값context타입
14userstring
15userstring
16userstring
17userstring
18userstring
19userstring

schema를 지정하지 않은 단순 이름으로 객체를 참조할 때 어떤 schema를 어떤 순서로 탐색할지 정한다.

테이블·데이터 타입·함수 등을 schema 없이 이름만으로 참조하면 이 목록의 순서대로 schema를 탐색해 처음 발견되는 객체를 사용한다. 값은 쉼표로 구분한 schema 이름 목록이며, 존재하지 않는 schema나 USAGE 권한이 없는 schema는 조용히 무시된다. 기본값은 "$user", public이다 — $userCURRENT_USER와 같은 이름의 schema가 있고 권한이 있으면 그 schema로 치환되고, 없으면 무시된다. 객체를 생성할 때 target schema를 지정하지 않으면 search path에서 첫 번째로 유효한 schema에 만들어지며, search path가 비어 있으면 에러가 난다.

명시하지 않아도 항상 탐색되는 schema가 있다. 시스템 카탈로그 schema인 pg_catalog는 경로에 없으면 다른 항목보다 먼저 탐색되고, 경로에 적으면 그 위치의 순서를 따른다. 현재 세션의 임시 테이블 schema(pg_temp)도 존재하면 항상 — 명시하지 않으면 pg_catalog보다도 먼저 — 탐색되는데, relation과 데이터 타입 이름에만 해당하고 함수·연산자 이름은 임시 schema에서 찾지 않는다. 실제로 적용되고 있는 검색 경로는 current_schemas() 함수로 확인할 수 있다.

기본 구성은 데이터베이스 사용자가 하나이거나 서로 신뢰하는 소수일 때에만 적합하다.

운영 노트: search path는 보안과 직결된다. SECURITY DEFINER 함수는 반드시 SET search_path로 경로를 고정해야 한다 — 고정하지 않으면 호출자가 자기 schema에 같은 이름의 객체를 만들어 함수 소유자의 권한으로 실행시키는 권한 상승 통로가 된다. 애플리케이션에서는 ALTER ROLE ... SET search_pathALTER DATABASE ... SET으로 role·데이터베이스 단위 경로를 걸어 두면 접속마다 일관된 환경을 보장할 수 있다.

출처: PostgreSQL 18 문서