search_path
Valores (padrão em negrito)
'$user', public, schema_names
Uma lista separada por vírgulas de nomes de esquemas existentes. Se '$user' estiver presente, o esquema com o mesmo nome de SESSION_USER
será substituído, ou será ignorado.
Descrição
Especifica a ordem em que os esquemas são pesquisados quando um objeto (como uma tabela ou função) é referenciado por um nome simples sem nenhum componente de esquema:
-
Os caminhos de pesquisa não são compatíveis com esquemas e tabelas externas. As tabelas externas devem ser qualificadas explicitamente por um esquema externo.
-
Quando são criados sem um esquema de destino específico, os objetos são colocados no primeiro esquema listado no caminho de pesquisa. Se o caminho de pesquisa estiver vazio, o sistema retornará um erro.
-
Quando houver objetos com nomes idênticos em esquemas diferentes, aquele encontrado no caminho de pesquisa será usado.
-
Um objeto que não está em nenhum dos esquemas no caminho de pesquisa só pode ser referenciado especificando-se o esquema que o contém com um nome qualificado (com pontos).
-
O esquema de catálogo do sistema, pg_catalog, sempre é pesquisado. Se estiver mencionado no caminho, ele será pesquisado na ordem especificada. Do contrário, ele será pesquisado antes de qualquer item de caminho.
-
Se existir, o esquema de tabela temporária da sessão atual, pg_temp_nnn, sempre será pesquisado. Ele pode ser listado explicitamente no caminho usando-se o alias pg_temp. Se não estiver listado no caminho, ele será pesquisado primeiro (até mesmo antes de pg_catalog). Porém, o esquema temporário somente é pesquisado em busca de nomes de relação (tabelas, exibições). Ele não é pesquisado em busca de nomes de função.
Exemplo
O exemplo a seguir cria o esquema ENTERPRISE e define search_path como o novo esquema.
create schema enterprise; set search_path to enterprise; show search_path; search_path ------------- enterprise (1 row)
O exemplo a seguir adiciona o esquema ENTERPRISE ao search_path padrão.
set search_path to '$user', public, enterprise; show search_path; search_path ----------------------------- "$user", public, enterprise (1 row)
O exemplo a seguir adiciona a tabela FRONTIER ao esquema ENTERPRISE.
create table enterprise.frontier (c1 int);
Quando a tabela PUBLIC.FRONTIER é criada no mesmo banco de dados e o usuário não especifica o nome do esquema em uma consulta, PUBLIC.FRONTIER tem precedência sobre 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)