diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2021-07-15 11:41:47 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2021-07-15 11:41:47 -0400 |
commit | a49d081235997c67e8aab7a523b17e8d1cb93184 (patch) | |
tree | 4bf81347757488fc1ab5c651dc4f3ab0eb1b8a87 /src/backend/optimizer/plan/setrefs.c | |
parent | e529b2dc37ac80ccebd76cdbb14966d3b40819c9 (diff) | |
download | postgresql-a49d081235997c67e8aab7a523b17e8d1cb93184.tar.gz postgresql-a49d081235997c67e8aab7a523b17e8d1cb93184.zip |
Replace explicit PIN entries in pg_depend with an OID range test.
As of v14, pg_depend contains almost 7000 "pin" entries recording
the OIDs of built-in objects. This is a fair amount of bloat for
every database, and it adds time to pg_depend lookups as well as
initdb. We can get rid of all of those entries in favor of an OID
range check, i.e. "OIDs below FirstUnpinnedObjectId are pinned".
(template1 and the public schema are exceptions. Those exceptions
are now wired into IsPinnedObject() instead of initdb's code for
filling pg_depend, but it's the same amount of cruft either way.)
The contents of pg_shdepend are modified likewise.
Discussion: https://postgr.es/m/3737988.1618451008@sss.pgh.pa.us
Diffstat (limited to 'src/backend/optimizer/plan/setrefs.c')
-rw-r--r-- | src/backend/optimizer/plan/setrefs.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 26f6872b4b0..b145c5f45fd 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -2955,11 +2955,11 @@ record_plan_function_dependency(PlannerInfo *root, Oid funcid) * For performance reasons, we don't bother to track built-in functions; * we just assume they'll never change (or at least not in ways that'd * invalidate plans using them). For this purpose we can consider a - * built-in function to be one with OID less than FirstBootstrapObjectId. + * built-in function to be one with OID less than FirstUnpinnedObjectId. * Note that the OID generator guarantees never to generate such an OID * after startup, even at OID wraparound. */ - if (funcid >= (Oid) FirstBootstrapObjectId) + if (funcid >= (Oid) FirstUnpinnedObjectId) { PlanInvalItem *inval_item = makeNode(PlanInvalItem); @@ -2995,7 +2995,7 @@ record_plan_type_dependency(PlannerInfo *root, Oid typid) * As in record_plan_function_dependency, ignore the possibility that * someone would change a built-in domain. */ - if (typid >= (Oid) FirstBootstrapObjectId) + if (typid >= (Oid) FirstUnpinnedObjectId) { PlanInvalItem *inval_item = makeNode(PlanInvalItem); |