--- bin/MasterAddTable 2000/12/20 17:22:35 1.1.1.1 +++ bin/MasterAddTable 2003/11/02 10:31:44 1.8 @@ -1,4 +1,4 @@ -# -*- perl -*- +#!/usr/bin/perl -w # MasterAddTable # Vadim Mikheev, (c) 2000, PostgreSQL Inc. @@ -6,56 +6,77 @@ & eval 'exec perl -S $0 $argv:q' if 0; +BEGIN { + my $basedir = $0; $basedir =~ s#/[^/]+$##; + unshift(@INC, "$basedir/../share"); +} + +use strict; use Pg; use Getopt::Long; +use RServ; $| = 1; -$result = GetOptions("debug!", "verbose!", "help", - "host=s", "user=s", "password=s"); +my ($debug,$verbose) = (0,0); +my ($help,$masterhost,$masterport,$masteruser,$masterpassword); -my $debug = $opt_debug || 0; -my $verbose = $opt_verbose || 0; +my $mserver=0; -if (defined($opt_help) || (scalar(@ARGV) < 3)) { - print "Usage: $0 --host=name --user=name --password=string masterdb table column\n"; - exit ((scalar(@ARGV) < 3)? 1: 0); +my $result = GetOptions( + "debug!" => \$debug, "verbose!" => \$verbose, "help" => \$help, + "masterhost=s" => \$masterhost, "masterport=i" => \$masterport, + "masteruser=s" => \$masteruser, "masterpassword=s" => \$masterpassword, + "masterserver=i" => \$mserver, + ); + +if (defined($help) || (scalar(@ARGV) < 3)) { + print "Usage: $0 [options] masterdb table column +Options: + --masterhost=hostname --masterport=port + --masteruser=username --masterpassword=string + [--masterserver=master_number] +"; + exit ((scalar(@ARGV) < 3)? 1:0); } my $dbname = $ARGV[0]; my $table = $ARGV[1]; my $keyname = $ARGV[2]; -my $minfo = "dbname=$dbname"; -$minfo = "$minfo host=$opt_host" if (defined($opt_host)); -$minfo = "$minfo user=$opt_user" if (defined($opt_user)); -$minfo = "$minfo password=$opt_password" if (defined($opt_password)); - -my $conn = Pg::connectdb($minfo); - -my $result = $conn->exec("BEGIN"); -die $conn->errorMessage if $result->resultStatus ne PGRES_COMMAND_OK; - -$result = $conn->exec("select pgc.oid, pga.attnum from pg_class pgc" . - ", pg_attribute pga where pgc.relname = '$table'" . - " and pgc.oid = pga.attrelid" . - " and pga.attname = '$keyname'"); -die $conn->errorMessage if $result->resultStatus ne PGRES_TUPLES_OK; +my $minfo = MkInfo($dbname,$masterhost,$masterport,$masteruser,$masterpassword); + +print STDERR "master server nr: $mserver\n" if ($debug); + +my $mconn = Pg::connectdb($minfo); +if ($mconn->status != PGRES_CONNECTION_OK) { + print STDERR "Failed opening $minfo\n"; + exit 1; +} + +$result = $mconn->exec("BEGIN"); +die $mconn->errorMessage if $result->resultStatus ne PGRES_COMMAND_OK; + +$result = $mconn->exec("select pgc.oid, pga.attnum from pg_class pgc" . + ", pg_attribute pga where pgc.relname = '$table'" . + " and pgc.oid = pga.attrelid" . + " and pga.attname = '$keyname'"); +die $mconn->errorMessage if $result->resultStatus ne PGRES_TUPLES_OK; my @row = $result->fetchrow; -die "Can't find table/key\n" if ! defined $row[0] || ! defined $row[1]; +die "Can't find key '$keyname' for table '$table' in database '$dbname'\n" if ! defined $row[0] || ! defined $row[1]; -$result = $conn->exec("create trigger _RSERV_TRIGGER_T_ after" . - " insert or update or delete on $table" . - " for each row execute procedure" . - " _rserv_log_('$row[1]')"); -die $conn->errorMessage if $result->resultStatus ne PGRES_COMMAND_OK; - -$result = $conn->exec("insert into _RSERV_TABLES_ (tname, cname, reloid, key)" . - " values ('$table', '$keyname', $row[0], $row[1])"); -die $conn->errorMessage if $result->resultStatus ne PGRES_COMMAND_OK; +$result = $mconn->exec("create trigger _RSERV_TRIGGER_T_ after" . + " insert or update or delete on \"$table\"" . + " for each row execute procedure" . + " _rserv_log_('$row[1]',$mserver)"); +die $mconn->errorMessage if $result->resultStatus ne PGRES_COMMAND_OK; + +$result = $mconn->exec("insert into _RSERV_TABLES_ (tname, cname, reloid, key)" . + " values ('$table', '$keyname', $row[0], $row[1])"); +die $mconn->errorMessage if $result->resultStatus ne PGRES_COMMAND_OK; -$result = $conn->exec("COMMIT"); -die $conn->errorMessage if $result->resultStatus ne PGRES_COMMAND_OK; +$result = $mconn->exec("COMMIT"); +die $mconn->errorMessage if $result->resultStatus ne PGRES_COMMAND_OK; exit(0);