Skip to content
Release Radar

PostgreSQL connection pooler, load balancer and sharder

v0.1.607 days after v0.1.59
View on GitHub

Part of Databases

Release history

v0.1.60

CompareGitHub

Performance

  • 40% faster handling of SELECT in sharded queries by removing redundant AST walks @jkaczman

Bugs

  • 0.0 and -0.0 hashed to the same value, which broke DISTINCT, count() and other cross-shard functions @MaxFreedomPollard
  • session_replication_role should be set via SET command @levkk
  • interval type wasn't correctly parsed for some edge cases in cross-shard aggregates @dipeshbabu
  • stddev / variance failed on some NULL values in cross-shard aggregates @dipeshbabu
  • count() wouldn't preserve original input type / would cast everything to bigint @dipeshbabu
  • NULL was incorrectly handled in array elements in cross-shard queries @dipeshbabu
  • timestamp(tz) infinite values were not correctly parsed in cross-shard queries @dipeshbabu
  • timestamp(tz) fractional time wasn't correctly preserved in cross-shard queries @dipeshbabu
  • jemalloc would crash on ARM targets with page size >= 16k @dipeshbabu
  • client/server TLS wouldn't load the whole chain, so client keys signed by intermediates were rejected @dipeshbabu
  • don't run 2pc on direct-to-shard write transactions @rlittlefield
  • connection pool statistics are preserved on RELOAD @murex971
  • handle numeric infinite values correctly in cross-shard queries @dipeshbabu
  • fully-qualified columns were skipped in DISTINCT ON @jkaczman
  • sequence names are quoted to make sure they work with all table names @dipeshbabu
  • don't drop SET check_function_bodies in schema sync @meskill
  • pg deparser wasn't handling timezone operations correctly @meskill
  • correctly route advisory lock calls in sharded deployments & handle the two parameter variant @jkaczman
  • correctly track pg_catalog.pg_advisory_* fully qualified advisory lock calls @dipeshbabu

Code quality

  • migrate replication/resharding to new tasks API @meskill
  • unique_id and insert_splits cleanup @sgrif
  • auto retries to some flaky spots in CI @jkaczman

New Contributors

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.59...v0.1.60

Bug fixes

  • [Breaking] Manual bans are now carried over to new connection pools after RELOAD. They were previously discarded, allowing traffic to flow through prematurely after configuration reload. Breaking because this changes existing behavior and may require operators to adjust migration scripts to issue a separate UNBAN command after RELOAD. @levkk
  • Schema reload was not triggered on certain DDL statements, e.g., CREATE TYPE, which caused incorrect RowDescription messages sent to clients for direct-to-shard and cross-shard queries which touched those new types. @levkk
  • 2pc WAL checkpointer could cause WAL corruption by removing segments necessary for recovery. Fixed by storing relationships between segments containing data about the same transaction, preventing dependent segments from being removed prematurely. @levkk
  • SCRAM authentication could cause DoS because it was moved to background Tokio threads, which were unbounded. Added background_workers setting (default 0, disabling this whole feature) to limit that concurrency. Moved SCRAM auth back to the Tokio async worker pool. @levkk
  • Fix segfault in query normalization (only affected the Enterprise edition) caused by a bug in our parser. Added pg_raw_parse::normalize to our regression test suite to prevent recurrences. @levkk
  • Setting connection_recovery to drop would cause connection churn for connection drivers using prepared statements. Fixed by ensuring we don't drop connections in this scenario. @levkk
  • Disable triggers on destination shards during resharding (by setting replica_session_role to replica). This prevents triggers from running twice and also ensures we can copy tables that use foreign keys and which delete / update relationships during resharding. @meskill
  • Prevent deadlock in extended protocol pipelines when client sends a Describe out of specific order @murex971
  • Correctly handle omnisharded to sharded joins where the sharding key is present in omnisharded tables @ygxio @levkk
  • Connections using LISTEN would incorrectly handle that command sent via extended protocol (returning ReadyForQuery prematurely) @murex971
  • When using passthrough auth, reloading the config would not carry over any user-specific settings configured in users.toml @mehcode
  • Role detection (role = "auto") could cause deadlock in pool for read-only clusters that served write transactions (e.g., BEGIN, not BEGIN READ ONLY) @levkk
  • Query router wouldn't handle nested typecasts correctly for shard key detection @sgrif

Performance

  • Improve performance of resharding copy data phase when using multiple replicas by more fairly distributing workloads between source databases @meskill

Features

  • Support LIMIT and OFFSET in cross-shard statements sent via PREPARE and EXECUTE @jkaczman
  • Support cross-account RDS IAM authentication by using STS assume-role @lyupan-cb
  • Add total_wait_time and avg_wait_time to OpenMetrics (and OTEL) @rimrakhimov
  • Support Postgres foreign keys during resharding by disabling Postgres triggers during replication. This also ensures that triggers on the destination shards don't run, potentially causing double data insertion. @meskill
  • Inject correct time (e.g. timestamp, timestamptz, etc.) and UUID values in cross-shard and omnisharded INSERT queries, to make sure the values are identical on all shards. This replaces database-generated defaults without changing the schema. Enable by turning on rewrite.non_deterministic_functions = "rewrite". @jkaczman
  • Add checkout_timeout metric to OpenMetrics (and OTEL) and admin database (SHOW STATS) which shows how many times clients hit the error for a particular pool @levkk

Code quality

  • Fix typo in config example @joshuaharry
  • Refactor resharding copy data code to use the tasks API @meskill
  • Cleanup of omnisharded table handling during copy data phase @meskill
  • Remove redundant check in shard key update flow @sgrif
  • CI now uses Postgres 18 (used to be 16) @jkaczman
  • Make some tests more deterministic instead of relying on timing @dipeshbabu @ziomarco

New Contributors

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.58...v0.1.59

Features

  • Database-specific TLS configuration (incl. mTLS), allowing different TLS certificates per host in pgdog.toml @rlittlefield
  • Correct handling of DISCARD, incl. DISCARD TEMP and DISCARD ALL @murex971
  • Add FORCE_RELOAD admin command which guarantees all subsequent queries are sent to new connection pools (vs. RELOAD which is async) @jkaczman
  • Query engine hooks for pgdog.nextval function (only available in EE) to generate globally unique, monotonically increasing integers with no gaps (using Raft in the control plane) @levkk

Bugs

  • Allow omnisharded reads with a shard comment routing inside cross-shard write transactions @rlittlefield
  • Connections were unncessarily dropped and re-created when a replica was added (or removed) in pgdog.toml @jkaczman
  • Correctly handle omnisharded writes inside CTEs @rlittlefield

Code quality

  • Added CHANGELOG.md and CHANGELOG-ENTERPRISE.md to track changes to open source and enterprise edition @levkk

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.57...v0.1.58

Performance

  • SCRAM client authentication (which uses expensive crypto) is now pushed to background threads, which will avoid blocking other clients from running queries during connection storms

Features

  • Add listen_backlog configuration setting to control how many new, concurrent, TCP connections PgDog will allow until they are silently rejected @ryderhwang
  • DISCARD now clears client's prepared statement cache, advisory locks & notification channels @murex971
  • CREATE TEMP TABLE now pins the client connection until the table is dropped or the client disconnects @sgrif
  • Count and show number of idle-in-transaction timeouts as a pool statistic @murex971
  • Add support for SCRAM-SHA-256-PLUS client authentication @abnegate
  • Add banned gauge to OpenMetrics and OTEL indicating which database is currently blocked from reads by the load balancer @ChrisJr404

Bugs

  • Fix cross-shard variance() crash when empty/null results returned by shards @sgrif
  • Prepared statements prepared via simple protocol now respect prepared_statements_ttl @jkaczman

Code quality

  • Refactor resharding task queue to use more types @meskill
  • Clean up resharding logging @levkk
  • Refactor the query engine code to support cross-shard subqueries and CTEs @jkaczman

New Contributors

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.56...v0.1.57

Hot fix for v0.1.55.

Bug fixes

  • Don't set the thread stack size to 32MB by default and don't warn the user about a deprecated setting at runtime (query_parser_engine).

Security

  • Docker images now use keyless cosign attestation @dkarter

Features

  • Support execution of multi-statement queries sent via the simple protocol, e.g., SET statement_timeout TO 0; SELECT * FROM users;. Previously, this would error out. Limitation: we don't automatically start a transaction, so only one DML statement per query is allowed. @levkk
  • Switch to our implementation of query normalization instead of using pg_query (only relevant if using the Enterprise edition) @sgrif @jkaczman

Performance

Bug fixes

  • Avoid NoPrimary errors when primary election is delayed (role = "auto" mode) @meskill
  • Preserve query case in admin commands before passing the string to the query parser @meskill
  • Proxy shutdown was sometimes delayed by a race condition in the load balancer monitor @meskill
  • Support parameter type casting in EXECUTE statements @murex971
  • Don't run unnecessary SELECT query during sharding key update @jkaczman

Code quality

  • Add query_parser_engine = "pg_query_protobuf" deprecation warning and remove the setting from usage @jkaczman
  • Dead code removal @sgrif @meskill
  • Use pub(crate) instead of pub to help with dead code analysis @sgrif
  • Refactor the resharding task runner to use more types @meskill
  • Move pool configuration into pgdog-config crate, for easier use in Enterprise code @meskill
  • Fix flaky tests @jkaczman

New Contributors

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.54...v0.1.55

Performance

  • 8% performance improvement in the connection pooler by optimizing our use of Tokio futures @ygxio
  • Additional performance improvements by using Tokio futures correctly @sgrif
  • Remove several unnecessary memory allocations @ygxio

Bugs

  • Don't validate replica identity during the schema sync & data sync phases of resharding if caller does not intend to use logical replication to sync real-time data @bhargavtheertham-cb
  • Extended protocol pipeline messages were incorrectly ordered in cross-shard queries @meskill
  • Schema sharding shouldn't trigger the incomplete omnisharded writes check @jkaczman
  • DISTINCT state was not reset between cross-shard queries in the same transaction @levkk

Features

  • Make OpenMetrics host configurable with openmetrics_host @murex971
  • Block direct-to-shard queries when SET pgdog.sharding_key doesn't match a mapped value in list-based and range-based sharding configuration @jkaczman
  • Setting read_only on a user in users.toml will direct that user's traffic to replicas, if configured @jkaczman
  • Partial support for PREPARE and EXECUTE (including sharding); the prepared statement can be only executed with EXECUTE at the moment and cannot be executed using the extended protocol @levkk
  • Wait for health check to pass before allowing traffic on newly added databases in pgdog.toml @sgrif
  • Optional FIPS mode (compile time flag: cargo build -p pgdog --release --features fips)

Testing

  • Basic Haskell acceptance tests @levkk
  • Ensure we only generate a node id when NODE_ID is set @meskill

Code quality

  • Remove library target and only build binary target, allowing us to more easily detect dead code @sgrif
  • Remove a bunch of dead code @sgrif
  • Cleanup multi-shard and row decoder code @levkk

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.53...v0.1.54

New parser

New parser is now enabled by default. Please test this release before launching in production. You should see 6x-8x speed improvements resulting in lower latency for query cache misses, and up to 90% memory usage reduction overall. This is not a typo! We fixed quite a few things here.

This also makes the query_parser_engine setting redundant and obsolete. It will now be ignored.

By @sgrif

Bug fixes

  • Fix negative interval text format parsing in cross-shard aggregates @bryanmehall
  • Connection pools were giving clients closed server connections, causing intermittent errors @nsavvide
  • In role = "auto" mode, set all hosts to role = "replica" until proven otherwise; this unblocks reads faster during configuration changes @murex971
  • [New parser] Fix GRANT and CREATE STATISTICS DDL handling @levkk
  • When using schema-based sharding, ignore the inconsistent omnisharded tables write check @levkk
  • Include sv_idle_xact calculation into the example Datadog dashboard @zacharywelch
  • Fix crash when a cross-shard avg() calculation was done on empty tables @sgrif
  • RESET PREPARED admin command wasn't doing anything @IgorOhrimenko
  • Fix Mac OS build for the new parser @jkaczman
  • Fix pipelined queries using Postgres portals; specifically affected the Node JS Postgres drivers @nsavvide
  • Sending portal close messages could potentially close prepared statements that were identically named @meskill
  • Schema synchronization during resharding now restores REPLICA IDENTITY indexes in the post-data phase @rlittlefield
  • Cross-shard aggregates with passthrough columns now work correctly @jkaczman
  • PREPARE was leaking memory in the prepared statements cache @meskill
  • Fix incorrect handling of errors in mixed simple/extended protocol exchange @jkaczman

Performance

  • Lower the number of memory allocations in prepared statements cache @meskill
  • Remove unnecessary statement allocation in the parser (50% allocation reduction in the hot path) @sgrif

Features

  • Track selected, inserted and deleted rows, as reported by server connections @murex971
  • Support prepared statements cache TTL (time to live), automatically re-planning statements periodically; this sidesteps the stale execution plan problem @meskill

Misc

  • Clippy pass over new parser code @sgrif
  • Bump Mac OS runner to macos-26 (macos-14 is about to be deprecated) @jkaczman
  • Docker compose demo wasn't saving Postgres data correctly @andyatkinson
  • Small refactor of pool health tracking @sgrif

New Contributors

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.52...v0.1.53

Bug fixes

  • Use one timestamp for OTEL metric batches, fixing Prometheus + OTEL integration @KennanHunter
  • Direct-to-shard queries were incorrectly flagged as omnisharded when using schema sharding function @levkk
  • Pub/sub channels were not scoped by database, causing misrouted messages with multiple databases using LISTEN/NOTIFY in transaction mode @4thel00z
  • Normalize sharding tables identifiers to support Postgres-like format (quotes preserve capitalization) @nsavvide

Features

  • Handle different OIDs for custom types in sharded deployments @sgrif
  • New lookup sharding function for manual sharding using omnisharded tables @rlittlefield
  • Support turning on/off dry run mode through an admin database command @levkk
  • Allow per-role pool configuration in [[users]] and [[databases]] config sections @levkk

Performance

  • Binary COPY tuple was encoding column data one byte at a time, causing allocator churn @ygxio

Misc

New Contributors

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.51...v0.1.52

Performance

  • Implement async processing during resharding, improving performance @ygxio
  • Remove an allocation in the load balancer hot path @sgrif
  • Don't reset/set parameters that haven't changed during parameter sync in transaction mode @levkk
  • Prevent thundering herd with multiple users in users.toml when loading schema at startup @levkk

Stability

  • Fix timers/loops stop firing after 12 days of uptime breaking connection pools @meskill
  • Fix crash in new parser handling partitioned table DDL @levkk
  • Enable jemalloc background_thread by default, giving memory back to OS @IgorOhrimenko

New features

  • Support mTLS between PgDog and Postgres servers @andy-paine
  • Re-implement two-phase commit WAL @levkk
  • Optionally allow password users to bypass mTLS @bhargavtheertham-cb
  • Add locked clients OTEL metric to track count of clients locked to a specific server @KennanHunter

Code quality

  • Remove dead types, simplify construction of other types in tests @sgrif
  • Fix flaky load balancer test @KrishnaSindhur
  • Fix flaky test test_reload_connection_count_stable @sgrif

New Contributors

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.50...v0.1.51

What's Changed

  • fix: validate message length before widening it to an unsigned integer @frangz
  • fix: hot mutex in client stats @levkk
  • fix: switch to alternative Tokio timer for >2 workers (10-20% CPU reduction with 16+ workers) @levkk
  • fix: fully support the extended protocol for BEGIN/ROLLBACK commands intercepted by the proxy @Kerem-Kurt
  • fix: avoid heap allocations when encoding integer and float parameters in sharded queries @crodas
  • fix(config): idempotent random admin password generation @meskill
  • fix: make pgdog-config doc comments pass rustdoc lints @crodas
  • fix: +lse (atomics) optimizations for ARM64 (5-10% CPU reduction) @levkk
  • fix(config): improve validation messages for sharding config @meskill
  • feat: add process name to 2pc transaction gid @levkk
  • feat: add correct SIGTERM handler

New Contributors

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.49...v0.1.50

Highlights

New query parser

We rewrote the query parser to use our in-house library: https://github.com/pgdogdev/pg_raw_parse/ It's based on pg_query but maps Rust structs directly to the arena-allocated MemoryContext allocated by the Postgres parser. This brings our (de)ser cost for parsing queries to 0.

Early metrics:

  1. 2x improvement in parsing speed vs query_parser_engine = "pg_query_raw"
  2. 8x improvement in parsing speed vs query_parser_engine = "pg_query_protobuf" (used by default, so most users will see this)
  3. 90% (6x) reduction in memory usage (eliminates the OOM problems we've been having with large queries e.g., #854 #1061)

It's entirely generated using Rust build scripts directly from Postgres C code and allows us to do major version upgrades in one, 5 line PR. More on this soon on our blog.

How to use

The new parser is experimental and disabled by default. We are building a separate Docker image for each release / commit in main. To use it, just append -new-parser prefix to the tag, for example:

image:
  tag: v0.1.49-new-parser

by @sgrif

New plugin interface

The plugins system was rewritten to use safer primitives and simpler API. This is a breaking change. We ported all in-tree plugins to the new interface, so no impact on any plugins we currently ship with PgDog in the Docker image. If you wrote your own plugins, reach out to us and we'll help you fix them. New documentation coming soon.

by @sgrif

Changelog

  • fix: skip multi-statement SET validation in session mode by @zefixlluja
  • fix: add default to engine in [[query_parsers]] by @levkk
  • fix: include_primary_if_replica_banned ignored primary if it was the only candidate by @levkk @kzemek
  • fix: role detector deadlocked when new databases with role = "auto" were added at runtime by @levkk
  • feat: allow read_write_split when parser is disabled to direct traffic by default @levkk
  • fix: query parser ran regex twice by @levkk
  • test: disable copy_data retry_tests temporarily by @meskill
  • fix(replication): fix wait_for_replication logic for unrelated changes by @meskill
  • fix: LSN detector can now correctly identify replica-only deployments by @levkk
  • fix: support psycopg2 (handle SET commands) in admin DB by @levkk
  • feat(breaking): use a less horrendously unsafe FFI interface for plugins by @sgrif
  • chore(config): save file content for ConfigAndUsers for diff handling in EE by @meskill
  • refactor: remove fingerprinting from our codebase by @sgrif
  • feat: update the parser to support Postgres 18 by @sgrif

New Contributors

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.48...v0.1.49

What's Changed

  • feat: manual connection pinning using SET pgdog.pin TO true; -- false / RESET to unpin; useful to temporarily use session-level features in transaction mode
  • feat: Hashicorp Vault static role credentials @larrywax
  • feat: per-database query parser setting
  • fix(sharding): correctly handle pipelined cross-shard queries @sgrif
  • fix(replication): better cancellation handling during replication streaming @meskill
  • fix: don't re-create connections when password changes, allowing for faster reloads
  • chore: normalize configs for nextest and rust integration tests @meskill
  • refactor: ported several functions to new, much faster parser @sgrif

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.47...v0.1.48

What's Changed

  • feat(lb): speed up failover & add standalone connection fallback for LSN check
  • feat(sharding): add support for two-phase commit to COPY used for resharding @yogesh1801
  • refactor(resharding): rework of async tasks used in resharding to handle cancellation better @meskill
  • fix(sharding): prevent premature cutover due to lag miscalculation @meskill
  • fix(sharding): update the processed LSN on keep-alive messages @meskill
  • fix(lb): replica lag evaluation in load balancer used for banning replicas
  • fix(lb): fix no routing error with prefer_primary when all replicas are banned @stewart-glabs
  • refactor(sharding): more parser code is moving to pg_parse_raw @sgrif

New Contributors

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.46...v0.1.47

Breaking change

PgDog now blocks UPDATE queries that mutate a sharding key in a table that has foreign key references to other tables which automatically mutate the referenced tables using:

  • CASCADE
  • SET NULL

Both of these were previously breaking referential integrity, since we were not moving the referenced rows. RESTRICT (which is typically default) is not affected because Postgres is able to validate ref integrity before we move the row.

Changelog

  • feat(sharding): rewrite [[sharded_mappings]] config to make it easier to use @meskill (not documented yet, old config format still works)
  • feat: add query_size_limit setting to block/warn on very large queries @meskill
  • feat: RELOAD keeps connections and paused state if adding or removing connection databases or users @murex971
  • feat(load balancer): add prefer_primary read/write separation mode to allow manual opt into load balancing @stewart-glabs
  • feat: log warning when lsn_check_delay is misconfigured
  • refactor: start porting the codebase to use the new, much faster SQL parser @sgrif
  • feat(sharding): block cross-shard sharding key updates on tables that have foreign key constraints @murex971
  • feat(auth): Hashicorp Vault server authentication integration @larrywax

New Contributors

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.45...v0.1.46

What's Changed

Distribution

Pre-compiled binaries now ship with every release in GitHub:

  • Linux x86/ARM
  • Mac (Apple Silicon)
  • Debian package (amd64/arm64).

Breaking change

SET LOCAL pgdog.shard and SET LOCAL pgdog.sharding_key now assume the entire transaction will be sent to that one shard only. Any query that attempts to talk to a different shard, incl. omnisharded writes, will be blocked. This is not really a breaking change, but more of a bug fix, but still worth calling this out since this changes the behavior of the sharding logic a bit.

If using sharding, please double check this release before deploying to prod just to make sure the new shard checker doesn't accidentally (and incorrectly) block your query from execution.

Changelog

  • feat: check that tuples in multi-tuple INSERT statement belong to the same shard before rewriting @murex971
  • feat: handle the special case of SELECT set_config(...), which we didn't track previously; this fixes the "pg_dump broke my pooler" issue @sgrif
  • feat: enable parser for LISTEN/NOTIFY/UNLISTEN in pooler-only mode (`query_parser = "on" not required, makes PgDog much faster)
  • feat: add LISTEN/NOTIFY stats
  • fix(sharding): COPY with rows exceeding one CopyData message size were incorrectly routed to all shards @LnL7
  • fix: Elixir driver sends Close for one-off statements, which we incorrectly rejected with an error
  • fix: major performance improvements in pg_query, affecting long queries @sgrif
  • fix: Windows build by @imor
  • fix: race condition in LISTEN when registering for a channel for the first time
  • fix: UnexpectedEof error log when passthrough auth is enabled
  • fix: use interval instead of sleep in stats loop which may have caused our stats to stop working after 12 days of uptime (potential Tokio bug, not confirmed)

New Contributors

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.44...v0.1.45

What's Changed

  • fix(security): use constant_eq for password checks @meskill
  • fix(security): admin password not checked when using passthrough auth
  • fix(resharding): fix issues with copy data @meskill
  • feat(resharding): use binary protocol for replication (slightly faster than text) @meskill
  • fix(sharding): don't track columns independently, allowing duplicate expression rewrites in cross-shard queries @sgrif
  • feat(sharding): error when encountering an unsupported aggregate function in cross-shard queries @sgrif
  • feat(sharding): give a more meaningful error message when a helper column is missing in cross-shard queries @sgrif
  • chore: update to Rust 2024 @sgrif
  • fix: refactor and improve the functionality of avg() @sgrif
  • refactor: aggregate functions cleanup @sgrif
  • fix: clippy fixes @imor
  • fix: more clippy errors and CI enforcement @meskill
  • fix: handle comments in SET in regex detector

Also introducing our company mascot, Von Count.

<img width="225" height="225" alt="image" src="https://github.com/user-attachments/assets/43c6fe1c-6620-4e64-9863-c567e5838cca" />

New Contributors

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.43...v0.1.44

What's Changed

  • feat: allow disabling idle healthchecks @kitop
  • feat: add query_log_stdout config for pgcat-style query logging @marcomicera
  • feat: allow to bypass DNS TTL entirely with dns_ttl = 0
  • fix: use smaller data structure to map clients to servers, improving connection pool performance slightly @meskill
  • test: fix flaky prepared statements test @meskill
  • refactor: cleanup some awkward Rust patterns @sgrif

New Contributors

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.42...v0.1.43

What's Changed

  • feat(logging): identify the source of auth secret for new server connections
  • feat(tls): mTLS using client certificates and per-user CN/dNSName matching (this is still experimental and not final, use for testing / PoC only); can replace password auth for client -> PgDog connections
  • feat: maintenance mode can now be set on a per-database basis instead of just globally
  • feat(logging): log which auth error the user experienced to stderr; helps debug complex auth configurations
  • fix: HTTP health check returned false negative when passthrough auth was used @sunil-2000
  • fix(sharding): correct display for integers in cross-shard aggregates @sgrif
  • fix(sharding): false positive cross-shard check for BEGIN in session mode with cross-shard queries disabled
  • fix(sharding): multi-tuple INSERTs rewrites with go/pq (broke in the last release when we removed prepared_statements = "extended_anonymous")
  • fix(metrics): false positive OpenMetrics error in logs (hyper::Error(IncompleteMessage))
  • chore: update dependencies @sgrif
  • test(resharding): add benchmarks for copy_data & replication by @meskill
  • chore(test): fix some flaky tests

New Contributors

Full Changelog: https://github.com/pgdogdev/pgdog/compare/v0.1.41...v0.1.42