我正在尝试将我在本地开发的数据库上传到我们的开发服务器中。
我在我的机器上安装了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扩展名。
虽然升级开发服务器并在开发服务器中安装PostGIS是一种选择,但我想知道一种不同的方法,在这种方法中,我不需要在服务器上编辑任何东西,同时维护我开发的数据库的功能。
当然,我们也欢迎其他变通方法,我将数据库上传到服务器的唯一目的是减少在需要为我们的团队部署某些东西时必须在项目上进行的重新配置量。
发布于 2012-10-05 12:13:13
向后移植数据库可能是痛苦和困难的。
您可以尝试使用8.4的pg_dump
转储它,但它可能会失败。
您可能希望从--schema-only
转储文本文件中提取表和函数定义,手动将它们加载到旧的DB中,然后执行pg_dump --data-only
并进行恢复以导入数据。
在那之后,如果你打算继续在你的机器上工作,安装PostgreSQL 8.4并使用它进行进一步的开发,这样你就不会引入更多的不兼容性,所以很容易移动转储。
在你的位置上,我只会将过时的目标服务器升级到9.1。
发布于 2013-12-13 16:23:03
这是一个旧帖子,但我今天也遇到了同样的问题,有一种更好、更可靠的方法可以将PG 9.1db加载到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;
删除此行或将其注释掉
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
您可以使用sed进行更改
通常,由于应用程序依赖关系,升级8.4服务器是不可能的。
https://stackoverflow.com/questions/12739326
复制相似问题