PostgreSQL中search_path的设置

Posted 瀚高PG实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL中search_path的设置相关的知识,希望对你有一定的参考价值。

作者:瀚高PG实验室 (Highgo PG Lab)

PostgreSQL中有一个环境变量search_path,它是一个模式列表。search_path路径中的第一个模式被称为current schema。

图1 查看当前search_path

从图1的结果看出,PostgreSQL会首先在和当前用户的用户名相同的模式中查询,如果相关数据不在此模式中,则会继续在路径中的下一个模式中查询(上图中为public),以此类推。

我们考虑这样两种情况:

1、如果存在匹配的项,例如表名。但是该表所在的模式并不在search_path中,那么会产生错误。

图2  情景1

如图2所示,我们创建了模式myschema1,在该模式中创建了表tmptst并将数据插入该表。但在我们想要查询表tmptst时却发生了错误,这是因为myschema1模式不在search_path路径下。

图3 添加新的模式到search_path

在图3中,将myschema1模式加入search_path后,再次查询时就可看到之前插入的数据结果。

2、当我们创建一个新模式,而且没有将它添加到search_path中,但是该模式和登录数据库时的用户名相同时的情况。

我们使用用户名myuser2登录数据库,然后创建一个表sp,插入数据,并查询表sp中t这一列的值。因为创建表时未指定模式,所以该表将会在默认的模式下被创建,即public。图4展示了相关结果。

t

图4 情景2

然后创建一个和用户名相同的模式,在该模式下创建一张表。

图5 创建模式和表

向该表中插入数据,并检查myuser2.sp表中的数据。然后如果我们从表sp中查询数据,会有一个问题:

查询结果和图4所示的不同。

图6 结果差异

因为此时PostgreSQL根据search_path,先搜寻和登录数据库时的用户名相同(即我们创建的模式myuser2)的模式,所以返回的是myuser2.sp的信息。

以上是关于PostgreSQL中search_path的设置的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 在不设置 search_path 的情况下以不同的模式显示所有表

postgresql中的search_path

postgresql中的search_path

postgresql查看数据库怎么查看指定的模式 数据表

PGSQL search_path

PGSQL search_path