mirror of
https://github.com/element-hq/synapse.git
synced 2026-08-15 13:30:47 +00:00
`tokio_postgres` and libpq disagree on the default host when a DSN gives no `host=`: tokio-postgres falls back to localhost, whereas libpq (which `psql` and the rest of Synapse use) applies its configurable compiled-in default — typically the Unix socket directory — and honours `PGHOST`. To keep Synapse's existing connection behaviour, `connect()` now runs the DSN through `fixup_default_host`: if the parsed config has neither a host nor a hostaddr, it asks libpq what its default would be (via `PQconnectStart` on an empty conninfo, which applies libpq's defaults/env without opening a socket) and sets that on the tokio-postgres config. The libpq call lives in a small hand-written safe wrapper (`database::postgres::libpq`) over the `pq-sys` crate. pq-sys ships pre-generated bindings and links the system libpq itself, so — unlike a bindgen-based binding crate — this needs no libclang to build. The behaviour is exercised by the Python integration tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>