mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Fix planner's row-mark code for inheritance from a foreign table.
Commit 428b260f8
broke planning of cases where row marks are needed
(SELECT FOR UPDATE, etc) and one of the query's tables is a foreign
table that has regular table(s) as inheritance children. We got the
reverse case right, but apparently were thinking that foreign tables
couldn't be inheritance parents. Not so; so we need to be able to
add a CTID junk column while adding a new child, not only a wholerow
junk column.
Back-patch to v12 where the faulty code came in.
Amit Langote
Discussion: https://postgr.es/m/CA+HiwqEmo3FV1LAQ4TVyS2h1WM=kMkZUmbNuZSCnfHvMcUcPeA@mail.gmail.com
This commit is contained in:
@ -1834,6 +1834,27 @@ explain (verbose, costs off)
|
||||
select * from bar where f1 in (select f1 from foo) for share;
|
||||
select * from bar where f1 in (select f1 from foo) for share;
|
||||
|
||||
-- Now check SELECT FOR UPDATE/SHARE with an inherited source table,
|
||||
-- where the parent is itself a foreign table
|
||||
create table loct4 (f1 int, f2 int, f3 int);
|
||||
create foreign table foo2child (f3 int) inherits (foo2)
|
||||
server loopback options (table_name 'loct4');
|
||||
|
||||
explain (verbose, costs off)
|
||||
select * from bar where f1 in (select f1 from foo2) for share;
|
||||
select * from bar where f1 in (select f1 from foo2) for share;
|
||||
|
||||
drop foreign table foo2child;
|
||||
|
||||
-- And with a local child relation of the foreign table parent
|
||||
create table foo2child (f3 int) inherits (foo2);
|
||||
|
||||
explain (verbose, costs off)
|
||||
select * from bar where f1 in (select f1 from foo2) for share;
|
||||
select * from bar where f1 in (select f1 from foo2) for share;
|
||||
|
||||
drop table foo2child;
|
||||
|
||||
-- Check UPDATE with inherited target and an inherited source table
|
||||
explain (verbose, costs off)
|
||||
update bar set f2 = f2 + 100 where f1 in (select f1 from foo);
|
||||
|
Reference in New Issue
Block a user