POSTGRESQL 9.1备份和恢复到8.4

POSTGRESQL 9.1备份和恢复到8.4,postgresql,backup,restore,backwards-compatibility,Postgresql,Backup,Restore,Backwards Compatibility,我正在尝试将我在本地开发的数据库上传到我们的开发服务器 我在我的机器上安装了PostgreSQL 9.1,开发服务器使用8.4 当尝试使用9.1创建的转储文件将数据库还原到8.4时,我遇到错误: pg_restore: [archiver (db)] could not execute query: ERROR: syntax error at or near "EXTENSION" LINE 1: CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCH

我正在尝试将我在本地开发的数据库上传到我们的开发服务器

我在我的机器上安装了PostgreSQL 9.1,开发服务器使用8.4

当尝试使用9.1创建的转储文件将数据库还原到8.4时,我遇到错误:

pg_restore: [archiver (db)] could not execute query: ERROR:  syntax error at or near "EXTENSION"
LINE 1: CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalo...
一个快速的研究告诉我,“扩展”在9.1之前是不存在的

我不确定我是否应该在pg_dump中寻找一个忽略“扩展”的选项,因为我试图上传的数据库大部分数据都依赖于PostGIS扩展

虽然升级开发服务器并在dev服务器中安装PostGIS是一种选择,但我想知道另一种方法,即在维护我开发的数据库功能的同时,不需要在服务器上编辑任何内容


当然,也欢迎其他解决方法,我将数据库上传到服务器的唯一目的是减少在需要为团队部署某些东西时,我必须对项目进行的重新配置量。

备份数据库可能会很痛苦和困难

您可以尝试使用8.4的
pg_dump
转储它,但它可能会失败

您可能希望从
--仅模式
转储文本文件中提取表和函数定义,手动将它们加载到旧的DB中,然后执行
pg_dump--仅数据
并将其还原以导入数据

之后,如果您也要继续在您的计算机上工作,请安装PostgreSQL 8.4并将其用于进一步的开发,这样您就不会引入更多的不兼容,从而可以轻松地移动转储


在你的位置上,我只是将过时的目标服务器升级到9.1。

这是一篇旧文章,但我今天遇到了同样的问题,有一种更好更可靠的方法将PG 9.1 db加载到PG 8.4服务器中。Craig提出的方法将在目标机器上失败,因为不会创建PLPGSQL语言

pg_dump -Upostgres -hlocalhost > 9.1.db
更换这条线

CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
CREATE LANGUAGE plpgsql;
用这条线

CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
CREATE LANGUAGE plpgsql;
删除此行或将其注释掉

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
您可以使用sed进行更改


通常情况下,由于应用程序的依赖性,无法升级8.4服务器。

Craig所说的一切,但首先在本地安装8.4,然后在本地完成所有操作-您可以运行多个PG副本,只要每个副本位于各自的端口上。几乎可以肯定,您也在运行不同版本的PostGIS,因此这是一个简单过程的可能性非常小。版本号意味着一些东西,你需要在开始一个项目之前阅读,而不是在项目完成之后。