我正在将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
答案 0 :(得分:1)
基本上有两种方式。对于缺乏经验的人来说,两者都很难。 (甚至可能是经验丰富的人)
psql < dumpfile
)。可能的路径第一跳可以是7.4-> 8.3,但可能需要额外的一跳。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重写系统在旧数据库中使用。它需要认真的工作才能让它再次运作。