ragflow/api/db
Andrea Bugeja 8a41057236
Fix: Add RetryingPooledPostgresqlDatabase to handle max_retries param (#10524)
## What problem does this PR solve?

Fixes the PostgreSQL connection error that prevents RAGFlow from
starting:

peewee.ProgrammingError: invalid dsn: invalid connection option
"max_retries"


## Problem Analysis

The `BaseDataBase` class in `api/db/db_models.py` adds `max_retries` and
`retry_delay` to the database configuration dict before passing it to
the database connection constructor.

- **MySQL**: Has `RetryingPooledMySQLDatabase` class that properly
extracts these custom parameters using `kwargs.pop()` before calling the
parent constructor
- **PostgreSQL**: Was using the base `PooledPostgresqlDatabase` class
which passes all parameters directly to `psycopg2.connect()`, which
doesn't recognize `max_retries` as a valid connection option

## Solution

Created `RetryingPooledPostgresqlDatabase` class that:
- Extracts `max_retries` and `retry_delay` parameters before
initialization
- Implements retry logic with exponential backoff for connection
failures
- Handles PostgreSQL-specific connection errors (connection refused,
server closed, etc.)
- Mirrors the existing `RetryingPooledMySQLDatabase` implementation

Updated the `PooledDatabase` enum to use the new retrying class for
PostgreSQL.

## Benefits

 Prevents invalid connection parameters from being passed to psycopg2  
 Adds automatic retry logic for PostgreSQL connection failures  
 Provides better error logging for PostgreSQL-specific issues  
 Maintains consistency between MySQL and PostgreSQL database handling  

## Type of change

- [x] Bug Fix (non-breaking change which fixes an issue)

## Testing

Tested with PostgreSQL database configuration and verified:
- Server starts without the "invalid dsn" error
- Database connections are established successfully
- Retry logic works correctly on connection failures

Co-authored-by: Andrea Bugeja <andrea.bugeja@gig.com>
2025-10-16 15:08:41 +08:00
..
joint_services Feat/admin drop user (#10342) 2025-09-29 10:16:13 +08:00
services Improve file management (#10577) 2025-10-16 09:38:25 +08:00
__init__.py Feat: Use data pipeline to visualize the parsing configuration of the knowledge base (#10423) 2025-10-09 12:36:19 +08:00
db_models.py Fix: Add RetryingPooledPostgresqlDatabase to handle max_retries param (#10524) 2025-10-16 15:08:41 +08:00
db_utils.py Introduced beartype (#3460) 2024-11-18 17:38:17 +08:00
init_data.py Refactor: migrate the function to specific file (#10201) 2025-09-25 23:37:50 +08:00
reload_config_base.py Format file format from Windows/dos to Unix (#1949) 2024-08-15 09:17:36 +08:00
runtime_config.py Update version display on web UI (#3405) 2024-11-14 17:51:21 +08:00