Releases: pgdogdev/pgdog
Releases · pgdogdev/pgdog
v0.1.36
What's Changed
- feat: parallelize copy data & schema sync across shards
- feat: change default setting value for
query_cache_limitto 1000 to avoid heavy memory usage on first deployment - feat: log warning if re-sharding replication is missing rows; this if only impactful is using
copy-datawithout--replication-onlyflag and shouldn't happen under normal state - feat: add 53-bit unique ID generator for apps that pass IDs directly to JS frontends
- feat: add user-friendly interface to create sharded sequences (
pgdog.install_sharded_sequencepl/pgsql function) - fix: use correct backend data type for cross-sharded
count(*), fixescount(*)::intreturning incorrect count - fix:
oidisu32, noti32; affected old databases with schema churn (oid exceeded 2.2B) - fix: omnisharded table re-sharding: copy and replication copied the same table N times (N = number original shards)
- chore: regression testing for unique id
- chore: migrate to RWX for CI by @kylekthompson
- chore: resharding integration tests
- fix: detect
SELECT ... FOR UPDATEinside CTEs - fix: potentially dropping child table rows during streaming replication / re-sharding
New Contributors
- @kylekthompson made their first contribution in #862
Full Changelog: v0.1.35...v0.1.36
v0.1.35
What's Changed
- feat: DDL-only/DML-only mirroring
- fix: much faster schema loading query, works with databases with many tables
- fix: invalid keep-alive settings are just a warning now, won't cause a crash
- fix: race in
extended_anonymousprepared statements - fix: deadlock in sharded
SELECT ... WHERE IN ($1, $2, $3) - fix: handle
LIMIT $1where$1is null using the extended protocol - fix: logical replication
Deletemessage generated incorrect parameters with compound identity columns - chore: add
postgres.jstests to CI
Full Changelog: v0.1.34...v0.1.35
v0.1.34
In-transaction connections deadlock
If you're using v0.1.31 or later, please upgrade to v0.1.34 asap. This release fixes a deadlock caused by clients disconnecting mid-transaction.
What's Changed
- fix: client disconnect inside transaction caused deadlock
- chore: fix clippy issues by @meskill
Full Changelog: v0.1.33...v0.1.34
v0.1.33
What's Changed
- feat: PgDog-supported plugin for routing queries using table names (e.g., for primary-only routing)
- feat: allow passthrough auth user to change its password
- fix:
Passthough->Passthroughtypo @rissson - fix: mirror prepared statement mode in session pooling @costi
- fix: correctly handle
Relationmessage sent inside transaction during logical replication (used for resharding) - fix: correctly forward only one Postgres error to the client, using the error code provided by Postgres server
- fix: correctly handle
FATAL/PANICerrors (force close the connection in the pooler) without banning host - fix: dependabot reporting security issues in integration tests repo-wide (e.g., Rails, Python, etc.) @meskill
New Contributors
Full Changelog: v0.1.32...v0.1.33
v0.1.32
What's Changed
- feat: weighted load balancing
- fix: schema sharding in session mode with
cross_shard_disabled - feat: add configurable log format and level by @levish0
New Contributors
Full Changelog: v0.1.31...v0.1.32
v0.1.31
What's Changed
- feat: online resharding with zero downtime, incl. admin commands to orchestrate it
- feat: RDS IAM authentication support for server connections @Tolsto
- feat: handle
RESETcommand - feat: ban replicas if replica lag is high (configurable)
- feat: config linting and validation with
jsonschema, incl. language server support @meskill - fix: replication stream broke due to parser changes, added regression tests
- fix: update
verify_caimplementation for rustls 0.23, fixes Aurora TLS connections withverify_ca(verify_fullworked already) @quentindemetz - fix: connection refused to PgDog if a database is down on proxy startup
- fix: binary
COPYcrash withfailed to fill whole buffer, caused by incorrect buffering of partial packets - fix: segfault in
pg_querydeparse_rawcaused by empty C strings - fix:
LISTEN/NOTIFY/UNLISTENwere blocked in session mode ifpub_sub_channel_sizewas set to 0 by @mnbbrown - fix: transactions were incorrectly buffered in session mode and swallowed in transaction mode if advisory locks were used
- fix: sending partial requests to backend after abrupt client disconnect, causing server connections to be stuck in
ClientReadandactivestate - fix:
exclude_primaryshould read from primary if there are no replicas @mijoharas - fix: add more params to the ignore list, like
is_superuser, which caused errors when clients modified them withSET - chore: use
OUT_DIRfor autogenerated files, addbindings.rsto.gitignore@mijoharas
New Contributors
- @quentindemetz made their first contribution in #786
- @mnbbrown made their first contribution in #800
- @Tolsto made their first contribution in #793
Full Changelog: v0.1.30...v0.1.31
v0.1.30
What's Changed
BREAKING: user settings take priority
User settings in users.toml now take priority over database settings in pgdog.toml. This was the opposite previously. For example:
users.toml
[[users]]
name = "pgdog"
database = "prod"
pool_size = 20pgdog.toml
[general]
default_pool_size = 10
[[databases]]
name = "prod"
host = "127.0.0.1"
pool_size = 25The connection pool for user pgdog will be 20.
Changelog
- feat: support
OFFSETin cross-shardSELECTqueries - feat: support for plugin API versioning @meskill
- fix: incorrect error handling when queries are pipelined (psycopg, Sequelize, etc.)
- feat:
client_connection_recoverydefaults todrop - refactor: make schema serializable for Enterprise Edition integration
- feat: schema fetches foreign keys to support tables without sharding keys
New Contributors
Full Changelog: v0.1.29...v0.1.30
v0.1.29
What's Changed
- feat: expose
default_pool_size/pool_size,prepared_statements_limitandquery_cache_limitas Prometheus metrics @Adi-Goll - feat: support cross-shard
LIMIT(but notOFFSET, yet) - feat: support multiple
SETstatements in one query - feat: add
client_connection_recoverysetting which allows to close client connections that have received acheckout timeout/all replicas downerror from PgDog - fix: race condition in Sequelize (
Bind,Exexute,Flush,Sync) that caused record creation to be acknowledged before transaction committed in Postgres - fix: don't attempt to recover server connections that have received partial client requests (hard to determine state of connection)
- fix: handle
PortalSuspendedmessage correctly - chore: Prisma, Sequelize tests
- fix: place
Syncinto its ownClientRequestin spliced requests (Java driver)
New Contributors
Full Changelog: v0.1.28...v0.1.29
v0.1.28
What's Changed
- fix: correctly handle
INTEGERtoBIGINTconversion duringschema-syncby mutating table definitions instead of appendingALTER TABLEstatements, and handle partitioned tables correctly - fix: average calculation in
SHOW STATSforreadsandwritesstats - feat: make resharding
COPYformat configurable (textorbinary) - feat: add
TIMESTAMP/TIMESTAMPTZsupport for aggregates (max(),min()) - fix: parsing (de)serialization for composite types that cross a
CopyDataboundary duringdata-sync - fix: confusing TLS connection icon in logs (was open, now it's locked) @bzp2010
- feat: automatically reload config (incl. schema) after DDL in a sharded cluster (single pgdog node, local dev/staging only)
- fix: omnishard write fan-out is opaque now, returns rows changed from one shard only, while mutating rows everywhere; necessary for compatibility with Postgres behavior
- feat:
[[omnisharded_tables]]takes priority over[[sharded_tables]]inpgdog.toml - feat: add
kind = "default"for for list-based sharding to mimic Postgres partitions behavior - fix:
apply query_timeoutto entire client/server exchange instead of just server responses (prevents TCP black holes)
New Contributors
Full Changelog: v0.1.27...v0.1.28
v0.1.27
What's Changed
- feat: allow
[[users]]to specify multiple databases (or all databases for admin users) - feat: handle
INSERT ... SELECTfor one row in sharded databases - feat: support
INSERTwithout column names, using schema inference - feat: automatically inject
pgdog.unique_id()if aBIGINT PRIMARY KEYisn't specified inINSERTstatement. ORMs like ActiveRecord do this, making them work out of the box. - feat: add read/write query per-pool statistics (Prometheus and
SHOW STATS) - chore: add Enterprise Edition hooks for the query parser
- feat: rewrite
INTEGERtoBIGINTduringschema-syncif its a primary key (supports foreign key references too) - feat: make how we treat system catalogs like
pg_databaseconfigurable
Full Changelog: v0.1.26...v0.1.27