Improve initdb's query for generating default descriptions a little.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 8 May 2018 19:59:01 +0000 (15:59 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 8 May 2018 19:59:05 +0000 (15:59 -0400)
commitdec10340d5ba63cf338dea256ac0fa66c649bf9e
tree4a369a08aac0a9927413d99a4851ac7b6956fd6a
parent831f5d11ec7bb8a693c581720d014b3a5ad7d446
Improve initdb's query for generating default descriptions a little.

While poking into initdb's performance, I noticed that this query
wasn't being done very intelligently.  By forcing it to execute
obj_description() for each pg_proc/pg_operator join row, we were
essentially setting up a nestloop join to pg_description, which
is not a bright query plan when there are hundreds of outer rows.
Convert the check for a "deprecated" operator into a NOT EXISTS
so that it can be done as a hashed antijoin.  On my workstation
this reduces the time for this query from ~ 35ms to ~ 10ms.
Which is not a huge win, but it adds up over buildfarm runs.

In passing, insert forced query breaks (\n\n, in single-user mode)
after each SQL-query file that initdb sources, and after some
relatively new queries in setup_privileges().  This doesn't make
a lot of difference normally, but it will result in briefer, saner
error messages if anything goes wrong.
src/bin/initdb/initdb.c