PG_CTL=$PGBIN/pg_ctl
PSQL=$PGBIN/psql
+# get PostgreSQL major version
+PGVERSION=`$INITDB -V|awk '{print $3}'|sed 's/\..*//'|sed 's/\([0-9]*\)[a-zA-Z].*/\1/'`
+echo PostgreSQL major version: $PGVERSION
+
# pgpool-II configuration file localtion.
CONF=$BASEDIR/etc/pgpool.conf
# failover script
echo "max_wal_senders = $NUMCLUSTERS" >> $PGCONF
echo "archive_mode = on" >> $PGCONF
echo "archive_command = 'cp %p $BASEDIR/archivedir/%f </dev/null'" >> $PGCONF
+ if [ $PGVERSION -ge 12 ];then
+ echo "include_if_exists = 'myrecovery.conf'" >> $PGCONF
+ fi
+
elif [ $MODE = 'r' ];then
echo "wal_level = archive" >> $PGCONF
echo "archive_mode = on" >> $PGCONF
PORT=$4
log=$DATADIR_BASE/log/recovery.log
+touch standby.signal
$psql -p $PORT -c "SELECT pg_start_backup('Streaming Replication', true)" postgres
mkdir $DEST_CLUSTER/pg_xlog
chmod 700 $DEST_CLUSTER/pg_xlog
rm $DEST_CLUSTER/recovery.done
+rm standby.signal
+EOF
+
+if [ $PGVERSION -ge 12 ];then
+ cat >> $1/$SCRIPT <<'EOF'
+cat > $DEST_CLUSTER/myrecovery.conf <<REOF
+primary_conninfo = 'port=$PORT user=$PGSUPERUSER'
+recovery_target_timeline='latest'
+restore_command = 'cp $DATADIR_BASE/archivedir/%f "%p" 2> /dev/null'
+REOF
+EOF
+
+else
+ cat >> $1/$SCRIPT <<'EOF'
cat > $DEST_CLUSTER/recovery.conf <<REOF
standby_mode = 'on'
primary_conninfo = 'port=$PORT user=$PGSUPERUSER'
recovery_target_timeline='latest'
restore_command = 'cp $DATADIR_BASE/archivedir/%f "%p" 2> /dev/null'
REOF
+EOF
+fi
+cat >> $1/$SCRIPT <<'EOF'
$psql -p $PORT -c "SELECT pg_stop_backup()" postgres
EOF
# argument2: cluster No. we assume that data0 is primary
#-------------------------------------------
function create_recovery_conf {
-if [ $2 = "0" ];then
+ if [ $PGVERSION -ge 12 ];then
+ fname=myrecovery.conf
+ elif [ $2 = "0" ];then
fname=recovery.done
-else
+ else
fname=recovery.conf
-fi
+ fi
-cat > $1/$fname <<EOF
+ if [ $PGVERSION -lt 12 ];then
+ cat > $1/$fname <<EOF
standby_mode = 'on'
+EOF
+ fi
+
+ cat > $1/$fname <<EOF
primary_conninfo = 'port=$BASEPORT user=$WHOAMI'
recovery_target_timeline='latest'
restore_command = 'cp $BASEDIR/archivedir/%f "%p" 2> /dev/null'
EOF
}
+function set_pool_hba_conf {
+ POOL_HBACONF=$1
+ sed -i '/host.*all.*all.*trust$/s/^/#/g' $POOL_HBACONF
+ sed -i '/local.*all.*all.*trust$/s/^/#/g' $POOL_HBACONF
+
+ if [ $PGVERSION -gt 9 ];
+ then
+ echo "host all scram_user 0/0 scram-sha-256" >> $POOL_HBACONF
+ echo "host all md5_user 0/0 md5" >> $POOL_HBACONF
+
+ echo "local all scram_user scram-sha-256" >> $POOL_HBACONF
+ echo "local all md5_user md5" >> $POOL_HBACONF
+ fi
+
+ echo "local all all trust" >> $POOL_HBACONF
+
+ echo "host all all 127.0.0.1/32 trust" >> $POOL_HBACONF
+ echo "host all all ::1/128 trust" >> $POOL_HBACONF
+}
+
#-------------------------------------------
# set pgpool.conf
# argument: absolute path to pgpool.conf