我的朋友复制了“数据”目录以格式化他的客户个人电脑并恢复postgres数据库,但现在数据库显示了很多关于目录丢失的错误。
这些表只加载列但没有数据且没有视图。
您是否知道我们可以在这种情况下解决此问题? 我们已尝试过以下链接:http://grokbase.com/t/postgresql/pgsql-hackers/051ebftr4m/fatal-catalog-is-missing-1-attribute-s-for-relid-16396和http://www.justskins.com/forums/error-catalog-is-missing-208043.html
谢谢, 此致
Leandro的
答案 0 :(得分:2)
您的朋友应该阅读手册:backup and restore,upgrading between releases。
只有在以下情况下才能将datadir复制到另一台机器上:
pg_xlog
,base
,pg_clog
,任何表空间目录;等违反任何规则,如果服务器启动,则会以损坏/不可读的数据开头。
答案 1 :(得分:1)
它看起来像使用不同的PostgreSQL版本。 PostgreSQL数据目录中的数据非常敏感,如果没有更深入的了解,就无法将其复制到不同的计算机上。请改用pg_dump。如果您不知道自己做得多好,请不要触摸PostgreSQL数据目录。
答案 2 :(得分:1)
您是否需要从备份恢复,或者如果缺少备份则需要 检查损坏表的regclass
然后你需要在pg_attribute中恢复丢失的记录(例如创建simm表并复制
以q为( 选择attname,atttypid,attstattarget,attlen,attnum,attndims,attcacheoff,atttypmod,attbyval,attstorage,attalign,attnotnull,atthasdef,attisdropped,attislocal,attinhcount,attcollation,attacl,attoptions,attfdwoptions 来自pg_attribute,其中attrelid :: regclass = your_table :: regclass) ) INSERT INTO pg_catalog.pg_attribute选择[你的pgclass缺少id而不是new attrelid],*来自q
然后检查,atttypid是否存在并对pg_class和pg_attribute进行真空处理。所以,你的问题必须解决。对不起我的英文