Commit 816e336f authored by Robert Haas's avatar Robert Haas

Mark more functions parallel-restricted or parallel-unsafe.

Commit 7aea8e4f was overoptimistic
about the degree of safety associated with running various functions
in parallel mode.  Functions that take a table name or OID as an
argument are at least parallel-restricted, because the table might be
temporary, and we currently don't allow parallel workers to touch
temporary tables.  Functions that take a query as an argument are
outright unsafe, because the query could be anything, including a
parallel-unsafe query.

Also, the queue of pending notifications is backend-private, so adding
to it from a worker doesn't behave correctly.  We could fix this by
transferring the worker's queue of pending notifications to the master
during worker cleanup, but that seems like more trouble than it's
worth for now.  In addition to adjusting the pg_proc.h markings, also
add an explicit check for this in async.c.
parent 82b37765
......@@ -544,6 +544,9 @@ Async_Notify(const char *channel, const char *payload)
Notification *n;
MemoryContext oldcontext;
if (IsInParallelMode())
elog(ERROR, "cannot send notifications during a parallel operation");
if (Trace_notify)
elog(DEBUG1, "Async_Notify(%s)", channel);
......
......@@ -53,6 +53,6 @@
*/
/* yyyymmddN */
#define CATALOG_VERSION_NO 201510052
#define CATALOG_VERSION_NO 201510161
#endif
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment