Re: BUG #17812: LOCK TABLE IN ACCESS EXCLUSIVE MODE with a view returns an empty tuple set
От | Julien Rouhaud |
---|---|
Тема | Re: BUG #17812: LOCK TABLE IN ACCESS EXCLUSIVE MODE with a view returns an empty tuple set |
Дата | |
Msg-id | 20230301071512.b3ratpciflkrzkeb@jrouhaud обсуждение исходный текст |
Ответ на | Re: BUG #17812: LOCK TABLE IN ACCESS EXCLUSIVE MODE with a view returns an empty tuple set (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: BUG #17812: LOCK TABLE IN ACCESS EXCLUSIVE MODE with a view returns an empty tuple set
|
Список | pgsql-bugs |
On Wed, Mar 01, 2023 at 01:53:22AM -0500, Tom Lane wrote: > "David G. Johnston" <david.g.johnston@gmail.com> writes: > > Session 4: > > create table tbl2 as select * from view1; > > SELECT 0 > > > Why is it OK for session 4 to be different here? > > Maybe it isn't. The code flow for CREATE TABLE AS is a bit weird > IIRC, and maybe it's missing a step where we should update the > active snapshot. I think it comes from this chunk in ExecCreateTableAs(): rewritten = QueryRewrite(query); /* SELECT should never rewrite to more or less than one SELECT query */ if (list_length(rewritten) != 1) elog(ERROR, "unexpected rewrite result for %s", is_matview ? "CREATE MATERIALIZED VIEW" : "CREATE TABLE AS SELECT"); query = linitial_node(Query, rewritten); Assert(query->commandType == CMD_SELECT); /* plan the query */ plan = pg_plan_query(query, pstate->p_sourcetext, CURSOR_OPT_PARALLEL_OK, params); /* * Use a snapshot with an updated command ID to ensure this query sees * results of any previously executed queries. (This could only * matter if the planner executed an allegedly-stable function that * changed the database contents, but let's do it anyway to be * parallel to the EXPLAIN code path.) */ PushCopiedSnapshot(GetActiveSnapshot()); UpdateActiveSnapshotCommandId(); /* Create a QueryDesc, redirecting output to our tuple receiver */ queryDesc = CreateQueryDesc(plan, pstate->p_sourcetext, GetActiveSnapshot(), InvalidSnapshot, dest, params, queryEnv, 0); It seems to clearly be in contradiction with our usual rule that planning and execution should have a different snapshot.
В списке pgsql-bugs по дате отправления: