Erro da interface BDB Python ao ler BDB
-
20-09-2019 - |
Pergunta
bsddb.db.dbinvalidargerror: (22, 'argumento inválido - /dbs/supermodels.db: tipo de arquivo inesperado ou formato')
Esse erro é resultado de versões BDB incompatíveis (1,85 ou 3+)? Se sim, como faço para verificar as versões, disparar e resolver esse erro?
Solução
Sim, isso certamente pode ser devido a versões mais antigas do arquivo DB, mas ajudaria se você postasse o código que gerou essa exceção e o rastreamento completo.
Na ausência disso, você tem certeza de que o arquivo de banco de dados que você está abrindo é do tipo correto? Por exemplo, tentar abrir um arquivo btree como se fosse um hash levanta a exceção que você está vendo:
>>> import bsddb
>>> bt = bsddb.btopen('bt')
>>> bt.close()
>>> bsddb.hashopen('bt')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/usr/lib/python2.4/bsddb/__init__.py", line 298, in hashopen
d.open(file, db.DB_HASH, flags, mode)
bsddb.db.DBInvalidArgError: (22, 'Invalid argument -- ./bt: unexpected file type or format')
Em *nix, você geralmente pode determinar o tipo de dB usando o file
comando, por exemplo
$ file /etc/aliases.db cert8.db
/etc/aliases.db: Berkeley DB (Hash, version 8, native byte-order)
cert8.db: Berkeley DB 1.85 (Hash, version 2, native byte-order)
Abrir um arquivo de versão 1.85 falha com a mesma exceção:
>>> db = bsddb.hashopen('/etc/aliases.db') # works, but...
>>> db = bsddb.hashopen('cert8.db')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/usr/lib/python2.4/bsddb/__init__.py", line 298, in hashopen
d.open(file, db.DB_HASH, flags, mode)
bsddb.db.DBInvalidArgError: (22, 'Invalid argument -- ./cert8.db: unexpected file type or format')
Se você precisar migrar os arquivos do banco de dados, você deve olhar para o db_dump
, db_dump185
e db_load
Utilitários que acompanham a distribuição BDB.