Re: Parallel INSERT SELECT take 2 - Mailing list pgsql-hackers
From | Amit Kapila |
---|---|
Subject | Re: Parallel INSERT SELECT take 2 |
Date | |
Msg-id | CAA4eK1+38KqRN9c-tTggGA+xvJD=evHBUnNn-kn0+z2W6pcx_g@mail.gmail.com Whole thread Raw |
In response to | Re: Parallel INSERT SELECT take 2 (Greg Nancarrow <gregn4422@gmail.com>) |
Responses |
Re: Parallel INSERT SELECT take 2
|
List | pgsql-hackers |
On Tue, Apr 27, 2021 at 7:45 AM Greg Nancarrow <gregn4422@gmail.com> wrote: > > On Tue, Apr 27, 2021 at 10:51 AM Bharath Rupireddy > <bharath.rupireddyforpostgres@gmail.com> wrote: > > > > > > I still feel that why we shouldn't limit the declarative approach to > > only partitioned tables? And for normal tables, possibly with a > > minimal cost(??), the server can do the safety checking. I know this > > feels a little inconsistent. In the planner we will have different > > paths like: if (partitioned_table) { check the parallel safety tag > > associated with the table } else { perform the parallel safety of the > > associated objects }. > > > > Personally I think the simplest and best approach is just do it > consistently, using the declarative approach across all table types. > Yeah, if we decide to go with a declarative approach then that sounds like a better approach. > > > > Then, running the pg_get_parallel_safety will have some overhead if > > there are many partitions associated with a table. And, this is the > > overhead planner would have had to incur without the declarative > > approach which we are trying to avoid with this design. > > > > The big difference is that pg_get_parallel_safety() is intended to be > used during development, not as part of runtime parallel-safety checks > (which are avoided using the declarative approach). > So there is no runtime overhead associated with pg_get_parallel_safety(). > > > > > I'm thinking that when users say ALTER TABLE partioned_table SET > > PARALLEL TO 'safe';, we check all the partitions' and their associated > > objects' parallel safety? If all are parallel safe, then only we set > > partitioned_table as parallel safe. What should happen if the parallel > > safety of any of the associated objects/partitions changes after > > setting the partitioned_table safety? > > > > With the declarative approach, there is no parallel-safety checking on > either the CREATE/ALTER when the parallel-safety is declared/set. > It's up to the user to get it right. If it's actually wrong, it will > be detected at runtime. > OTOH, even if we want to verify at DDL time, we won't be able to maintain it at the later point of time say if user changed the parallel-safety of some function used in check constraint. I think the function pg_get_parallel_safety() will help the user to decide whether it can declare table parallel-safe. Now, it is quite possible that the user can later change the parallel-safe property of some function then that should be caught at runtime. -- With Regards, Amit Kapila.
pgsql-hackers by date: