* fix #439

* add promote class
pull/447/head
mazano 2023-09-04 21:56:45 +02:00 zatwierdzone przez GitHub
rodzic 74bb497307
commit c816d5e72e
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
26 zmienionych plików z 321 dodań i 579 usunięć

Wyświetl plik

@ -730,7 +730,7 @@ Slave settings:
- **DESTROY_DATABASE_ON_RESTART**: Default is `True`. Set to 'False' to prevent this behavior. A
replicant will always destroy its current database on restart, because it will try to sync again
from `master` and avoid inconsistencies.
- **PROMOTE_MASTER**: Default none. If set to any value then the current replicant
- **PROMOTE_MASTER**: Default false. If set to `true` then the current replicant
will be promoted to master. In some cases when the `master` container has failed, we might want
to use our `replicant` as `master` for a while. However, the promoted replicant will break
consistencies and is not able to revert to replicant anymore, unless it is destroyed and

Wyświetl plik

@ -1,39 +0,0 @@
#!/bin/bash
# Commit and redeploy the user map container
#
if [ $# -ne 1 ]; then
echo "Commit and then redeploy the user_map container."
echo "Usage:"
echo "$0 <version>"
echo "e.g.:"
echo "$0 1.6"
echo "Will commit the current state of the container as version 1.6"
echo "and then redeploy it."
exit 1
fi
VERSION=$1
HOST_DATA_DIR=/var/docker-data/postgres-data
PGUSER=qgis
PGPASS=qgis
IDFILE=/home/timlinux/postgis-current-container.id
ID=`cat $IDFILE`
docker commit $ID qgis/postgis:$VERSION -run='{"Cmd": ["/start.sh"], "PortSpecs": ["5432"], "Hostname": "postgis"}' -author="Tim Sutton <tim@linfiniti.com>"
docker kill $ID
docker rm $ID
rm $IDFILE
if [ ! -d $HOST_DATA_DIR ]
then
mkdir $HOST_DATA_DIR
fi
CMD="docker run -cidfile="$IDFILE" -name="postgis" -e POSTGRES_USER=$PGUSER -e POSTGRES_PASS=$PGPASS -d -v $HOST_DATA_DIR:/var/lib/postgresql -t qgis/postgis:$VERSION /start.sh"
echo 'Running:'
echo $CMD
eval $CMD
NEWID=`cat $IDFILE`
echo "Postgis has been committed as $1 and redeployed as $NEWID"
docker ps -a | grep $NEWID
echo "If thhere was no pre-existing database, you can access this using"
IPADDRESS=`docker inspect postgis | grep IPAddress | grep -o '[0-9\.]*'`
echo "psql -l -p 5432 -h $IPADDRESS -U $PGUSER"
echo "and password $PGPASS"

Wyświetl plik

@ -1 +0,0 @@
docker-compose==1.28

Wyświetl plik

@ -1,5 +1,5 @@
version: '2.1'
version: '3.9'
volumes:
pg-data-dir:
@ -11,8 +11,6 @@ services:
pg:
image: 'kartoza/postgis:${TAG:-manual-build}'
restart: 'always'
# You can optionally mount to volume, to play with the persistence and
# observe how the node will behave after restarts.
volumes:
- pg-data-dir:/var/lib/postgresql
- ./tests:/tests
@ -35,8 +33,6 @@ services:
pg-new:
image: 'kartoza/postgis:${TAG:-manual-build}'
restart: 'always'
# You can optionally mount to volume, to play with the persistence and
# observe how the node will behave after restarts.
volumes:
- new-pg-data-dir:/opt/data/postgis
- ./tests:/tests
@ -62,8 +58,6 @@ services:
pg-gosu:
image: 'kartoza/postgis:${TAG:-manual-build}'
restart: 'always'
# You can optionally mount to volume, to play with the persistence and
# observe how the node will behave after restarts.
volumes:
- pg-data-dir-gs:/var/lib/postgresql
- ./tests:/tests

Wyświetl plik

@ -1,4 +1,4 @@
version: '2.1'
version: '3.9'
volumes:
default-pg-data-dir:
new-pg-data-dir:

Wyświetl plik

@ -1,4 +1,4 @@
version: '2.1'
version: '3.9'
volumes:
default-pg-data-dir:
new-pg-data-dir:

Wyświetl plik

@ -1,5 +1,5 @@
version: '2.1'
version: '3.9'
services:
pg:

Wyświetl plik

@ -1,4 +1,4 @@
version: '2.1'
version: '3.9'
volumes:
default-pg-data-dir-md5:
new-pg-data-dir:

Wyświetl plik

@ -1,5 +1,5 @@
version: '2.1'
version: '3.9'
volumes:
pg-publisher-data-dir:

Wyświetl plik

@ -1,5 +1,5 @@
version: '2.1'
version: '3.9'
volumes:
pg-publisher-data-dir:

Wyświetl plik

@ -1,5 +1,5 @@
version: '2.1'
version: '3.9'
volumes:
pg-db-data-dir:

Wyświetl plik

@ -0,0 +1,62 @@
version: '2.1'
volumes:
pg-master-data-dir:
pg-node-data-dir:
services:
pg-master:
image: 'kartoza/postgis:${TAG:-manual-build}'
restart: 'always'
volumes:
- pg-master-data-dir:/var/lib/postgresql
- ./tests:/tests
- ../utils:/lib/utils
- ./scripts/setup-master.sql:/docker-entrypoint-initdb.d/setup-master.sql
environment:
ALLOW_IP_RANGE: '0.0.0.0/0'
# We can specify optional credentials
POSTGRES_PASS: 'docker'
REPLICATION_USER: 'replicator'
REPLICATION_PASS: 'replicator'
REPLICATION: 'true'
RUN_AS_ROOT: false
healthcheck:
interval: 60s
timeout: 30s
retries: 3
test: "pg_isready"
pg-node:
image: 'kartoza/postgis:${TAG:-manual-build}'
restart: 'always'
volumes:
- pg-node-data-dir:/var/lib/postgresql
- ./tests:/tests
- ../utils:/lib/utils
environment:
ALLOW_IP_RANGE: '0.0.0.0/0'
POSTGRES_PASS: 'docker'
REPLICATE_FROM: 'pg-master'
REPLICATION: 'true'
RUN_AS_ROOT: false
PROMOTE_MASTER: false
DESTROY_DATABASE_ON_RESTART: 'True'
REPLICATION_USER: 'replicator'
REPLICATION_PASS: 'replicator'
depends_on:
pg-master:
condition: service_healthy
healthcheck:
interval: 60s
timeout: 30s
retries: 3
test: "pg_isready"

Wyświetl plik

@ -1,5 +1,5 @@
version: '2.1'
version: '3.9'
volumes:
pg-master-data-dir:

Wyświetl plik

@ -0,0 +1,55 @@
version: '2.1'
volumes:
pg-master-data-dir:
pg-node-data-dir:
services:
pg-master:
image: 'kartoza/postgis:${TAG:-manual-build}'
restart: 'always'
volumes:
- pg-master-data-dir:/var/lib/postgresql
- ./tests:/tests
- ../utils:/lib/utils
- ./scripts/setup-master.sql:/docker-entrypoint-initdb.d/setup-master.sql
environment:
ALLOW_IP_RANGE: '0.0.0.0/0'
# We can specify optional credentials
POSTGRES_PASS: 'docker'
REPLICATION_USER: 'replicator'
REPLICATION_PASS: 'replicator'
REPLICATION: 'true'
RUN_AS_ROOT: true
healthcheck:
interval: 60s
timeout: 30s
retries: 3
test: "pg_isready"
pg-node:
image: 'kartoza/postgis:${TAG:-manual-build}'
restart: 'always'
volumes:
- pg-node-data-dir:/var/lib/postgresql
- ./tests:/tests
- ../utils:/lib/utils
environment:
ALLOW_IP_RANGE: '0.0.0.0/0'
POSTGRES_PASS: 'docker'
REPLICATE_FROM: 'pg-master'
REPLICATION: 'true'
RUN_AS_ROOT: true
PROMOTE_MASTER: false
DESTROY_DATABASE_ON_RESTART: 'True'
REPLICATION_USER: 'replicator'
REPLICATION_PASS: 'replicator'
depends_on:
pg-master:
condition: service_healthy
healthcheck:
interval: 60s
timeout: 30s
retries: 3
test: "pg_isready"

Wyświetl plik

@ -1,5 +1,5 @@
version: '2.1'
version: '3.9'
volumes:
pg-master-data-dir:

Wyświetl plik

@ -0,0 +1,11 @@
-- Create a table
CREATE TABLE IF NOT EXISTS sweets
(
id SERIAL,
name TEXT,
price DECIMAL,
CONSTRAINT sweets_pkey PRIMARY KEY (id)
);
-- Inserts records into the table
INSERT INTO sweets (name, price) VALUES ('strawberry', 4.50), ('Coffee', 6.20), ('lollipop', 3.80);

Wyświetl plik

@ -11,8 +11,9 @@ if [[ $(dpkg -l | grep "docker-compose") > /dev/null ]];then
VERSION='docker compose'
fi
####
# Run service as root user
####
${VERSION} up -d
if [[ -n "${PRINT_TEST_LOGS}" ]]; then
@ -39,7 +40,9 @@ ${VERSION} exec -T pg-node /bin/bash /tests/test_node.sh
${VERSION} down -v
####
# Run service as none root
####
${VERSION} -f docker-compose-gs.yml up -d
if [[ -n "${PRINT_TEST_LOGS}" ]]; then
@ -64,4 +67,64 @@ done;
# Execute tests
${VERSION} -f docker-compose-gs.yml exec -T pg-node /bin/bash /tests/test_node.sh
${VERSION} -f docker-compose-gs.yml down -v
${VERSION} -f docker-compose-gs.yml down -v
####
# Run service as root user for node promotion
####
${VERSION} -f docker-compose-root-promote.yml up -d
if [[ -n "${PRINT_TEST_LOGS}" ]]; then
${VERSION} -f docker-compose-root-promote.yml logs -f &
fi
sleep 30
# Update env variable
sed -i 's/\(PROMOTE_MASTER: \)false/\1true/' docker-compose-root-promote.yml
# Bring up node with option to promote node
${VERSION} -f docker-compose-root-promote.yml up -d pg-node
# Preparing node cluster
until ${VERSION} -f docker-compose-root-promote.yml exec -T pg-node pg_isready; do
sleep 30
done;
# Execute tests
${VERSION} -f docker-compose-root-promote.yml exec -T pg-node /bin/bash /tests/test_node_promotion.sh
${VERSION} -f docker-compose-root-promote.yml down -v
sed -i 's/\(PROMOTE_MASTER: \)true/\1false/' docker-compose-root-promote.yml
####
# Run service as none root user for node promotion
####
${VERSION} -f docker-compose-gs-promote.yml up -d
if [[ -n "${PRINT_TEST_LOGS}" ]]; then
${VERSION} -f docker-compose-gs-promote.yml logs -f &
fi
sleep 30
# Update env variable
sed -i 's/\(PROMOTE_MASTER: \)false/\1true/' docker-compose-gs-promote.yml
# Bring up node with option to promote node
${VERSION} -f docker-compose-gs-promote.yml up -d pg-node
# Preparing node cluster
until ${VERSION} -f docker-compose-gs-promote.yml exec -T pg-node pg_isready; do
sleep 30
done;
# Execute tests
${VERSION} -f docker-compose-gs-promote.yml exec -T pg-node /bin/bash /tests/test_node_promotion.sh
${VERSION} -f docker-compose-gs-promote.yml down -v
sed -i 's/\(PROMOTE_MASTER: \)true/\1false/' docker-compose-gs-promote.yml

Wyświetl plik

@ -0,0 +1,13 @@
#!/usr/bin/env bash
set -e
source /scripts/env-data.sh
# execute tests
pushd /tests
PGHOST=localhost \
PGDATABASE=gis \
PYTHONPATH=/lib \
python3 -m unittest -v test_replication.TestReplicationPromotion

Wyświetl plik

@ -56,4 +56,27 @@ class TestReplicationNode(unittest.TestCase):
rows = c.fetchall()
self.assertEqual(len(rows), 1)
class TestReplicationPromotion(unittest.TestCase):
def setUp(self):
self.db = DBConnection()
def test_read_data(self):
# create new table
self.db.conn.autocommit = True
with self.db.cursor() as c:
c.execute(
"""
INSERT INTO sweets (name ,price) values ('Test', 10);
"""
)
c.execute(
"""
SELECT * FROM sweets where name = 'Test';
"""
)
rows = c.fetchone()
self.assertEqual(len(rows), 3)

Wyświetl plik

@ -10,17 +10,18 @@ class DBConnection:
def table_exists(self, table_name, table_schema='public'):
cur = self.conn.cursor()
query = (
'select '
'exists('
'select 1 '
'from information_schema.tables '
'where table_name = %s and table_schema = %s)')
cur.execute(query, (table_name, table_schema))
query = '''select exists (select 1 from information_schema.tables \
where table_name = %s and table_schema = %s)''' % (table_name, table_schema)
cur.execute(query)
try:
row = cur.fetchone()
return row[0]
except:
if row is not None:
return row[0]
else:
return None
except Exception as e:
print(f"An error occurred: {e}")
return False
@staticmethod

Wyświetl plik

@ -74,8 +74,17 @@ else
if [[ ${RUN_AS_ROOT} =~ [Ff][Aa][Ll][Ss][Ee] ]];then
non_root_permission "${USER_NAME}" "${DB_GROUP_NAME}"
else
chown -R postgres:postgres "${DATADIR}" "${WAL_ARCHIVE}"
chmod -R 750 "${DATADIR}" "${WAL_ARCHIVE}"
dir_ownership=("${DATADIR}" "${WAL_ARCHIVE}")
for directory in "${dir_ownership[@]}"; do
if [[ $(stat -c '%U' "${directory}") != "postgres" ]] && [[ $(stat -c '%G' "${directory}") != "postgres" ]];then
chown -R postgres:postgres "${directory}"
fi
done
for directory in "${dir_ownership[@]}"; do
if [ "$(stat -c %a "$directory")" != "750" ]; then
chmod -R 750 "$directory"
fi
done
fi
source /scripts/setup-replication.sh
fi

Wyświetl plik

@ -20,9 +20,10 @@ SQLDIR="/usr/share/postgresql/${POSTGRES_MAJOR_VERSION}/contrib/postgis-${POSTGI
EXTDIR="/usr/share/postgresql/${POSTGRES_MAJOR_VERSION}/extension/"
SETVARS="POSTGIS_ENABLE_OUTDB_RASTERS=1 POSTGIS_GDAL_ENABLED_DRIVERS=ENABLE_ALL"
LOCALONLY="-c listen_addresses='127.0.0.1'"
PG_BASEBACKUP="/usr/bin/pg_basebackup"
PG_BASEBACKUP="/usr/lib/postgresql/${POSTGRES_MAJOR_VERSION}/bin/pg_basebackup"
PROMOTE_FILE="/tmp/pg_promote_master"
NODE_PROMOTION="/usr/lib/postgresql/${POSTGRES_MAJOR_VERSION}/bin/pg_ctl"
DATA_DIR_CONTROL="/usr/lib/postgresql/${POSTGRES_MAJOR_VERSION}/bin/pg_controldata"
PGSTAT_TMP="/var/run/postgresql/"
PG_PID="/var/run/postgresql/${POSTGRES_MAJOR_VERSION}-main.pid"
@ -34,7 +35,7 @@ PG_PID="/var/run/postgresql/${POSTGRES_MAJOR_VERSION}-main.pid"
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function file_env {
function file_env() {
local var="$1"
local fileVar="${var}_FILE"
local def="${2:-}"
@ -65,7 +66,7 @@ function boolean() {
file_env 'POSTGRES_PASS'
file_env 'POSTGRES_USER'
file_env 'POSTGRES_DBNAME'
function create_dir() {
DATA_PATH=$1
@ -211,7 +212,7 @@ fi
if [ -z "${ARCHIVE_CLEANUP_COMMAND}" ]; then
# https://www.postgresql.org/docs/12/runtime-config-wal.html
ARCHIVE_CLEANUP_COMMAND="pg_archivecleanup ${WAL_ARCHIVE} %r"
ARCHIVE_CLEANUP_COMMAND="/usr/lib/postgresql/${POSTGRES_MAJOR_VERSION}/bin/pg_archivecleanup ${WAL_ARCHIVE} %r"
fi
if [ -z "${WAL_LEVEL}" ]; then
@ -401,6 +402,17 @@ if [ -z "${TIMEZONE}" ]; then
TIMEZONE='Etc/UTC'
fi
if [ -z "${KERNEL_SHMMAX}" ]; then
KERNEL_SHMMAX=543252480
fi
if [ -z "${KERNEL_SHMALL}" ]; then
KERNEL_SHMALL=2097152
fi
if [ -z "${PROMOTE_MASTER}" ]; then
PROMOTE_MASTER=FALSE
fi
# usable function definitions
function kill_postgres {
PID=$(cat "${PG_PID}")
@ -587,7 +599,7 @@ function non_root_permission() {
directory_checker "${dir_names}"
fi
done
services=("/usr/lib/postgresql/" "/etc/" "/var/run/!(secrets)" "/var/lib/" "/usr/bin" "/tmp" "/scripts")
services=("/usr/lib/postgresql/" "/etc/" "/var/log/postgresql" "/var/run/!(secrets)" "/var/lib/" "/usr/bin" "/tmp" "/scripts")
for paths in "${services[@]}"; do
directory_checker "${paths}"
done
@ -605,3 +617,4 @@ function role_check() {
fi
}

Wyświetl plik

@ -1,484 +0,0 @@
# This file lists locales that you wish to have built. You can find a list
# of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add
# user defined locales to /usr/local/share/i18n/SUPPORTED. If you change
# this file, you need to rerun locale-gen.
aa_DJ ISO-8859-1
aa_DJ.UTF-8 UTF-8
aa_ER UTF-8
aa_ER@saaho UTF-8
aa_ET UTF-8
af_ZA ISO-8859-1
af_ZA.UTF-8 UTF-8
ak_GH UTF-8
am_ET UTF-8
an_ES ISO-8859-15
an_ES.UTF-8 UTF-8
anp_IN UTF-8
ar_AE ISO-8859-6
ar_AE.UTF-8 UTF-8
ar_BH ISO-8859-6
ar_BH.UTF-8 UTF-8
ar_DZ ISO-8859-6
ar_DZ.UTF-8 UTF-8
ar_EG ISO-8859-6
ar_EG.UTF-8 UTF-8
ar_IN UTF-8
ar_IQ ISO-8859-6
ar_IQ.UTF-8 UTF-8
ar_JO ISO-8859-6
ar_JO.UTF-8 UTF-8
ar_KW ISO-8859-6
ar_KW.UTF-8 UTF-8
ar_LB ISO-8859-6
ar_LB.UTF-8 UTF-8
ar_LY ISO-8859-6
ar_LY.UTF-8 UTF-8
ar_MA ISO-8859-6
ar_MA.UTF-8 UTF-8
ar_OM ISO-8859-6
ar_OM.UTF-8 UTF-8
ar_QA ISO-8859-6
ar_QA.UTF-8 UTF-8
ar_SA ISO-8859-6
ar_SA.UTF-8 UTF-8
ar_SD ISO-8859-6
ar_SD.UTF-8 UTF-8
ar_SS UTF-8
ar_SY ISO-8859-6
ar_SY.UTF-8 UTF-8
ar_TN ISO-8859-6
ar_TN.UTF-8 UTF-8
ar_YE ISO-8859-6
ar_YE.UTF-8 UTF-8
as_IN UTF-8
ast_ES ISO-8859-15
ast_ES.UTF-8 UTF-8
ayc_PE UTF-8
az_AZ UTF-8
be_BY CP1251
be_BY.UTF-8 UTF-8
be_BY@latin UTF-8
bem_ZM UTF-8
ber_DZ UTF-8
ber_MA UTF-8
bg_BG CP1251
bg_BG.UTF-8 UTF-8
bhb_IN.UTF-8 UTF-8
bho_IN UTF-8
bn_BD UTF-8
bn_IN UTF-8
bo_CN UTF-8
bo_IN UTF-8
br_FR ISO-8859-1
br_FR.UTF-8 UTF-8
br_FR@euro ISO-8859-15
brx_IN UTF-8
bs_BA ISO-8859-2
bs_BA.UTF-8 UTF-8
byn_ER UTF-8
ca_AD ISO-8859-15
ca_AD.UTF-8 UTF-8
ca_ES ISO-8859-1
ca_ES.UTF-8 UTF-8
ca_ES.UTF-8@valencia UTF-8
ca_ES@euro ISO-8859-15
ca_ES@valencia ISO-8859-15
ca_FR ISO-8859-15
ca_FR.UTF-8 UTF-8
ca_IT ISO-8859-15
ca_IT.UTF-8 UTF-8
ce_RU UTF-8
chr_US UTF-8
cmn_TW UTF-8
crh_UA UTF-8
cs_CZ ISO-8859-2
cs_CZ.UTF-8 UTF-8
csb_PL UTF-8
cv_RU UTF-8
cy_GB ISO-8859-14
cy_GB.UTF-8 UTF-8
da_DK ISO-8859-1
da_DK.UTF-8 UTF-8
de_AT ISO-8859-1
de_AT.UTF-8 UTF-8
de_AT@euro ISO-8859-15
de_BE ISO-8859-1
de_BE.UTF-8 UTF-8
de_BE@euro ISO-8859-15
de_CH ISO-8859-1
de_CH.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE.UTF-8 UTF-8
de_DE@euro ISO-8859-15
de_IT ISO-8859-1
de_IT.UTF-8 UTF-8
de_LI.UTF-8 UTF-8
de_LU ISO-8859-1
de_LU.UTF-8 UTF-8
de_LU@euro ISO-8859-15
doi_IN UTF-8
dv_MV UTF-8
dz_BT UTF-8
el_CY ISO-8859-7
el_CY.UTF-8 UTF-8
el_GR ISO-8859-7
el_GR.UTF-8 UTF-8
en_AG UTF-8
en_AU ISO-8859-1
en_AU.UTF-8 UTF-8
en_BW ISO-8859-1
en_BW.UTF-8 UTF-8
en_CA ISO-8859-1
en_CA.UTF-8 UTF-8
en_DK ISO-8859-1
en_DK.ISO-8859-15 ISO-8859-15
en_DK.UTF-8 UTF-8
en_GB ISO-8859-1
en_GB.ISO-8859-15 ISO-8859-15
en_GB.UTF-8 UTF-8
en_HK ISO-8859-1
en_HK.UTF-8 UTF-8
en_IE ISO-8859-1
en_IE.UTF-8 UTF-8
en_IE@euro ISO-8859-15
en_IL UTF-8
en_IN UTF-8
en_NG UTF-8
en_NZ ISO-8859-1
en_NZ.UTF-8 UTF-8
en_PH ISO-8859-1
en_PH.UTF-8 UTF-8
en_SG ISO-8859-1
en_SG.UTF-8 UTF-8
en_US ISO-8859-1
en_US.ISO-8859-15 ISO-8859-15
en_US.UTF-8 UTF-8
en_ZA ISO-8859-1
en_ZA.UTF-8 UTF-8
en_ZM UTF-8
en_ZW ISO-8859-1
en_ZW.UTF-8 UTF-8
eo UTF-8
es_AR ISO-8859-1
es_AR.UTF-8 UTF-8
es_BO ISO-8859-1
es_BO.UTF-8 UTF-8
es_CL ISO-8859-1
es_CL.UTF-8 UTF-8
es_CO ISO-8859-1
es_CO.UTF-8 UTF-8
es_CR ISO-8859-1
es_CR.UTF-8 UTF-8
es_CU UTF-8
es_DO ISO-8859-1
es_DO.UTF-8 UTF-8
es_EC ISO-8859-1
es_EC.UTF-8 UTF-8
es_ES ISO-8859-1
es_ES.UTF-8 UTF-8
es_ES@euro ISO-8859-15
es_GT ISO-8859-1
es_GT.UTF-8 UTF-8
es_HN ISO-8859-1
es_HN.UTF-8 UTF-8
es_MX ISO-8859-1
es_MX.UTF-8 UTF-8
es_NI ISO-8859-1
es_NI.UTF-8 UTF-8
es_PA ISO-8859-1
es_PA.UTF-8 UTF-8
es_PE ISO-8859-1
es_PE.UTF-8 UTF-8
es_PR ISO-8859-1
es_PR.UTF-8 UTF-8
es_PY ISO-8859-1
es_PY.UTF-8 UTF-8
es_SV ISO-8859-1
es_SV.UTF-8 UTF-8
es_US ISO-8859-1
es_US.UTF-8 UTF-8
es_UY ISO-8859-1
es_UY.UTF-8 UTF-8
es_VE ISO-8859-1
es_VE.UTF-8 UTF-8
et_EE ISO-8859-1
et_EE.ISO-8859-15 ISO-8859-15
et_EE.UTF-8 UTF-8
eu_ES ISO-8859-1
eu_ES.UTF-8 UTF-8
eu_ES@euro ISO-8859-15
eu_FR ISO-8859-1
eu_FR.UTF-8 UTF-8
eu_FR@euro ISO-8859-15
fa_IR UTF-8
ff_SN UTF-8
fi_FI ISO-8859-1
fi_FI.UTF-8 UTF-8
fi_FI@euro ISO-8859-15
fil_PH UTF-8
fo_FO ISO-8859-1
fo_FO.UTF-8 UTF-8
fr_BE ISO-8859-1
fr_BE.UTF-8 UTF-8
fr_BE@euro ISO-8859-15
fr_CA ISO-8859-1
fr_CA.UTF-8 UTF-8
fr_CH ISO-8859-1
fr_CH.UTF-8 UTF-8
fr_FR ISO-8859-1
fr_FR.UTF-8 UTF-8
fr_FR@euro ISO-8859-15
fr_LU ISO-8859-1
fr_LU.UTF-8 UTF-8
fr_LU@euro ISO-8859-15
fur_IT UTF-8
fy_DE UTF-8
fy_NL UTF-8
ga_IE ISO-8859-1
ga_IE.UTF-8 UTF-8
ga_IE@euro ISO-8859-15
gd_GB ISO-8859-15
gd_GB.UTF-8 UTF-8
gez_ER UTF-8
gez_ER@abegede UTF-8
gez_ET UTF-8
gez_ET@abegede UTF-8
gl_ES ISO-8859-1
gl_ES.UTF-8 UTF-8
gl_ES@euro ISO-8859-15
gu_IN UTF-8
gv_GB ISO-8859-1
gv_GB.UTF-8 UTF-8
ha_NG UTF-8
hak_TW UTF-8
he_IL ISO-8859-8
he_IL.UTF-8 UTF-8
hi_IN UTF-8
hne_IN UTF-8
hr_HR ISO-8859-2
hr_HR.UTF-8 UTF-8
hsb_DE ISO-8859-2
hsb_DE.UTF-8 UTF-8
ht_HT UTF-8
hu_HU ISO-8859-2
hu_HU.UTF-8 UTF-8
hy_AM UTF-8
hy_AM.ARMSCII-8 ARMSCII-8
ia_FR UTF-8
id_ID ISO-8859-1
id_ID.UTF-8 UTF-8
ig_NG UTF-8
ik_CA UTF-8
is_IS ISO-8859-1
is_IS.UTF-8 UTF-8
it_CH ISO-8859-1
it_CH.UTF-8 UTF-8
it_IT ISO-8859-1
it_IT.UTF-8 UTF-8
it_IT@euro ISO-8859-15
iu_CA UTF-8
ja_JP.EUC-JP EUC-JP
ja_JP.UTF-8 UTF-8
ka_GE GEORGIAN-PS
ka_GE.UTF-8 UTF-8
kk_KZ PT154
kk_KZ.RK1048 RK1048
kk_KZ.UTF-8 UTF-8
kl_GL ISO-8859-1
kl_GL.UTF-8 UTF-8
km_KH UTF-8
kn_IN UTF-8
ko_KR.EUC-KR EUC-KR
ko_KR.UTF-8 UTF-8
kok_IN UTF-8
ks_IN UTF-8
ks_IN@devanagari UTF-8
ku_TR ISO-8859-9
ku_TR.UTF-8 UTF-8
kw_GB ISO-8859-1
kw_GB.UTF-8 UTF-8
ky_KG UTF-8
lb_LU UTF-8
lg_UG ISO-8859-10
lg_UG.UTF-8 UTF-8
li_BE UTF-8
li_NL UTF-8
lij_IT UTF-8
ln_CD UTF-8
lo_LA UTF-8
lt_LT ISO-8859-13
lt_LT.UTF-8 UTF-8
lv_LV ISO-8859-13
lv_LV.UTF-8 UTF-8
lzh_TW UTF-8
mag_IN UTF-8
mai_IN UTF-8
mg_MG ISO-8859-15
mg_MG.UTF-8 UTF-8
mhr_RU UTF-8
mi_NZ ISO-8859-13
mi_NZ.UTF-8 UTF-8
mk_MK ISO-8859-5
mk_MK.UTF-8 UTF-8
ml_IN UTF-8
mn_MN UTF-8
mni_IN UTF-8
mr_IN UTF-8
ms_MY ISO-8859-1
ms_MY.UTF-8 UTF-8
mt_MT ISO-8859-3
mt_MT.UTF-8 UTF-8
my_MM UTF-8
nan_TW UTF-8
nan_TW@latin UTF-8
nb_NO ISO-8859-1
nb_NO.UTF-8 UTF-8
nds_DE UTF-8
nds_NL UTF-8
ne_NP UTF-8
nhn_MX UTF-8
niu_NU UTF-8
niu_NZ UTF-8
nl_AW UTF-8
nl_BE ISO-8859-1
nl_BE.UTF-8 UTF-8
nl_BE@euro ISO-8859-15
nl_NL ISO-8859-1
nl_NL.UTF-8 UTF-8
nl_NL@euro ISO-8859-15
nn_NO ISO-8859-1
nn_NO.UTF-8 UTF-8
nr_ZA UTF-8
nso_ZA UTF-8
oc_FR ISO-8859-1
oc_FR.UTF-8 UTF-8
om_ET UTF-8
om_KE ISO-8859-1
om_KE.UTF-8 UTF-8
or_IN UTF-8
os_RU UTF-8
pa_IN UTF-8
pa_PK UTF-8
pap_AW UTF-8
pap_CW UTF-8
pl_PL ISO-8859-2
pl_PL.UTF-8 UTF-8
ps_AF UTF-8
pt_BR ISO-8859-1
pt_BR.UTF-8 UTF-8
pt_PT ISO-8859-1
pt_PT.UTF-8 UTF-8
pt_PT@euro ISO-8859-15
quz_PE UTF-8
raj_IN UTF-8
ro_RO ISO-8859-2
ro_RO.UTF-8 UTF-8
ru_RU ISO-8859-5
ru_RU.CP1251 CP1251
ru_RU.KOI8-R KOI8-R
ru_RU.UTF-8 UTF-8
ru_UA KOI8-U
ru_UA.UTF-8 UTF-8
rw_RW UTF-8
sa_IN UTF-8
sat_IN UTF-8
sc_IT UTF-8
sd_IN UTF-8
sd_IN@devanagari UTF-8
se_NO UTF-8
sgs_LT UTF-8
shs_CA UTF-8
si_LK UTF-8
sid_ET UTF-8
sk_SK ISO-8859-2
sk_SK.UTF-8 UTF-8
sl_SI ISO-8859-2
sl_SI.UTF-8 UTF-8
so_DJ ISO-8859-1
so_DJ.UTF-8 UTF-8
so_ET UTF-8
so_KE ISO-8859-1
so_KE.UTF-8 UTF-8
so_SO ISO-8859-1
so_SO.UTF-8 UTF-8
sq_AL ISO-8859-1
sq_AL.UTF-8 UTF-8
sq_MK UTF-8
sr_ME UTF-8
sr_RS UTF-8
sr_RS@latin UTF-8
ss_ZA UTF-8
st_ZA ISO-8859-1
st_ZA.UTF-8 UTF-8
sv_FI ISO-8859-1
sv_FI.UTF-8 UTF-8
sv_FI@euro ISO-8859-15
sv_SE ISO-8859-1
sv_SE.ISO-8859-15 ISO-8859-15
sv_SE.UTF-8 UTF-8
sw_KE UTF-8
sw_TZ UTF-8
szl_PL UTF-8
ta_IN UTF-8
ta_LK UTF-8
tcy_IN.UTF-8 UTF-8
te_IN UTF-8
tg_TJ KOI8-T
tg_TJ.UTF-8 UTF-8
th_TH TIS-620
th_TH.UTF-8 UTF-8
the_NP UTF-8
ti_ER UTF-8
ti_ET UTF-8
tig_ER UTF-8
tk_TM UTF-8
tl_PH ISO-8859-1
tl_PH.UTF-8 UTF-8
tn_ZA UTF-8
tr_CY ISO-8859-9
tr_CY.UTF-8 UTF-8
tr_TR ISO-8859-9
tr_TR.UTF-8 UTF-8
ts_ZA UTF-8
tt_RU UTF-8
tt_RU@iqtelif UTF-8
ug_CN UTF-8
uk_UA KOI8-U
uk_UA.UTF-8 UTF-8
unm_US UTF-8
ur_IN UTF-8
ur_PK UTF-8
uz_UZ ISO-8859-1
uz_UZ.UTF-8 UTF-8
uz_UZ@cyrillic UTF-8
ve_ZA UTF-8
vi_VN UTF-8
wa_BE ISO-8859-1
wa_BE.UTF-8 UTF-8
wa_BE@euro ISO-8859-15
wae_CH UTF-8
wal_ET UTF-8
wo_SN UTF-8
xh_ZA ISO-8859-1
xh_ZA.UTF-8 UTF-8
yi_US CP1255
yi_US.UTF-8 UTF-8
yo_NG UTF-8
yue_HK UTF-8
zh_CN GB2312
zh_CN.GB18030 GB18030
zh_CN.GBK GBK
zh_CN.UTF-8 UTF-8
zh_HK BIG5-HKSCS
zh_HK.UTF-8 UTF-8
zh_SG GB2312
zh_SG.GBK GBK
zh_SG.UTF-8 UTF-8
zh_TW BIG5
zh_TW.EUC-TW EUC-TW
zh_TW.UTF-8 UTF-8
zu_ZA ISO-8859-1
zu_ZA.UTF-8 UTF-8
zu_ZA.UTF-8 UTF-8

Wyświetl plik

@ -119,8 +119,8 @@ fi
# Optimise PostgreSQL shared memory for PostGIS
# shmall units are pages and shmmax units are bytes(?) equivalent to the desired shared_buffer size set in setup_conf.sh - in this case 500MB
echo "kernel.shmmax=543252480" >> /etc/sysctl.conf
echo "kernel.shmall=2097152" >> /etc/sysctl.conf
echo "kernel.shmmax=${KERNEL_SHMMAX}" >> /etc/sysctl.conf
echo "kernel.shmall=${KERNEL_SHMALL}" >> /etc/sysctl.conf
# Put lock file to make sure conf was not reinitialized
touch "${SETUP_LOCKFILE}"

Wyświetl plik

@ -88,7 +88,7 @@ trap "echo \"Sending SIGTERM to postgres\"; killall -s SIGTERM postgres" SIGTERM
su - postgres -c "${POSTGRES} -D ${DATADIR} -c config_file=${CONF} ${LOCALONLY} &"
# wait for postgres to come up
until su - postgres -c "pg_isready"; do
until su - postgres -c "/usr/lib/postgresql/${POSTGRES_MAJOR_VERSION}/bin/pg_isready"; do
sleep 1
done
echo "postgres ready"

Wyświetl plik

@ -9,7 +9,7 @@ source /scripts/env-data.sh
if [[ ${RUN_AS_ROOT} =~ [Ff][Aa][Ll][Ss][Ee] ]];then
function START_COMMAND() {
PARAM=$1
gosu ${USER_NAME} bash -c "$1"
gosu "${USER_NAME}" bash -c "$1"
}
else
function START_COMMAND() {
@ -29,26 +29,48 @@ if [[ "$WAL_LEVEL" == 'replica' && "${REPLICATION}" =~ [Tt][Rr][Uu][Ee] ]]; then
fi
until START_COMMAND "/usr/lib/postgresql/${POSTGRES_MAJOR_VERSION}/bin/pg_isready -h ${REPLICATE_FROM} -p ${REPLICATE_PORT}"
do
echo -e "[Entrypoint] \e[1;31m Waiting for master to ping... \033[0m"
sleep 1s
done
if [[ "$DESTROY_DATABASE_ON_RESTART" =~ [Tt][Rr][Uu][Ee] ]]; then
echo -e "[Entrypoint] \e[1;31m Get initial database from master \033[0m"
configure_replication_permissions
if [ -f "${DATADIR}/backup_label.old" ]; then
echo -e "[Entrypoint] \e[1;31m PG Basebackup already exists so proceed to start the DB \033[0m"
else
streaming_replication
if [[ "${PROMOTE_MASTER}" =~ [Ff][Aa][Ll][Ss][Ee] ]];then
until START_COMMAND "/usr/lib/postgresql/${POSTGRES_MAJOR_VERSION}/bin/pg_isready -h ${REPLICATE_FROM} -p ${REPLICATE_PORT}"
do
echo -e "[Entrypoint] \e[1;31m Waiting for master to ping... \033[0m"
sleep 1s
done
if [[ "$DESTROY_DATABASE_ON_RESTART" =~ [Tt][Rr][Uu][Ee] ]]; then
echo -e "[Entrypoint] \e[1;31m Get initial database from master \033[0m"
configure_replication_permissions
if [ -f "${DATADIR}/backup_label.old" ]; then
echo -e "[Entrypoint] \e[1;31m PG Basebackup already exists so proceed to start the DB \033[0m"
else
streaming_replication
fi
fi
else
if [ ! -f "${DATADIR}/backup_label.old" ]; then
echo "Streaming replication hasn't been started yet"
exit 1
else
if [[ ${RUN_AS_ROOT} =~ [Ff][Aa][Ll][Ss][Ee] ]];then
chown -R "${USER_NAME}":"${DB_GROUP_NAME}" /var/run/postgresql
START_COMMAND "/etc/init.d/postgresql start ${POSTGRES_MAJOR_VERSION}"
else
START_COMMAND "/etc/init.d/postgresql start ${POSTGRES_MAJOR_VERSION}"
fi
STANDBY_MODE=$(START_COMMAND "${DATA_DIR_CONTROL} $DATADIR" | grep "Database cluster state:")
if [[ "$STANDBY_MODE" == *"in archive recovery"* ]]; then
START_COMMAND "${NODE_PROMOTION} promote -D ${DATADIR}"
fi
echo -e "\e[32m [Entrypoint] Replicant has been promoted to master, please shut down \e[1;31m pg-master \033[0m"
kill_postgres
fi
fi
# Promote to master if desired
if [[ ! -z "${PROMOTE_MASTER}" ]]; then
${START_COMMAND} "${NODE_PROMOTION} promote -D ${DATADIR}"
fi
#end main if
fi