diff --git a/lib.nix b/lib.nix index c76c456..ad662b1 100644 --- a/lib.nix +++ b/lib.nix @@ -115,6 +115,26 @@ in echo "Checking presence of database ${db.name}" dbAlreadyExists="$(echo "SELECT 1 AS result FROM pg_database WHERE datname='${db.name}';" | psql --dbname postgres | ${pkgs.gnugrep}/bin/grep -c 'exists = "1"' || true)" echo "$dbAlreadyExists" + if [ 1 -ne "$dbAlreadyExists" ]; then + echo "Creating database ${db.name}" + echo 'CREATE DATABASE "${db.name}";' | psql --dbname postgres + ${lib.optionalString (db.user != null && db.password != null) '' + echo "Creating user ${db.user}" + psql --dbname postgres <<'EOF' + DO $$ + BEGIN + CREATE ROLE "${db.user}" WITH LOGIN PASSWORD '${db.password}'; + EXCEPTION WHEN duplicate_object THEN RAISE NOTICE '%, skipping', SQLERRM USING ERRCODE = SQLSTATE; + END + $$; + GRANT ALL PRIVILEGES ON DATABASE "${db.name}" TO "${db.user}"; + \c ${db.name} + GRANT ALL PRIVILEGES ON SCHEMA public TO "${db.user}"; + EOF + ''} + else + echo "Database ${db.name} already exists" + fi '') initialDatabases) else "";