Verbessere Fehlerbehandlung in SQL-Abfragen: Füge detaillierte Fehlermeldungen für Vorbereitungs- und Ausführungsfehler in den Director- und Politics-Workern hinzu.

This commit is contained in:
Torsten Schulz (local)
2025-12-16 08:52:08 +01:00
parent b45990c1b6
commit 74fee2d4c9
4 changed files with 88 additions and 36 deletions

View File

@@ -92,8 +92,32 @@ impl Database {
.get(name)
.ok_or_else(|| DbError::new(format!("Unbekanntes Statement: {name}")))?;
let rows = self.client.query(sql.as_str(), params)?;
Ok(rows.into_iter().map(Self::row_to_map).collect())
match self.client.query(sql.as_str(), params) {
Ok(rows) => Ok(rows.into_iter().map(Self::row_to_map).collect()),
Err(err) => {
if let Some(db_err) = err.as_db_error() {
let code = db_err.code().code().to_string();
let message = db_err.message();
let detail = db_err.detail().unwrap_or_default();
let hint = db_err.hint().unwrap_or_default();
// SQL ggf. kürzen, um Log-Flut zu vermeiden
let mut sql_preview = sql.clone();
const MAX_SQL_PREVIEW: usize = 800;
if sql_preview.len() > MAX_SQL_PREVIEW {
sql_preview.truncate(MAX_SQL_PREVIEW);
sql_preview.push_str("");
}
Err(DbError::new(format!(
"Postgres-Fehler bei Statement '{name}': {} (SQLSTATE: {}, Detail: {}, Hint: {}) | SQL: {}",
message, code, detail, hint, sql_preview
)))
} else {
Err(DbError::new(format!(
"Postgres-Fehler (Client) bei Statement '{name}': {err}"
)))
}
}
}
}
fn row_to_map(row: postgres::Row) -> Row {