Question

Je suis en train de lire les fichiers de base de données créés par reprepro. Je ne l'ai pas beaucoup d'expérience avec BdB, donc je pourrais être confondu ici, mais il semble que la base de données en couches d'une certaine façon.

Si je fais simplement btopen('path/to/packages.db', 'r'), je reçois l'objet de base de données avec des contenus tels que:

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')]

Cependant, les salons db4.6_dump:

VERSION=3
format=bytevalue
database=local-lenny|main|sparc
type=btree
db_pagesize=4096
HEADER=END
 <loads of data>

Le fichier lui-même est identifié comme:. /var/packages/db/packages.db: Berkeley DB (Btree, version 9, native byte-order) par file

Comment puis-je arriver à ce contenu? Si je comprends bien, je suis arrivé que les noms des bases de données réelles dans keys(). Comment puis-je obtenir le contenu de ces dbs maintenant?

Était-ce utile?

La solution

Et la réponse semble être que la version « belle » de l'interface bsddb ne supporte pas les tables multi btree dans un seul fichier. Vous pouvez ouvrir un tel tableau explicitement via bsddb.db, en utilisant:

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top