postgrespro.git / summary / log / commit / refs

commit    5bde1651bbba9984dc32bbeb68b329cfd3f92767
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Wed Mar 27 02:35:12 2019 +0000

    Switch function current_schema[s]() to be parallel-unsafe
    
    When invoked for the first time in a session, current_schema() and
    current_schemas() can finish by creating a temporary schema.  Currently
    those functions are parallel-safe, however if for a reason or another
    they get launched across multiple parallel workers, they would fail when
    attempting to create a temporary schema as temporary contexts are not
    supported in this case.
    
    The original issue has been spotted by buildfarm members crake and
    lapwing, after commit c5660e0 has introduced the first regression tests
    based on current_schema() in the tree.  After that, 396676b has
    introduced a workaround to avoid parallel plans but that was not
    completely right either.
    
    Catversion is bumped.
    
    Author: Michael Paquier
    Reviewed-by: Daniel Gustafsson
    Discussion: https://postgr.es/m/20190118024618.GF1883@paquier.xyz


src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_proc.dat | 8 ++++---- src/test/regress/expected/temp.out | 5 +---- src/test/regress/sql/temp.sql | 5 +---- 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index c1e1d601ec..f01087614e 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 201903251 +#define CATALOG_VERSION_NO 201903271 #endif diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index acf1131b52..8cf77297e1 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -2787,11 +2787,11 @@ prosrc => 'name_text' }, { oid => '1402', descr => 'current schema name', - proname => 'current_schema', provolatile => 's', prorettype => 'name', - proargtypes => '', prosrc => 'current_schema' }, + proname => 'current_schema', provolatile => 's', proparallel => 'u', + prorettype => 'name', proargtypes => '', prosrc => 'current_schema' }, { oid => '1403', descr => 'current schema search list', - proname => 'current_schemas', provolatile => 's', prorettype => '_name', - proargtypes => 'bool', prosrc => 'current_schemas' }, + proname => 'current_schemas', provolatile => 's', proparallel => 'u', + prorettype => '_name', proargtypes => 'bool', prosrc => 'current_schemas' }, { oid => '1404', descr => 'substitute portion of string', proname => 'overlay', prorettype => 'text', diff --git a/src/test/regress/expected/temp.out b/src/test/regress/expected/temp.out index 056e5ecf33..ad7d558191 100644 --- a/src/test/regress/expected/temp.out +++ b/src/test/regress/expected/temp.out @@ -360,11 +360,8 @@ prepare transaction 'twophase_tab'; ERROR: cannot PREPARE a transaction that has operated on temporary objects -- Corner case: current_schema may create a temporary schema if namespace -- creation is pending, so check after that. First reset the connection --- to remove the temporary namespace, and make sure that non-parallel plans --- are used. +-- to remove the temporary namespace. \c - -SET max_parallel_workers = 0; -SET max_parallel_workers_per_gather = 0; SET search_path TO 'pg_temp'; BEGIN; SELECT current_schema() ~ 'pg_temp' AS is_temp_schema; diff --git a/src/test/regress/sql/temp.sql b/src/test/regress/sql/temp.sql index 17366a33a9..e634ddb9ca 100644 --- a/src/test/regress/sql/temp.sql +++ b/src/test/regress/sql/temp.sql @@ -274,11 +274,8 @@ prepare transaction 'twophase_tab'; -- Corner case: current_schema may create a temporary schema if namespace -- creation is pending, so check after that. First reset the connection --- to remove the temporary namespace, and make sure that non-parallel plans --- are used. +-- to remove the temporary namespace. \c - -SET max_parallel_workers = 0; -SET max_parallel_workers_per_gather = 0; SET search_path TO 'pg_temp'; BEGIN; SELECT current_schema() ~ 'pg_temp' AS is_temp_schema; [parent: 6ca015f9f073]