1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| #! /usr/bin/perl
# day of week
use POSIX qw(strftime);
my $day=strftime("%a", localtime());
my $argument = $ARGV[0]; # just in case
my $pgdir = "/home/postgresql/";
my $pgbin = $pgdir."bin/";
my $savedir = $pgdir."/dumpdatabase/".$day."/";
my $dblist = $savedir."list.out";
my $pguser = "postgres";
my $pgport = "5442";
my $savedirwin = $pgdir."mnt/devwin1/phptmp/dumpdatabase/";
system("rm -rf $savedir");
system("rm -rf $savedirwin".$day."/");
system("mkdir $savedir");
# vacuum databases
system("echo \"Performing vacuum on all databases\"");
system($pgbin."vacuumdb -a -U $pguser -p $pgport");
system("echo \"Performing reindex on all databases\"");
system($pgbin."reindexdb -a -U $pguser -p $pgport");
# create database list
system($pgbin."psql -U $pguser -p $pgport -l > $dblist");
unless(open(INPUT, $dblist))
{
die("cannot open $dblist\n");
}
my $i=0;
while(<INPUT>)
{
$line=$_;
chomp($line);
if($i>2)
{
my $start=1;
my $end=index($line, "|");
# for each database
if($end!=-1)
{
my $dbname=substr($line, $start, $end-1);
$dbname =~ s/^\s+//; # trim spaces
$dbname =~ s/\s+$//;
if($dbname !~ m/^$pguser$/) # do not dump/restore maintenance database
{
system("echo \"Performing vacuum large objects on '$dbname'\"");
system($pgbin."vacuumlo -U $pguser -p $pgport $dbname");
system("echo \"Dumping '$dbname'\"");
system($pgbin."pg_dump -O -U $pguser -p $pgport -i -Ft $dbname > ".$savedir.$dbname.".tar");
if($day !~ m/^Fri$/) # delete blobs if not Friday
{
system($pgdir."scripts/dropblob.sh ".$savedir." ".$dbname);
}
}
}
}
$i++;
}
system("echo \"Copying $savedir to $savedirwin\"");
system("cp -r $savedir $savedirwin");
system("echo \"All done\""); |
Partager