> > On Wed, 2022-11-09 at 14:11 +0300, n.kobza...@aeronavigator.ru wrote:
> > Recently I`ve been pushing into life a new project and immediately 
> > experienced an Out of shared memory error while querying partitioned tables.
> >  
> > ERROR: out of shared memory
> >   Hint: You might need to increase max_locks_per_transaction.
> >   
> > Ok, let`s increase max_locks_per_transaction, but why this type of query 
> > produces so much locks?
> > Looks like DB issues locks for all the partitioned objects involved in 
> > query and ONLY AFTER THAT it does partition pruning.

> Yes, of course.  It needs an ACCESS SHARE lock when it looks at metadata like 
> the partition constraint, and locks > are held until the end of the 
> transaction.

> Yours,
> Laurenz Albe
> --
> Cybertec | https://www.cybertec-postgresql.com

Thank you for reply!

But why it is not necessary in case of custom plan? 
Oh, I did not explicitly write that, in case of custom plan (first attempts or 
with force_custom_plan) database holds only a couple of locks! Why in this case 
it is sufficient to lock only one partition and parent table ?

>From my perspective, if exists the case of custom plan that produces locks for 
>only one partition and parent, we can make the same optimization in case of 
>generic plan too. Especially when database already identifies possibility of 
>partition pruning. 
Also, to query partitioned table metadata it is not required to lock all 
partitions, but parent only. Isn't it? 

Nikolay



Reply via email to