aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/async.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2021-12-06 13:07:31 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2021-12-06 13:07:31 -0500
commit9895961529ef8ff3fc12b39229f9a93e08bca7b7 (patch)
tree0a1022efc3ca5f8f939f0006272bb084a40a1ec4 /src/backend/commands/async.c
parente3fcbbd623b9ccc16cdbda374654d91a4727d173 (diff)
downloadpostgresql-9895961529ef8ff3fc12b39229f9a93e08bca7b7.tar.gz
postgresql-9895961529ef8ff3fc12b39229f9a93e08bca7b7.zip
Avoid per-object queries in performance-critical paths in pg_dump.
Instead of issuing a secondary data-collection query against each table to be dumped, issue just one query, with a WHERE clause restricting it to be applied to only the tables we intend to dump. Likewise for indexes, constraints, and triggers. This greatly reduces the number of queries needed to dump a database containing many tables. It might seem that WHERE clauses listing many target OIDs could be inefficient, but at least on recent server versions this provides a very substantial speedup. (In principle the same thing could be done with other object types such as functions; but that would require significant refactoring of pg_dump, so those will be tackled in a different way in a following patch.) The new WHERE clauses depend on the unnest() function, which is only present in 8.4 and above. We could implement them differently for older servers, but there is an ongoing discussion that will probably result in dropping pg_dump support for servers before 9.2, so that seems like it'd be wasted work. For now, just bump the server version check to require >= 8.4, without stopping to remove any of the code that's thereby rendered dead. We'll mop that situation up soon. Patch by me, based on an idea from Andres Freund. Discussion: https://postgr.es/m/7d7eb6128f40401d81b3b7a898b6b4de@W2012-02.nidsa.loc
Diffstat (limited to 'src/backend/commands/async.c')
0 files changed, 0 insertions, 0 deletions