Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4ccc5bd

Browse files
committed
Pull in tableoid for inheiritance with rowMarks
As noted by Etsuro Fujita [1] and Dean Rasheed[2],cb1ca4d changed ExecBuildAuxRowMark()to always look for the tableoid in the target list, but didn't alsochange preprocess_targetlist() to always include the tableoid. Thisresulted in errors with soon-to-be-added RLS with inheritance tests,and errors when using inheritance with foreign tables.Authors: Etsuro Fujita and Dean Rasheed (independently)Minor word-smithing on the comments by me.[1] 552CF0B6.8010006@lab.ntt.co.jp[2] CAEZATCVmFUfUOwwhnBTcgi6AquyjQ0-1fyKd0T3xBWJvn+xsFA@mail.gmail.com
1 parent54a16df commit4ccc5bd

File tree

2 files changed

+43
-43
lines changed

2 files changed

+43
-43
lines changed

‎contrib/postgres_fdw/expected/postgres_fdw.out

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3193,26 +3193,26 @@ select * from bar where f1 in (select f1 from foo) for update;
31933193
QUERY PLAN
31943194
----------------------------------------------------------------------------------------------
31953195
LockRows
3196-
Output: bar.f1, bar.f2, bar.ctid, bar.tableoid, bar.*, foo.ctid, foo.tableoid, foo.*
3196+
Output: bar.f1, bar.f2, bar.ctid, bar.*, bar.tableoid, foo.ctid, foo.*, foo.tableoid
31973197
-> Hash Join
3198-
Output: bar.f1, bar.f2, bar.ctid, bar.tableoid, bar.*, foo.ctid, foo.tableoid, foo.*
3198+
Output: bar.f1, bar.f2, bar.ctid, bar.*, bar.tableoid, foo.ctid, foo.*, foo.tableoid
31993199
Hash Cond: (bar.f1 = foo.f1)
32003200
-> Append
32013201
-> Seq Scan on public.bar
3202-
Output: bar.f1, bar.f2, bar.ctid, bar.tableoid, bar.*
3202+
Output: bar.f1, bar.f2, bar.ctid, bar.*, bar.tableoid
32033203
-> Foreign Scan on public.bar2
3204-
Output: bar2.f1, bar2.f2, bar2.ctid, bar2.tableoid, bar2.*
3204+
Output: bar2.f1, bar2.f2, bar2.ctid, bar2.*, bar2.tableoid
32053205
Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct2 FOR UPDATE
32063206
-> Hash
3207-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3207+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32083208
-> HashAggregate
3209-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3209+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32103210
Group Key: foo.f1
32113211
-> Append
32123212
-> Seq Scan on public.foo
3213-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3213+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32143214
-> Foreign Scan on public.foo2
3215-
Output: foo2.ctid, foo2.tableoid, foo2.*, foo2.f1
3215+
Output: foo2.ctid, foo2.*, foo2.tableoid, foo2.f1
32163216
Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct1
32173217
(22 rows)
32183218

@@ -3230,26 +3230,26 @@ select * from bar where f1 in (select f1 from foo) for share;
32303230
QUERY PLAN
32313231
----------------------------------------------------------------------------------------------
32323232
LockRows
3233-
Output: bar.f1, bar.f2, bar.ctid, bar.tableoid, bar.*, foo.ctid, foo.tableoid, foo.*
3233+
Output: bar.f1, bar.f2, bar.ctid, bar.*, bar.tableoid, foo.ctid, foo.*, foo.tableoid
32343234
-> Hash Join
3235-
Output: bar.f1, bar.f2, bar.ctid, bar.tableoid, bar.*, foo.ctid, foo.tableoid, foo.*
3235+
Output: bar.f1, bar.f2, bar.ctid, bar.*, bar.tableoid, foo.ctid, foo.*, foo.tableoid
32363236
Hash Cond: (bar.f1 = foo.f1)
32373237
-> Append
32383238
-> Seq Scan on public.bar
3239-
Output: bar.f1, bar.f2, bar.ctid, bar.tableoid, bar.*
3239+
Output: bar.f1, bar.f2, bar.ctid, bar.*, bar.tableoid
32403240
-> Foreign Scan on public.bar2
3241-
Output: bar2.f1, bar2.f2, bar2.ctid, bar2.tableoid, bar2.*
3241+
Output: bar2.f1, bar2.f2, bar2.ctid, bar2.*, bar2.tableoid
32423242
Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct2 FOR SHARE
32433243
-> Hash
3244-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3244+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32453245
-> HashAggregate
3246-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3246+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32473247
Group Key: foo.f1
32483248
-> Append
32493249
-> Seq Scan on public.foo
3250-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3250+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32513251
-> Foreign Scan on public.foo2
3252-
Output: foo2.ctid, foo2.tableoid, foo2.*, foo2.f1
3252+
Output: foo2.ctid, foo2.*, foo2.tableoid, foo2.f1
32533253
Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct1
32543254
(22 rows)
32553255

@@ -3272,37 +3272,37 @@ update bar set f2 = f2 + 100 where f1 in (select f1 from foo);
32723272
Foreign Update on public.bar2
32733273
Remote SQL: UPDATE public.loct2 SET f2 = $2 WHERE ctid = $1
32743274
-> Hash Join
3275-
Output: bar.f1, (bar.f2 + 100), bar.ctid, foo.ctid, foo.tableoid, foo.*
3275+
Output: bar.f1, (bar.f2 + 100), bar.ctid, foo.ctid, foo.*, foo.tableoid
32763276
Hash Cond: (bar.f1 = foo.f1)
32773277
-> Seq Scan on public.bar
32783278
Output: bar.f1, bar.f2, bar.ctid
32793279
-> Hash
3280-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3280+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32813281
-> HashAggregate
3282-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3282+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32833283
Group Key: foo.f1
32843284
-> Append
32853285
-> Seq Scan on public.foo
3286-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3286+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32873287
-> Foreign Scan on public.foo2
3288-
Output: foo2.ctid, foo2.tableoid, foo2.*, foo2.f1
3288+
Output: foo2.ctid, foo2.*, foo2.tableoid, foo2.f1
32893289
Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct1
32903290
-> Hash Join
3291-
Output: bar2.f1, (bar2.f2 + 100), bar2.f3, bar2.ctid, foo.ctid, foo.tableoid, foo.*
3291+
Output: bar2.f1, (bar2.f2 + 100), bar2.f3, bar2.ctid, foo.ctid, foo.*, foo.tableoid
32923292
Hash Cond: (bar2.f1 = foo.f1)
32933293
-> Foreign Scan on public.bar2
32943294
Output: bar2.f1, bar2.f2, bar2.f3, bar2.ctid
32953295
Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct2 FOR UPDATE
32963296
-> Hash
3297-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3297+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32983298
-> HashAggregate
3299-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3299+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
33003300
Group Key: foo.f1
33013301
-> Append
33023302
-> Seq Scan on public.foo
3303-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3303+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
33043304
-> Foreign Scan on public.foo2
3305-
Output: foo2.ctid, foo2.tableoid, foo2.*, foo2.f1
3305+
Output: foo2.ctid, foo2.*, foo2.tableoid, foo2.f1
33063306
Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct1
33073307
(37 rows)
33083308

‎src/backend/optimizer/prep/preptlist.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -107,23 +107,6 @@ preprocess_targetlist(PlannerInfo *root, List *tlist)
107107
pstrdup(resname),
108108
true);
109109
tlist=lappend(tlist,tle);
110-
111-
/* if parent of inheritance tree, need the tableoid too */
112-
if (rc->isParent)
113-
{
114-
var=makeVar(rc->rti,
115-
TableOidAttributeNumber,
116-
OIDOID,
117-
-1,
118-
InvalidOid,
119-
0);
120-
snprintf(resname,sizeof(resname),"tableoid%u",rc->rowmarkId);
121-
tle=makeTargetEntry((Expr*)var,
122-
list_length(tlist)+1,
123-
pstrdup(resname),
124-
true);
125-
tlist=lappend(tlist,tle);
126-
}
127110
}
128111
if (rc->allMarkTypes& (1 <<ROW_MARK_COPY))
129112
{
@@ -139,6 +122,23 @@ preprocess_targetlist(PlannerInfo *root, List *tlist)
139122
true);
140123
tlist=lappend(tlist,tle);
141124
}
125+
126+
/* If parent of inheritance tree, always fetch the tableoid too. */
127+
if (rc->isParent)
128+
{
129+
var=makeVar(rc->rti,
130+
TableOidAttributeNumber,
131+
OIDOID,
132+
-1,
133+
InvalidOid,
134+
0);
135+
snprintf(resname,sizeof(resname),"tableoid%u",rc->rowmarkId);
136+
tle=makeTargetEntry((Expr*)var,
137+
list_length(tlist)+1,
138+
pstrdup(resname),
139+
true);
140+
tlist=lappend(tlist,tle);
141+
}
142142
}
143143

144144
/*

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp