系统的 Postgres 坏了(RAID 是原因),没有任何备份。
尝试将数据放入另一台带有 Postgres 的计算机(并进行备份)。
但是当我设置数据目录并运行 postgres 时,我总是收到消息
GET FATAL: database files are incompatible with server
2012-08-15 19:58:38 GET DETAIL: The database cluster was initialized with BLCKSZ 16777216, but the server was compiled with BLCKSZ 8192.
2012-08-15 19:58:38 GET HINT: It looks like you need to recompile or initdb.
这是一个非常奇怪的数字 16777216(2 的 24 次方 - 很大)。
但是我无法在编译时重置默认值 8192(使用 --with-blocksize= 无效;BLCKSZ - 我在头文件中找不到它)
)。
有什么方法可以提取数据吗?
这是环境和情况:
硬盘:RAID 1,阵列中有 3 个 SAS 磁盘
操作系统:ubuntu 10.04.04 amd64
Postgres:9.1(通过 apt-get(我们将存储库链接更改为更高版本的 Ubuntu))
系统坏了-过了一段时间
AAC: Host Adapter BLINK LED 0x56
AACO: Adapter kernel panic'd 56
(文件系统或硬件错误)
我们以某种方式获得了数据目录。 pg_conroldata 显示:
pg_control 版本号: 903
目录版本号: 201105231
数据库系统标识符: 5714530593695276911
数据库集群状态: 关闭
pg_control 最后修改时间: 2012 年 8 月 15 日星期二 11:50:50
最新检查站位置: 1B595668/2000020
之前的检查点位置: 0/0
最新检查点的 REDO 位置:1B595668/2000020
最新检查点的 TimeLineID: 1
最新检查点的 NextXID: 0/4057946
最新检查点的 NextOID: 40960
最新检查点的 NextMultiXactId:1
最新检查点的 NextMultiOffset:0
最新检查点的oldestXID: 670
最新检查点最旧的 XID 的 DB:1344846103
最新检查点的最旧 ActiveXID:0
最近检查点时间: 2012 年 8 月 15 日星期二 11:50:50
最小恢复结束位置:0/0
备份开始位置: 0/0
当前 wal_level 设置: 最小
当前的 max_connections 设置: 100
当前 max_prepared_xacts 设置:0
当前 max_locks_per_xact 设置:64
最大数据对齐: 8
数据库 block 大小: 16777216
大关系每段 block 数:131072
WAL block 大小: 8192
每个 WAL 段的字节数: 16777216
标识符的最大长度: 64
索引中的最大列数: 2387576020
TOAST block 的最大大小:0
日期/时间类型存储: float
Float4 参数传递: by reference
Float8 参数传递: 通过引用
首先,我努力在 Ubuntu 服务器(硬盘 - 简单串行 2、Ubuntu 10.04 i386、Postgres 9.1)中启动 DB,并得到与上面相同的异常(使用 BLCKSZ)。
这就是为什么我在虚拟机中部署了带有英语 Postgres 9.1 的 Ubuntu 10.04 amd64(因为在上一步的错误日志中得到了 '?' 而不是俄语符号) 遇到相同的异常(使用 BLCKSZ)。
Ather 已删除 apt-get postgres 版本并按照文档中的描述编译它 http://www.postgresql.org/docs/9.1/static/installation.html .
使用configure --with-blocksize=BLOCKSIZE
没有效果 - 得到同样的错误
抱歉,对于这个帖子。
pg_contol 被一些操作破坏了。
Sow,集群已通过 pg_resetxlog 使用初始数据成功恢复。
最佳答案
16Mb 的 block 大小真的很奇怪,因为这两个值看起来也完全是假的:
Maximum columns in an index: 2387576020 Maximum size of a TOAST chunk: 0
...在花时间编译具有非标准 block 大小的 postgres 之前,您可能想质疑此数据的完整性。
如果您查看关系对应的文件大小,它们是 16Mb 还是 8Kb 的倍数?
如果数据库有一些千兆字节的表,磁盘上的截止大小是多少(postgres 将数据分割成几个文件的大小)?这应该等于数据 block 大小
*每段大关系的 block 数
。在默认安装中,它是 1Gb。
关于postgresql - 从 Postgres 数据文件恢复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11973567/