/[scripts]/trunk/pgsql-git-backup.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/pgsql-git-backup.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 86 - (hide annotations)
Thu Sep 11 20:22:49 2008 UTC (15 years, 6 months ago) by dpavlin
File MIME type: text/plain
File size: 1402 byte(s)
added git-repack (by default on) after each database dump

1 dpavlin 82 #!/usr/bin/perl
2    
3     # split PostgreSQL dump into individual files for backup with git
4     #
5     # 09/11/08 20:10:39 CEST Dobrica Pavlinusic <dpavlin@rot13.org>
6    
7     use warnings;
8     use strict;
9    
10     use Getopt::Long;
11 dpavlin 85 use Fatal qw/:void open close mkdir chdir/;
12 dpavlin 82 my $git = '/tmp/pgsql-git-backup/';
13     my $verbose = 0;
14     my $database = '';
15 dpavlin 86 my $repack = 1;
16 dpavlin 82
17     my $usage = "Usage: $0 --database name < name-dump.sql\n";
18    
19     GetOptions(
20 dpavlin 86 'git=s' => \$git,
21 dpavlin 82 'database=s' => \$database,
22 dpavlin 86 'verbose+' => \$verbose,
23     'repack' => \$repack,
24 dpavlin 82 ) or die $usage;
25    
26     die $usage unless $database;
27    
28     my $nr = 0;
29     my $name = $database;
30     my $d;
31    
32 dpavlin 83 sub git {
33     my $cmd = shift or die "no cmd?";
34     system($cmd) == 0 or die "$cmd FAILED $?";
35     }
36    
37 dpavlin 82 sub write_chunk {
38 dpavlin 85 my $path = sprintf("%s/%04d%s.sql", $database, $nr++, $name);
39 dpavlin 82 open(my $fh, '>', $path) or die "can't open file $path: $!";
40     print $fh $d;
41     close($fh);
42     warn ">> $path ", -s $path, "\n" if $verbose;
43 dpavlin 83 git "git-add '$path'";
44 dpavlin 82 }
45    
46 dpavlin 85 mkdir $git if ! -e $git;
47 dpavlin 82
48 dpavlin 85 chdir $git;
49     warn "## using $git\n" if $verbose;
50 dpavlin 83
51 dpavlin 85 git 'git-init-db' if ! -e "$git/.git";
52    
53 dpavlin 82 if ( ! -e $database ) {
54 dpavlin 85 mkdir $database;
55 dpavlin 83 # git "git-add '$database'";
56     # git "git-commit -m 'added $database directory' $database";
57 dpavlin 82 }
58    
59     while(<STDIN>) {
60     if (/-- Name: (.+?);/) {
61     write_chunk;
62     $name = " $1";
63     $name =~ s/\W+/ /g;
64 dpavlin 84 undef $d;
65 dpavlin 82 $d = '';
66     }
67     $d .= $_;
68     }
69    
70     write_chunk;
71    
72 dpavlin 83 git "git-commit -m '$database' '$database'";
73 dpavlin 86
74     git "git-repack" if $repack;
75    

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26