bsddb 和 reprepro(伯克利)数据库

发布于 2024-10-09 10:24:09 字数 843 浏览 0 评论 0原文

我正在尝试读取由 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

云归处 2024-10-16 10:24:09

答案似乎是“nice”版本的 bsddb 接口不支持一个文件内的多个 btree 表。您可以通过 bsddb.db 显式打开此类表,使用:

env = db.DBEnv()
env.open(None, db.DB_CREATE | db.DB_INIT_MPOOL)
internal_db = db.DB(env)
internal_db.open("the filename", "the internal db name", db.DB_BTREE, db.DB_RDONLY)

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:

env = db.DBEnv()
env.open(None, db.DB_CREATE | db.DB_INIT_MPOOL)
internal_db = db.DB(env)
internal_db.open("the filename", "the internal db name", db.DB_BTREE, db.DB_RDONLY)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文