From 3a9601c053a7edfceb2e47d7ebc73a2ad2f7a88f Mon Sep 17 00:00:00 2001 From: Jan Kessler Date: Sat, 9 Aug 2025 19:10:42 +0200 Subject: [PATCH] use .rollback() after read-only transaction on pgvector to avoid infinitely idle transactions (and errors in certain scenarios) --- backend/open_webui/retrieval/vector/dbs/pgvector.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/backend/open_webui/retrieval/vector/dbs/pgvector.py b/backend/open_webui/retrieval/vector/dbs/pgvector.py index 0d45b10f60..c1e120a4da 100644 --- a/backend/open_webui/retrieval/vector/dbs/pgvector.py +++ b/backend/open_webui/retrieval/vector/dbs/pgvector.py @@ -421,10 +421,12 @@ class PgvectorClient(VectorDBBase): documents[qid].append(row.text) metadatas[qid].append(row.vmetadata) + self.session.rollback() # read-only transaction return SearchResult( ids=ids, distances=distances, documents=documents, metadatas=metadatas ) except Exception as e: + self.session.rollback() log.exception(f"Error during search: {e}") return None @@ -477,12 +479,14 @@ class PgvectorClient(VectorDBBase): documents = [[result.text for result in results]] metadatas = [[result.vmetadata for result in results]] + self.session.rollback() # read-only transaction return GetResult( ids=ids, documents=documents, metadatas=metadatas, ) except Exception as e: + self.session.rollback() log.exception(f"Error during query: {e}") return None @@ -523,8 +527,10 @@ class PgvectorClient(VectorDBBase): documents = [[result.text for result in results]] metadatas = [[result.vmetadata for result in results]] + self.session.rollback() # read-only transaction return GetResult(ids=ids, documents=documents, metadatas=metadatas) except Exception as e: + self.session.rollback() log.exception(f"Error during get: {e}") return None @@ -592,8 +598,10 @@ class PgvectorClient(VectorDBBase): .first() is not None ) + self.session.rollback() # read-only transaction return exists except Exception as e: + self.session.rollback() log.exception(f"Error checking collection existence: {e}") return False