diff --git a/src/driver/sqlx_postgres.rs b/src/driver/sqlx_postgres.rs index ceb855f24..b43ccd52f 100644 --- a/src/driver/sqlx_postgres.rs +++ b/src/driver/sqlx_postgres.rs @@ -79,7 +79,7 @@ impl SqlxPostgresConnector { let set_search_path_sql = options .schema_search_path .as_ref() - .map(|schema| format!("SET search_path = {schema}")); + .map(|schema| format!("SET search_path = \"{schema}\"")); let lazy = options.connect_lazy; let mut pool_options = options.sqlx_pool_options(); if let Some(sql) = set_search_path_sql { diff --git a/tests/connection_tests.rs b/tests/connection_tests.rs index 0838086fa..1aeeafd1d 100644 --- a/tests/connection_tests.rs +++ b/tests/connection_tests.rs @@ -140,3 +140,23 @@ pub async fn connection_ping_closed_postgres() { ctx.delete().await; } + +#[sea_orm_macros::test] +#[cfg(feature = "sqlx-postgres")] +pub async fn connection_with_search_path_postgres() { + let ctx = TestContext::new("connection_with_search_path").await; + + let base_url = std::env::var("DATABASE_URL").unwrap(); + let mut opt = sea_orm::ConnectOptions::new(format!("{base_url}/connection_with_search_path")); + opt + // The connection pool has a single connection only + .max_connections(1) + // A controlled connection acquire timeout + .acquire_timeout(std::time::Duration::from_secs(2)) + .set_schema_search_path("schema-with-special-characters"); + + let db = sea_orm::Database::connect(opt).await; + assert!(db.is_ok()); + + ctx.delete().await; +}