pgpool2.git / summary / log / commit / refs

commit    0da35ce53cc3d6c71a7f77af50ecc38339d6df98
Author:   Tatsuo Ishii <ishii@postgresql.org>
Date:     Fri Apr 05 03:22:15 2013 +0000

    Add tool called pgpool_setup to set up pgpool-II and PostgreSQL
    temporary installation in current directory for *testing* purpose.
    
    usage: pgpool_setup [-m r|s]
     -m s: create an installation as streaming replication mode.
     (the default)
     -m r: create an installation as native replication mode.


test/pgpool_setup | 703 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 703 insertions(+) diff --git a/test/pgpool_setup b/test/pgpool_setup new file mode 100755 index 000000000..89e7fda84 --- /dev/null +++ b/test/pgpool_setup @@ -0,0 +1,703 @@ +#! /bin/sh +# Copyright (c) 2013 PgPool Global Development Group +# +# Permission to use, copy, modify, and distribute this software and +# its documentation for any purpose and without fee is hereby +# granted, provided that the above copyright notice appear in all +# copies and that both that copyright notice and this permission +# notice appear in supporting documentation, and that the name of the +# author not be used in advertising or publicity pertaining to +# distribution of the software without specific, written prior +# permission. The author makes no representations about the +# suitability of this software for any purpose. It is provided "as +# is" without express or implied warranty. +#------------------------------------------------------------------- +# Set up pgpool-II and PostgreSQL temporary installation in current +# directory for *testing* purpose. +# Do not use this tool for production environment! +# +# usage: pgpool_setup [-m r|s] +# -m s: create an installation as streaming replication mode. +# (the default) +# -m r: create an installation as native replication mode. +# +# The user run this script will become the PostgreSQL super user as +# well. Current directory must be empty. Assume that appropreate +# pgpool and PostgreSQL binaries are in the command search path. +# +# Rayout after executing this script: +# data[0-]: PostgreSQL database clusters +# log: pgpool.log and pgpool_status resides here +# run: pgpool-II pid file resides here(generated by pgpool-II) +# etc/pgpool.conf: pgpool-II configuration file +# etc/pool_passwd: generated by pgpool-II +# ./startall: a script to start pgpool-II and all PostgreSQL servers +# ./shutdownall: a script to shutdown pgpool-II and all PostgreSQL servers +# +# test database "test" is created. +# pcp username and password is set to the person who executed this script. +# +#------------------------------------------- +# Configuration section +#------------------------------------------- +# Starting port number to be used. Each PostgreSQL is assigned +# $BASEPORT, $BASEPORT+1 and so on. +# pgpool port and pcp_port will be assigned afterwards. +BASEPORT=11000 +# Number of PostgreSQL database clusters +# XXX: more than two PostgreSQL clusters can be created but some of +# part like failover script will not work correctly. +NUMCLUSTERS=2 +# Where to look for pgpool.conf.sample* +PGPOOLDIR=/usr/local/etc +# LD_LIBRARY_PATH +LPATH=/usr/local/pgsql/lib +# initdb args +INITDBARG="--no-locale -E UTF_8" +#------------------------------------------- +# End of configuration section +#------------------------------------------- +# +# user name +WHOAMI=`whoami` + +# our root directory +BASEDIR=`pwd` + +# PostgreSQL bin directory +PGBIN=`pg_config --bindir` || (echo "$0: cannot locate pg_config";exit 1) +INITDB=$PGBIN/initdb +PG_CTL=$PGBIN/pg_ctl +PSQL=$PGBIN/psql + +# pgpool-II configuration file localtion. +CONF=$BASEDIR/etc/pgpool.conf +# failover script +FAILOVER_SCRIPT=$BASEDIR/etc/failover.sh +# pgpool_remote_start +PGPOOL_REMOTE_START_SCRIPT=pgpool_remote_start +# Start script name. This will be generated in this script. +STARTALL=$BASEDIR/startall +# Shutdown script name. This will be generated in this script. +SHUTDOWNALL=$BASEDIR/shutdownall + +#------------------------------------------- +# create failover script +#------------------------------------------- +function create_failover_script() +{ +cat >> $FAILOVER_SCRIPT <<'EOF' +#! /bin/sh +# Execute command by failover. +# special values: %d = node id +# %h = host name +# %p = port number +# %D = database cluster path +# %m = new master node id +# %M = old master node id +# %H = new master node host name +# %P = old primary node id +# %% = '%' character +# %R = new master database cluster path +# %% = '%' character +failed_node_id=$1 +failed_host_name=$2 +failed_port=$3 +failed_db_cluster=$4 +new_master_id=$5 +old_master_id=$6 +new_master_host_name=$7 +old_primary_node_id=$8 +new_master_port_number=$9 +new_master_db_cluster=${10} +mydir=__MYDIR__ +log=$mydir/log/failover.log +pg_ctl=__PGBIN__/pg_ctl +cluster0=$mydir/data0 +cluster1=$mydir/data1 + +date >> $log +echo "failed_node_id $failed_node_id failed_host_name $failed_host_name failed_port $failed_port failed_db_cluster $failed_db_cluster new_master_id $new_master_id old_master_id $old_master_id new_master_host_name $new_master_host_name old_primary_node_id $old_primary_node_id new_master_port_number $new_master_port_number new_master_db_cluster $new_master_db_cluster" >> $log + +if [ $failed_node_id = $old_primary_node_id ];then # master failed + if [ $failed_node_id = 0 ];then + echo $pg_ctl -D $cluster1 promote >>$log # let standby take over + $pg_ctl -D $cluster1 promote >>$log # let standby take over + else + echo $pg_ctl -D $cluster0 promote >>$log # let standby take over + $pg_ctl -D $cluster0 promote >>$log # let standby take over + fi +fi +EOF + +#------------------------------------------- +# replace some variables in the script +#------------------------------------------- +/bin/ed $FAILOVER_SCRIPT <<EOF +/__MYDIR__/s@__MYDIR__@$BASEDIR@ +/__PGBIN__/s@__PGBIN__@$PGBIN@ +w +q +EOF + +chmod 755 $FAILOVER_SCRIPT +} + +#------------------------------------------- +# create pgpool_remote_start script +# argument: PostgreSQL database cluster directory +#------------------------------------------- +function create_pgpool_remote_start_script() +{ +cat >> $1/$PGPOOL_REMOTE_START_SCRIPT <<'EOF' +#! /bin/sh +# +# start postmaster on the recoveried node +# +if [ $# -ne 2 ] +then + echo "pgpool_remote_start remote_host remote_datadir" + exit 1 +fi + +DEST=$1 +DESTDIR=$2 +PGCTL=__PGBIN__/pg_ctl + +ssh -T $DEST $PGCTL -w -D $DESTDIR start 2>/dev/null 1>/dev/null < /dev/null & +EOF + +#------------------------------------------- +# replace some variables in the script +#------------------------------------------- +/bin/ed $1/$PGPOOL_REMOTE_START_SCRIPT <<EOF +/__PGBIN__/s@__PGBIN__@$PGBIN@ +w +q +EOF + +chmod 755 $1/$PGPOOL_REMOTE_START_SCRIPT + +} + +#------------------------------------------- +# set postgresql.conf +# argument: PostgreSQL database cluster directory +#------------------------------------------- +function set_postgresql_conf +{ + PGCONF=$1/postgresql.conf + + echo "listen_addresses = '*'" >> $PGCONF + echo "port = $PORT" >> $PGCONF + echo "logging_collector = on" >> $PGCONF + echo "log_filename = '%A.log'" >> $PGCONF + echo "log_line_prefix = '%p %t '" >> $PGCONF + echo "log_truncate_on_rotation = on" >> $PGCONF + echo "log_statement = 'all'" >> $PGCONF + echo "max_prepared_transactions = 10" >> $PGCONF + + if [ $MODE = "s" ];then + echo "hot_standby = on" >> $PGCONF + echo "wal_level = hot_standby" >> $PGCONF + echo "max_wal_senders = 2" >> $PGCONF + echo "archive_mode = on" >> $PGCONF + echo "archive_command = 'cp %p $BASEDIR/archivedir/%f </dev/null'" >> $PGCONF + else + echo "wal_level = archive" >> $PGCONF + echo "archive_mode = on" >> $PGCONF + echo "archive_command = 'cp %p $BASEDIR/archivedir/%f </dev/null'" >> $PGCONF + fi + + ed $1/pg_hba.conf <<EOF +/^#local *replication/s/^#//p +/^#host *replication/s/^#//p +/^#host *replication/s/^#//p +w +q +EOF + +} + +#------------------------------------------- +# create basebackup.sh for streaming replication mode +# argument: PostgreSQL database cluster directory +#------------------------------------------- +function create_basebackup_stream { +SCRIPT=basebackup.sh +cat >> $1/$SCRIPT <<'EOF' +#! /bin/sh +psql=__PGBIN__/psql +DATA0_PORT=__DATA0_PORT__ +DATA1_PORT=`expr $DATA0_PORT + 1` +DATA2_PORT=`expr $DATA1_PORT + 1` +DATADIR_BASE=__DATADIR_BASE__ +DATA0_DIR=${DATADIR_BASE}"/data0" +DATA1_DIR=${DATADIR_BASE}"/data1" +DATA2_DIR=${DATADIR_BASE}"/data2" +PGSUPERUSER=__PGSUPERUSER__ + +master_db_cluster=$1 +recovery_node_host_name=$2 +DEST_CLUSTER=$3 + +log=$DATADIR_BASE/log/recovery.log + +if [ $master_db_cluster = $DATA0_DIR ];then + PORT=$DATA0_PORT + SOURCE_CLUSTER=$DATA0_DIR +elif [ $master_db_cluster = $DATA1_DIR ];then + PORT=$DATA1_PORT + SOURCE_CLUSTER=$DATA1_DIR +else + PORT=$DATA2_PORT + SOURCE_CLUSTER=$DATA2_DIR +fi + +$psql -p $PORT -c "SELECT pg_start_backup('Streaming Replication', true)" postgres + +echo "source: $SOURCE_CLUSTER dest: $DEST_CLUSTER" > $log + +rsync -C -a -c --delete --exclude postgresql.conf --exclude postmaster.pid \ +--exclude postmaster.opts --exclude pg_log \ +--exclude recovery.conf --exclude recovery.done \ +--exclude pg_xlog \ +$SOURCE_CLUSTER/ $DEST_CLUSTER/ + +rm -fr $DEST_CLUSTER/pg_xlog +mkdir $DEST_CLUSTER/pg_xlog +chmod 700 $DEST_CLUSTER/pg_xlog +rm $DEST_CLUSTER/recovery.done +cat > $DEST_CLUSTER/recovery.conf <<REOF +standby_mode = 'on' +primary_conninfo = 'port=$PORT user=$PGSUPERUSER' +recovery_target_timeline='latest' +REOF + +$psql -p $PORT -c "SELECT pg_stop_backup()" postgres +EOF + +#------------------------------------------- +# replace some variables in the script +#------------------------------------------- +/bin/ed $1/$SCRIPT <<EOF +/__PGBIN__/s@__PGBIN__@$PGBIN@ +/__DATA0_PORT__/s/__DATA0_PORT__/$BASEPORT/ +/__DATADIR_BASE__/s@__DATADIR_BASE__@$BASEDIR@ +/__PGSUPERUSER__/s/__PGSUPERUSER__/$WHOAMI/ +w +q +EOF + +chmod 755 $1/$SCRIPT + +} + +#------------------------------------------- +# create basebackup.sh for native replication mode +# argument: PostgreSQL database cluster directory +#------------------------------------------- +function create_basebackup_replication { +SCRIPT=basebackup.sh +cat >> $1/$SCRIPT <<'EOF' +#! /bin/sh +psql=__PGBIN__/psql +DATA0_PORT=__DATA0_PORT__ +DATA1_PORT=`expr $DATA0_PORT + 1` +DATA2_PORT=`expr $DATA1_PORT + 1` +DATADIR_BASE=__DATADIR_BASE__ +DATA0_DIR=${DATADIR_BASE}"/data0" +DATA1_DIR=${DATADIR_BASE}"/data1" +DATA2_DIR=${DATADIR_BASE}"/data2" +PGSUPERUSER=__PGSUPERUSER__ + +master_db_cluster=$1 +recovery_node_host_name=$2 +DEST_CLUSTER=$3 + +log=$DATADIR_BASE/log/recovery.log + +if [ $master_db_cluster = $DATA0_DIR ];then + PORT=$DATA0_PORT + SOURCE_CLUSTER=$DATA0_DIR +elif [ $master_db_cluster = $DATA1_DIR ];then + PORT=$DATA1_PORT + SOURCE_CLUSTER=$DATA1_DIR +else + PORT=$DATA2_PORT + SOURCE_CLUSTER=$DATA2_DIR +fi + +$psql -p $PORT -c "SELECT pg_start_backup('Native Replication', true)" postgres + +echo "source: $SOURCE_CLUSTER dest: $DEST_CLUSTER" > $log + +cat > $SOURCE_CLUSTER/recovery.conf <<REOF +restore_command = 'cp __ARCHDIR__/%f %p' +REOF + +rsync -C -a -c --delete --exclude postgresql.conf --exclude postmaster.pid \ +--exclude postmaster.opts --exclude pg_log \ +--exclude recovery.done \ +--exclude pg_xlog \ +$SOURCE_CLUSTER/ $DEST_CLUSTER/ + +rm -fr $DEST_CLUSTER/pg_xlog +mkdir $DEST_CLUSTER/pg_xlog +chmod 700 $DEST_CLUSTER/pg_xlog + +$psql -p $PORT -c "SELECT pg_stop_backup()" postgres +EOF + +#------------------------------------------- +# replace some variables in the script +#------------------------------------------- +/bin/ed $1/$SCRIPT <<EOF +/__PGBIN__/s@__PGBIN__@$PGBIN@ +/__DATA0_PORT__/s/__DATA0_PORT__/$BASEPORT/ +/__DATADIR_BASE__/s@__DATADIR_BASE__@$BASEDIR@ +/__PGSUPERUSER__/s/__PGSUPERUSER__/$WHOAMI/ +/__ARCHDIR__/s@__ARCHDIR__@$BASEDIR/archivedir@p +w +q +EOF + +chmod 755 $1/$SCRIPT + +} + +#------------------------------------------- +# create pgpool_recovery_pitr (2nd stage script)for native replication mode +# argument: PostgreSQL database cluster directory +#------------------------------------------- +function create_pgpool_recovery_pitr { +SCRIPT=pgpool_recovery_pitr +cat >> $1/$SCRIPT <<'EOF' +#! /bin/sh +psql=__PGBIN__/psql +DATA0_PORT=__DATA0_PORT__ +DATA1_PORT=`expr $DATA0_PORT + 1` +DATA2_PORT=`expr $DATA1_PORT + 1` +DATADIR_BASE=__DATADIR_BASE__ +DATA0_DIR=${DATADIR_BASE}"/data0" +DATA1_DIR=${DATADIR_BASE}"/data1" +DATA2_DIR=${DATADIR_BASE}"/data2" +PGSUPERUSER=__PGSUPERUSER__ + +master_db_cluster=$1 +recovery_node_host_name=$2 +DEST_CLUSTER=$3 + +log=$DATADIR_BASE/log/recovery.log + +if [ $master_db_cluster = $DATA0_DIR ];then + PORT=$DATA0_PORT + SOURCE_CLUSTER=$DATA0_DIR +elif [ $master_db_cluster = $DATA1_DIR ];then + PORT=$DATA1_PORT + SOURCE_CLUSTER=$DATA1_DIR +else + PORT=$DATA2_PORT + SOURCE_CLUSTER=$DATA2_DIR +fi + +# Force to flush current value of sequences to xlog +$psql -p $PORT -t -c 'SELECT datname FROM pg_database WHERE NOT datistemplate AND datallowconn' template1| +while read i +do + if [ "$i" != "" ];then + $psql -p $PORT -c "SELECT setval(oid, nextval(oid)) FROM pg_class WHERE relkind = 'S'" $i + fi +done + +$psql -p $PORT -c "SELECT pgpool_switch_xlog('__ARCHDIR__')" template1 +EOF +#------------------------------------------- +# replace some variables in the script +#------------------------------------------- +/bin/ed $1/$SCRIPT <<EOF +/__PGBIN__/s@__PGBIN__@$PGBIN@p +/__DATA0_PORT__/s/__DATA0_PORT__/$BASEPORT/p +/__DATADIR_BASE__/s@__DATADIR_BASE__@$BASEDIR@p +/__PGSUPERUSER__/s/__PGSUPERUSER__/$WHOAMI/p +/__ARCHDIR__/s@__ARCHDIR__@$BASEDIR/archivedir@p +w +q +EOF + +chmod 755 $1/$SCRIPT + +} + +#------------------------------------------- +# create initial recovery.conf +# argument1: PostgreSQL database cluster directory +# argument2: cluster No. we assume that data0 is primary +#------------------------------------------- +function create_recovery_conf { +if [ $2 = "0" ];then + fname=recovery.done +else + fname=recovery.conf +fi + +cat > $1/$fname <<EOF +standby_mode = 'on' +primary_conninfo = 'port=$BASEPORT user=$WHOAMI' +recovery_target_timeline='latest' +restore_command = 'cp $BASEDIR/archivedir/pg_xlog/%f "%p" 2> /dev/null' +EOF +} + +#------------------------------------------- +# set pgpool.conf +# argument: absolute path to pgpool.conf +#------------------------------------------- +function set_pgpool_conf { + echo "sr_check_user = '$WHOAMI'" >> $CONF + echo "recovery_user = '$WHOAMI'" >> $CONF + echo "recovery_password = ''" >> $CONF + echo "recovery_1st_stage_command = 'basebackup.sh'" >> $CONF + + if [ $MODE = "r" ];then + echo "recovery_2nd_stage_command = 'pgpool_recovery_pitr'" >> $CONF + fi + + echo "health_check_period = 10" >> $CONF + echo "health_check_user = '$WHOAMI'" >> $CONF + + echo "log_per_node_statement = on" >> $CONF + + if [ $MODE = "s" ];then + echo "failover_command = '$FAILOVER_SCRIPT %d %h %p %D %m %M %H %P %r %R'" >> $CONF + fi +} + +################################################################################# +# +# main script +# +################################################################################ + +#------------------------------------------- +# Argument check +# usage: $0 [-m r|s]" +#------------------------------------------- +# +# default mode is streaming replication mode +MODE="s" + +while [ $# -gt 0 ] +do + if [ $1 = "-m" ];then + shift + case $1 in + r ) MODE="r";; + s ) MODE="s";; + * ) echo "usage: $0 [-m r|s]";exit 1;; + esac + elif [ $1 = "--help" -o $1 = "-o" ];then + echo "usage: $0 [-m r|s]" + exit + fi + shift +done + +case $MODE in + r) MODENAME="native replication mode" + SAMPLE_CONF=$PGPOOLDIR/pgpool.conf.sample-replication + ;; + s ) MODENAME="streaming replication mode" + SAMPLE_CONF=$PGPOOLDIR/pgpool.conf.sample-stream + ;; +esac + +#------------------------------------------- +# Make sure that current directory is empty +#------------------------------------------- +if [ "`/bin/ls`" != "" ] +then + echo "$0: Current directory is not empty. Please remove files and directories then try again." + exit 1 +fi + +exec 5> $BASEDIR/pgpool_setup.log + +#------------------------------------------- +# everything looks good. starting setup... +#------------------------------------------- +echo "Satrting set up in $MODENAME" + +#------------------------------------------- +# install pgpool.conf +#------------------------------------------- +test ! -d etc && mkdir etc +cp $SAMPLE_CONF $CONF + +#------------------------------------------- +# create startall and shutdownall +#------------------------------------------- +echo "creating startall and shutdownall" +echo "LD_LIBRARY_PATH=$LPATH" > $STARTALL +echo 'dir=`pwd`' >> $STARTALL +chmod 755 $STARTALL +echo 'dir=`pwd`' > $SHUTDOWNALL +echo 'pgpool -f $dir/etc/pgpool.conf -m f stop' >> $SHUTDOWNALL +chmod 755 $SHUTDOWNALL + +#------------------------------------------- +# create failover script +#------------------------------------------- +echo "creating failover script" +create_failover_script >&5 2>&1 + +#------------------------------------------- +# create each PostgreSQL cluster +#------------------------------------------- +n=0 +while [ $n -lt $NUMCLUSTERS ] +do + CLUSTER="data"`expr $n` + CLUSTERDIR=$BASEDIR/$CLUSTER + PORT=`expr $BASEPORT + $n` + + echo -n "creating database cluster $CLUSTERDIR..." + $INITDB -D $CLUSTERDIR $INITDBARG >&5 2>&1 + echo "done." + + # set postgresql.conf + echo "update postgreql.conf" + set_postgresql_conf $CLUSTERDIR >&5 2>&1 + + # create pgpool_remote_start script under cluster directory + echo "creating pgpool_remote_start" + create_pgpool_remote_start_script $CLUSTERDIR >&5 2>&1 + + echo "creating basebackup.sh" + # create basebackup.sh + if [ $MODE = 's' ];then + create_basebackup_stream $CLUSTERDIR >&5 2>&1 + else + create_basebackup_replication $CLUSTERDIR >&5 2>&1 + create_pgpool_recovery_pitr $CLUSTERDIR >&5 2>&1 + fi + + # create recovery.conf or recovery.done if streaming replication + # mode + if [ $MODE = "s" ];then + echo "creating recovery.conf" + create_recovery_conf $CLUSTERDIR $n >&5 2>&1 + fi + + # set up pgpool.conf + echo "backend_hostname$n = ''" >> $CONF + echo "backend_port$n = $PORT" >> $CONF + echo "backend_weight$n = 1" >> $CONF + echo "backend_data_directory$n = '$CLUSTERDIR'" >> $CONF + + echo "$PG_CTL -D $CLUSTERDIR -m f stop" >> $SHUTDOWNALL + echo "$PG_CTL -w -D $CLUSTERDIR start" >> $STARTALL + + n=`expr $n + 1` + + echo "#$n port is $PORT" >> README.port + +done + +set_pgpool_conf $CONF + +PGPOOL_PORT=`expr $PORT + 1` +echo "port = $PGPOOL_PORT" >> $CONF +PCP_PORT=`expr $PORT + 2` +echo "pcp_port = $PCP_PORT" >> $CONF + +test ! -d run && mkdir run +echo "pid_file_name = '$BASEDIR/run/pgpool.pid'" >> $CONF +test ! -d log && mkdir log +echo "logdir = '$BASEDIR/log'" >> $CONF + +echo 'pgpool -D -n -f $dir/etc/pgpool.conf -F $dir/etc/pcp.conf -a $dir/etc/pool_hba.conf > $dir/log/pgpool.log 2>&1 &' >> $STARTALL + +# create pcp.conf +cp $PGPOOLDIR/pcp.conf.sample etc/pcp.conf +echo -n "${WHOAMI}:" >> etc/pcp.conf +pg_md5 $WHOAMI >> etc/pcp.conf + +# create pool_passwd +pg_md5 -m -f etc/pgpool.conf -u $WHOAMI $WHOAMI + +# create archive directory +mkdir archivedir + +#------------------------------------------- +# if streaming replication mode, we need to create data1 and so on, by +# using on line recovery. +#------------------------------------------- + +if [ $MODE = 's' ];then +# temporarily start data0 cluster to create extensions + echo "temporarily start data0 cluster to create extensions" + $PG_CTL -w -D data0 start >&5 2>&1 + $PSQL -p $BASEPORT template1 >&5 2>&1 <<EOF +CREATE EXTENSION pgpool_regclass; +CREATE EXTENSION pgpool_recovery; +CREATE DATABASE test; +EOF + +# temporarily start pgpool + echo "temporarily start pgpool-II to create data1" + pgpool -D -n -f $BASEDIR/etc/pgpool.conf -F $BASEDIR/etc/pcp.conf -a $BASEDIR/etc/pool_hba.conf > $BASEDIR/log/pgpool.log 2>&1 & + + echo -n "waiting for failover happens..." +# wait for failover happens + sleep 5 + echo "done." + +# recovery data1 and so on + n=1 + while [ $n -lt $NUMCLUSTERS ] + do + echo -n "recovery node $n..." + pcp_recovery_node 1 localhost $PCP_PORT $WHOAMI $WHOAMI $n + echo "done." + n=`expr $n + 1` + done + + echo "shutdown all" + $SHUTDOWNALL >&5 2>&1 +fi + +echo "start all" +$STARTALL >&5 2>&1 + +echo -n "waiting for pgpool-II coming up..." +sleep 20 +echo "done." + +if [ $MODE = "r" ];then + echo "create extensions" + $PSQL -p $PGPOOL_PORT template1 >&5 2>&1 <<EOF +CREATE EXTENSION pgpool_regclass; +CREATE EXTENSION pgpool_recovery; +CREATE DATABASE test; +EOF +fi + +$PSQL -p $PGPOOL_PORT test <<EOF +show pool_nodes; +EOF + +echo "pgpool port is $PGPOOL_PORT" >> README.port +echo "pcp port is $PCP_PORT" >> README.port + +echo "shutdown all" +$SHUTDOWNALL >&5 2>&1 + +echo +echo "pgpool-II setting for $MODENAME is done." +echo "To start the whole system, use ${STARTALL}." +echo "To shutdown the whole system, use ${SHUTDOWNALL}." +echo "pcp command user name is \"$WHOAMI\", password is \"$WHOAMI\"." +echo "Each PostgreSQL, pgpool-II and pcp port is as follows:" +cat README.port +echo "The info above is in README.port." [parent: d131971561ed]