Re: Parallel copy
Amit Kapila <amit.kapila16@gmail.com>
From: Amit Kapila <amit.kapila16@gmail.com>
To: Alastair Turner <minion@decodable.me>
Cc: Thomas Munro <thomas.munro@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2020-02-15T12:32:06Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Allow WaitLatch() to be used without a latch.
- 733fa9aa51c5 14.0 cited
-
Add %P to log_line_prefix for parallel group leader
- b8fdee7d0ca8 14.0 cited
-
Include replication origins in SQL functions for commit timestamp
- b1e48bbe64a4 14.0 cited
-
Avoid useless buffer allocations during binary COPY FROM.
- cd22d3cdb9bd 14.0 cited
On Sat, Feb 15, 2020 at 4:08 PM Alastair Turner <minion@decodable.me> wrote: > > On Sat, 15 Feb 2020 at 04:55, Amit Kapila <amit.kapila16@gmail.com> wrote: > > > > On Fri, Feb 14, 2020 at 7:16 PM Alastair Turner <minion@decodable.me> wrote: > > > > ... > > > > > > Parsing rows from the raw input (the work done by CopyReadLine()) in a single process would accommodate line returns in quoted fields. I don't think there's a way of getting parallel workers to manage the in-quote/out-of-quote state required. > > > > > > > AFAIU, the whole of this in-quote/out-of-quote state is manged inside > > CopyReadLineText which will be done by each of the parallel workers, > > something on the lines of what Thomas did in his patch [1]. > > Basically, we need to invent a mechanism to allocate chunks to > > individual workers and then the whole processing will be done as we > > are doing now except for special handling for partial tuples which I > > have explained in my previous email. Am, I missing something here? > > > The problem case that I see is the chunk boundary falling in the > middle of a quoted field where > - The quote opens in chunk 1 > - The quote closes in chunk 2 > - There is an EoL character between the start of chunk 2 and the closing quote > > When the worker processing chunk 2 starts, it believes itself to be in > out-of-quote state, so only data between the start of the chunk and > the EoL is regarded as belonging to the partial line. From that point > on the parsing of the rest of the chunk goes off track. > > Some of the resulting errors can be avoided by, for instance, > requiring a quote to be preceded by a delimiter or EoL. That answer > fails when fields end with EoL characters, which happens often enough > in the wild. > > Recovering from an incorrect in-quote/out-of-quote state assumption at > the start of parsing a chunk just seems like a hole with no bottom. So > it looks to me like it's best done in a single process which can keep > track of that state reliably. > Good point and I agree with you that having a single process would avoid any such stuff. However, I will think some more on it and if you/anyone else gets some idea on how to deal with this in a multi-worker system (where we can allow each worker to read and process the chunk) then feel free to share your thoughts. -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com