| 12
 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