* 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 - **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 replicant will always destroy its current database on restart, because it will try to sync again
from `master` and avoid inconsistencies. 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 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 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 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: volumes:
pg-data-dir: pg-data-dir:
@ -11,8 +11,6 @@ services:
pg: pg:
image: 'kartoza/postgis:${TAG:-manual-build}' image: 'kartoza/postgis:${TAG:-manual-build}'
restart: 'always' restart: 'always'
# You can optionally mount to volume, to play with the persistence and
# observe how the node will behave after restarts.
volumes: volumes:
- pg-data-dir:/var/lib/postgresql - pg-data-dir:/var/lib/postgresql
- ./tests:/tests - ./tests:/tests
@ -35,8 +33,6 @@ services:
pg-new: pg-new:
image: 'kartoza/postgis:${TAG:-manual-build}' image: 'kartoza/postgis:${TAG:-manual-build}'
restart: 'always' restart: 'always'
# You can optionally mount to volume, to play with the persistence and
# observe how the node will behave after restarts.
volumes: volumes:
- new-pg-data-dir:/opt/data/postgis - new-pg-data-dir:/opt/data/postgis
- ./tests:/tests - ./tests:/tests
@ -62,8 +58,6 @@ services:
pg-gosu: pg-gosu:
image: 'kartoza/postgis:${TAG:-manual-build}' image: 'kartoza/postgis:${TAG:-manual-build}'
restart: 'always' restart: 'always'
# You can optionally mount to volume, to play with the persistence and
# observe how the node will behave after restarts.
volumes: volumes:
- pg-data-dir-gs:/var/lib/postgresql - pg-data-dir-gs:/var/lib/postgresql
- ./tests:/tests - ./tests:/tests

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@ -1,5 +1,5 @@
version: '2.1' version: '3.9'
volumes: volumes:
pg-db-data-dir: 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: volumes:
pg-master-data-dir: 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: volumes:
pg-master-data-dir: 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' VERSION='docker compose'
fi fi
####
# Run service as root user # Run service as root user
####
${VERSION} up -d ${VERSION} up -d
if [[ -n "${PRINT_TEST_LOGS}" ]]; then if [[ -n "${PRINT_TEST_LOGS}" ]]; then
@ -39,7 +40,9 @@ ${VERSION} exec -T pg-node /bin/bash /tests/test_node.sh
${VERSION} down -v ${VERSION} down -v
####
# Run service as none root # Run service as none root
####
${VERSION} -f docker-compose-gs.yml up -d ${VERSION} -f docker-compose-gs.yml up -d
if [[ -n "${PRINT_TEST_LOGS}" ]]; then if [[ -n "${PRINT_TEST_LOGS}" ]]; then
@ -64,4 +67,64 @@ done;
# Execute tests # Execute tests
${VERSION} -f docker-compose-gs.yml exec -T pg-node /bin/bash /tests/test_node.sh ${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() rows = c.fetchall()
self.assertEqual(len(rows), 1) 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'): def table_exists(self, table_name, table_schema='public'):
cur = self.conn.cursor() cur = self.conn.cursor()
query = ( query = '''select exists (select 1 from information_schema.tables \
'select ' where table_name = %s and table_schema = %s)''' % (table_name, table_schema)
'exists('
'select 1 ' cur.execute(query)
'from information_schema.tables '
'where table_name = %s and table_schema = %s)')
cur.execute(query, (table_name, table_schema))
try: try:
row = cur.fetchone() row = cur.fetchone()
return row[0] if row is not None:
except: return row[0]
else:
return None
except Exception as e:
print(f"An error occurred: {e}")
return False return False
@staticmethod @staticmethod

Wyświetl plik

@ -74,8 +74,17 @@ else
if [[ ${RUN_AS_ROOT} =~ [Ff][Aa][Ll][Ss][Ee] ]];then if [[ ${RUN_AS_ROOT} =~ [Ff][Aa][Ll][Ss][Ee] ]];then
non_root_permission "${USER_NAME}" "${DB_GROUP_NAME}" non_root_permission "${USER_NAME}" "${DB_GROUP_NAME}"
else else
chown -R postgres:postgres "${DATADIR}" "${WAL_ARCHIVE}" dir_ownership=("${DATADIR}" "${WAL_ARCHIVE}")
chmod -R 750 "${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 fi
source /scripts/setup-replication.sh source /scripts/setup-replication.sh
fi 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/" EXTDIR="/usr/share/postgresql/${POSTGRES_MAJOR_VERSION}/extension/"
SETVARS="POSTGIS_ENABLE_OUTDB_RASTERS=1 POSTGIS_GDAL_ENABLED_DRIVERS=ENABLE_ALL" SETVARS="POSTGIS_ENABLE_OUTDB_RASTERS=1 POSTGIS_GDAL_ENABLED_DRIVERS=ENABLE_ALL"
LOCALONLY="-c listen_addresses='127.0.0.1'" 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" PROMOTE_FILE="/tmp/pg_promote_master"
NODE_PROMOTION="/usr/lib/postgresql/${POSTGRES_MAJOR_VERSION}/bin/pg_ctl" 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/" PGSTAT_TMP="/var/run/postgresql/"
PG_PID="/var/run/postgresql/${POSTGRES_MAJOR_VERSION}-main.pid" 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' # ie: file_env 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of # (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) # "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function file_env { function file_env() {
local var="$1" local var="$1"
local fileVar="${var}_FILE" local fileVar="${var}_FILE"
local def="${2:-}" local def="${2:-}"
@ -65,7 +66,7 @@ function boolean() {
file_env 'POSTGRES_PASS' file_env 'POSTGRES_PASS'
file_env 'POSTGRES_USER' file_env 'POSTGRES_USER'
file_env 'POSTGRES_DBNAME'
function create_dir() { function create_dir() {
DATA_PATH=$1 DATA_PATH=$1
@ -211,7 +212,7 @@ fi
if [ -z "${ARCHIVE_CLEANUP_COMMAND}" ]; then if [ -z "${ARCHIVE_CLEANUP_COMMAND}" ]; then
# https://www.postgresql.org/docs/12/runtime-config-wal.html # 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 fi
if [ -z "${WAL_LEVEL}" ]; then if [ -z "${WAL_LEVEL}" ]; then
@ -401,6 +402,17 @@ if [ -z "${TIMEZONE}" ]; then
TIMEZONE='Etc/UTC' TIMEZONE='Etc/UTC'
fi 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 # usable function definitions
function kill_postgres { function kill_postgres {
PID=$(cat "${PG_PID}") PID=$(cat "${PG_PID}")
@ -587,7 +599,7 @@ function non_root_permission() {
directory_checker "${dir_names}" directory_checker "${dir_names}"
fi fi
done 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 for paths in "${services[@]}"; do
directory_checker "${paths}" directory_checker "${paths}"
done done
@ -605,3 +617,4 @@ function role_check() {
fi 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 # 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 # 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.shmmax=${KERNEL_SHMMAX}" >> /etc/sysctl.conf
echo "kernel.shmall=2097152" >> /etc/sysctl.conf echo "kernel.shmall=${KERNEL_SHMALL}" >> /etc/sysctl.conf
# Put lock file to make sure conf was not reinitialized # Put lock file to make sure conf was not reinitialized
touch "${SETUP_LOCKFILE}" 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} &" su - postgres -c "${POSTGRES} -D ${DATADIR} -c config_file=${CONF} ${LOCALONLY} &"
# wait for postgres to come up # 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 sleep 1
done done
echo "postgres ready" 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 if [[ ${RUN_AS_ROOT} =~ [Ff][Aa][Ll][Ss][Ee] ]];then
function START_COMMAND() { function START_COMMAND() {
PARAM=$1 PARAM=$1
gosu ${USER_NAME} bash -c "$1" gosu "${USER_NAME}" bash -c "$1"
} }
else else
function START_COMMAND() { function START_COMMAND() {
@ -29,26 +29,48 @@ if [[ "$WAL_LEVEL" == 'replica' && "${REPLICATION}" =~ [Tt][Rr][Uu][Ee] ]]; then
fi fi
until START_COMMAND "/usr/lib/postgresql/${POSTGRES_MAJOR_VERSION}/bin/pg_isready -h ${REPLICATE_FROM} -p ${REPLICATE_PORT}" if [[ "${PROMOTE_MASTER}" =~ [Ff][Aa][Ll][Ss][Ee] ]];then
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
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
fi
# Promote to master if desired
if [[ ! -z "${PROMOTE_MASTER}" ]]; then
${START_COMMAND} "${NODE_PROMOTION} promote -D ${DATADIR}"
fi fi
#end main if
fi fi