Postgres目录丢失了

时间:2013-08-18 06:48:13

标签: database postgresql restore

我的朋友复制了“数据”目录以格式化他的客户个人电脑并恢复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

谢谢, 此致

Leandro的

3 个答案:

答案 0 :(得分:2)

您的朋友应该阅读手册:backup and restoreupgrading between releases

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

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

违反任何规则,如果服务器启动,则会以损坏/不可读的数据开头。

答案 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,attcollat​​ion,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进行真空处理。所以,你的问题必须解决。对不起我的英文