Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 从Postgres 7.4升级到9.4.1_Postgresql_Psql_Pg Dump - Fatal编程技术网

Postgresql 从Postgres 7.4升级到9.4.1

Postgresql 从Postgres 7.4升级到9.4.1,postgresql,psql,pg-dump,Postgresql,Psql,Pg Dump,我正在将博士后从古代的7.4升级到9.4.1,发现了一些错误 在旧机器上,我做到了: pg_dumpall | gzip > db_pg_bu.gz gunzip -c db_pg_bu.gz | psql 在新机器上,我做到了: pg_dumpall | gzip > db_pg_bu.gz gunzip -c db_pg_bu.gz | psql 在恢复的过程中,我遇到了一些我不理解的错误,也不知道这些错误的重要性。我不是DBA,只是一个低级的开发人员,所以如果有人能

我正在将博士后从古代的7.4升级到9.4.1,发现了一些错误

在旧机器上,我做到了:

pg_dumpall | gzip > db_pg_bu.gz
 gunzip -c db_pg_bu.gz | psql
在新机器上,我做到了:

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
一个大问题是,当它恢复数据库时,对于每个网元,我都会看到如下情况:

 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

基本上有两种方法。对于没有经验的人来说,两者都很难做到。(甚至可能是有经验的人)

  • 使用几个中间版本(可能必须从源代码处编译)进行逐步迁移。在不同版本之间,您必须执行pg_dump-->pg_还原(或者只执行
    psql
    ,如问题中所述)。第一跳可能的路径为7.4->8.3,但可能需要额外的一跳
  • 编辑(未压缩)转储文件:删除(或注释掉)新版本不喜欢的任何内容。这将是一个迭代过程,它假设您的转储适合您的编辑器。(而且你知道你在做什么)。您可能需要重复,分离模式和数据(选项--schema only和--data only,我甚至不知道这些在PG-7.4中是否可用)
顺便说一句:建议使用较新版本(您将导入到的版本)的pg_转储。您需要通过-h标志指定源主机。新的(目标)版本知道新版本需要什么,并且会尝试适应(直到某一点,您仍然需要使用多个步骤)。如果它不能生成可用的转储,我也会拒绝工作。(在这种情况下,您必须进行较小的步骤…)

额外:

  • 如果您失败的转换结果足够完整,并且您只对基本数据感兴趣,那么您可以到此为止,或许可以稍作润色
  • 注意:使用pg_pltemplate信息而不是创建语言参数
    我不知道这是什么。可能是向核心dbms添加其他语言(如plpgsql)的方式
  • 错误:语言“plpgsql”已存在
    :您可能可以忽略此错误。-->>把冒犯的台词注释掉
  • 详细信息:不从单个表或视图中选择的视图不可自动更新。
    这意味着在旧数据库中使用postgres规则重写系统。它需要认真的工作才能重新工作

我敢肯定,大多数问题都可以通过谷歌解决,已删除,可能需要更改代码才能启动并运行。根据您使用PostgreSQL的经验,可能值得联系您当地的DBA或提出单独的、尽可能具体的问题(即提供MVCE等)。@tambre我的代码不使用SYSID。此错误消息发生在psql连接到任何数据库之前。因此,似乎有一些系统方面的事情。可能值得在这个页面上添加pg_dump手册中的提示,使用与目标/新版本匹配的pg_dump工具来创建备份。是的,我会做广告的。谢谢@非常感谢!好吧,这一切看起来确实很痛苦。我用clean选项做了一个新的pg_dumpall(还没有用新的pg_dumpall做过),当我把它输入到psql中时,它似乎工作了。在中复制数据并生成索引。我可能会再做一次,仅仅是创建用户之类的,然后单独转储数据。这可能会使编辑文件更容易。有没有办法看看我导入到新版本中的内容是否良好?数据似乎就在那里……简单的方法是:进行计数。如果您知道您的数据,并且dumpfile适合编辑器,并且没有太多的表,那么这将起作用。