从Postgres 7.4升级到9.4.1

时间:2017-02-05 15:22:17

标签: postgresql psql pg-dump

我正在将Postgres从古老的7.4升级到9.4.1并看到一些错误。

在旧机器上,我做了:

pg_dumpall | gzip > db_pg_bu.gz

在新机器上,我做了:

 gunzip -c db_pg_bu.gz | psql

恢复时我遇到了一些我不理解的错误,并且不知道它的重要性。我不是DBA,只是一个卑微的开发人员,所以如果有人能帮助我理解我需要做什么才能完成迁移,我将不胜感激。

以下是错误:

 ERROR:  cannot delete from view "pg_shadow"
 DETAIL:  Views that do not select from a single table or view are not automatically updatable.
 HINT:  To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule.

我还有大约15个:

 NOTICE:  SYSID can no longer be specified

这一点,虽然这看起来无害,因为我看到默认安装了plpgsql,在版本9.2中说明:

 ERROR:  could not access file "/usr/lib/postgresql/lib/plpgsql.so": No such file or directory
 SET
 NOTICE:  using pg_pltemplate information instead of CREATE LANGUAGE parameters
 ERROR:  language "plpgsql" already exists

一个值得关注的问题是,当它恢复数据库时,对于每个ne,我都会看到类似这样的内容:

 COMMENT
 You are now connected to database "landrush" as user "postgres".
 SET
 ERROR:  could not access file "/usr/lib/postgresql/lib/plpgsql.so": No such file or directory

1 个答案:

答案 0 :(得分:1)

基本上有两种方式。对于缺乏经验的人来说,两者都很难。 (甚至可能是经验丰富的人)

  • 使用一些中间版本(可能必须从源代码编译)进行逐步迁移。在版本之间你必须做一个pg_dump - &gt; pg_restore(或只是问题中的psql < dumpfile)。可能的路径第一跳可以是7.4-> 8.3,但可能需要额外的一跳。
  • 编辑(未压缩的)转储文件:删除(或注释掉)新版本不喜欢的任何内容。这将是一个迭代过程,它假定您的转储适合您的编辑器。 (而且你知道你在做什么)。你可能需要简化,分离模式和数据(选项--schema-only和--data-only,我甚至不知道这些是否在PG-7.4中可用)

BTW:建议使用较新版本的pg_dump(您要导入的版本)。您需要通过-h标志指定源主机。新的(目标)版本知道新版本需要什么,并将尝试适应(到某一点,你仍然需要使用多个步骤)如果它不能产生可用的转储,我也将拒绝工作。 (在这种情况下,你必须做出更小的步骤......)

额外:

  • 如果失败转换的结果已经足够完成,如果您只对基本数据感兴趣,那么您可以在这里停下来,也许稍微改善一下。
  • NOTICE: using pg_pltemplate information instead of CREATE LANGUAGE parameters我不知道这是什么。也许是将其他语言(例如plpgsql)添加到核心dbms的方式。
  • ERROR: language "plpgsql" already exists:您可以忽略此错误。 - &GT;&GT;评论违规行。
  • DETAIL: Views that do not select from a single table or view are not automatically updatable.这意味着postgres RULE重写系统在旧数据库中使用。它需要认真的工作才能让它再次运作。