diff options
Diffstat (limited to 'nix/dbinit.sh')
| -rwxr-xr-x | nix/dbinit.sh | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/nix/dbinit.sh b/nix/dbinit.sh new file mode 100755 index 0000000..9ca7481 --- /dev/null +++ b/nix/dbinit.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +set -euo pipefail + +PSQL=$1 +DB=$2 +DB_USER=$3 + +echo 'creating role, database, assigning owner...' + +"$PSQL" <<EOF +DO \$\$ +BEGIN +CREATE ROLE $DB_USER WITH LOGIN; +EXCEPTION WHEN duplicate_object THEN RAISE NOTICE '%, skipping', SQLERRM USING ERRCODE = SQLSTATE; +END +\$$; + +SELECT 'CREATE DATABASE $DB' +WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$DB')\gexec + +ALTER DATABASE $DB OWNER TO $DB_USER; +EOF + +echo 'echo creating pgcrypto extension...' + +"$PSQL" -c "CREATE EXTENSION IF NOT EXISTS pgcrypto;" "$DB" + +readarray -t TABLES < <("$PSQL" -qAt -c "SELECT tablename FROM pg_tables WHERE schemaname = 'public';" "$DB") +readarray -t SEQUENCES < <("$PSQL" -qAt -c "SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = 'public';" "$DB") +readarray -t VIEWS < <("$PSQL" -qAt -c "SELECT table_name FROM information_schema.views WHERE table_schema = 'public';" "$DB") + +cat <<EOF >&2 +patching owner: + tables: ${TABLES[*]} + sequences: ${SEQUENCES[*]} + views: ${VIEWS[*]} +EOF + +STMT="" + +for tbl in "${TABLES[@]}" "${SEQUENCES[@]}" "${VIEWS[@]}"; do + STMT+="ALTER TABLE \"$tbl\" OWNER TO $DB_USER;" + STMT+=$'\n' +done + +"$PSQL" -c "$STMT" "$DB" + +echo "success" |
