add ability to create default user

This commit is contained in:
2025-03-17 16:19:47 +04:00
parent f7169da0cf
commit 61ffac84a1

20
lib.nix
View File

@@ -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
"";