postgresql/src/backend
Tom Lane baf17ad9df Repair performance regression in information_schema.triggers view.
Commit 32ff26911 introduced use of rank() into the triggers view to
calculate the spec-mandated action_order column.  As written, this
prevents query constraints on the table-name column from being pushed
below the window aggregate step.  That's bad for performance of this
typical usage pattern, since the view now has to be evaluated for all
tables not just the one(s) the user wants to see.  It's also the cause
of some recent buildfarm failures, in which trying to evaluate the view
rows for triggers in process of being dropped resulted in "cache lookup
failed for function NNN" errors.  Those rows aren't of interest to the
test script doing the query, but the filter that would eliminate them
is being applied too late.  None of this happened before the rank()
call was there, so it's a regression compared to v10 and before.

We can improve matters by changing the rank() call so that instead of
partitioning by OIDs, it partitions by nspname and relname, casting
those to sql_identifier so that they match the respective view output
columns exactly.  The planner has enough intelligence to know that
constraints on partitioning columns are safe to push down, so this
eliminates the performance problem and the regression test failure
risk.  We could make the other partitioning columns match view outputs
as well, but it'd be more complicated and the performance benefits
are questionable.

Side note: as this stands, the planner will push down constraints on
event_object_table and trigger_schema, but not on event_object_schema,
because it checks for ressortgroupref matches not expression
equivalence.  That might be worth improving someday, but it's not
necessary to fix the immediate concern.

Back-patch to v11 where the rank() call was added.  Ordinarily we'd not
change information_schema in released branches, but the test failure has
been seen in v12 and presumably could happen in v11 as well, so we need
to do this to keep the buildfarm happy.  The change is harmless so far
as users are concerned.  Some might wish to apply it to existing
installations if performance of this type of query is of concern,
but those who don't are no worse off.

I bumped catversion in HEAD as a pro forma matter (there's no
catalog incompatibility that would really require a re-initdb).
Obviously that can't be done in the back branches.

Discussion: https://postgr.es/m/5891.1587594470@sss.pgh.pa.us
2020-04-24 12:02:36 -04:00
..
access Fix handling of WAL segments ready to be archived during crash recovery 2020-04-24 08:48:28 +09:00
bootstrap Skip WAL for new relfilenodes, under wal_level=minimal. 2020-04-04 12:25:34 -07:00
catalog Repair performance regression in information_schema.triggers view. 2020-04-24 12:02:36 -04:00
commands Remove bogus Assert in foreign key cloning code 2020-04-22 22:12:19 +12:00
executor Fix transient memory leak for SRFs in FROM. 2020-04-22 19:53:06 -07:00
foreign Update copyrights for 2020 2020-01-01 12:21:45 -05:00
jit Extend ExecBuildAggTrans() to support a NULL pointer check. 2020-03-04 17:29:18 -08:00
lib Move src/backend/utils/hash/hashfn.c to src/common 2020-02-27 09:25:41 +05:30
libpq Improve error messages after LoadLibrary() 2020-04-13 10:24:46 +02:00
main Add PostgreSQL home page to --help output 2020-02-28 13:12:21 +01:00
nodes Add ALTER .. NO DEPENDS ON 2020-04-20 13:42:12 -04:00
optimizer Fix cost_incremental_sort for expressions with varno 0 2020-04-23 00:15:24 +02:00
parser Add ALTER .. NO DEPENDS ON 2020-04-20 13:42:12 -04:00
partitioning Suppress unused-variable warning. 2020-04-10 12:00:28 -04:00
po Translation updates 2019-06-17 15:30:20 +02:00
port Update copyrights for 2020 2020-01-01 12:21:45 -05:00
postmaster Fix collection of typos and grammar mistakes in the tree 2020-04-10 11:18:39 +09:00
regex Update copyrights for 2020 2020-01-01 12:21:45 -05:00
replication Rename exposed identifiers to say "backup manifest". 2020-04-23 08:44:06 -04:00
rewrite Fix INSERT OVERRIDING USER VALUE behavior 2020-03-31 08:50:39 +02:00
snowball Update copyrights for 2020 2020-01-01 12:21:45 -05:00
statistics Modify additional power 2 calculations to use new helper functions 2020-04-08 18:29:51 +12:00
storage Revert 0f5ca02f53 2020-04-08 11:37:27 +03:00
tcop Revert 0f5ca02f53 2020-04-08 11:37:27 +03:00
tsearch Further cleanup of ts_headline code. 2020-04-09 15:38:43 -04:00
utils Remove ACLDEBUG #define and associated code. 2020-04-23 15:38:04 -04:00
.gitignore Add .gitignore entries for AIX-specific intermediate build artifacts. 2015-07-08 20:44:22 -04:00
common.mk Remove PARTIAL_LINKING build mode. 2018-03-30 17:33:04 -07:00
Makefile Update copyrights for 2020 2020-01-01 12:21:45 -05:00
nls.mk Translation updates 2019-05-20 16:00:53 +02:00