使用 Postgis 对象迁移旧 PostgreSQL 数据库时出错

Errors in Migration of an old PostgreSQL Database with Postgis Objects

我们有一个非常旧的 Linux 系统 运行 PostgreSQL 8.3。该系统包含一个具有 Postgis 功能的数据库,但是,从 pgAdmin III 界面来看,似乎没有启用 'Extensions'。那台服务器机器即将过时,我们想转移到另一台 Postgres 服务器。

目前我们有一个 Windows 服务器 Postgres 9.3。我已经能够创建一个自定义的 .backup 文件,并且能够使用每个方法导入大部分表和数据:http://trac.osgeo.org/postgis/wiki/UsersWikiWinUpgrade 但我的 error.txt 文件说:

function makepoint(double precision, double precision) does not exist

我认为此函数是 liblwgeom.dll 的一部分,但我无法在任何地方找到该 DLL 文件!我已经从 http://download.osgeo.org/postgis/windows/ 下载了大部分 zip,但没有成功。

原始数据库确实具有如下所示的 'makepoint' 函数,但由于缺少 DLL,它无法在目标 Windows 系统上运行。

我有哪些选择?

也许需要一种不同的方法。请注意,根据 http://www.postgis.org/documentation/manual-svn/postgis_installation.html#hard_upgrade,我也尝试过 'Hard Upgrade' 在 Linux 环境中使用 .backup 文件,但出现了一些错误,如 'invalid header',大概是由于 pg 恢复工具太新;在 Linux 中,我的进步远低于 Windows 中的进度。

CREATE OR REPLACE FUNCTION makepoint(double precision, double precision)
RETURNS geometry AS '$libdir/liblwgeom', 'LWGEOM_makepoint'
LANGUAGE c IMMUTABLE STRICT COST 1; ALTER FUNCTION makepoint(double   precision, double precision)  OWNER TO postgres;

编辑这是一个Windows系统所以建议MacOS无效。不过还是谢谢了。

在 PostGIS 1.2.3 中,函数被重命名为 ST_ 前缀,因此 makepoint(float8, float8) 的现代名称是 st_makepoint(float8, float8)

您可以将使用它们的函数重命名为现代命名方案,尽管如果您有各种函数、触发器函数等,这可能很难做到。

您还可以 运行 安装 PostGIS 时附带的 legacy.sql 启用脚本,它将重新启用旧功能,例如 makepoint(float8, float8) 和许多其他功能。