Domanda

Sto cercando di leggere i file di database creati da reprepro. Non ho molta esperienza con BdB, quindi potrei essere confuso qui, ma sembra che il database è stratificata in qualche modo.

Se faccio semplicemente btopen('path/to/packages.db', 'r'), ottengo l'oggetto di database con contenuti come:

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

Tuttavia gli spettacoli db4.6_dump:

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

Il file stesso viene identificato come:. /var/packages/db/packages.db: Berkeley DB (Btree, version 9, native byte-order) da file

Come si arriva a quel contenuto? Se ho ben capito, ho avuto solo i nomi delle basi di dati reali in keys(). Come posso raggiungere il contenuto di tali DBS ora?

È stato utile?

Soluzione

E la risposta sembra essere che la versione "bella" dell'interfaccia bsddb non supporta le tabelle multiple btree all'interno di un unico file. È possibile aprire tale tabella esplicitamente tramite bsddb.db, utilizzando:

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top