Deal with PostgreSQL 12.
authorTatsuo Ishii <ishii@sraoss.co.jp>
Mon, 29 Apr 2019 23:49:48 +0000 (08:49 +0900)
committerTatsuo Ishii <ishii@sraoss.co.jp>
Tue, 30 Apr 2019 06:32:50 +0000 (15:32 +0900)
recovery.conf cannot be used anymore. Standby's recovery configuration
is now in postgresql.conf. Also "standby.signal" file is needed in
PostgreSQL database cluster directory to start postmaster as a standby
server.

src/test/pgpool_setup

index a987a95139d62c0045e5ba9063b04117c223c88d..4859af38cfd99483ce58d984b36fd4c10fea6b26 100755 (executable)
@@ -81,6 +81,10 @@ INITDB=$PGBIN/initdb
 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
@@ -276,6 +280,10 @@ function set_postgresql_conf
                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
@@ -310,6 +318,7 @@ DEST_CLUSTER=$3
 PORT=$4
 
 log=$DATADIR_BASE/log/recovery.log
+touch standby.signal
 
 $psql -p $PORT -c "SELECT pg_start_backup('Streaming Replication', true)" postgres
 
@@ -325,13 +334,30 @@ rm -fr $DEST_CLUSTER/pg_xlog
 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
 
@@ -449,20 +475,47 @@ chmod 755 $1/$SCRIPT
 # 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