函数makepoint postgresql 9.1错误postgis

时间:2014-06-05 13:41:46

标签: postgresql ubuntu ubuntu-12.04 postgresql-9.1 postgis

将postgres 8.4迁移到9.1并将我的项目移动到新服务器我收到此错误

  

错误:函数makepoint(未知,未知)不存在第4行:distance_sphere(makepoint('14 .2995419','41.0310868'),mak ... ^提示:没有函数匹配给定的名称和参数类型。需要添加显式类型转换。

谷歌搜索我看到这可能是postgis的一个问题... 然后我按照本指南 http://trac.osgeo.org/postgis/wiki/UsersWikiPostGIS20Ubuntu1204src我在服务器上安装了所有内容......

什么都行不通......我有成为疯子的危险...... 有谁知道如何解决它??

2 个答案:

答案 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。