postgresql/src
Tom Lane e384ed6cde Improve typcache: cache negative lookup results, add invalidation logic.
Previously, if the typcache had for example tried and failed to find a hash
opclass for a given data type, it would nonetheless repeat the unsuccessful
catalog lookup each time it was asked again.  This can lead to a
significant amount of useless bufmgr traffic, as in a recent report from
Scott Marlowe.  Like the catalog caches, typcache should be able to cache
negative results.  This patch arranges that by making use of separate flag
bits to remember whether a particular item has been looked up, rather than
treating a zero OID as an indicator that no lookup has been done.

Also, install a credible invalidation mechanism, namely watching for inval
events in pg_opclass.  The sole advantage of the lack of negative caching
was that the code would cope if operators or opclasses got added for a type
mid-session; to preserve that behavior we have to be able to invalidate
stale lookup results.  Updates in pg_opclass should be pretty rare in
production systems, so it seems sufficient to just invalidate all the
dependent data whenever one happens.

Adding proper invalidation also means that this code will now react sanely
if an opclass is dropped mid-session.  Arguably, that's a back-patchable
bug fix, but in view of the lack of complaints from the field I'll refrain
from back-patching.  (Probably, in most cases where an opclass is dropped,
the data type itself is dropped soon after, so that this misfeasance has
no bad consequences.)
2014-11-28 12:19:14 -05:00
..
backend Improve typcache: cache negative lookup results, add invalidation logic. 2014-11-28 12:19:14 -05:00
bin Add tab-completion for ALTER TABLE ALTER CONSTRAINT in psql. 2014-11-28 21:29:45 +09:00
common Small message fixes 2014-08-09 00:07:00 -04:00
include Rename pg_rowsecurity -> pg_policy and other fixes 2014-11-27 01:15:57 -05:00
interfaces Allow "dbname" from connection string to be overridden in PQconnectDBParams 2014-11-25 17:39:44 +02:00
makefiles Fix suggested layout for PGXS makefile 2014-11-19 22:21:54 -05:00
pl De-reserve most statement-introducing keywords in plpgsql. 2014-11-25 15:02:09 -05:00
port Fix win32setlocale.c const-related warnings. 2014-11-02 21:43:20 -05:00
template Remove Alpha and Tru64 support. 2014-06-28 21:46:15 +02:00
test Rename pg_rowsecurity -> pg_policy and other fixes 2014-11-27 01:15:57 -05:00
timezone Update time zone data files to tzdata release 2014j. 2014-11-17 12:09:12 -05:00
tools Update comments in find_typedef. 2014-11-18 15:51:45 -05:00
tutorial Adjust blank lines around PG_MODULE_MAGIC defines, for consistency 2014-07-10 14:02:08 -04:00
.gitignore Convert cvsignore to gitignore, and add .gitignore for build targets. 2010-09-22 12:57:04 +02:00
bcc32.mak Autoconfiscate selection of 64-bit int type for 64-bit large object API. 2012-10-07 21:52:43 -04:00
DEVELOPERS Replace a couple of references to files that no longer exist in the source 2009-05-04 08:08:47 +00:00
Makefile Create libpgcommon, and move pg_malloc et al to it 2013-02-12 11:21:05 -03:00
Makefile.global.in Add configure --enable-tap-tests option 2014-11-02 09:17:26 -05:00
Makefile.shlib Clarify .def file comments. 2014-11-02 21:43:33 -05:00
nls-global.mk Setup error context callback for transaction lock waits 2014-03-19 15:10:36 -03:00
win32.mak Autoconfiscate selection of 64-bit int type for 64-bit large object API. 2012-10-07 21:52:43 -04:00