Estou lendo o PostgreSQL: Up and Running da Oreilly , e na seção Organizando seu banco de dados usando esquemas , ele diz que search_path
pode ser definido no nível do banco de dados:
Por exemplo, se quiséssemos que todos os objetos em contrib fossem acessíveis sem qualificação de esquema, alteraríamos nosso banco de dados da seguinte maneira:
ALTER DATABASE mydb SET search_path="$user",public,contrib;
No entanto, depois de digitar o comando acima, ainda não consigo me referir a tabelas em esquemas que public
não sejam qualificá-los:
ALTER DATABASE auth SET search_path="$user",public,staging;`
\d users
Dá:
Did not find any relation named "users".
Mas se eu usar \d staging.users
, funciona.
SHOW search_path;
Dá:
search_path
----------------
"$user",public
O padrão substitui o valor por banco de dados definido search_path
com ? Se for esse o caso, qual é a utilidade do valor por banco de dados?postgresql.conf
ALTER DATABASE ... SET search_path
A citação do
SET
parágrafo relacionado daALTER DATABASE
seção de documentação é "Sempre que uma nova sessão é subsequentemente iniciada nesse banco de dados, o valor especificado torna-se o valor padrão da sessão". Portanto, as alterações terão efeito apenas para novas sessões. Você só precisa se reconectar.