bsddb e il database reprepro (Berkeley)
-
14-10-2019 - |
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?
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)