diff --git a/role_scripts/10/primary/start.sh b/role_scripts/10/primary/start.sh index 81d7b7c..62ffbfc 100755 --- a/role_scripts/10/primary/start.sh +++ b/role_scripts/10/primary/start.sh @@ -180,24 +180,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi # ref: https://superuser.com/a/246841/985093 cat /tmp/postgresql.conf $PGDATA/postgresql.conf >"/tmp/postgresql.conf.tmp" && mv "/tmp/postgresql.conf.tmp" "$PGDATA/postgresql.conf" diff --git a/role_scripts/10/standby/ha_backup_job.sh b/role_scripts/10/standby/ha_backup_job.sh index f38682d..d4c1064 100755 --- a/role_scripts/10/standby/ha_backup_job.sh +++ b/role_scripts/10/standby/ha_backup_job.sh @@ -98,24 +98,35 @@ else fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then echo "ssl = on" >>/tmp/postgresql.conf diff --git a/role_scripts/10/standby/run.sh b/role_scripts/10/standby/run.sh index da7dc4d..31a441c 100755 --- a/role_scripts/10/standby/run.sh +++ b/role_scripts/10/standby/run.sh @@ -163,24 +163,35 @@ else fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then echo "ssl = on" >>/tmp/postgresql.conf diff --git a/role_scripts/10/standby/warm_stanby.sh b/role_scripts/10/standby/warm_stanby.sh index 518c8ed..aa7a7d4 100755 --- a/role_scripts/10/standby/warm_stanby.sh +++ b/role_scripts/10/standby/warm_stanby.sh @@ -39,24 +39,35 @@ echo "hot_standby = off" >>/tmp/postgresql.conf if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then echo "ssl = on" >>/tmp/postgresql.conf diff --git a/role_scripts/11/primary/start.sh b/role_scripts/11/primary/start.sh index 7327172..88639ca 100755 --- a/role_scripts/11/primary/start.sh +++ b/role_scripts/11/primary/start.sh @@ -221,24 +221,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi # ref: https://superuser.com/a/246841/985093 cat /tmp/postgresql.conf $PGDATA/postgresql.conf >"/tmp/postgresql.conf.tmp" && mv "/tmp/postgresql.conf.tmp" "$PGDATA/postgresql.conf" diff --git a/role_scripts/11/standby/ha_backup_job.sh b/role_scripts/11/standby/ha_backup_job.sh index 6ad580a..f5083be 100755 --- a/role_scripts/11/standby/ha_backup_job.sh +++ b/role_scripts/11/standby/ha_backup_job.sh @@ -97,24 +97,35 @@ else fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/11/standby/run.sh b/role_scripts/11/standby/run.sh index 1f557c8..4eb0a72 100755 --- a/role_scripts/11/standby/run.sh +++ b/role_scripts/11/standby/run.sh @@ -166,24 +166,35 @@ else fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then echo "ssl = on" >>/tmp/postgresql.conf diff --git a/role_scripts/11/standby/warm_stanby.sh b/role_scripts/11/standby/warm_stanby.sh index ba5a474..006617f 100755 --- a/role_scripts/11/standby/warm_stanby.sh +++ b/role_scripts/11/standby/warm_stanby.sh @@ -39,24 +39,35 @@ echo "shared_preload_libraries = 'pg_stat_statements'" >>/tmp/postgresql.conf if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/12/primary/start.sh b/role_scripts/12/primary/start.sh index d78266f..d11f018 100755 --- a/role_scripts/12/primary/start.sh +++ b/role_scripts/12/primary/start.sh @@ -241,24 +241,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi # ref: https://superuser.com/a/246841/985093 diff --git a/role_scripts/12/standby/ha_backup_job.sh b/role_scripts/12/standby/ha_backup_job.sh index 4d645a9..1ae79cc 100755 --- a/role_scripts/12/standby/ha_backup_job.sh +++ b/role_scripts/12/standby/ha_backup_job.sh @@ -99,24 +99,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/12/standby/run.sh b/role_scripts/12/standby/run.sh index dbaff6e..d60ff98 100755 --- a/role_scripts/12/standby/run.sh +++ b/role_scripts/12/standby/run.sh @@ -166,24 +166,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then echo "ssl = on" >>/tmp/postgresql.conf diff --git a/role_scripts/12/standby/warm_stanby.sh b/role_scripts/12/standby/warm_stanby.sh index 20a73ac..7c182c6 100755 --- a/role_scripts/12/standby/warm_stanby.sh +++ b/role_scripts/12/standby/warm_stanby.sh @@ -48,24 +48,35 @@ echo "hot_standby = off" >>/tmp/postgresql.conf if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then echo "ssl = on" >>/tmp/postgresql.conf diff --git a/role_scripts/13/primary/start.sh b/role_scripts/13/primary/start.sh index 0675b8d..50e446c 100755 --- a/role_scripts/13/primary/start.sh +++ b/role_scripts/13/primary/start.sh @@ -271,24 +271,35 @@ else fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi # ref: https://superuser.com/a/246841/985093 diff --git a/role_scripts/13/standby/ha_backup_job.sh b/role_scripts/13/standby/ha_backup_job.sh index b62d3c2..9dbdf52 100755 --- a/role_scripts/13/standby/ha_backup_job.sh +++ b/role_scripts/13/standby/ha_backup_job.sh @@ -99,24 +99,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then echo "ssl = on" >>/tmp/postgresql.conf diff --git a/role_scripts/13/standby/run.sh b/role_scripts/13/standby/run.sh index 17a6a74..259d4f7 100755 --- a/role_scripts/13/standby/run.sh +++ b/role_scripts/13/standby/run.sh @@ -169,24 +169,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/13/standby/warm_stanby.sh b/role_scripts/13/standby/warm_stanby.sh index 6eb8c8d..f77be34 100755 --- a/role_scripts/13/standby/warm_stanby.sh +++ b/role_scripts/13/standby/warm_stanby.sh @@ -42,24 +42,35 @@ echo "shared_preload_libraries = 'pg_stat_statements'" >>/tmp/postgresql.conf if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/14/primary/start.sh b/role_scripts/14/primary/start.sh index 2202449..9bff7aa 100755 --- a/role_scripts/14/primary/start.sh +++ b/role_scripts/14/primary/start.sh @@ -278,24 +278,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi # ref: https://superuser.com/a/246841/985093 diff --git a/role_scripts/14/standby/ha_backup_job.sh b/role_scripts/14/standby/ha_backup_job.sh index 28bffd8..5038380 100755 --- a/role_scripts/14/standby/ha_backup_job.sh +++ b/role_scripts/14/standby/ha_backup_job.sh @@ -99,24 +99,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then echo "ssl = on" >>/tmp/postgresql.conf diff --git a/role_scripts/14/standby/run.sh b/role_scripts/14/standby/run.sh index 36b7f92..74ea25a 100755 --- a/role_scripts/14/standby/run.sh +++ b/role_scripts/14/standby/run.sh @@ -169,25 +169,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - -# https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - # this needs to be changed for read replicas - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/14/standby/warm_stanby.sh b/role_scripts/14/standby/warm_stanby.sh index 26e12bf..df05ee9 100755 --- a/role_scripts/14/standby/warm_stanby.sh +++ b/role_scripts/14/standby/warm_stanby.sh @@ -42,24 +42,35 @@ echo "shared_preload_libraries = 'pg_stat_statements'" >>/tmp/postgresql.conf if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/15/primary/start.sh b/role_scripts/15/primary/start.sh index 6bc863b..5f73009 100755 --- a/role_scripts/15/primary/start.sh +++ b/role_scripts/15/primary/start.sh @@ -279,24 +279,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi # ref: https://superuser.com/a/246841/985093 diff --git a/role_scripts/15/standby/ha_backup_job.sh b/role_scripts/15/standby/ha_backup_job.sh index 2480264..040a43c 100755 --- a/role_scripts/15/standby/ha_backup_job.sh +++ b/role_scripts/15/standby/ha_backup_job.sh @@ -101,24 +101,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then echo "ssl = on" >>/tmp/postgresql.conf diff --git a/role_scripts/15/standby/run.sh b/role_scripts/15/standby/run.sh index 92bdf71..2db653a 100755 --- a/role_scripts/15/standby/run.sh +++ b/role_scripts/15/standby/run.sh @@ -168,25 +168,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - -# https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - # this needs to be changed for read replicas - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/15/standby/warm_stanby.sh b/role_scripts/15/standby/warm_stanby.sh index 65bd3d1..d6ae859 100755 --- a/role_scripts/15/standby/warm_stanby.sh +++ b/role_scripts/15/standby/warm_stanby.sh @@ -43,24 +43,35 @@ echo "shared_preload_libraries = 'pg_stat_statements'" >>/tmp/postgresql.conf if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/16/primary/start.sh b/role_scripts/16/primary/start.sh index a063073..5dc2a7b 100755 --- a/role_scripts/16/primary/start.sh +++ b/role_scripts/16/primary/start.sh @@ -277,24 +277,35 @@ else fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi # ref: https://superuser.com/a/246841/985093 diff --git a/role_scripts/16/standby/ha_backup_job.sh b/role_scripts/16/standby/ha_backup_job.sh index fe94164..e9c8003 100755 --- a/role_scripts/16/standby/ha_backup_job.sh +++ b/role_scripts/16/standby/ha_backup_job.sh @@ -101,24 +101,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then echo "ssl = on" >>/tmp/postgresql.conf diff --git a/role_scripts/16/standby/run.sh b/role_scripts/16/standby/run.sh index 55e420d..7a865db 100755 --- a/role_scripts/16/standby/run.sh +++ b/role_scripts/16/standby/run.sh @@ -170,24 +170,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/16/standby/warm_stanby.sh b/role_scripts/16/standby/warm_stanby.sh index 9ad3eeb..a1eff58 100755 --- a/role_scripts/16/standby/warm_stanby.sh +++ b/role_scripts/16/standby/warm_stanby.sh @@ -43,24 +43,35 @@ echo "shared_preload_libraries = 'pg_stat_statements'" >>/tmp/postgresql.conf if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/17/primary/start.sh b/role_scripts/17/primary/start.sh index d636bb6..0eae773 100755 --- a/role_scripts/17/primary/start.sh +++ b/role_scripts/17/primary/start.sh @@ -282,24 +282,35 @@ else fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi # ref: https://superuser.com/a/246841/985093 diff --git a/role_scripts/17/standby/ha_backup_job.sh b/role_scripts/17/standby/ha_backup_job.sh index fe94164..e9c8003 100755 --- a/role_scripts/17/standby/ha_backup_job.sh +++ b/role_scripts/17/standby/ha_backup_job.sh @@ -101,24 +101,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then echo "ssl = on" >>/tmp/postgresql.conf diff --git a/role_scripts/17/standby/run.sh b/role_scripts/17/standby/run.sh index 9e774f2..5e54fe0 100755 --- a/role_scripts/17/standby/run.sh +++ b/role_scripts/17/standby/run.sh @@ -171,25 +171,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - # this needs to be changed for read replicas - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/17/standby/warm_stanby.sh b/role_scripts/17/standby/warm_stanby.sh index 9ad3eeb..a1eff58 100755 --- a/role_scripts/17/standby/warm_stanby.sh +++ b/role_scripts/17/standby/warm_stanby.sh @@ -43,24 +43,35 @@ echo "shared_preload_libraries = 'pg_stat_statements'" >>/tmp/postgresql.conf if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/18/primary/start.sh b/role_scripts/18/primary/start.sh index 7610a4a..85c91fc 100755 --- a/role_scripts/18/primary/start.sh +++ b/role_scripts/18/primary/start.sh @@ -275,24 +275,35 @@ else fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi # ref: https://superuser.com/a/246841/985093 diff --git a/role_scripts/18/standby/ha_backup_job.sh b/role_scripts/18/standby/ha_backup_job.sh index fe94164..e9c8003 100755 --- a/role_scripts/18/standby/ha_backup_job.sh +++ b/role_scripts/18/standby/ha_backup_job.sh @@ -101,24 +101,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then echo "ssl = on" >>/tmp/postgresql.conf diff --git a/role_scripts/18/standby/run.sh b/role_scripts/18/standby/run.sh index 9e774f2..5e54fe0 100755 --- a/role_scripts/18/standby/run.sh +++ b/role_scripts/18/standby/run.sh @@ -171,25 +171,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - # this needs to be changed for read replicas - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/18/standby/warm_stanby.sh b/role_scripts/18/standby/warm_stanby.sh index 9ad3eeb..a1eff58 100755 --- a/role_scripts/18/standby/warm_stanby.sh +++ b/role_scripts/18/standby/warm_stanby.sh @@ -43,24 +43,35 @@ echo "shared_preload_libraries = 'pg_stat_statements'" >>/tmp/postgresql.conf if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=${HOSTNAME##*[!0-9]} - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=${names%,} - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/9/primary/start.sh b/role_scripts/9/primary/start.sh index 7bd5a5b..9978c85 100755 --- a/role_scripts/9/primary/start.sh +++ b/role_scripts/9/primary/start.sh @@ -175,24 +175,35 @@ fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi # ref: https://superuser.com/a/246841/985093 diff --git a/role_scripts/9/standby/ha_backup_job.sh b/role_scripts/9/standby/ha_backup_job.sh index 27e68fd..28c891b 100755 --- a/role_scripts/9/standby/ha_backup_job.sh +++ b/role_scripts/9/standby/ha_backup_job.sh @@ -99,24 +99,35 @@ else fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/9/standby/run.sh b/role_scripts/9/standby/run.sh index d4f8c67..5b47a9f 100755 --- a/role_scripts/9/standby/run.sh +++ b/role_scripts/9/standby/run.sh @@ -158,24 +158,35 @@ else fi if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then diff --git a/role_scripts/9/standby/warm_stanby.sh b/role_scripts/9/standby/warm_stanby.sh index 32d18e9..48184af 100755 --- a/role_scripts/9/standby/warm_stanby.sh +++ b/role_scripts/9/standby/warm_stanby.sh @@ -40,24 +40,35 @@ echo "hot_standby = off" >>/tmp/postgresql.conf if [[ "$STREAMING" == "synchronous" ]]; then # setup synchronous streaming replication - echo "synchronous_commit = remote_write" >>/tmp/postgresql.conf - - # https://stackoverflow.com/a/44092231/244009 - self_idx=$(echo $HOSTNAME | grep -Eo '[0-9]+$') - echo "$self_idx" - - shopt -s extglob - sts_prefix=${HOSTNAME%%+([0-9])} - names="" - for ((i = 0; i < $REPLICAS; i++)); do - if [[ $self_idx == $i ]]; then - echo "skip $i" - else - names+="\"$sts_prefix$i\"," - fi - done - names=$(echo "$names" | rev | cut -c2- | rev) - echo "synchronous_standby_names = 'ANY 1 ("$names")'" >>/tmp/postgresql.conf + echo "synchronous_commit = ${SYNC_COMMIT_LEVEL:-remote_write}" >>/tmp/postgresql.conf + + if [[ "${SYNC_USE_WILDCARD:-false}" == "true" ]]; then + names="*" + elif [[ -n "${SYNC_STANDBY_NAMES:-}" ]]; then + names="" + IFS=',' read -ra _standby_list <<< "$SYNC_STANDBY_NAMES" + for _name in "${_standby_list[@]}"; do + names+="\"${_name}\"", + done + names="${names%,}" + else + # https://stackoverflow.com/a/44092231/244009 + self_idx=${HOSTNAME##*[!0-9]} + echo "$self_idx" + + shopt -s extglob + sts_prefix=${HOSTNAME%%+([0-9])} + names="" + for ((i = 0; i < $REPLICAS; i++)); do + if [[ $self_idx == $i ]]; then + echo "skip $i" + else + names+="\"$sts_prefix$i\"", + fi + done + names=${names%,} + fi + echo "synchronous_standby_names = '${SYNC_REPLICATION_MODE:-ANY} ${NUM_SYNC_REPLICAS:-1} ("$names")'" >>/tmp/postgresql.conf fi if [[ "${SSL:-0}" == "ON" ]]; then