Definir permanentemente o caminho do esquema do Postgresql

135

Eu preciso definir o caminho do esquema no Postgres para não especificar sempre a tabela de pontos do esquema, por exemplo schema2.table. Defina o caminho do esquema:

SET SCHEMA PATH a,b,c

parece funcionar apenas para uma sessão de consulta no mac, depois de fechar a janela de consulta, a variável de caminho volta ao padrão.

Como posso torná-lo permanente?

Nakh
fonte
Eu acho que é SET search_path TO a, b, c; como a resposta diz e não SET SCHEMA PATH a, b, c;
Armando

Respostas:

168

(E se você não tiver acesso de administrador ao servidor)

ALTER ROLE <your_login_role> SET search_path TO a,b,c;

Duas coisas importantes a saber sobre:

  1. Quando um nome de esquema não é simples, ele precisa ser colocado entre aspas duplas.
  2. A ordem na qual você define os esquemas padrão é a, b, cimportante, pois também é a ordem na qual os esquemas serão consultados para as tabelas. Portanto, se você tiver o mesmo nome de tabela em mais de um esquema entre os padrões, não haverá ambiguidade, o servidor sempre usará a tabela do primeiro esquema especificado para o seu search_path.
Milen A. Radev
fonte
19
Também é importante notar que NÃO deve usar citações explicitamente em torno da enumeração a, b, c. Mão-na-testa nos últimos 15 minutos ...
Jmoney38 5/16
4
@ Jmoney38 Não use aspas simples, mas aspas duplas são necessárias para nomes de esquema não simples.
vitaly-t
136

Você pode definir o padrão search_pathno nível do banco de dados:

ALTER DATABASE <database_name> SET search_path TO schema1,schema2;

Ou no nível do usuário ou função:

ALTER ROLE <role_name> SET search_path TO schema1,schema2;

Ou, se você tiver um esquema padrão comum em todos os seus bancos de dados, poderá definir o padrão de todo o sistema no arquivo de configuração com a opção search_path .

Quando um banco de dados é criado, ele é criado por padrão a partir de um banco de dados "modelo" oculto chamado modelo1 , você pode alterar esse banco de dados para especificar um novo caminho de pesquisa padrão para todos os bancos de dados criados no futuro. Você também pode criar outro banco de dados de modelos e usá-lo CREATE DATABASE <database_name> TEMPLATE <template_name>para criar seus bancos de dados.

joshperry
fonte
9
para aqueles que querem saber a partir da linha de comando psql você pode listar os esquemas por \ dn
BKSpurgeon
3
É necessário desconectar a sessão e conectar-se novamente para que as configurações entrem em vigor.
Isapir
oh te abençoe. veio para PG do SQL Server para que tudo isto é novo (e estranho) para mim
Nate Anderson
24

Josh está correto, mas deixou de fora uma variação:

ALTER ROLE <role_name> IN DATABASE <db_name> SET search_path TO schema1,schema2;

Defina o caminho de pesquisa para o usuário, em um banco de dados específico.

Chris Johnson
fonte
muito útil também. Obrigado
Alejandro Teixeira Muñoz