Repository navigation
Conversation
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #1293
The default reset query doesn't drop temporary tables, so a temp table created by one acquirer is still there for the next one, data included. A second
CREATE TEMPORARY TABLEwith the same name fails withDuplicateTableError, and a table with leftover rows can be read by whatever code gets the connection next. The pool docs say the reset should leave the connection in a well-defined state, and the rest of the reset query already clears cursors, listeners, settings and advisory locks.This adds
DISCARD TEMPto the reset query.DISCARD ALLwould also deallocate prepared statements and break the statement cache,DISCARD TEMPonly drops the temp tables. It is gated on a newsql_discard_tempcapability that is set for standard PostgreSQL and off for Redshift, CockroachDB and CrateDB. The field defaults toFalse, so code that buildsServerCapabilitiesitself by keyword (guillotina does this to turn the reset off) keeps working and keeps its current reset query.test_pool_release_drops_temp_tablesfails on master and passes with the change. The rest oftests/gives the same result as master against PostgreSQL 17, and flake8 passes