Re: [POC] Fast COPY FROM command for the table with foreign partitions
Andrei Lepikhov <a.lepikhov@postgrespro.ru>
From: "Andrey V. Lepikhov" <a.lepikhov@postgrespro.ru>
To: Amit Langote <amitlangote09@gmail.com>,
Alexey Kondratov <a.kondratov@postgrespro.ru>
Cc: Michael Paquier <michael@paquier.xyz>,
Ashutosh Bapat <ashutosh.bapat@2ndquadrant.com>,
Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>,
Etsuro Fujita <etsuro.fujita@gmail.com>,
PostgreSQL-Dev <pgsql-hackers@postgresql.org>
Date: 2020-09-10T09:57:43Z
Lists: pgsql-hackers
Attachments
- v9-0001-Move-multi-insert-decision-logic-into-executor.patch (text/x-patch)
On 9/9/20 5:51 PM, Amit Langote wrote: > On Wed, Sep 9, 2020 at 6:42 PM Alexey Kondratov > <a.kondratov@postgrespro.ru> wrote: >> On 2020-09-09 11:45, Andrey V. Lepikhov wrote: >>> This does not seem very convenient and will lead to errors in the >>> future. So, I agree with Amit. >> >> And InitResultRelInfo() may set ri_usesMultiInsert to false by default, >> since it's used only by COPY now. Then you won't need this in several >> places: >> >> + resultRelInfo->ri_usesMultiInsert = false; >> >> While the logic of turning multi-insert on with all the validations >> required could be factored out of InitResultRelInfo() to a separate >> routine. > > Interesting idea. Maybe better to have a separate routine like Alexey says. Ok. I rewrited the patch 0001 with the Alexey suggestion. Patch 0002... required minor changes (new version see in attachment). Also I added some optimization (see 0003 and 0004 patches). Here we execute 'COPY .. FROM STDIN' at foreign server only once, in the BeginForeignCopy routine. It is a proof-of-concept patches. Also I see that error messages processing needs to be rewritten. Unlike the INSERT operation applied to each row, here we find out copy errors only after sending the END of copy. Currently implementations 0002 and 0004 provide uninformative error messages for some cases. -- regards, Andrey Lepikhov Postgres Professional
Commits
-
Allow batch insertion during COPY into a foreign table.
- 97da48246d34 16.0 landed
-
postgres_fdw: Disable batch insertion when there are WCO constraints.
- 82593b9a3d5f 16.0 cited
-
Enforce foreign key correctly during cross-partition updates
- ba9a7e392171 15.0 cited
-
Fix permission checks on constraint violation errors on partitions.
- 6214e2b22804 14.0 cited
-
Fix compilation of uuid-ossp
- 525e60b74299 14.0 cited