diff options
author | Robert Haas <rhaas@postgresql.org> | 2015-10-16 11:58:27 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2015-10-16 11:58:27 -0400 |
commit | a53c06a13eb4669d08ce8a5199aee51f88dd453e (patch) | |
tree | 659ccd9502bbd1b0f1593a6882f9ee5d36b2b98a /src/backend/access/transam/parallel.c | |
parent | bfc78d7196eb28cd4e3d6c24f7e607bacecf1129 (diff) | |
download | postgresql-a53c06a13eb4669d08ce8a5199aee51f88dd453e.tar.gz postgresql-a53c06a13eb4669d08ce8a5199aee51f88dd453e.zip |
Prohibit parallel query when the isolation level is serializable.
In order for this to be safe, the code which hands true serializability
will need to taught that the SIRead locks taken by a parallel worker
pertain to the same transaction as those taken by the parallel leader.
Some further changes may be needed as well. Until the necessary
adaptations are made, don't generate parallel plans in serializable
mode, and if a previously-generated parallel plan is used after
serializable mode has been activated, run it serially.
This fixes a bug in commit 7aea8e4f2daa4b39ca9d1309a0c4aadb0f7ed81b.
Diffstat (limited to 'src/backend/access/transam/parallel.c')
-rw-r--r-- | src/backend/access/transam/parallel.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c index 9c7428f5d6c..17f9a5ae6e4 100644 --- a/src/backend/access/transam/parallel.c +++ b/src/backend/access/transam/parallel.c @@ -135,6 +135,14 @@ CreateParallelContext(parallel_worker_main_type entrypoint, int nworkers) if (dynamic_shared_memory_type == DSM_IMPL_NONE) nworkers = 0; + /* + * If we are running under serializable isolation, we can't use + * parallel workers, at least not until somebody enhances that mechanism + * to be parallel-aware. + */ + if (IsolationIsSerializable()) + nworkers = 0; + /* We might be running in a short-lived memory context. */ oldcontext = MemoryContextSwitchTo(TopTransactionContext); |