bsddb.db.DBInvalidArgError:(22、'無効な引数-/dbs/supermodels.db:予期しないファイルタイプまたは形式')
このエラーは、互換性のないBDBバージョン(1.85または3以降)の結果ですか?もしそうなら、どうすればバージョンを確認し、トラブルシューティングしてこのエラーを解決できますか?
bsddb.db.DBInvalidArgError:(22、'無効な引数-/dbs/supermodels.db:予期しないファイルタイプまたは形式')
このエラーは、互換性のないBDBバージョン(1.85または3以降)の結果ですか?もしそうなら、どうすればバージョンを確認し、トラブルシューティングしてこのエラーを解決できますか?
はい、これは確かに古いバージョンの db ファイルが原因である可能性がありますが、この例外を生成したコードと完全なトレースバックを投稿していただけると助かります。
これがない場合、開いているデータベース ファイルが正しいタイプであると確信していますか? たとえば、ハッシュであるかのように btree ファイルを開こうとすると、次のような例外が発生します。
>>> 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')
file
*nix では、通常、次のコマンドを使用して db のタイプを判別できます。
$ 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)
1.85 バージョンのファイルを開くと、同じ例外で失敗します。
>>> 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')
データベース ファイルを移行する必要がある場合は、bdb ディストリビューションに付属のdb_dump
、db_dump185
およびユーティリティを参照してください。db_load