#!/usr/bin/perl use DBI; use strict; # We assume that the following environment variables are set: # CLUSTER # DBNAME1 # DBNAME2 # HOST1 # HOST2 # SLONY_USER my( $database ) = @ARGV; if( !$database ) { print STDERR "Database required.\n"; exit( 1 ); } my $dbh = DBI->connect( "dbi:Pg:dbname=$database" ); if( !$dbh ) { print STDERR "$DBI::errstr\n"; exit( 1 ); } print <<'EOF'; slonik <<_EOF_ cluster name = $CLUSTER; node 1 admin conninfo = 'dbname=$DBNAME1 host=$HOST1 user=$SLONY_USER'; node 2 admin conninfo = 'dbname=$DBNAME2 host=$HOST2 user=$SLONY_USER'; init cluster ( id = 1 ); create set ( id = 1, origin = 1 ); EOF my $sequence_sql = <prepare( $sequence_sql ); if( $dbh->err ) { print STDERR "@{ [ $dbh->errstr ] }\n"; print STDERR "Aborting.\n"; exit( 1 ); } $sequence_sth->execute; if( $sequence_sth->err ) { print STDERR "@{ [ $sequence_sth->errstr ] }\n"; print STDERR "Aborting.\n"; exit( 1 ); } print "# Sequences\n"; my $id = 1; while( my $sequence = $sequence_sth->fetchrow_array ) { print "set add sequence ( set id = 1, origin = 1, id = $id, fully qualified name = 'public.$sequence' );\n"; $id++; } $sequence_sth->finish; print "\n"; print "# Constrained Tables\n"; my $constrained_table_sql = <prepare( $constrained_table_sql ); if( $dbh->err ) { print STDERR "@{ [ $dbh->errstr ] }\n"; print STDERR "Aborting.\n"; exit( 1 ); } $constrained_table_sth->execute; if( $constrained_table_sth->err ) { print STDERR "@{ [ $constrained_table_sth->errstr ] }\n"; print STDERR "Aborting.\n"; exit( 1 ); } while( my $constrained_table = $constrained_table_sth->fetchrow_array ) { print "set add table ( set id = 1, origin = 1, id = $id, fully qualified name = 'public.$constrained_table' );\n"; $id++; } $constrained_table_sth->finish; print "\n"; print "# Unconstrained Tables\n"; my $unconstrained_table_sql = <prepare( $unconstrained_table_sql ); if( $dbh->err ) { print STDERR "@{ [ $dbh->errstr ] }\n"; print STDERR "Aborting.\n"; exit( 1 ); } $unconstrained_table_sth->execute; if( $unconstrained_table_sth->err ) { print STDERR "@{ [ $unconstrained_table_sth->errstr ] }\n"; print STDERR "Aborting.\n"; exit( 1 ); } while( my $unconstrained_table = $unconstrained_table_sth->fetchrow_array ) { print "table add key ( node id = 1, fully qualified name = 'public.$unconstrained_table' );\n"; print "set add table ( set id = 1, origin = 1, id = $id, fully qualified name = 'public.$unconstrained_table', key = serial );\n"; $id++; } $unconstrained_table_sth->finish; $dbh->disconnect; print <<'EOF'; store node ( id = 2, comment = 'Node 2' ); store path ( server = 1, client = 2, conninfo = 'dbname=$DBNAME1 host=$HOST1 user=$SLONY_USER'); store path ( server = 2, client = 1, conninfo = 'dbname=$DBNAME2 host=$HOST2 user=$SLONY_USER'); store listen ( origin = 1, provider = 1, receiver = 2 ); store listen ( origin = 2, provider = 2, receiver = 1 ); _EOF_ EOF