错误:匹配 postgis 自定义模式时,函数 postgis_lib_version() 不存在
Posted
技术标签:
【中文标题】错误:匹配 postgis 自定义模式时,函数 postgis_lib_version() 不存在【英文标题】:ERROR: function postgis_lib_version() does not exist when matching a postgis custom schema 【发布时间】:2020-07-28 18:03:14 【问题描述】:我有一个带有在 docker 容器中运行的 PostGIS 数据库的 rails 应用程序。我使用apartment 进行多租户,使用activerecord-postgis-adapter 从ActiveRecord 访问PostGIS 地理空间数据库功能。正如公寓文档所建议的那样,我在shared_extentions
模式中安装了 PostGIS。当我尝试在 geoserver 中配置数据存储时,出现以下错误:
Error creating data store, check the parameters. Error message: Unable to obtain connection: ERROR: function postgis_lib_version() does not exist Hint: No function matches the given name and argument types. You might need to add explicit type casts. Position: 8
Geoserver 数据存储连接参数:
host: app-db
port: 5432
database: app_development
schema: shared_extensions
user:
passwd:
database.yml:
default: &default
adapter: postgis
postgis_schema: shared_extensions
schema_search_path: public, shared_extensions
encoding: unicode
database: app_development
host: app-db
username:
password:
lib/tasks/db_enhancements.rake:
namespace :db do
desc 'Also create shared_extensions Schema'
task :extensions => :environment do
# Create Schema
ActiveRecord::Base.connection.execute 'CREATE SCHEMA IF NOT EXISTS shared_extensions;'
# Enable Hstore
ActiveRecord::Base.connection.execute 'CREATE EXTENSION IF NOT EXISTS HSTORE SCHEMA shared_extensions;'
# Enable Postgis
ActiveRecord::Base.connection.execute 'CREATE EXTENSION IF NOT EXISTS postgis SCHEMA shared_extensions;'
# Enable UUID-OSSP
ActiveRecord::Base.connection.execute 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp" SCHEMA shared_extensions;'
# Grant usage to public
ActiveRecord::Base.connection.execute 'GRANT usage ON SCHEMA shared_extensions to public;'
end
end
我也在 pgAdmin 上使用SELECT shared_extensions.postgis_version()
进行了尝试,效果很好:
2.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
当然,当我运行 SELECT postgis_version()
时,我得到:
ERROR: function postgis_version() does not exist
LÍNEA 1: SELECT postgis_version()
^
SUGERENCIA: No function matches the given name and argument types. You might need to add explicit type casts.
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Character: 8
【问题讨论】:
【参考方案1】:GeoServer 期望 PostGIS 安装在公共架构中,不会将 shared_extensions
添加到它的 postgis 函数中。如果您想这样做,则需要将shared_extensions
添加到搜索路径中,以便 GeoServer 可以找到它需要的功能。
ALTER DATABASE mydb SET 'search_path' = public,shared_extension;
有关如何将 postgis 移动到不同架构的详细信息,请参阅note。
【讨论】:
当我在database.yml
中指定schema_search_path: public, shared_extensions
时不应该设置这个吗?我的意思是,我不想从数据库中配置它,而是从我的 Rails 配置文件中配置它
如果已设置,您将不会看到此错误消息
正如我在描述中指定的那样,schema_search_path: public, shared_extensions
设置在database.yml
中,尽管在我创建数据库时没有应用它,显然这是错误,知道如何修复它?
不知道,但这不是地理服务器问题以上是关于错误:匹配 postgis 自定义模式时,函数 postgis_lib_version() 不存在的主要内容,如果未能解决你的问题,请参考以下文章
postgis将multi和geometrycollection转换成为多行数据,自定义函数
postgis将multi和geometrycollection转换成为多行数据,自定义函数
postgis将multi和geometrycollection转换成为多行数据,自定义函数
postgis将multi和geometrycollection转换成为多行数据,自定义函数