I understand this happens on RDS. Does it happen on normal Postgres too, from a normal process (not some serverless thing?)
I'll test this now.
Are there processes/forks involved?
No, just Python's basic threading.
Which version of psycopg are you using? Some old one have problems with closing connections in multiprocess environments. That was fixed in psycopg 2.8 (#829).
This is psycopg 3.1.3
And I just realized that all the other threading code I've got is on psycopg2-binary 2.8. Has there something changed with threads in v3 ?