我有一个数据库,我正在尝试使用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;
答案 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;