mirror of
https://github.com/t8y2/dbx.git
synced 2026-10-28 08:08:02 +00:00
fix(postgres): sync client timezone on connect
Set PostgreSQL session timezone to the client's local timezone via after_connect, matching Navicat's behavior. (closes #262)
This commit is contained in:
@@ -25,6 +25,7 @@ duckdb = "1.3.2"
|
||||
tiberius = { version = "0.12.3", default-features = false, features = ["tds73", "chrono", "rust_decimal", "rustls"] }
|
||||
reqwest = { version = "0.12", default-features = false, features = ["json", "stream", "rustls-tls", "socks"] }
|
||||
futures = "0.3"
|
||||
iana-time-zone = "0.1"
|
||||
mongodb = "3.2.5"
|
||||
russh = "0.60"
|
||||
portpicker = "0.1.1"
|
||||
|
||||
@@ -133,12 +133,21 @@ pub async fn connect(url: &str) -> Result<PgPool, String> {
|
||||
// Validate SSL certificate paths if present in the URL
|
||||
validate_postgres_ssl_paths(url)?;
|
||||
|
||||
let tz = iana_time_zone::get_timezone().unwrap_or_else(|_| "UTC".to_string());
|
||||
let url_owned = url.to_string();
|
||||
super::with_connection_timeout("PostgreSQL", async {
|
||||
PgPoolOptions::new()
|
||||
.max_connections(5)
|
||||
.acquire_timeout(super::connection_timeout())
|
||||
.idle_timeout(Duration::from_secs(300))
|
||||
.connect(url)
|
||||
.after_connect(move |conn, _meta| {
|
||||
let tz = tz.clone();
|
||||
Box::pin(async move {
|
||||
conn.execute(sqlx::query(&format!("SET timezone = '{tz}'"))).await?;
|
||||
Ok(())
|
||||
})
|
||||
})
|
||||
.connect(&url_owned)
|
||||
.await
|
||||
.map_err(|e| format!("PostgreSQL connection failed: {e}"))
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user