58 lines
1.5 KiB
Bash
Executable file
58 lines
1.5 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
export ENABLE_REPLICATION=${ENABLE_REPLICATION:-false}
|
|
|
|
set -eu
|
|
export_vars=$(cgroup-limits) ; export $export_vars
|
|
|
|
source "${CONTAINER_SCRIPTS_PATH}/common.sh"
|
|
|
|
set_pgdata
|
|
|
|
process_extending_files \
|
|
"${APP_DATA}/src/postgresql-pre-start" \
|
|
"${CONTAINER_SCRIPTS_PATH}/pre-start"
|
|
|
|
check_env_vars
|
|
generate_passwd_file
|
|
generate_postgresql_config
|
|
|
|
# Is this brand new data volume?
|
|
PG_INITIALIZED=false
|
|
|
|
if [ ! -f "$PGDATA/postgresql.conf" ]; then
|
|
initialize_database
|
|
PG_INITIALIZED=:
|
|
else
|
|
try_pgupgrade
|
|
fi
|
|
|
|
# Use insanely large timeout (24h) to ensure that the potential recovery has
|
|
# enough time here to happen (unless liveness probe kills us). Note that in
|
|
# case of server failure this command still exists immediately.
|
|
pg_ctl start -w --timeout 86400 -o "-h ''"
|
|
|
|
# This is just a pedantic safety measure (the timeout above is unlikely to
|
|
# happen), but `pt_ctl -w` is not reliable prior to PostgreSQL v10 where it
|
|
# returns exit_status=0 even if the server is still starting. For more info
|
|
# see the issue#297 and
|
|
# https://www.postgresql.org/message-id/CAB7nPqSJs85wK9aknm%3D_jmS6GnH3SQBhpzKcqs8Qo2LhEg2etw%40mail.gmail.com
|
|
pg_isready
|
|
|
|
if $PG_INITIALIZED ; then
|
|
process_extending_files \
|
|
"${APP_DATA}/src/postgresql-init" \
|
|
"${CONTAINER_SCRIPTS_PATH}/init"
|
|
migrate_db
|
|
create_users
|
|
fi
|
|
|
|
process_extending_files \
|
|
"${APP_DATA}/src/postgresql-start" \
|
|
"${CONTAINER_SCRIPTS_PATH}/start"
|
|
|
|
pg_ctl stop
|
|
|
|
unset_env_vars
|
|
echo "Starting server..."
|
|
exec postgres "$@"
|