Migrate 32bit to 64bit (FreeBSD, PostgreSQL) に続いて、単なるデータコピーで移行が完了しないケースに 1 つに GDBM (GNU dbm) があります。
現在メールフィルタの学習型データベースに bsfilter + gdbm を使用しています。このデータベースファイルが、互換性がありません。
32bit の環境で bsfilter mail_file とすれば即結果が返るにも関わらず、データコピーしただけの 64bit 環境では 完全に沈黙 します。
別の用途と事例では Invalid argument で先に進まないこともある様ですね。PostgreSQL 同様 dump -> restore する以外に方法がない様です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #// 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 ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #// 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)