PostgreSQL 模式和 search_path

Dan*_*dio 8 schema postgresql

我正在阅读 Oreilly 的PostgreSQL: Up and Running,并且在使用模式组织数据库部分中,它说search_path可以在数据库级别设置:

例如,如果我们希望 contrib 中的所有对象都可以在没有模式限定的情况下访问,我们将更改我们的数据库,如下所示:

ALTER DATABASE mydb SET search_path="$user",public,contrib;

但是,在键入上面的命令后,我仍然无法在public不限定它们的情况下引用其他模式中的表:

ALTER DATABASE auth SET search_path="$user",public,staging;`
\d users
Run Code Online (Sandbox Code Playgroud)

给出:

Did not find any relation named "users".
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用\d staging.users,它会起作用。

SHOW search_path;
Run Code Online (Sandbox Code Playgroud)

给出:

   search_path   
----------------
 "$user",public
Run Code Online (Sandbox Code Playgroud)

是否默认search_pathpostgresql.conf覆盖每个数据库的设置值与ALTER DATABASE ... SET search_path?如果是这样,每个数据库的值有什么用?

gra*_*emp 5

文档部分SET相关段落的引用是“每当随后在该数据库中启动新会话时,指定的值将成为会话默认值”。因此,更改仅对新会话生效。你只需要重新连接。ALTER DATABASE