Re: COPY FROM WHEN condition
Daniel Verite <daniel@manitou-mail.org>
From: "Daniel Verite" <daniel@manitou-mail.org>
To: "David Fetter" <david@fetter.org>
Cc: "Pavel Stehule" <pavel.stehule@gmail.com>,"corey.huinker"
<corey.huinker@gmail.com>,nasbyj@amazon.com,"Surafel Temsgen"
<surafel3000@gmail.com>,"Christoph Moench-Tegeder"
<cmt@burggraben.net>,"PostgreSQL Hackers"
<pgsql-hackers@lists.postgresql.org>
Date: 2018-11-03T12:53:37Z
Lists: pgsql-hackers
David Fetter wrote: > It also seems like a violation of separation of concerns to couple > FEBE to grammar, so there'd need to be some way to do those things > separately, too. After re-reading psql/copy.c, I withdraw what I said upthread: it doesn't appear necessary to add anything to support the WHEN condition with \copy. \copy does have a dedicated mini-parser, but it doesn't try to recognize every option: it's only concerned with getting the bits of information that are needed to perform the client-side work: - whether it's a copy from or to - what exact form and value has the 'filename' argument immediately after from or to: '<file path>' | PROGRAM '<command>' | stdin | stdout | pstdout | pstdout It doesn't really care what the options are, just where they are in the buffer, so they can be copied into the COPY SQL statement. From the code: * The documented syntax is: * \copy tablename [(columnlist)] from|to filename [options] * \copy ( query stmt ) to filename [options] The WHEN clause would be part of the [options], which are handled as simply as this in parse_slash_copy(): /* Collect the rest of the line (COPY options) */ token = strtokx(NULL, "", NULL, NULL, 0, false, false, pset.encoding); if (token) result->after_tofrom = pg_strdup(token); So unless there's something particular in the WHEN clause expression that could make this strtokx() invocation error out, this should work directly. Best regards, -- Daniel Vérité PostgreSQL-powered mailer: http://www.manitou-mail.org Twitter: @DanielVerite
Commits
-
Remove unused struct member, enforce multi_insert callback presence.
- 57a7a3adfe4e 12.0 landed
-
Separate per-batch and per-tuple memory contexts in COPY
- 36a1281f86c0 12.0 landed
-
Fix handling of volatile expressions in COPY FROM ... WHERE
- 4a8283d0ec5a 12.0 landed
-
Allow COPY FROM to filter data using WHERE conditions
- 31f3817402da 12.0 landed
-
Remove obsolete netbsd dynloader code
- b68ff3ea672c 12.0 cited