4

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

我在我的机器上安装了 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 是一种选择,但我想知道一条不同的路线,其中我不需要在服务器上编辑任何内容,同时维护我开发的数据库的功能。

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

4

2 回答 2

7

这是一篇旧帖子,但我今天遇到了同样的问题,并且有一种更好更可靠的方法可以将 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;

删除此行或将其注释掉

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';

您可以使用 sed 进行更改

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

于 2013-12-13T08:23:02.817 回答
3

向后移植数据库可能是痛苦和困难的。

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

您可能希望从--schema-only转储文本文件中提取表和函数定义,手动将它们加载到旧数据库中,然后执行pg_dump --data-only并恢复以导入数据。

在那之后,如果您还要继续在您的机器上工作,请安装 PostgreSQL 8.4 并将其用于进一步的开发,这样您就不会引入更多的不兼容性,因此很容易移动转储。

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

于 2012-10-05T04:13:12.687 回答