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:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user