From 3573b38a084ae7ac6fd2e54bf1a1398c55a8f32a Mon Sep 17 00:00:00 2001 From: mdecimus <11444311+mdecimus@users.noreply.github.com> Date: Fri, 19 Dec 2025 14:52:03 +0100 Subject: [PATCH] PostreSQL: Truncate large sort fields --- crates/store/src/backend/postgres/search.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/crates/store/src/backend/postgres/search.rs b/crates/store/src/backend/postgres/search.rs index b81d3754..39fafd8c 100644 --- a/crates/store/src/backend/postgres/search.rs +++ b/crates/store/src/backend/postgres/search.rs @@ -58,6 +58,8 @@ impl PostgresStore { if let Some(value) = fields.get(field) { let value_ref = format!("${}", values.len() + 1); + let truncate_text = matches!(value, SearchValue::Text { value, .. } + if value.len() > 255); if field.is_text() { let language = match &value { @@ -70,13 +72,23 @@ impl PostgresStore { }; let _ = write!(&mut query, "to_tsvector('{language}',{value_ref})"); + } else if truncate_text { + query.push_str("left("); + query.push_str(&value_ref); + query.push_str(",512)"); } else { query.push_str(&value_ref); } if field.sort_column().is_some() { - query.push(','); - query.push_str(&value_ref); + if truncate_text { + query.push_str(",left("); + query.push_str(&value_ref); + query.push_str(",255)"); + } else { + query.push(','); + query.push_str(&value_ref); + } } values.push(value as &(dyn ToSql + Sync));