fix: PostgreSQL custom image with AGE/pg_textsearch + classical hybrid query#23
Conversation
| @@ -147,9 +147,9 @@ async def search( | |||
| langchain_id AS chunk_id, | |||
| content, | |||
| langchain_metadata->>'file_path' AS file_path, | |||
There was a problem hiding this comment.
Review du Code
📊 Score: 8/10
✅ Points Positifs
Fix correct et minimaliste :
- La qualification explicite
ag_catalog.to_bm25queryrésout le problème de résolution de fonction. - L'extension
pg_textsearchinstalle ses fonctions dans le schemaag_catalog(Apache AGE), pas danspublic. Sans cette qualification, PostgreSQL ne trouve pas la fonction via lesearch_pathpar défaut. - Changement scope limité (2 lignes) → faible risque de régression.
Sécurité SQL préservée :
- Les noms de tables/index sont validés par
_SQL_IDENTIFIER_REau constructeur. - L'utilisation de f-strings pour les identifiers est sécurisée grâce à cette validation.
🔍 Observations
Le fix fonctionne, mais j'ai relevé quelques points à considérer :
1. Cohérence des dépendances
# Lignes 99-106: _check_extension vérifie pg_textsearch
result = await conn.fetchval(
"SELECT EXISTS(SELECT 1 FROM pg_extension WHERE extname='pg_textsearch)"
)Mais to_bm25query vient de Apache AGE (ag_catalog). L'extension age est un prérequis de pg_textsearch.
Suggestion : Ajouter une vérification de l'extension age :
async def _check_extension(self) -> None:
async with self._pool.acquire() as conn:
for ext in ["age", "pg_textsearch"]:
result = await conn.fetchval(
"SELECT EXISTS(SELECT 1 FROM pg_extension WHERE extname=$1)", ext
)
if not result:
logger.warning(
f"Extension {ext} not installed. "
f"BM25 ranking requires: CREATE EXTENSION age; CREATE EXTENSION pg_textsearch;"
)2. Message de warning à clarifier
Ce message omet age qui est un prérequis. Pour une image PostgreSQL custom (comme indiqué dans le titre de la PR), c'est probablement déjà inclus, mais le message pourrait être plus précis.
3. Schema en constante (optionnel)
Pour éviter les magic strings, on pourrait définir PG_TEXTSEARCH_SCHEMA = "ag_catalog", mais c'est overkill si le schema est fixe.
🎯 Conclusion
Le fix est correct et prêt à merger. Les suggestions ci-dessus sont des améliorations cosmétiques, pas des blockers.
Recommendation: APPROVED ✅
Fixes PostgreSQL database on K3s to support both LightRAG and classical hybrid search.