feat: add options for PostGres connection

This commit is contained in:
kevinnkansah 2025-10-05 23:29:04 +02:00
parent 6190fa8985
commit 108cdbe133
2 changed files with 33 additions and 2 deletions

View file

@ -310,6 +310,11 @@ POSTGRES_IVFFLAT_LISTS=100
# POSTGRES_SSL_ROOT_CERT=/path/to/ca-cert.pem
# POSTGRES_SSL_CRL=/path/to/crl.pem
### PostgreSQL Server Options (for Supabase Supavisor)
# Use this to pass extra options to the PostgreSQL connection string.
# For Supabase, you might need to set it like this:
# POSTGRES_SERVER_OPTIONS="options=reference%3D[project-ref]"
### Neo4j Configuration
NEO4J_URI=neo4j+s://xxxxxxxx.databases.neo4j.io
NEO4J_USERNAME=neo4j

View file

@ -74,6 +74,9 @@ class PostgreSQLDB:
self.hnsw_ef = config.get("hnsw_ef")
self.ivfflat_lists = config.get("ivfflat_lists")
# Server settings
self.server_settings = config.get("server_settings")
if self.user is None or self.password is None or self.database is None:
raise ValueError("Missing database user, password, or database")
@ -173,6 +176,24 @@ class PostgreSQLDB:
connection_params["ssl"] = False
logger.info(f"PostgreSQL, SSL mode set to: {self.ssl_mode}")
# Add server settings if provided
if self.server_settings:
try:
settings = {}
# The format is expected to be a query string, e.g., "key1=value1&key2=value2"
pairs = self.server_settings.split("&")
for pair in pairs:
if "=" in pair:
key, value = pair.split("=", 1)
settings[key] = value
if settings:
connection_params["server_settings"] = settings
logger.info(f"PostgreSQL, Server settings applied: {settings}")
except Exception as e:
logger.warning(
f"PostgreSQL, Failed to parse server_settings: {self.server_settings}, error: {e}"
)
self.pool = await asyncpg.create_pool(**connection_params) # type: ignore
# Ensure VECTOR extension is available
@ -828,8 +849,8 @@ class PostgreSQLDB:
# Execute the migration
alter_sql = f"""
ALTER TABLE {migration['table']}
ALTER COLUMN {migration['column']} TYPE {migration['new_type']}
ALTER TABLE {migration["table"]}
ALTER COLUMN {migration["column"]} TYPE {migration["new_type"]}
"""
await self.execute(alter_sql)
@ -1368,6 +1389,11 @@ class ClientManager:
config.get("postgres", "ivfflat_lists", fallback="100"),
)
),
# Server settings for Supabase
"server_settings": os.environ.get(
"POSTGRES_SERVER_OPTIONS",
config.get("postgres", "server_options", fallback=None),
),
}
@classmethod