mirror of https://github.com/zulip/zulip.git
48 lines
1.5 KiB
Bash
Executable File
48 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -e
|
||
|
||
if [ "$EUID" -ne 0 ]; then
|
||
echo "Error: This script must be run as root" >&2
|
||
exit 1
|
||
fi
|
||
set -x
|
||
|
||
# What user should we use for connecting to the database
|
||
POSTGRES_USER="${POSTGRES_USER:-postgres}"
|
||
|
||
# This psql command may fail because the Zulip database doesn’t exist,
|
||
# hence the &&.
|
||
if records="$(
|
||
cd / # Make sure the current working directory is readable by postgres
|
||
su "$POSTGRES_USER" -c "psql -v ON_ERROR_STOP=1 -Atc 'SELECT COUNT(*) FROM zulip.zerver_message;' zulip"
|
||
)" && [ "$records" -gt 200 ]; then
|
||
set +x
|
||
echo "WARNING: This will delete your Zulip database which currently contains $records messages."
|
||
read -p "Do you want to proceed? [y/N] " -r
|
||
echo
|
||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||
exit 1
|
||
fi
|
||
set -x
|
||
fi
|
||
|
||
# Shut down all services to ensure a quiescent state.
|
||
if [ -e "/var/run/supervisor.sock" ]; then
|
||
su zulip -c "$(dirname "$(dirname "$0")")/stop-server"
|
||
fi
|
||
|
||
# Drop any open connections to any old database.
|
||
# Send the script via stdin in case the postgres user lacks permission to read it.
|
||
su -s /usr/bin/env - -- "$POSTGRES_USER" \
|
||
bash -s - zulip zulip_base <"$(dirname "$0")/terminate-psql-sessions"
|
||
|
||
(
|
||
cd / # Make sure the current working directory is readable by postgres
|
||
su "$POSTGRES_USER" -c 'psql -v ON_ERROR_STOP=1 -e'
|
||
) <"$(dirname "$0")/create-db.sql"
|
||
|
||
# Clear memcached to avoid contamination from previous database state
|
||
"$(dirname "$0")/flush-memcached"
|
||
|
||
echo "Database created"
|