This commit is contained in:
pavel 2026-05-14 22:29:28 +02:00
commit 6e99f1c057

View file

@ -46,13 +46,14 @@ END $$;`, sqlQuoteLiteral(p.DBUser), sqlQuoteIdent(p.DBUser), sqlQuoteLiteral(p.
return fmt.Errorf("create/alter role failed: %w", err) return fmt.Errorf("create/alter role failed: %w", err)
} }
if _, err := adminDB.ExecContext(ctx, fmt.Sprintf(`DO $$ var dbExists bool
BEGIN if err := adminDB.QueryRowContext(ctx, `SELECT EXISTS (SELECT 1 FROM pg_database WHERE datname = $1)`, p.DBName).Scan(&dbExists); err != nil {
IF NOT EXISTS (SELECT 1 FROM pg_database WHERE datname = %s) THEN return fmt.Errorf("check database existence failed: %w", err)
CREATE DATABASE %s OWNER %s; }
END IF; if !dbExists {
END $$;`, sqlQuoteLiteral(p.DBName), sqlQuoteIdent(p.DBName), sqlQuoteIdent(p.DBUser))); err != nil { if _, err := adminDB.ExecContext(ctx, fmt.Sprintf(`CREATE DATABASE %s OWNER %s`, sqlQuoteIdent(p.DBName), sqlQuoteIdent(p.DBUser))); err != nil {
return fmt.Errorf("create database failed: %w", err) return fmt.Errorf("create database failed: %w", err)
}
} }
if _, err := a.db.ExecContext(ctx, `UPDATE projects SET db_name=$1, db_user=$2, db_password=$3 WHERE id=$4`, p.DBName, p.DBUser, p.DBPassword, p.ID); err != nil { if _, err := a.db.ExecContext(ctx, `UPDATE projects SET db_name=$1, db_user=$2, db_password=$3 WHERE id=$4`, p.DBName, p.DBUser, p.DBPassword, p.ID); err != nil {