Migrate 32bit to 64bit (FreeBSD, PostgreSQL) に続いて、単なるデータコピーで移行が完了しないケースに 1 つに GDBM (GNU dbm) があります。
現在メールフィルタの学習型データベースに bsfilter + gdbm を使用しています。このデータベースファイルが、互換性がありません。
32bit の環境で bsfilter mail_file とすれば即結果が返るにも関わらず、データコピーしただけの 64bit 環境では 完全に沈黙 します。
別の用途と事例では Invalid argument で先に進まないこともある様ですね。PostgreSQL 同様 dump -> restore する以外に方法がない様です。
#// dump
use GDBM_File;
use Fcntl;
my $src = 'src.gdbm';
my $txt = 'src.dump';
my %str = ();
my $dbh = tie (%str, 'GDBM_File', $src, O_RDWR|O_CREAT, 0600);
my $line = '';
foreach (keys %str) {
$line .= $_ . "\t" . $str{$_} . "\n";
}
undef $dbh;
untie %str;
open WRITE, "+>$txt";
print WRITE $line;
close WRITE;
#// restore
use GDBM_File;
use Fcntl;
my $txt = 'src.dump';
my $dist = 'dist.gdbm';
my %str = ();
my $dbh = tie (%str, 'GDBM_File', $dist, O_RDWR|O_CREAT, 0600);
open READ, "<$txt";
my @line = <READ>;
close READ;
foreach my $line (@line) {
chomp $line;
my ($key, $value) = split(/\t/, $line);
$str{$key} = $value;
}
undef $dbh;
untie %str;
- Migrate 32bit to 64bit (FreeBSD, PostgreSQL)
- Migrate 32bit to 64bit (FreeBSD, GDBM)
- Migrate 32bit to 64bit (FreeBSD, ionCube PHP Loader)
- Migrate to FreeBSD 9.1-RELEASE (ImageMagick 6.4)
- Migrate to FreeBSD 9.1-RELEASE (PostgreSQL)
- Migrate to FreeBSD 9.1-RELEASE (JDK 1.6)
- Migrate to FreeBSD 9.1-RELEASE (idnconv)
- Migrate to FreeBSD 9.1-RELEASE (PDFJ)









