sub PrepareSnapshot
{
- my ($conn, $outf, $server) = @_; # (@_[0], @_[1], @_[2]);
+ my ($conn, $outf, $server, $onlytables) = @_; # (@_[0], @_[1], @_[2]);
my $result = $conn->exec("BEGIN");
if ($result->resultStatus ne PGRES_COMMAND_OK)
while (@row = $result->fetchrow)
{
# printf "$row[0], $row[1], $row[2]\n";
+ if (ref($onlytables) eq 'HASH') {
+ next unless (exists $onlytables->{$row[1]});
+ $onlytables->{$row[1]} = $row[0] unless ($onlytables->{$row[1]});
+ }
push @{$Mtables{$row[0]}}, $row[1], $row[2];
}
sub CleanLog
{
- my ($conn, $howold) = @_; # (@_[0], @_[1]);
+ my ($conn, $howold, $onlytables) = @_; # (@_[0], @_[1]);
my $result = $conn->exec("BEGIN");
if ($result->resultStatus ne PGRES_COMMAND_OK)
my $alist = join(',', keys %active);
my $sinfo = "logid < $maxid";
$sinfo .= " and logid not in ($alist)" if $alist ne '';
+ #if (ref($onlytables) eq 'HASH') {
+ # foreach my $onlytable (keys %{$onlytables}) {
+ # $sinfo
+ # }
+ #}
$sql = "delete from _RSERV_LOG_ where " .
"logtime < now() - '$howold second'::interval and $sinfo";
sub ApplySnapshot
{
- my ($conn, $inpf) = @_; # (@_[0], @_[1]);
+ my ($conn, $inpf, $onlytables) = @_; # (@_[0], @_[1]);
my $result = $conn->exec("BEGIN");
if ($result->resultStatus ne PGRES_COMMAND_OK)
while (@row = $result->fetchrow)
{
# printf " %s %s\n", $row[1], $row[0];
+ if (ref($onlytables) eq 'HASH') {
+ next unless (exists $onlytables->{$row[1]});
+ $onlytables->{$row[1]} = $row[0] unless ($onlytables->{$row[1]});
+ }
push @{$Stables{$row[1]}}, $row[0], $row[2], $row[3];
}
my $master = $ARGV[0] || "master";
my $slave = $ARGV[1] || "slave";
+my $tables = $#ARGV < 2 ? undef : { map {($_, undef)} @ARGV[2..$#ARGV] };
my $server = 0;
my $minfo = "dbname=$master";
my $outf = new IO::File;
open $outf, ">$snapshot";
print "\n>>>>>>>>>>>>> Prepare Snapshot\n\n" if ($verbose);
-$res = PrepareSnapshot($mconn, $outf, $server);
+$res = PrepareSnapshot($mconn, $outf, $server, $tables);
close $outf;
die "\n>>>>>>>>>>>>> ERROR\n" if $res < 0;
if ($res == 0)
my $inpf = new IO::File;
open $inpf, "<$snapshot";
print "\n>>>>>>>>>>>>> Apply Snapshot\n\n" if ($verbose);
-$res = ApplySnapshot($sconn, $inpf);
+$res = ApplySnapshot($sconn, $inpf, $tables);
close $inpf;
die "\n>>>>>>>>>>>>> ERROR\n" if $res < 0;