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

Commit28668b8

Browse files
committed
Merge branch 'master' of git://git.postgresql.org/git/postgresql
2 parents3ca1937 +cca705a commit28668b8

File tree

84 files changed

+3130
-1032
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+3130
-1032
lines changed

‎config/Makefile‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@ include $(top_builddir)/src/Makefile.global
77

88
install: all installdirs
99
$(INSTALL_SCRIPT)$(srcdir)/install-sh'$(DESTDIR)$(pgxsdir)/config/install-sh'
10+
$(INSTALL_SCRIPT)$(srcdir)/missing'$(DESTDIR)$(pgxsdir)/config/missing'
1011

1112
installdirs:
1213
$(MKDIR_P)'$(DESTDIR)$(pgxsdir)/config'
1314

1415
uninstall:
1516
rm -f'$(DESTDIR)$(pgxsdir)/config/install-sh'
17+
rm -f'$(DESTDIR)$(pgxsdir)/config/missing'

‎contrib/file_fdw/file_fdw.c‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ static ForeignScan *fileGetForeignPlan(PlannerInfo *root,
121121
Oidforeigntableid,
122122
ForeignPath*best_path,
123123
List*tlist,
124-
List*scan_clauses);
124+
List*scan_clauses,
125+
Plan*outer_plan);
125126
staticvoidfileExplainForeignScan(ForeignScanState*node,ExplainState*es);
126127
staticvoidfileBeginForeignScan(ForeignScanState*node,inteflags);
127128
staticTupleTableSlot*fileIterateForeignScan(ForeignScanState*node);
@@ -525,6 +526,7 @@ fileGetForeignPaths(PlannerInfo *root,
525526
total_cost,
526527
NIL,/* no pathkeys */
527528
NULL,/* no outer rel either */
529+
NULL,/* no extra plan */
528530
coptions));
529531

530532
/*
@@ -544,7 +546,8 @@ fileGetForeignPlan(PlannerInfo *root,
544546
Oidforeigntableid,
545547
ForeignPath*best_path,
546548
List*tlist,
547-
List*scan_clauses)
549+
List*scan_clauses,
550+
Plan*outer_plan)
548551
{
549552
Indexscan_relid=baserel->relid;
550553

@@ -564,7 +567,8 @@ fileGetForeignPlan(PlannerInfo *root,
564567
NIL,/* no expressions to evaluate */
565568
best_path->fdw_private,
566569
NIL,/* no custom tlist */
567-
NIL/* no remote quals */ );
570+
NIL,/* no remote quals */
571+
outer_plan);
568572
}
569573

570574
/*

‎contrib/postgres_fdw/postgres_fdw.c‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,8 @@ static ForeignScan *postgresGetForeignPlan(PlannerInfo *root,
215215
Oidforeigntableid,
216216
ForeignPath*best_path,
217217
List*tlist,
218-
List*scan_clauses);
218+
List*scan_clauses,
219+
Plan*outer_plan);
219220
staticvoidpostgresBeginForeignScan(ForeignScanState*node,inteflags);
220221
staticTupleTableSlot*postgresIterateForeignScan(ForeignScanState*node);
221222
staticvoidpostgresReScanForeignScan(ForeignScanState*node);
@@ -536,6 +537,7 @@ postgresGetForeignPaths(PlannerInfo *root,
536537
fpinfo->total_cost,
537538
NIL,/* no pathkeys */
538539
NULL,/* no outer rel either */
540+
NULL,/* no extra plan */
539541
NIL);/* no fdw_private list */
540542
add_path(baserel, (Path*)path);
541543

@@ -590,6 +592,7 @@ postgresGetForeignPaths(PlannerInfo *root,
590592
total_cost,
591593
usable_pathkeys,
592594
NULL,
595+
NULL,
593596
NIL));
594597
}
595598

@@ -757,6 +760,7 @@ postgresGetForeignPaths(PlannerInfo *root,
757760
total_cost,
758761
NIL,/* no pathkeys */
759762
param_info->ppi_req_outer,
763+
NULL,
760764
NIL);/* no fdw_private list */
761765
add_path(baserel, (Path*)path);
762766
}
@@ -772,7 +776,8 @@ postgresGetForeignPlan(PlannerInfo *root,
772776
Oidforeigntableid,
773777
ForeignPath*best_path,
774778
List*tlist,
775-
List*scan_clauses)
779+
List*scan_clauses,
780+
Plan*outer_plan)
776781
{
777782
PgFdwRelationInfo*fpinfo= (PgFdwRelationInfo*)baserel->fdw_private;
778783
Indexscan_relid=baserel->relid;
@@ -916,7 +921,8 @@ postgresGetForeignPlan(PlannerInfo *root,
916921
params_list,
917922
fdw_private,
918923
NIL,/* no custom tlist */
919-
remote_exprs);
924+
remote_exprs,
925+
outer_plan);
920926
}
921927

922928
/*

‎doc/src/sgml/earthdistance.sgml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<para>
2020
In this module, the Earth is assumed to be perfectly spherical.
2121
(If that's too inaccurate for you, you might want to look at the
22-
<application><ulink url="http://www.postgis.org/">PostGIS</ulink></>
22+
<application><ulink url="http://postgis.net/">PostGIS</ulink></>
2323
project.)
2424
</para>
2525

‎doc/src/sgml/external-projects.sgml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@
231231
contains several extensions, which are described in
232232
<xref linkend="contrib">. Other extensions are developed
233233
independently, like <application><ulink
234-
url="http://www.postgis.org/">PostGIS</ulink></>. Even
234+
url="http://postgis.net/">PostGIS</ulink></>. Even
235235
<productname>PostgreSQL</> replication solutions can be developed
236236
externally. For example, <application> <ulink
237237
url="http://www.slony.info">Slony-I</ulink></> is a popular

‎doc/src/sgml/fdwhandler.sgml‎

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,8 @@ GetForeignPlan (PlannerInfo *root,
168168
Oid foreigntableid,
169169
ForeignPath *best_path,
170170
List *tlist,
171-
List *scan_clauses);
171+
List *scan_clauses,
172+
Plan *outer_plan);
172173
</programlisting>
173174

174175
Create a <structname>ForeignScan</> plan node from the selected foreign
@@ -765,6 +766,35 @@ RefetchForeignRow (EState *estate,
765766
See <xref linkend="fdw-row-locking"> for more information.
766767
</para>
767768

769+
<para>
770+
<programlisting>
771+
bool
772+
RecheckForeignScan (ForeignScanState *node, TupleTableSlot *slot);
773+
</programlisting>
774+
Recheck that a previously-returned tuple still matches the relevant
775+
scan and join qualifiers, and possibly provide a modified version of
776+
the tuple. For foreign data wrappers which do not perform join pushdown,
777+
it will typically be more convenient to set this to <literal>NULL</> and
778+
instead set <structfield>fdw_recheck_quals</structfield> appropriately.
779+
When outer joins are pushed down, however, it isn't sufficient to
780+
reapply the checks relevant to all the base tables to the result tuple,
781+
even if all needed attributes are present, because failure to match some
782+
qualifier might result in some attributes going to NULL, rather than in
783+
no tuple being returned. <literal>RecheckForeignScan</> can recheck
784+
qualifiers and return true if they are still satisfied and false
785+
otherwise, but it can also store a replacement tuple into the supplied
786+
slot.
787+
</para>
788+
789+
<para>
790+
To implement join pushdown, a foreign data wrapper will typically
791+
construct an alternative local join plan which is used only for
792+
rechecks; this will become the outer subplan of the
793+
<literal>ForeignScan</>. When a recheck is required, this subplan
794+
can be executed and the resulting tuple can be stored in the slot.
795+
This plan need not be efficient since no base table will return more
796+
than one row; for example, it may implement all joins as nested loops.
797+
</para>
768798
</sect2>
769799

770800
<sect2 id="fdw-callbacks-explain">
@@ -1137,11 +1167,17 @@ GetForeignServerByName(const char *name, bool missing_ok);
11371167

11381168
<para>
11391169
Any clauses removed from the plan node's qual list must instead be added
1140-
to <literal>fdw_recheck_quals</> in order to ensure correct behavior
1170+
to <literal>fdw_recheck_quals</> or rechecked by
1171+
<literal>RecheckForeignScan</> in order to ensure correct behavior
11411172
at the <literal>READ COMMITTED</> isolation level. When a concurrent
11421173
update occurs for some other table involved in the query, the executor
11431174
may need to verify that all of the original quals are still satisfied for
1144-
the tuple, possibly against a different set of parameter values.
1175+
the tuple, possibly against a different set of parameter values. Using
1176+
<literal>fdw_recheck_quals</> is typically easier than implementing checks
1177+
inside <literal>RecheckForeignScan</>, but this method will be
1178+
insufficient when outer joins have been pushed down, since the join tuples
1179+
in that case might have some fields go to NULL without rejecting the
1180+
tuple entirely.
11451181
</para>
11461182

11471183
<para>

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp