/[rserv]/bin/MasterRemove
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 /bin/MasterRemove

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (hide annotations)
Tue Aug 5 21:10:28 2003 UTC (20 years, 10 months ago) by dpavlin
Branch: MAIN
CVS Tags: before_onlytables, before_multmaster, r_0_3
Changes since 1.1: +25 -16 lines
command line options cleanup and cosistency fix, modification to work
under "use strict;"

1 dpavlin 1.2 #!/usr/bin/perl -w
2 dpavlin 1.1 # MasterInit
3     # Vadim Mikheev, (c) 2000, PostgreSQL Inc.
4    
5     eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
6     & eval 'exec perl -S $0 $argv:q'
7     if 0 ;
8 dpavlin 1.2
9     use strict;
10 dpavlin 1.1 use Pg;
11     use Getopt::Long;
12    
13     $| = 1;
14    
15 dpavlin 1.2 my ($debug,$verbose) = (0,0);
16     my ($help,$masterhost,$masterport,$masteruser,$masterpassword);
17 dpavlin 1.1
18 dpavlin 1.2 my $result = GetOptions(
19     "debug!" => \$debug, "verbose!" => \$verbose, "help" => \$help,
20     "masterhost=s" => \$masterhost, "masterport=i" => \$masterport,
21     "masteruser=s" => \$masteruser, "masterpassword=s" => \$masterpassword,
22     );
23    
24     if (defined($help) || (scalar(@ARGV) < 1)) {
25     print "Usage: $0 [options] masterdb
26     Options:
27     --masterhost=hostname --masterport=port
28     --masteruser=username --masterpassword=string
29     ";
30 dpavlin 1.1 exit ((scalar(@ARGV) < 1)? 1:0);
31     }
32    
33     my $master = $ARGV[0] || "master";
34    
35     my $minfo = "dbname=$master";
36 dpavlin 1.2 $minfo = "$minfo host=$masterhost" if (defined($masterhost));
37     $minfo = "$minfo port=$masterport" if (defined($masterport));
38     $minfo = "$minfo user=$masteruser" if (defined($masteruser));
39     $minfo = "$minfo password=$masterpassword" if (defined($masterpassword));
40 dpavlin 1.1
41     sub RollbackAndQuit {
42 dpavlin 1.2 my $conn = shift @_;
43 dpavlin 1.1
44     print STDERR "Error in query: ", $conn->errorMessage;
45     $conn->exec("ROLLBACK");
46     exit (-1);
47     }
48    
49     my $conn = Pg::connectdb($minfo);
50     if ($conn->status != PGRES_CONNECTION_OK) {
51     print STDERR "Failed opening $minfo\n";
52     exit 1;
53     }
54    
55 dpavlin 1.2 $result = $conn->exec("BEGIN");
56 dpavlin 1.1 RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
57    
58     $result = $conn->exec("set transaction isolation level serializable");
59     RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
60    
61     # List of slave servers
62     $result = $conn->exec("drop table _RSERV_SERVERS_");
63     RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
64    
65     $result = $conn->exec("DROP SEQUENCE _RSERV_SERVERS__SERVER_SEQ");
66     RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
67    
68     # List of replicated tables
69     #$result = $conn->exec("DROP RULE _rserv_deltrig_");
70     #RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
71    
72     $result = $conn->exec("drop table _RSERV_TABLES_");
73     RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
74    
75     $result = $conn->exec("SELECT pgc.relname FROM pg_trigger pgt, pg_class pgc WHERE tgname='_rserv_trigger_t_' AND pgt.tgrelid=pgc.oid");
76     RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_TUPLES_OK);
77 dpavlin 1.2 while (my @row = $result->fetchrow) {
78     my $res = $conn->exec("DROP TRIGGER _RSERV_TRIGGER_T_ ON \"$row[0]\"");
79 dpavlin 1.1 RollbackAndQuit($conn) if ($res->resultStatus ne PGRES_COMMAND_OK);
80     }
81    
82     # Drop Human Log
83     $result = $conn->exec("DROP VIEW _RSERV_HUMAN_LOG_");
84     RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
85    
86     # Bookkeeping log for row replication
87     $result = $conn->exec("drop table _RSERV_LOG_");
88     RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
89    
90     # This is to speedup lookup of deleted tuples
91     ## should be done automatically
92     #$result = $conn->exec("drop index _RSERV_LOG_INDX_DLT_ID_");
93     #RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
94    
95     # This is to speedup cleanup
96     ## should be done automatically
97     #$result = $conn->exec("drop index _RSERV_LOG_INDX_TM_ID_");
98     #RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
99    
100     # This is to speedup trigger and lookup of updated tuples
101     ## should be done automatically
102     #$result = $conn->exec("drop index _RSERV_LOG_INDX_REL_KEY_");
103     #RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
104    
105     # Sync point for each slave server
106     $result = $conn->exec("drop table _RSERV_SYNC_");
107     RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
108    
109     ## should be done automatically
110     #$result = $conn->exec("drop index _RSERV_SYNC_INDX_SRV_ID_");
111     #RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
112    
113     # Sync point reference numbers
114     $result = $conn->exec("drop sequence _RSERV_SYNC_SEQ_");
115     RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
116    
117     $result = $conn->exec("DROP FUNCTION _rserv_log_()");
118     RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
119    
120     $result = $conn->exec("DROP FUNCTION _rserv_sync_(int4)");
121     RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
122    
123     $result = $conn->exec("DROP FUNCTION _rserv_debug_(int4)");
124     RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
125    
126     $result = $conn->exec("COMMIT");
127     RollbackAndQuit($conn) if ($result->resultStatus ne PGRES_COMMAND_OK);
128    
129     exit (0);

  ViewVC Help
Powered by ViewVC 1.1.26