5 use Data::Dump qw(dump);
10 my ( $errors, $dump ) = @ARGV;
11 die "usage: $0 errors.log dump.sql" unless -r $errors && -r $dump;
16 open(my $f, '<', $errors);
18 if ( m/ERROR: value too long for type (.+)/ ) {
20 } elsif ( m/CONTEXT: COPY (\w+), line \d+, column (\w+)/ ) {
21 $fix->{$1}->{$2} = $type;
26 warn "# fix ",dump($fix);
28 my $in_create_table = 0;
31 if ( $dump =~ m/\.gz/i ) {
32 open($d, '-|', "zcat $dump");
38 if ( m/CREATE TABLE (\w+)/ ) {
39 $in_create_table = $1;
40 } elsif ( $in_create_table && m/;/ ) {
44 if ( $in_create_table && exists $fix->{$in_create_table} ) {
45 my $column = $1 if /^\s+(\w+)/;
46 if ( my $type = $fix->{$in_create_table}->{$column} ) {
47 warn "FIX: [$_] $type\n";
48 s/\Q$type\E/text/ || die "can't FIX $_ $type";
50 $_ .= " -- FIXME $type\n";