1

我的朋友复制了“数据”目录来格式化他的客户电脑并恢复 postgres 数据库,但现在数据库显示很多关于目录丢失的错误。

表只加载列,但没有数据,也没有视图。

你有什么想法我们可以在这种情况下解决这个问题吗?我们已经尝试过这个链接: http: //grokbase.com/t/postgresql/pgsql-hackers/051ebftr4m/fatal-catalog-is-missing-1-attribute-s-for-relid-16396http://www。 justskins.com/forums/error-catalog-is-missing-208043.html

感谢和问候

莱安德罗

4

3 回答 3

2

你的朋友可能应该读过手册:备份和恢复版本之间的升级

只有在以下情况下才能将 datadir 复制到另一台机器:

  • 在复制 datadir 之前,源机器上的 PostgreSQL 已关闭;
  • 整个datadir被复制,包括pg_xlog, base, pg_clog, 任何表空间目录;ETC
  • 目标机器在与源机器相同的操作系统和架构上具有相同的 PostgreSQL 主要版本;例如,32 位 Windows 上的 PostgreSQL 9.1。

违反任何这些规则,如果服务器完全启动,它将以损坏/不可读的数据开始。

于 2013-08-18T13:36:44.557 回答
1

您需要从备份中恢复,或者,如果缺少备份,则检查损坏表的 regclass

然后您需要在 pg_attribute 中恢复丢失的记录(例如创建 simm 表并复制

以 q 为 ( 选择 attname, atttypid, attstattarget, attn, attnum, attndims, attcacheoff, atttypmod, attbyval, attstorage,attalign, attnotnull, atthasdef, attisdropped, attislocal, attinhcount, attcollat​​ion, attacl, attoptions, attfdwoptions from pg_attribute where attrelid:: regclass = your_table::regclass) ) INSERT INTO pg_catalog.pg_attribute select [id from your pgclass missing instead new attrelid], * from q

然后检查 atttypid 是否存在并对 pg_class 和 pg_attribute 进行真空处理。所以,你的问题必须解决。对不起我的英语不好

于 2014-06-23T08:19:11.360 回答
1

看起来像是在使用不同的 PostgreSQL 版本。PostgreSQL 数据目录中的数据非常敏感,如果没有更深入的知识,您无法将其复制到不同的计算机。请改用 pg_dump。如果您不知道自己擅长什么,请不要接触 PostgreSQL 数据目录。

于 2013-08-18T07:52:30.667 回答