bsddb 和 reprepro(伯克利)数据库
我正在尝试读取由 reprepro
创建的数据库文件。我对 bdb 没有太多经验,所以我可能会在这里感到困惑,但看起来数据库以某种方式分层。
如果我只是执行 btopen('path/to/packages.db', 'r')
,我会得到包含如下内容的数据库对象:
In [4]: packages.items()
Out[4]:
[('local-lenny|main|amd64', '\x00\x00\x00\x04'),
('local-lenny|main|i386', '\x00\x00\x00\x02'),
('local-lenny|main|powerpc', '\x00\x00\x00\x14'),
('local-lenny|main|source', '\x00\x00\x00\x06'),
('local-lenny|main|sparc', '\x00\x00\x00\x12')]
然而 db4.6_dump 显示:
VERSION=3
format=bytevalue
database=local-lenny|main|sparc
type=btree
db_pagesize=4096
HEADER=END
<loads of data>
文件本身被标识为:/var/packages/db/packages.db:Berkeley DB(Btree,版本 9,本机字节顺序)
by 文件
。
我如何获取该内容?如果我理解正确的话,我在 keys()
中只得到了实际数据库的名称。我现在如何获取这些数据库的内容?
I'm trying to read the database files created by reprepro
. I don't have that much experience with bdb, so I might be confused here, but it looks like the database is layered in some way.
If I simply do btopen('path/to/packages.db', 'r')
, I get the database object with contents like:
In [4]: packages.items()
Out[4]:
[('local-lenny|main|amd64', '\x00\x00\x00\x04'),
('local-lenny|main|i386', '\x00\x00\x00\x02'),
('local-lenny|main|powerpc', '\x00\x00\x00\x14'),
('local-lenny|main|source', '\x00\x00\x00\x06'),
('local-lenny|main|sparc', '\x00\x00\x00\x12')]
However the db4.6_dump shows:
VERSION=3
format=bytevalue
database=local-lenny|main|sparc
type=btree
db_pagesize=4096
HEADER=END
<loads of data>
The file itself is identified as: /var/packages/db/packages.db: Berkeley DB (Btree, version 9, native byte-order)
by file
.
How do I get to that contents? If I understand it correctly, I got only the names of actual databases in keys()
. How do I get to the contents of those dbs now?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
答案似乎是“nice”版本的 bsddb 接口不支持一个文件内的多个 btree 表。您可以通过 bsddb.db 显式打开此类表,使用:
And the answer seems to be that the "nice" version of the
bsddb
interface doesn't support multi btree tables inside one file. You can open such table explicitly via bsddb.db, using: