PostGIS仅适用于root用户

时间:2015-06-17 18:21:21

标签: postgresql postgis postgresql-9.3

我有一个数据库,我正在尝试使用PostGis。 我跑的时候:

$ psql -h localhost -d $APP_DB_NAME -U $APP_DB_USER
# SELECT PostGIS_version();

我收到以下错误:

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.

但是当我以root身份进入数据库时​​:

$ sudo su postgres -c psql $APP_DB_NAME
# SELECT PostGIS_version();

运行良好:

            postgis_version
---------------------------------------
 2.1 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)

我正在以root用户身份安装PostGis扩展程序,因为我的用户没有超级用户访问权限。

$ su - postgres -c psql $APP_DB_NAME
# CREATE EXTENSION postgis;

1 个答案:

答案 0 :(得分:0)

我的猜测是安装postgis的架构的所有者不是您登录的用户,而是“root”用户(即postgres)。

$ psql postgres
postgres=# \dn
    List of schemas
    Name        |  Owner
--------------------+----------
public             | postgres
pg_catalog         | postgres
my_data            | someuser

当作为postgres连接时,postgis将在这种情况下工作,但如果你像任何其他用户一样连接,它将失败,并说它不在那里,即使你试图create extension postgis它会说它已安装已经。

要更正此问题,请确保所有模式都由您实际连接的用户拥有:

ALTER SCHEMA public OWNER TO my_user;