当我尝试运行以下命令时:
SELECT ST_AsGeoJSON(the_geom)
我收到以下错误消息:
HINT: Could not choose a best candidate function. You might need to add explicit type casts.
在我备份了我的数据库后,我收到了此错误消息,然后在本地托管的新数据库上将其恢复。 有关如何解决这个问题的任何建议?我浏览了网页,发现可能的解决方案是运行" postgis_upgrade_20_minor.sql文件"。 (https://groups.google.com/forum/#!topic/postgis-users/qrk4FD-k5H8) 但我不知道那是什么以及我在哪里可以找到这个文件(因为我对SQL和PostGIS来说很新)。
答案 0 :(得分:4)
问题是由于恢复,你现在有一个名为“ST_AsGeoJSON”的模糊函数。您可以运行以下查询来检查:
select * from pg_proc where proname = 'st_asgeojson'
在全新安装中,应该返回五行。打赌你得到更多...
解决方案确实是运行“postgis_upgrade_20_minor.sql”文件。这是一个包含SQL命令列表的文件,它清除了错误的st_asGeoJSON函数之类的内容。在Windows上,它位于postgresql安装下的“share / contrib / postgis- [version]”目录中。在我的情况下,完整路径是“C:\ Program Files \ PostgreSQL \ 9.3 \ share \ contrib \ postgis-2.1 \ postgis_upgrade_21_minor.sql” - 您的路径可能会有所不同,具体取决于您的操作系统和Postgresql和Postgis版本运行
如果您正在使用PGAdmin,则可以连接到数据库并打开SQL窗口。打开那个sql文件,你可以运行整个文件,或滚动到底部,突出显示“DROP FUNCTION IF EXISTS ST_AsGeoJson”的命令,然后运行它们。
再次执行“select * from pg_proc where proname ='st_asgeojson'”,看它是否有所不同。
祝你好运![编辑]以下是删除函数的SQL命令,如果您很难找到它,则从.sql文件复制。
DROP FUNCTION IF EXISTS ST_AsGeoJson(geometry); -- this one changed to use default args
DROP FUNCTION IF EXISTS ST_AsGeoJson(geography); -- this one changed to use default args
DROP FUNCTION IF EXISTS ST_AsGeoJson(geometry,int4); -- this one changed to use default args
DROP FUNCTION IF EXISTS ST_AsGeoJson(geography,int4); -- this one changed to use default args
DROP FUNCTION IF EXISTS ST_AsGeoJson(int4,geometry); -- this one changed to use default args
DROP FUNCTION IF EXISTS ST_AsGeoJson(int4,geography); -- this one changed to use default args
DROP FUNCTION IF EXISTS ST_AsGeoJson(int4,geometry,int4); -- this one changed to use default args
DROP FUNCTION IF EXISTS ST_AsGeoJson(int4,geography,int4); -- this one changed to use default args