^^^^^^^^^^^^^^
- Allow JSON dumpers to dump `bytes` directly instead of `str`,
for better compatibility with libraries like orjson and msgspec
(:ticket:`569`)
- Fix prepared statement cache validation when exiting pipeline mode (or
`~Cursor.executemany()`) in case an error occurred within the pipeline
(:ticket:`585`).
- Fix `connect()` to avoid "leaking" an open `~pq.PGconn` attached to the
`OperationalError` in case of connection failure. `Error.pgconn` is now a
shallow copy of the real libpq connection, and the latter is closed before
the exception propagates (:ticket:`565`).
- Fix possible (ignored) exception on objects deletion (:ticket:`591`).
- Don't clobber a Python exception raised during COPY FROM with the resulting
`!QueryCanceled` raised as a consequence (:ticket:`593`).
- Fix resetting `Connection.read_only` and `~Connection.deferrable` to their
default value using `!None` (:ticket:`612`).
- Add support for Python 3.12.