1

如何查看和读取 PostgreSQL“data\base”目录中的文件。我尝试使用“pg_ctl”将此目录作为数据库导入我的服务器,但它失败了。我尝试制作一个 tar 存档并使用 pgadmin 恢复它,但它返回 toc 标题错误。我知道“data/base”中的每个文件夹都是一个数据库 OID,每个文件都是一个表和相关数据。这些文件就像这样的二进制文件或 dat 文件:(16384/1174)

€ëÌ 0 ðð b10ëÌ Ô ð àŸ ÐŸ ÀŸ °Ÿ Ÿ Ÿ €Ÿ pŸ0ëÌ Ô ð àŸ ÐŸ ÀŸ °Ÿ Ÿ Ÿ €Ÿ pŸ0ëÌ Ô ð àŸ ÐŸ ÀŸ °Ÿ Ÿ Ÿ €Ÿ pŸ Ÿ PŸ @Ÿ 0Ÿ Ÿ Ÿ Ÿ ðž àž Ðž Àž °ž  ž ž €ž pžž Pž @ž 0ž ž ž ð à Ð À ° € p P @ 0 ðœ àœ Ðœ Àœ °œ  œ œ €œ pœœ Pœ @œ 0œ œ œ ð› à› Ð› À› °› › › €› p› `› P› @› 0› › › › ðš àš Ðš Àš °š š

有什么方法可以查看和阅读吗??我想检索其中的表和数据。我搜索了很多,没有找到任何真正的解决方案。请帮忙。多谢。

4

1 回答 1

0

也不是pg_ctl。nor pgAdmin,也没有任何 SQL 客户端可以自己处理数据库文件。如果您想阅读该文件,您应该研究页面结构(下面的链接)以及如何使用这些知识。所以回答有没有办法查看和阅读?是的,基本上你在你的问题中引用内容。但是您不能使用它来构建表或索引数据。除非你支持 postgres。或者尝试破解它以使其认为您的16384/1174文件是现有关系 - 我相信两者都超出了 SO 范围。

在结构上的一些参考下面,您尝试阅读

https://www.postgresql.org/docs/current/static/storage-page-layout.html

每个表和索引都存储为一个固定大小的页面数组

并进一步:

每页的前 24 个字节由页头 (PageHeaderData) 组成。其格式详见表 66.3。第一个字段跟踪与此页面相关的最新 WAL 条目。如果启用了数据校验和,则第二个字段包含页面校验和。接下来是一个包含标志位的 2 字节字段。其后是三个 2 字节整数字段(pd_lower、pd_upper 和 pd_special)。这些包含从页面开始到未分配空间开始、到未分配空间结束和特殊空间开始的字节偏移量。页头的下 2 个字节 pd_pagesize_version 存储页大小和版本指示符。从 PostgreSQL 8.3 开始,版本号为 4;PostgreSQL 8.1 和 8.2 使用版本号 3;PostgreSQL 8.0 使用版本号 2;PostgreSQL 7.3 和 7。4 使用版本号 1;以前的版本使用版本号 0。(这些版本中基本的页面布局和标题格式没有改变,但堆行标题的布局有。)页面大小基本上只是作为交叉检查出现;不支持在安装中使用多个页面大小。最后一个字段是一个提示,显示修剪页面是否可能有利可图:它跟踪页面上最旧的未修剪 XMAX。

于 2017-12-12T11:09:24.673 回答