]> git.ipfire.org Git - thirdparty/psycopg.git/log
thirdparty/psycopg.git
3 days agochore: bump psycopg_pool package version to 3.2.7 master
Daniele Varrazzo [Sat, 25 Oct 2025 10:20:35 +0000 (11:20 +0100)] 
chore: bump psycopg_pool package version to 3.2.7

3 days agochore: bump psycopg package version to 3.2.12
Daniele Varrazzo [Sat, 25 Oct 2025 10:19:53 +0000 (11:19 +0100)] 
chore: bump psycopg package version to 3.2.12

3 days agoMerge pull request #1193 from jerch/fix/no-pinning-copy-text
Daniele Varrazzo [Sat, 25 Oct 2025 10:12:00 +0000 (11:12 +0100)] 
Merge pull request #1193 from jerch/fix/no-pinning-copy-text

3 days agodocs: add note about fixing the copy pinning issue 1193/head
Daniele Varrazzo [Fri, 24 Oct 2025 14:52:49 +0000 (15:52 +0100)] 
docs: add note about fixing the copy pinning issue

3 days agotest(copy): cover the Python implementation in copy pinning tests
Daniele Varrazzo [Fri, 24 Oct 2025 15:09:15 +0000 (16:09 +0100)] 
test(copy): cover the Python implementation in copy pinning tests

3 days agofix(copy): restore selecting loader for each item
Jörg Breitbart [Thu, 23 Oct 2025 15:02:25 +0000 (17:02 +0200)] 
fix(copy): restore selecting loader for each item

In the copy refactoring released in 3.2.11 we changed the behaviour to
choosing a dumper at the first non-null value per column and keeping it.

Turns out more people than expected rely on the more flexible behaviour
of passing strings or types and letting postgres do the conversion.

Restore the previous behaviour; however it's possible to use
`copy.set_types()` to set dumpers per column and gain something in
performance.

Fix #1192

5 days agoci: enable lint on pull requests
Daniele Varrazzo [Thu, 23 Oct 2025 15:29:11 +0000 (16:29 +0100)] 
ci: enable lint on pull requests

This now matches the tests workflow.

10 days agoMerge pull request #1067 from psycopg/sqlalchemy-nullpool
Daniele Varrazzo [Sun, 19 Oct 2025 02:39:42 +0000 (04:39 +0200)] 
Merge pull request #1067 from psycopg/sqlalchemy-nullpool

Allow integration of psycopg pool with SQLAlchemy

10 days agofix(pool): more robust placement of reconnection attempts 1067/head
Daniele Varrazzo [Sat, 18 Oct 2025 15:48:32 +0000 (17:48 +0200)] 
fix(pool): more robust placement of reconnection attempts

The problem reported in #1176 is the close recursion already fixed.
However, because we try to reconnect before closing, we end up scheduling
a reconnection attempt for every recursion loop.

The recursion shouldn't happen anymore, but it seems more robust to
reconnect after the connection has been successfully closed, otherwise
we might end up requesting more connections than we ought (hopefully not
as dramatically as here anyway).

10 days agofix(pool): fix infinite loop with close_returns=True
bash000000 [Sat, 26 Jul 2025 13:44:49 +0000 (21:44 +0800)] 
fix(pool): fix infinite loop with close_returns=True

Close #1124

10 days agodocs(pool): a proto-only SQLAlchemy url suffices as we are passing a creator
Daniele Varrazzo [Mon, 12 May 2025 00:44:26 +0000 (02:44 +0200)] 
docs(pool): a proto-only SQLAlchemy url suffices as we are passing a creator

10 days agodocs(pool): consistent sync/async examples in SQLAlchemy NullPool example
Daniele Varrazzo [Thu, 8 May 2025 12:18:25 +0000 (14:18 +0200)] 
docs(pool): consistent sync/async examples in SQLAlchemy NullPool example

10 days agodocs(pool): add documentation for close_returns
Daniele Varrazzo [Sun, 4 May 2025 21:26:26 +0000 (23:26 +0200)] 
docs(pool): add documentation for close_returns

10 days agofeat(pool): add close_returns
Daniele Varrazzo [Sun, 4 May 2025 19:21:19 +0000 (21:21 +0200)] 
feat(pool): add close_returns

Behaviour implemented via subclassing Psycopg 3.2.

Close #1046

10 days agofeat(pool): add connection subclasses to enable putconn-on-close
Daniele Varrazzo [Sun, 4 May 2025 18:35:25 +0000 (20:35 +0200)] 
feat(pool): add connection subclasses to enable putconn-on-close

10 days agotest(pool): make sure that returned connection have the pool set
Daniele Varrazzo [Sun, 4 May 2025 20:57:10 +0000 (22:57 +0200)] 
test(pool): make sure that returned connection have the pool set

The flow where we set _pool = None or _pool = self is a bit complex.
Make sure we don't mess it up.

11 days agoMerge branch 'perf/transpose-loading'
Daniele Varrazzo [Sat, 18 Oct 2025 03:00:40 +0000 (05:00 +0200)] 
Merge branch 'perf/transpose-loading'

11 days agoperf: load results by row rather than by column
Jörg Breitbart [Thu, 16 Oct 2025 00:01:32 +0000 (02:01 +0200)] 
perf: load results by row rather than by column

In the past we were converting results to Python tuples proceeding
column by column. The rationale was that certain overhead such as
selecting the loader was to be paid only once per column, not once per
datum.

However this analysis was dismantled in #1163, see especially the comment at
https://github.com/psycopg/psycopg/pull/1163#issuecomment-3288921422
for some benchmark comparing various conversion strategies. In the end,
the simple row-by-row loading in a single function ends up being more
performing. Performance now surpasses the one of psycopg2.

See also #1155 for an initial analysis of performance regression.

A big thank you to Jörg Breitbart (@jerch) for this improvement!

13 days agoMerge pull request #1150 from jerch/fix/binary-copy-rowlevel
Daniele Varrazzo [Wed, 15 Oct 2025 11:29:27 +0000 (13:29 +0200)] 
Merge pull request #1150 from jerch/fix/binary-copy-rowlevel

fix buffer in binary copy

2 weeks agorefactor: drop copy format code path with buffer creation 1150/head
Daniele Varrazzo [Tue, 14 Oct 2025 00:35:48 +0000 (02:35 +0200)] 
refactor: drop copy format code path with buffer creation

The path is unused and leads to more convoluted code.

2 weeks agofix(c): fix copy buffer corruption on dumping error
Jörg Breitbart [Wed, 3 Sep 2025 08:04:04 +0000 (10:04 +0200)] 
fix(c): fix copy buffer corruption on dumping error

Restore the buffer so that if we trap the exception and continue in
Python the buffer will not be corrupted.

Improve on the #1147 fix.

2 weeks agotest: add test to reveal the buffer corruption on dump error
Daniele Varrazzo [Tue, 14 Oct 2025 01:41:34 +0000 (03:41 +0200)] 
test: add test to reveal the buffer corruption on dump error

2 weeks agoMerge pull request #1158 from jerch/fix/set-types-text
Daniele Varrazzo [Tue, 14 Oct 2025 00:12:14 +0000 (02:12 +0200)] 
Merge pull request #1158 from jerch/fix/set-types-text

respect set_types in c-version in text format

2 weeks agodocs: mention issue #1153 fix in news file 1158/head
Daniele Varrazzo [Mon, 13 Oct 2025 13:31:10 +0000 (15:31 +0200)] 
docs: mention issue #1153 fix in news file

2 weeks agofix: consistent error passing a row with mismatched size to copy
Daniele Varrazzo [Mon, 13 Oct 2025 13:30:04 +0000 (15:30 +0200)] 
fix: consistent error passing a row with mismatched size to copy

2 weeks agofix(c): respect the set_types() definitions in text format
Jörg Breitbart [Thu, 4 Sep 2025 14:27:13 +0000 (16:27 +0200)] 
fix(c): respect the set_types() definitions in text format

Fix #1153

2 weeks agoci: enable tests on PR
Daniele Varrazzo [Mon, 13 Oct 2025 12:34:29 +0000 (14:34 +0200)] 
ci: enable tests on PR

They shouldn't be duplicated anymore if we develop in private forks of
the repo.

2 weeks agotest: add test to reproduce set_types being ignored
Daniele Varrazzo [Thu, 4 Sep 2025 09:43:03 +0000 (11:43 +0200)] 
test: add test to reproduce set_types being ignored

It has been reported ignored in the C implementation in binary format. See #1153

2 weeks agotest: longer sleep to test for idle timeout exception
Daniele Varrazzo [Mon, 13 Oct 2025 12:49:59 +0000 (14:49 +0200)] 
test: longer sleep to test for idle timeout exception

The test fails semi-regularly on macOS (probably 5% of the times).

2 weeks agoMerge pull request #1141 from wasix-org/fix/poll-rw
Daniele Varrazzo [Mon, 13 Oct 2025 11:05:31 +0000 (13:05 +0200)] 
Merge pull request #1141 from wasix-org/fix/poll-rw

Fix polling for read+write

2 weeks agotest: make AEvent.wait_timeout() return False on timeout
Daniele Varrazzo [Mon, 15 Sep 2025 23:41:35 +0000 (01:41 +0200)] 
test: make AEvent.wait_timeout() return False on timeout

For better similarity to Event.wait().

2 weeks agofix: consider a connection closed in poll() only if it's not ready too 1141/head 1183/head
Daniele Varrazzo [Sat, 11 Oct 2025 01:26:40 +0000 (03:26 +0200)] 
fix: consider a connection closed in poll() only if it's not ready too

When closing the proxy and trying to communicate, poll returns state 25
on the connection, i.e. POLLIN | POLLERR | POLLHUP. The connection is
not closed though, so we might end up in weird state ahead (e.g. connection
stuck in ACTIVE).

Because it's suggested that the connection is readable, do read from it.
Likely a proper error will be raised downstream, but we will remain in
consistent state.

2 weeks agotest: fix decorator to skip tests on crdb because of any db name accepted
Daniele Varrazzo [Mon, 15 Sep 2025 22:34:24 +0000 (00:34 +0200)] 
test: fix decorator to skip tests on crdb because of any db name accepted

2 weeks agofix(c): fix timeout calculation in select-based wait function
Daniele Varrazzo [Fri, 10 Oct 2025 13:17:54 +0000 (15:17 +0200)] 
fix(c): fix timeout calculation in select-based wait function

Because of the error, the timeout set to 0, resulting in a busy loop
instead of waiting.

Might fix #645.

2 weeks agoci: use working test server on macOS
Daniele Varrazzo [Sun, 12 Oct 2025 02:38:24 +0000 (04:38 +0200)] 
ci: use working test server on macOS

macos-14 can use PostgreSQL 18. I saw a failure trying to use 17; not
sure if it's still there but 18 works fine, so bump.

macos-13 better says on 17. Trying to "brew update" it will pull a
version that will try to compile docbook and takes forever to install. I
understand that avoid an upgrade we get a version that has a binary
package ("bottled", in this deranged naming convention).

2 weeks agorefactor: check for closed connection in wait functions
Daniele Varrazzo [Tue, 7 Oct 2025 23:49:52 +0000 (01:49 +0200)] 
refactor: check for closed connection in wait functions

Catch and display errors in a more homogeneous way: if a wait function
finds a connection closed it will raise an OperationalError chained to
the OSError obtained from stat'ing the socket. Previously control would
have gone back to the generator with a read-ready state and it would
have failed on whatever libpq function would have touched the socket.

Fix the problem reported in #608 affecting the epoll wait function, for
which we opted to use the poll function instead (which, more simply,
made the closed fd easier to spot).

note that on Windows it's not possible to use os.fstat() to ckeck a
socket state, therefore make it no-op.

2 weeks agoci: test with PostgreSQL 18 final image
Daniele Varrazzo [Sun, 12 Oct 2025 08:20:23 +0000 (10:20 +0200)] 
ci: test with PostgreSQL 18 final image

2 weeks agotest: improve wait functions tests
Daniele Varrazzo [Sun, 14 Sep 2025 15:46:34 +0000 (17:46 +0200)] 
test: improve wait functions tests

Check for consistent behaviour and expected result. The test currently
pass on the Python module and highlight shortcoming in the C function.

Complete wait async test, generate sync version automatically.

See #1141

2 weeks agorefactor(wait): disallow interval=None in wait functions
Daniele Varrazzo [Sun, 14 Sep 2025 15:10:33 +0000 (17:10 +0200)] 
refactor(wait): disallow interval=None in wait functions

It is not used internally: we always use an interval to allow for
Ctrl-C. It causes ambiguity with 0, which might be a value useful for
polling.

2 weeks agofix: fix return values of wait_poll(), wait_epoll()
Daniele Varrazzo [Sun, 14 Sep 2025 03:40:11 +0000 (05:40 +0200)] 
fix: fix return values of wait_poll(), wait_epoll()

2 weeks agofix(c): fix polling for read+write
Arshia Ghafoori [Wed, 27 Aug 2025 10:26:01 +0000 (14:26 +0400)] 
fix(c): fix polling for read+write

2 weeks agoMerge branch 'bump-libs'
Daniele Varrazzo [Mon, 13 Oct 2025 01:24:33 +0000 (03:24 +0200)] 
Merge branch 'bump-libs'

2 weeks agoci: add workflow to build and cache the libpq
Daniele Varrazzo [Sun, 12 Oct 2025 00:28:06 +0000 (02:28 +0200)] 
ci: add workflow to build and cache the libpq

This avoid to attempt building the libpq concurrently with every Python
version, which will make caching fail.

2 weeks agoci: use the system version of the cyrus-sasl library
Daniele Varrazzo [Sat, 11 Oct 2025 01:51:08 +0000 (03:51 +0200)] 
ci: use the system version of the cyrus-sasl library

Version 2.1.28 cannot be built in the manylinux_2_28 image, likely because of
https://github.com/cyrusimap/cyrus-sasl/issues/844.

We were building it to work around an i686 problem, but now we are not
building those images anymore, so let's try to use the packaged version.

2 weeks agoci: build aarch64 packages using manylinux_2_28 image
Daniele Varrazzo [Fri, 10 Oct 2025 22:27:02 +0000 (00:27 +0200)] 
ci: build aarch64 packages using manylinux_2_28 image

2 weeks agochore(binary): bump packaged versions of libpq, OpenSSL
Daniele Varrazzo [Fri, 10 Oct 2025 13:06:06 +0000 (15:06 +0200)] 
chore(binary): bump packaged versions of libpq, OpenSSL

2 weeks agoUpdate DEFAULT_AUTO_FIELD setting in Django CI workflow (#1182)
Jacob Walls [Fri, 10 Oct 2025 16:48:32 +0000 (18:48 +0200)] 
Update DEFAULT_AUTO_FIELD setting in Django CI workflow (#1182)

* test(django): Remove DEFAULT_AUTO_FIELD setting

Refs https://github.com/django/django-docker-box/pull/59

* test(django): use DEFAULT_AUTO_FIELD for LTS4 and LTS5

Not to be used from main on.

---------

Co-authored-by: Daniele Varrazzo <daniele.varrazzo@gmail.com>
2 weeks agochore(deps): bump the actions group across 1 directory with 5 updates (#1181)
dependabot[bot] [Fri, 10 Oct 2025 14:35:53 +0000 (15:35 +0100)] 
chore(deps): bump the actions group across 1 directory with 5 updates (#1181)

Bumps the actions group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [actions/checkout](https://github.com/actions/checkout) | `4` | `5` |
| [actions/setup-python](https://github.com/actions/setup-python) | `5` | `6` |
| [peter-evans/repository-dispatch](https://github.com/peter-evans/repository-dispatch) | `3` | `4` |
| [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) | `3.1.4` | `3.2.0` |
| [actions/github-script](https://github.com/actions/github-script) | `7` | `8` |

Updates `actions/checkout` from 4 to 5
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

Updates `actions/setup-python` from 5 to 6
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5...v6)

Updates `peter-evans/repository-dispatch` from 3 to 4
- [Release notes](https://github.com/peter-evans/repository-dispatch/releases)
- [Commits](https://github.com/peter-evans/repository-dispatch/compare/v3...v4)

Updates `pypa/cibuildwheel` from 3.1.4 to 3.2.0
- [Release notes](https://github.com/pypa/cibuildwheel/releases)
- [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md)
- [Commits](https://github.com/pypa/cibuildwheel/compare/v3.1.4...v3.2.0)

Updates `actions/github-script` from 7 to 8
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v7...v8)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
- dependency-name: actions/setup-python
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
- dependency-name: peter-evans/repository-dispatch
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
- dependency-name: pypa/cibuildwheel
  dependency-version: 3.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: actions/github-script
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2 weeks agoci: fix bad expansion of an array variable in build_libpq.sh
ubifred [Fri, 10 Oct 2025 11:35:35 +0000 (13:35 +0200)] 
ci: fix bad expansion of an array variable in build_libpq.sh

* ci: fix bad expansion of an array variable in build_libpq.sh

The `options` array variable have been introduced in
`adb8336a392a71a3cb2ddf18bd9b17238a01a06e` but is used with `$options`
which only expand the 1st value (for bash).

The full expansion have to be done with `${options[*]}`

Note that `-shared` and `-fPIC` options are still used as they are
enabled by default by `./Configure`, but the `zlib` option is not taken
into account (disabled by default)

* ci: fix wrong command

`./configure` does not exists

Fix #1178

3 weeks agodocs: installation docs cleanup
Daniele Varrazzo [Mon, 6 Oct 2025 09:01:54 +0000 (11:01 +0200)] 
docs: installation docs cleanup

Note that the pure Python module is slower - apparently not obvious
enough.

Make the "editable mode strict" option looking not optional, as the
issue doesn't seem to be solved any time soon.

Various grammar and presentation improvements.

3 weeks agodocs: drop `pq.error_message()` function from public docs
Daniele Varrazzo [Sat, 4 Oct 2025 16:46:17 +0000 (18:46 +0200)] 
docs: drop `pq.error_message()` function from public docs

There should be no need for this function to be used by end users.

3 weeks agodocs: document the package to install in the "from psycopg2" page
Daniele Varrazzo [Sat, 4 Oct 2025 16:33:40 +0000 (18:33 +0200)] 
docs: document the package to install in the "from psycopg2" page

See #1156.

6 weeks agochore: have a scrap directory where to put work scripts light on myoy
Daniele Varrazzo [Sat, 13 Sep 2025 13:54:11 +0000 (15:54 +0200)] 
chore: have a scrap directory where to put work scripts light on myoy

6 weeks agoMerge pull request #1149 from psycopg/fix/binary-copy
Daniele Varrazzo [Tue, 16 Sep 2025 00:07:42 +0000 (02:07 +0200)] 
Merge pull request #1149 from psycopg/fix/binary-copy

Fix binary copy

6 weeks agofix(copy): avoid sending copy data if an error is set 1149/head
Daniele Varrazzo [Mon, 1 Sep 2025 16:06:43 +0000 (18:06 +0200)] 
fix(copy): avoid sending copy data if an error is set

It would result in a partial message. The server seems to do the right
thing anyway, but let's not waste its precious time.

6 weeks agofix(c): fix excessive buffer allocation in binary copy
Daniele Varrazzo [Mon, 1 Sep 2025 15:22:34 +0000 (17:22 +0200)] 
fix(c): fix excessive buffer allocation in binary copy

Fix #1147

6 weeks agochore: bump mypy, remove a now unneeded ignore
Daniele Varrazzo [Fri, 12 Sep 2025 15:18:37 +0000 (17:18 +0200)] 
chore: bump mypy, remove a now unneeded ignore

6 weeks agotest: fix tests with master version of crdb
Daniele Varrazzo [Fri, 12 Sep 2025 15:14:00 +0000 (17:14 +0200)] 
test: fix tests with master version of crdb

The server version reported is 250300. Tests fail with the error:

    psycopg.errors.OperatorIntervention: this schema change is
    disallowed because table "execmany" is locked and this operation cannot
    automatically unlock the table

    DETAIL:  To unlock the table, execute `ALTER TABLE execmany SET (schema_locked = false);`

    After the schema change completes, we recommend setting it back to
    true with `ALTER TABLE execmany SET (schema_locked = true);`.

    HINT:  Locking the table improves changefeed performance; see
    https://www.cockroachlabs.com/docs/dev/changefeed-best-practices.html#lock-the-schema-on-changefeed-watched-tables

6 weeks agochore(ci): bump crdb test versions
Daniele Varrazzo [Fri, 12 Sep 2025 15:13:38 +0000 (17:13 +0200)] 
chore(ci): bump crdb test versions

6 weeks agoci: run lint/tests in any branches
Daniele Varrazzo [Fri, 12 Sep 2025 14:33:23 +0000 (16:33 +0200)] 
ci: run lint/tests in any branches

The `*` results in branches with a `/` excluded.

Also exclude running tests if only docs change.

6 weeks agoMerge pull request #1166 from psycopg/fix-builtin-dumper-loader
Daniele Varrazzo [Thu, 11 Sep 2025 10:26:41 +0000 (12:26 +0200)] 
Merge pull request #1166 from psycopg/fix-builtin-dumper-loader

Don't raise a warning using a builtin for JSON dumps/loads

6 weeks agofix: drop warning for objects passed as JSON lods/dump function 1166/head
Daniele Varrazzo [Wed, 10 Sep 2025 19:55:02 +0000 (21:55 +0200)] 
fix: drop warning for objects passed as JSON lods/dump function

Just optimistically assume that they are ok and will not cause leaks.
The possibility of there being something else which might cause a leak
is lower than the possibility that we didn't think about something else
and raise a warning, refusing to cache the loader, and really cause a
leak.

6 weeks agofix: don't raise a warning using a builtin for JSON dumps/loads
Daniele Varrazzo [Wed, 10 Sep 2025 10:07:46 +0000 (12:07 +0200)] 
fix: don't raise a warning using a builtin for JSON dumps/loads

These types are stable so will not leak. However they have no
code/closure dunder attr so they will raise a warning.

Fix #1165.

7 weeks agodocs: add simple example of identifier binding with t-strings
Daniele Varrazzo [Tue, 9 Sep 2025 00:03:50 +0000 (02:03 +0200)] 
docs: add simple example of identifier binding with t-strings

7 weeks agochore: bump psycopg package version to 3.3.0.dev2
Daniele Varrazzo [Mon, 8 Sep 2025 22:14:41 +0000 (00:14 +0200)] 
chore: bump psycopg package version to 3.3.0.dev2

7 weeks agodocs: mention version 3.3.0.dev1 download link in template string page
Daniele Varrazzo [Mon, 8 Sep 2025 22:13:50 +0000 (00:13 +0200)] 
docs: mention version 3.3.0.dev1 download link in template string page

7 weeks agofix: typo in notifications warning 3.3.0.dev1
Daniele Varrazzo [Mon, 8 Sep 2025 11:06:44 +0000 (13:06 +0200)] 
fix: typo in notifications warning

7 weeks agoMerge pull request #1054 from psycopg/template-strings
Daniele Varrazzo [Mon, 8 Sep 2025 15:29:24 +0000 (17:29 +0200)] 
Merge pull request #1054 from psycopg/template-strings

Add template strings support.

7 weeks agodocs: add template strings query documentation 1054/head
Daniele Varrazzo [Sun, 25 May 2025 22:22:13 +0000 (23:22 +0100)] 
docs: add template strings query documentation

7 weeks agofeat: implement template strings
Daniele Varrazzo [Sun, 25 May 2025 19:20:26 +0000 (20:20 +0100)] 
feat: implement template strings

7 weeks agofeat: add typing support for template strings
Daniele Varrazzo [Tue, 29 Apr 2025 20:32:18 +0000 (22:32 +0200)] 
feat: add typing support for template strings

7 weeks agorefactor(query): add private method to convert to bytes
Daniele Varrazzo [Sun, 25 May 2025 18:50:19 +0000 (19:50 +0100)] 
refactor(query): add private method to convert to bytes

7 weeks agorefactor: move PostgresRawQuery to _queries module
Daniele Varrazzo [Tue, 29 Apr 2025 22:00:09 +0000 (00:00 +0200)] 
refactor: move PostgresRawQuery to _queries module

7 weeks agotest: add module to test with template strings
Daniele Varrazzo [Tue, 29 Apr 2025 17:04:50 +0000 (19:04 +0200)] 
test: add module to test with template strings

Skip module collection on Python version which don't support the syntax.

7 weeks agochore: exclude linters run on tstring test module
Daniele Varrazzo [Tue, 29 Apr 2025 17:09:18 +0000 (19:09 +0200)] 
chore: exclude linters run on tstring test module

Currently the tooling doesn't support the syntax yet.

7 weeks agoci: switch to windows-2025 runners
Daniele Varrazzo [Sun, 7 Sep 2025 14:16:30 +0000 (16:16 +0200)] 
ci: switch to windows-2025 runners

7 weeks agochore: bump psycopg package version to 3.2.10
Daniele Varrazzo [Sun, 7 Sep 2025 15:44:54 +0000 (17:44 +0200)] 
chore: bump psycopg package version to 3.2.10

7 weeks agochore: isort
Daniele Varrazzo [Sun, 7 Sep 2025 15:41:32 +0000 (17:41 +0200)] 
chore: isort

7 weeks agoMerge pull request #1139 from psycopg/gssencmode-disable
Daniele Varrazzo [Sun, 7 Sep 2025 14:09:39 +0000 (16:09 +0200)] 
Merge pull request #1139 from psycopg/gssencmode-disable

Set gssencmode default to disable in binary package builds

7 weeks agoci: use separate build caches between psycopg 3.2 and 3.3 1139/head
Daniele Varrazzo [Tue, 26 Aug 2025 11:22:12 +0000 (13:22 +0200)] 
ci: use separate build caches between psycopg 3.2 and 3.3

Introduce a suffix to change the cache key arbitrarily, to keep libpq
builds on different branches separate and not pollute each other's
cache.

7 weeks agofix: change default gssencmode to disable in built libpq
Daniele Varrazzo [Tue, 26 Aug 2025 02:47:57 +0000 (04:47 +0200)] 
fix: change default gssencmode to disable in built libpq

Fix #1136

7 weeks agofeat: raise a warning if a GSS connection is obtained using the libpq default
Daniele Varrazzo [Tue, 26 Aug 2025 01:28:16 +0000 (03:28 +0200)] 
feat: raise a warning if a GSS connection is obtained using the libpq default

Suggest the user to specify a 'gssencmode' setting explicitly so that,
in the future, we will be able to change the setting default to 'disable'.

Note: the warning in psycopg 3.3 is a runtime warning; in 3.2.x was a
deprectation warning.

See #1136

7 weeks agochore: restrict flake8 ignore on generated file to lines length only
Daniele Varrazzo [Sun, 7 Sep 2025 14:05:58 +0000 (16:05 +0200)] 
chore: restrict flake8 ignore on generated file to lines length only

7 weeks agoMerge branch 'pg18'
Daniele Varrazzo [Sun, 7 Sep 2025 13:53:56 +0000 (15:53 +0200)] 
Merge branch 'pg18'

7 weeks agofeat: add `ConnectionInfo.full_protocol_version` 1098/head
Daniele Varrazzo [Sat, 5 Jul 2025 12:54:39 +0000 (14:54 +0200)] 
feat: add `ConnectionInfo.full_protocol_version`

Add matching Capabilities methods too to allow checking if supported.

7 weeks agofeat: add PGconn.full_protocol_version attributes
Daniele Varrazzo [Sat, 5 Jul 2025 11:50:02 +0000 (13:50 +0200)] 
feat: add PGconn.full_protocol_version attributes

Wrap libpq 18 PQfullProtocolVersion functions.

See #1079

7 weeks agodocs: mention PostgreSQL v18 support
Daniele Varrazzo [Sun, 11 May 2025 20:50:58 +0000 (22:50 +0200)] 
docs: mention PostgreSQL v18 support

7 weeks agoci: add PostgreSQL 18 to the test grid
Daniele Varrazzo [Sun, 7 Sep 2025 11:46:57 +0000 (13:46 +0200)] 
ci: add PostgreSQL 18 to the test grid

7 weeks agochore: add PostgreSQL 18 exceptions
Daniele Varrazzo [Sun, 11 May 2025 20:48:26 +0000 (22:48 +0200)] 
chore: add PostgreSQL 18 exceptions

7 weeks agofix: add ConnStatus.CONNECTION_AUTHENTICATING value
Daniele Varrazzo [Sun, 11 May 2025 20:43:00 +0000 (22:43 +0200)] 
fix: add ConnStatus.CONNECTION_AUTHENTICATING value

Introduced in PostgreSQL 18

7 weeks agoMerge branch 'fix-notifies-leak'
Daniele Varrazzo [Sun, 7 Sep 2025 11:42:25 +0000 (13:42 +0200)] 
Merge branch 'fix-notifies-leak'

7 weeks agodocs: document the changes to notifies generator
Daniele Varrazzo [Sat, 6 Sep 2025 21:44:42 +0000 (23:44 +0200)] 
docs: document the changes to notifies generator

7 weeks agofix: raise a warning when notifies generator and handlers are used together
Daniele Varrazzo [Sat, 6 Sep 2025 22:14:48 +0000 (00:14 +0200)] 
fix: raise a warning when notifies generator and handlers are used together

7 weeks agofix: collect notifies only if no handler was registered
Daniele Varrazzo [Wed, 14 May 2025 15:16:03 +0000 (17:16 +0200)] 
fix: collect notifies only if no handler was registered

If someone is listening to notifications by using an handler, the
notifies backlog would fill without ever being emptied.

This change has the risk of breaking something if someone is relying on
notifies being received both via callback and via generator, but I don't
know how to satisfy it without creating a leak to users who don't use the
generator. Will ask around...

Fix #1091.

7 weeks agoMerge branch 'fix-executemany-lock'
Daniele Varrazzo [Sat, 6 Sep 2025 20:22:46 +0000 (22:22 +0200)] 
Merge branch 'fix-executemany-lock'

7 weeks agofix: keep a lock for the entire duration of executemany
Daniele Varrazzo [Sat, 6 Sep 2025 01:00:24 +0000 (03:00 +0200)] 
fix: keep a lock for the entire duration of executemany

Before this change we had the lock context inside the pipeline context,
because conn.pipepline() and Pipeline.__enter/exit__ take a lock. But
this created windows of opportunities for other threads to execute
concurrent operations on the connection, resulting in "another command
is already in progress" errors.

Fix #1130.

7 weeks agorefactor: auto-generate sync pipeline object from async one
Daniele Varrazzo [Fri, 5 Sep 2025 23:57:52 +0000 (01:57 +0200)] 
refactor: auto-generate sync pipeline object from async one

7 weeks agorefactor: separate sync/async pipeline in their own modules
Daniele Varrazzo [Fri, 5 Sep 2025 23:48:48 +0000 (01:48 +0200)] 
refactor: separate sync/async pipeline in their own modules

7 weeks agorefactor: introduce ALock/Lock in acompat
Daniele Varrazzo [Sat, 6 Sep 2025 00:21:22 +0000 (02:21 +0200)] 
refactor: introduce ALock/Lock in acompat

7 weeks agofix: fix excessive buffer resizing on int16 dump
jerch [Sat, 6 Sep 2025 14:47:31 +0000 (16:47 +0200)] 
fix: fix excessive buffer resizing on int16 dump

Fix #1160