Planning is expensive and we use plancache to bypass its effect. I find the
$subject recently which is caused by we register NAMESPACEOID invalidation
message for pg_temp_%s as well as other normal namespaces.  Is it a
must?

We can demo the issue with the below case:

Sess1:
create table t (a int);
prepare s as select * from t;
postgres=# execute s;
INFO:  There is no cached plan now
 a
---
(0 rows)

postgres=# execute s;  -- The plan is cached.
 a
---
(0 rows)


Sess2:
create temp table m (a int);

Sess1:

postgres=# execute s;  -- The cached plan is reset.
INFO:  There is no cached plan now
 a
---
(0 rows)


What I want to do now is bypass the invalidation message totally if it is a
pg_temp_%d
namespace.  (RELATION_IS_OTHER_TEMP). With this change, the impact is not
only
the plan cache is not reset but also all the other stuff in
SysCacheInvalidate/CallSyscacheCallbacks will not be called (for pg_temp_%d
change
only).  I think pg_temp_%d is not meaningful for others, so I think the
bypassing is OK.
I still have not kicked off any coding so far, I want to know if it is a
correct thing to do?

-- 
Best Regards
Andy Fan (https://www.aliyun.com/)

Reply via email to