Guten Tag Thorsten Schöning, am Montag, 8. Juni 2020 um 10:14 schrieben Sie:
> When the table needs to be created, when is it visible to other > threads using the same transaction, before or after executing the > additional query? There is a misconception here: Multiple concurrent exec doesn't seem to be implemented at all, even though the JDBC-docs seem to allow the sharing of connections. Execution of statements seem to lock the underlying connection, preventing truly concurrent access by multiple threads. https://stackoverflow.com/a/52798543/2055163 https://github.com/pgjdbc/pgjdbc/blob/ecbc48ff6ad293a2555465d4f7fb6a33a403af26/pgjdbc/src/main/java/org/postgresql/core/v3/QueryExecutorImpl.java#L276 https://docs.oracle.com/javadb/10.8.3.0/devguide/cdevconcepts23499.html https://docs.oracle.com/javadb/10.8.3.0/devguide/cdevconcepts89498.html So while things don't work as I originally expected, this makes answering my question easy: Because "CREATE TEMP TABLE IF NOT EXISTS [...] AS [...]" is ONE statement only forwarded to the driver, its execution should be atomic with respect to other threads using the same connection. It shouldn't make any difference how long the calculation of the associated query takes, because all other threads need to wait for the whole statement anyway. And if some other thread comes with the query subsequently, "IF NOT EXISTS" comes into play and the query should succeed instantly. > Am I correct that with using "IF NOT EXISTS" the associated query is > only executed as well if the table needs to be created?[...] An answer to that question would still be of interest to me. > Am I correct that in my described setup I need to make sure on my own > that only one thread creates each individual temporary table and > executes the associated query?[...] No, not unless truly concurrent access is available in the JDBC-driver. If it would be OTOH, I guess the answer would be yes. > Am I correct that because of the same transaction used by multiple > threads I need to synchronize them on web service-level?[...] Yes and this should be the most performant implementation anyway. In case of really one and the same connection, everything is handled by the same JVM already, so can be synchronized within that JVM without roundtrips to Postgres as well. [1]: https://stackoverflow.com/a/24089729/2055163 Mit freundlichen Grüßen, Thorsten Schöning -- Thorsten Schöning E-Mail: thorsten.schoen...@am-soft.de AM-SoFT IT-Systeme http://www.AM-SoFT.de/ Telefon...........05151- 9468- 55 Fax...............05151- 9468- 88 Mobil..............0178-8 9468- 04 AM-SoFT GmbH IT-Systeme, Brandenburger Str. 7c, 31789 Hameln AG Hannover HRB 207 694 - Geschäftsführer: Andreas Muchow