search_path - Amazon Redshift

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)