37 lines
1.0 KiB
Bash
Executable File
37 lines
1.0 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
DB_ENVIRONMENT=$1
|
|
if [ -z $DB_ENVIRONMENT ] ; then
|
|
DB_ENVIRONMENT="default"
|
|
fi
|
|
|
|
source env/$DB_ENVIRONMENT.conf
|
|
|
|
# Create the control table, if it doesn't exist
|
|
cat <<-EOF | psql $PSQL_OPTS -d $DB_NAME
|
|
BEGIN;
|
|
CREATE TABLE IF NOT EXISTS database_versions (
|
|
version varchar(32) not null,
|
|
is_active boolean not null default false,
|
|
creation_date timestamp not null default current_timestamp
|
|
);
|
|
END;
|
|
EOF
|
|
|
|
function add-version() {
|
|
psql $PSQL_OPTS -c "update database_versions set is_active = false where is_active = true" $DB_NAME
|
|
psql $PSQL_OPTS -c "insert into database_versions (version, is_active) values ('$1', TRUE)" $DB_NAME
|
|
}
|
|
|
|
current_version=$(psql $PSQL_OPTS -Atc "select version from database_versions where is_active = true" $DB_NAME)
|
|
|
|
for f in $(ls -1 migrations/*.sql | sort); do
|
|
filev=$(basename $f .sql)
|
|
if [[ $filev > $current_version ]]; then
|
|
psql $PSQL_OPTS -vON_ERROR_STOP= -1f $f $DB_NAME
|
|
# No need to check return code because of the 'set -e'
|
|
add-version $filev
|
|
fi
|
|
done
|