mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 22:13:26 +00:00
This fixes an annoying issue where one tries to rebuild the database, and it fails due to there being existing connections. The one thing that is potentially scary about this implementation is that it means it's now a lot easier to accidentally drop your production database by running the wrong script; might be worth adding a "--force" flag controlling this behavior or something. Thanks to Nemanja Stanarevic and Neeraj Wahi for prototypes of this implementation! They did most of the work and testing for this.
76 lines
1.9 KiB
Bash
Executable File
76 lines
1.9 KiB
Bash
Executable File
#!/bin/bash -xe
|
|
|
|
ROOT_POSTGRES="sudo -u postgres psql"
|
|
DEFAULT_DB=""
|
|
if [ "$(uname)" = "Darwin" ]; then
|
|
ROOT_POSTGRES="psql"
|
|
DEFAULT_DB="postgres"
|
|
fi
|
|
|
|
VAGRANTUSERNAME=$(whoami)
|
|
|
|
if [[ $# == 0 ]]; then
|
|
USERNAME=zulip
|
|
PASSWORD=$("$(dirname "$0")/../bin/get-django-setting" LOCAL_DATABASE_PASSWORD)
|
|
DBNAME=zulip
|
|
SEARCH_PATH="$USERNAME",public
|
|
elif [[ $# == 4 ]]; then
|
|
USERNAME=$1
|
|
PASSWORD=$2
|
|
DBNAME=$3
|
|
SEARCH_PATH=$4
|
|
else
|
|
echo "Usage Instructions"
|
|
echo "Run with either no arguments (sets up devel db for local deploy--zulip with user zulip)"
|
|
echo "or specify <db-username> <password> <db-name> <user-schema-search-path>"
|
|
exit
|
|
fi
|
|
|
|
DBNAME_BASE=${DBNAME}_base
|
|
|
|
$ROOT_POSTGRES "$DEFAULT_DB" << EOF
|
|
CREATE USER $USERNAME;
|
|
ALTER USER $USERNAME PASSWORD '$PASSWORD';
|
|
ALTER USER $USERNAME CREATEDB;
|
|
ALTER ROLE $USERNAME SET search_path TO $SEARCH_PATH;
|
|
|
|
CREATE USER $VAGRANTUSERNAME;
|
|
GRANT $USERNAME TO $VAGRANTUSERNAME;
|
|
ALTER ROLE $VAGRANTUSERNAME SET search_path TO $SEARCH_PATH;
|
|
EOF
|
|
|
|
umask go-rw
|
|
PGPASS_PREFIX="*:*:*:$USERNAME:"
|
|
PGPASS_ESCAPED_PREFIX="*:\*:\*:$USERNAME:"
|
|
if ! grep -q "$PGPASS_ESCAPED_PREFIX" ~/.pgpass; then
|
|
echo "$PGPASS_PREFIX$PASSWORD" >> ~/.pgpass
|
|
else
|
|
sed -i "s/$PGPASS_ESCAPED_PREFIX.*\$/$PGPASS_PREFIX$PASSWORD/" ~/.pgpass
|
|
fi
|
|
chmod go-rw ~/.pgpass
|
|
|
|
"$(dirname "$0")/../scripts/setup/terminate-psql-sessions" "$USERNAME" "$DBNAME" "$DBNAME_BASE"
|
|
|
|
psql -h localhost postgres "$USERNAME" <<EOF
|
|
DROP DATABASE IF EXISTS $DBNAME;
|
|
DROP DATABASE IF EXISTS $DBNAME_BASE;
|
|
CREATE DATABASE $DBNAME_BASE
|
|
EOF
|
|
|
|
psql -h localhost "$DBNAME_BASE" "$USERNAME" <<EOF
|
|
CREATE SCHEMA zulip;
|
|
EOF
|
|
|
|
$ROOT_POSTGRES "$DBNAME_BASE" << EOF
|
|
CREATE EXTENSION tsearch_extras SCHEMA zulip;
|
|
EOF
|
|
|
|
psql -h localhost postgres "$USERNAME" <<EOF
|
|
CREATE DATABASE $DBNAME TEMPLATE $DBNAME_BASE;
|
|
EOF
|
|
|
|
sh "$(dirname "$0")/../scripts/setup/flush-memcached"
|
|
|
|
echo "Database created"
|
|
|