将postgres 8.4迁移到9.1并将我的项目移动到新服务器我收到此错误
错误:函数makepoint(未知,未知)不存在第4行:distance_sphere(makepoint('14 .2995419','41.0310868'),mak ... ^提示:没有函数匹配给定的名称和参数类型。需要添加显式类型转换。
谷歌搜索我看到这可能是postgis的一个问题... 然后我按照本指南 http://trac.osgeo.org/postgis/wiki/UsersWikiPostGIS20Ubuntu1204src我在服务器上安装了所有内容......
什么都行不通......我有成为疯子的危险...... 有谁知道如何解决它??
答案 0 :(得分:2)
如前所述,这些函数以前称为“makepoint”和“distance_sphere”,但稍后使用“ST_”前缀重命名(ST =“space type”)。
一个非常简单的解决方案是使用以下内容将legacy.sql
函数添加到template_postgis
(如果使用)或目标数据库中:
sudo -u postgres psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-2.0/legacy.sql
答案 1 :(得分:1)
从错误中看,你似乎用引号括起你的分数,因此抱怨未知,未知。 ST_Makepoint将期望两个双精度数作为输入。您还应该使用ST_作为所有空间函数的前缀,如注释中所述。
如果从psql提示符运行以下命令:
\df ST_MakePoint
您将看到支持的3个版本,包括2,3和4个维度,所有版本都需要双倍。
例如:
select st_distance_sphere(st_makepoint(14.2995419,41.0310868), st_makepoint(15.2995419,40.0310868)) as dist;
返回139665.10米
对于值得的东西,ST_被认为是标准的。 Oracle在其所有空间函数之前使用ST_,Postgres / Postgis也是如此,MySQL支持ST_和直接函数名称,Microsoft决定在SQL Server 2008中实现空间sql时完全删除下划线,因此您可以使用STUnion。