Postgresql postgis不适用于所有postgres用户

Postgresql postgis不适用于所有postgres用户,postgresql,postgis,qgis,postgresql-9.6,Postgresql,Postgis,Qgis,Postgresql 9.6,在启用Potgis的数据库上创建新用户时,我遇到了一个奇怪的问题,即新用户无法访问postgis扩展,而以前创建的用户可以访问 通过我的用户帐户,我获得以下输出: mydb => SELECT postgis_version(); postgis_version --------------------------------------- 2.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1 (1 row) 对于新用户,我得到以下信息: mydb => S

在启用Potgis的数据库上创建新用户时,我遇到了一个奇怪的问题,即新用户无法访问postgis扩展,而以前创建的用户可以访问

通过我的用户帐户,我获得以下输出:

mydb => SELECT postgis_version();
postgis_version
---------------------------------------
 2.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)
对于新用户,我得到以下信息:

mydb => SELECT postgis_version()
mydb-> ;
ERROR:  function postgis_version() does not exist
LINE 1: SELECT postgis_version()
           ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
QGIS还提示我postgis未激活:

2018-01-23T16:38:13 1   No PostGIS support in the database.
我正在连接到完全相同的数据库。 用户确实可以访问公共架构和几何图形列表


我在这里有点迷茫,因为根据我的信息,Postgis是数据库级别的扩展,应该为所有用户提供。

Postgis扩展必须安装在模式中,该模式也必须位于用户搜索路径中

您可以使用命令检查它的安装位置

select e.extname,n.* 
from pg_extension e, pg_namespace n 
where e.extnamespace = n.oid and e.extname='postgis';
您可以通过发出

show search_path;
如果没有,您可以通过更改用户来永久添加路径

ALTER USER username SET search_path TO "$user", public, postgis_schema;
由于上一个命令仅在下次登录时生效,因此可以通过应用

SET search_path TO "$user", public, postgis_schema;

它是在公共场所安装的吗<代码>从pg_扩展名e、pg_名称空间n中选择e.extname,n.*,其中e.extnamespace=n.oid和e.extname='postgis'在您的搜索路径中是公共的吗<代码>显示搜索路径它是公开安装的:从pg_扩展名e、pg_名称空间n中选择e.extname,n.*,其中e.extnamespace=n.oid和e.extname='postgis';extname | nspname | nspowner | nspacl----------------------------------++---------------------------------------postgis | public | 10 |{postgres=UC/postgres,=UC/postgres}(1行)它是公共安装的,但public确实缺少搜索路径!谢谢@JGH。你成就了我的一天,我对你的答案投了赞成票。