mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Revert misguided change to postgres_fdw FOR UPDATE/SHARE code.
In commit 462bd95705
, I changed postgres_fdw
to rely on get_plan_rowmark() instead of get_parse_rowmark(). I still
think that's a good idea in the long run, but as Etsuro Fujita pointed out,
it doesn't work today because planner.c forces PlanRowMarks to have
markType = ROW_MARK_COPY for all foreign tables. There's no urgent reason
to change this in the back branches, so let's just revert that part of
yesterday's commit rather than trying to design a better solution under
time pressure.
Also, add a regression test case showing what postgres_fdw does with FOR
UPDATE/SHARE. I'd blithely assumed there was one already, else I'd have
realized yesterday that this code didn't work.
This commit is contained in:
@ -822,7 +822,7 @@ postgresGetForeignPlan(PlannerInfo *root,
|
||||
}
|
||||
else
|
||||
{
|
||||
PlanRowMark *rc = get_plan_rowmark(root->rowMarks, baserel->relid);
|
||||
RowMarkClause *rc = get_parse_rowmark(root->parse, baserel->relid);
|
||||
|
||||
if (rc)
|
||||
{
|
||||
@ -835,18 +835,15 @@ postgresGetForeignPlan(PlannerInfo *root,
|
||||
* complete information about, and (b) it wouldn't work anyway on
|
||||
* older remote servers. Likewise, we don't worry about NOWAIT.
|
||||
*/
|
||||
switch (rc->markType)
|
||||
switch (rc->strength)
|
||||
{
|
||||
case ROW_MARK_EXCLUSIVE:
|
||||
case ROW_MARK_NOKEYEXCLUSIVE:
|
||||
appendStringInfoString(&sql, " FOR UPDATE");
|
||||
break;
|
||||
case ROW_MARK_SHARE:
|
||||
case ROW_MARK_KEYSHARE:
|
||||
case LCS_FORKEYSHARE:
|
||||
case LCS_FORSHARE:
|
||||
appendStringInfoString(&sql, " FOR SHARE");
|
||||
break;
|
||||
default:
|
||||
/* nothing needed */
|
||||
case LCS_FORNOKEYUPDATE:
|
||||
case LCS_FORUPDATE:
|
||||
appendStringInfoString(&sql, " FOR UPDATE");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user