| From: | Greg Nancarrow <gregn4422(at)gmail(dot)com> |
|---|---|
| To: | Bharath Rupireddy <bharath(dot)rupireddyforpostgres(at)gmail(dot)com> |
| Cc: | Dilip Kumar <dilipbalaut(at)gmail(dot)com>, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, Andres Freund <andres(at)anarazel(dot)de>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
| Subject: | Re: Parallel INSERT (INTO ... SELECT ...) |
| Date: | 2020-10-08 08:11:48 |
| Message-ID: | CAJcOf-cwKE1HJ-GCfyaXXYC2Hdr=R87S=VKuKZS=P4nfW-=T7w@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Wed, Oct 7, 2020 at 7:25 PM Greg Nancarrow <gregn4422(at)gmail(dot)com> wrote:
>
> On Wed, Oct 7, 2020 at 12:40 AM Bharath Rupireddy
> <bharath(dot)rupireddyforpostgres(at)gmail(dot)com> wrote:
> > In parallel, we are not doing anything(due to the same reason
> > explained in above comment) to find whether there is a foreign
> > partition or not while deciding to go with parallel/non-parallel copy,
> > we are just throwing an error during the first tuple insertion into
> > the partition.
> >
> > errmsg("cannot perform PARALLEL COPY if partition has BEFORE/INSTEAD
> > OF triggers, or if the partition is foreign partition"),
> > errhint("Try COPY without PARALLEL option")));
> >
>
> I'm wondering whether code similar to the following can safely be used
> to detect a foreign partition:
>
> if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
> {
> int i;
> PartitionDesc pd = RelationGetPartitionDesc(rel);
> for (i = 0; i < pd->nparts; i++)
> {
> if (get_rel_relkind(pd->oids[i]) == RELKIND_FOREIGN_TABLE)
> {
> table_close(rel, NoLock);
> return false;
> }
> }
> }
>
Actually, the addition of this kind of check is still not good enough.
Partitions can have their own constraints, triggers, column default
expressions etc. and a partition itself can be partitioned.
I've written code to recursively walk the partitions and do all the
various checks for parallel-insert-safety as before, but it's doing a
fair bit of work.
Any other idea of dealing with this? Seems it can't be avoided if you
want to support partitioned tables and partitions.
Regards,
Greg Nancarrow
Fujitsu Australia
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Bharath Rupireddy | 2020-10-08 08:19:32 | Re: Parallel INSERT (INTO ... SELECT ...) |
| Previous Message | Peter Eisentraut | 2020-10-08 07:46:38 | dynamic result sets support in extended query protocol |