@@ -7190,6 +7190,92 @@ select * from bar where f1 in (select f1 from foo) for share;
7190
7190
4 | 44
7191
7191
(4 rows)
7192
7192
7193
+ -- Now check SELECT FOR UPDATE/SHARE with an inherited source table,
7194
+ -- where the parent is itself a foreign table
7195
+ create table loct4 (f1 int, f2 int, f3 int);
7196
+ create foreign table foo2child (f3 int) inherits (foo2)
7197
+ server loopback options (table_name 'loct4');
7198
+ NOTICE: moving and merging column "f3" with inherited definition
7199
+ DETAIL: User-specified column moved to the position of the inherited column.
7200
+ explain (verbose, costs off)
7201
+ select * from bar where f1 in (select f1 from foo2) for share;
7202
+ QUERY PLAN
7203
+ ---------------------------------------------------------------------------------------
7204
+ LockRows
7205
+ Output: bar.f1, bar.f2, bar.ctid, foo2.*, bar.*, bar.tableoid, foo2.tableoid
7206
+ -> Hash Join
7207
+ Output: bar.f1, bar.f2, bar.ctid, foo2.*, bar.*, bar.tableoid, foo2.tableoid
7208
+ Inner Unique: true
7209
+ Hash Cond: (bar.f1 = foo2.f1)
7210
+ -> Append
7211
+ -> Seq Scan on public.bar
7212
+ Output: bar.f1, bar.f2, bar.ctid, bar.*, bar.tableoid
7213
+ -> Foreign Scan on public.bar2
7214
+ Output: bar2.f1, bar2.f2, bar2.ctid, bar2.*, bar2.tableoid
7215
+ Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct2 FOR SHARE
7216
+ -> Hash
7217
+ Output: foo2.*, foo2.f1, foo2.tableoid
7218
+ -> HashAggregate
7219
+ Output: foo2.*, foo2.f1, foo2.tableoid
7220
+ Group Key: foo2.f1
7221
+ -> Append
7222
+ -> Foreign Scan on public.foo2
7223
+ Output: foo2.*, foo2.f1, foo2.tableoid
7224
+ Remote SQL: SELECT f1, f2, f3 FROM public.loct1
7225
+ -> Foreign Scan on public.foo2child
7226
+ Output: foo2child.*, foo2child.f1, foo2child.tableoid
7227
+ Remote SQL: SELECT f1, f2, f3 FROM public.loct4
7228
+ (24 rows)
7229
+
7230
+ select * from bar where f1 in (select f1 from foo2) for share;
7231
+ f1 | f2
7232
+ ----+----
7233
+ 2 | 22
7234
+ 4 | 44
7235
+ (2 rows)
7236
+
7237
+ drop foreign table foo2child;
7238
+ -- And with a local child relation of the foreign table parent
7239
+ create table foo2child (f3 int) inherits (foo2);
7240
+ NOTICE: moving and merging column "f3" with inherited definition
7241
+ DETAIL: User-specified column moved to the position of the inherited column.
7242
+ explain (verbose, costs off)
7243
+ select * from bar where f1 in (select f1 from foo2) for share;
7244
+ QUERY PLAN
7245
+ -------------------------------------------------------------------------------------------------------
7246
+ LockRows
7247
+ Output: bar.f1, bar.f2, bar.ctid, foo2.*, bar.*, bar.tableoid, foo2.ctid, foo2.tableoid
7248
+ -> Hash Join
7249
+ Output: bar.f1, bar.f2, bar.ctid, foo2.*, bar.*, bar.tableoid, foo2.ctid, foo2.tableoid
7250
+ Inner Unique: true
7251
+ Hash Cond: (bar.f1 = foo2.f1)
7252
+ -> Append
7253
+ -> Seq Scan on public.bar
7254
+ Output: bar.f1, bar.f2, bar.ctid, bar.*, bar.tableoid
7255
+ -> Foreign Scan on public.bar2
7256
+ Output: bar2.f1, bar2.f2, bar2.ctid, bar2.*, bar2.tableoid
7257
+ Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct2 FOR SHARE
7258
+ -> Hash
7259
+ Output: foo2.*, foo2.f1, foo2.ctid, foo2.tableoid
7260
+ -> HashAggregate
7261
+ Output: foo2.*, foo2.f1, foo2.ctid, foo2.tableoid
7262
+ Group Key: foo2.f1
7263
+ -> Append
7264
+ -> Foreign Scan on public.foo2
7265
+ Output: foo2.*, foo2.f1, foo2.ctid, foo2.tableoid
7266
+ Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct1
7267
+ -> Seq Scan on public.foo2child
7268
+ Output: foo2child.*, foo2child.f1, foo2child.ctid, foo2child.tableoid
7269
+ (23 rows)
7270
+
7271
+ select * from bar where f1 in (select f1 from foo2) for share;
7272
+ f1 | f2
7273
+ ----+----
7274
+ 2 | 22
7275
+ 4 | 44
7276
+ (2 rows)
7277
+
7278
+ drop table foo2child;
7193
7279
-- Check UPDATE with inherited target and an inherited source table
7194
7280
explain (verbose, costs off)
7195
7281
update bar set f2 = f2 + 100 where f1 in (select f1 from foo);
0 commit comments