db/scripts/migrate.sh
2023-07-16 23:47:16 -04:00

40 lines
1.2 KiB
Bash
Executable File

#! /bin/bash
set -e
source ./scripts/env.sh ./.env
if [[ -n $(git status --porcelain) ]]; then
echo "git working tree dirty" 1>&2;
exit 1;
fi
to_tag="$1"
get_dnim_database_count="copy (select count(*) from pg_database where datname = 'dnim') to stdout with null as '';"
dnim_database_count=$(psql "$POSTGRES_URI/postgres" -c "$get_dnim_database_count")
if [[ "$dnim_database_count" = "0" ]]; then
echo "fresh database"
psql "$POSTGRES_URI/postgres" -c "create database dnim;"
ls ./schema/ | xargs -I{} psql --quiet "$POSTGRES_URI/dnim" --file=./schema/{}
rev_last='empty'
script=''
else
get_rev_last="copy (select to_revision from migration order by performed_on desc limit 1) to stdout with null as '';"
rev_last=$(psql "$POSTGRES_URI/dnim" -c "$get_rev_last")
migration=$(./scripts/diff.sh "$rev_last" "$to_tag")
if [[ "$2" = "--greenlight" ]]; then
psql "$POSTGRES_URI/dnim" -v ON_ERROR_STOP=1 --single-transaction -f "$migration"
else
echo "migration available at $migration"
echo "review and rerun with --greenlight to apply"
exit
fi
fi
insert_migration="insert into migration (from_revision, to_revision) values ('$rev_last', '$to_tag');"
psql "$POSTGRES_URI/dnim" -c "$insert_migration"
echo "inserted migration"