【问题标题】:POSTGRESQL 9.1 backup and restore to 8.4POSTGRESQL 9.1 备份和恢复到 8.4
【发布时间】:2012-10-05 04:07:46
【问题描述】:

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

我在我的机器上安装了 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...

一项快速研究告诉我,“EXTENSION”在 9.1 之前不存在。

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

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

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

【问题讨论】:

    标签: postgresql backup restore backwards-compatibility


    【解决方案1】:

    这是一篇旧帖子,但我今天遇到了同样的问题,并且有一种更好更可靠的方法可以将 PG 9.1 数据库加载到 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 服务器。

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

      • 克雷格所说的一切,但首先在本地安装 8.4 并在那里完成所有操作 - 你可以运行多个 PG 副本,只要每个副本都在自己的端口上。您几乎可以肯定也在运行不同版本的 PostGIS,因此这是一个简单过程的可能性非常小。版本号意味着什么,您需要在开始项目之前阅读,而不是在项目完成之后。
      猜你喜欢
      • 2013-12-27
      • 1970-01-01
      • 2017-02-14
      • 2010-10-05
      • 1970-01-01
      • 2014-09-03
      • 2020-10-10
      • 2017-10-10
      • 1970-01-01
      相关资源
      最近更新 更多