Re: Make COPY format extendable: Extract COPY TO format implementations
Masahiko Sawada <sawada.mshk@gmail.com>
On Tue, Feb 4, 2025 at 6:19 PM Vladlen Popolitov <v.popolitov@postgrespro.ru> wrote: > > Masahiko Sawada писал(а) 2025-02-05 08:32: > > On Tue, Feb 4, 2025 at 2:46 AM Vladlen Popolitov > > >> >> Standard PostgreSQL realisation for new methods to use USING > >> >> keyword. Every > >> >> new method could have own options (FORMAT is option of internal 'copy > >> >> from/to' > >> >> methods), > >> > > >> > Ah, I didn't think about USING. > >> > > >> > You suggest "COPY ... USING json" not "COPY ... FORMAT json" > >> > like "CREATE INDEX ... USING custom_index", right? It will > >> > work. If we use this interface, we should reject "COPY > >> > ... FORMAT ... USING" (both of FORMAT/USING are specified). > >> > > >> > > >> I cannot recommend about rejecting, I do not know details > >> of realisation of this part of code. Just idea - FORMAT value > >> could be additional option to copy handler or NULL > >> if it is omitted. > >> If you add extensibility, than every handler will be the > >> extension, that can handle one or more formats. > > > > Hmm, if we use the USING clause to specify the format type, we end up > > having two ways to specify the format type (e.g., 'COPY ... USING > > text' and 'COPY .. WITH (format = text)'), which seems to confuse > > users. > WITH clause has list of options defined by copy method define in USING. > The clause WITH (format=text) has options defined for default copy > method, > but other methods will define own options. Probably they do not need > the word 'format' in options. The same as in index access methods. > For example, copy method parquete: > COPY ... USING parquete WITH (row_group_size=1000000) > copy method parquete need and will define the word 'row_group_size' > in options, the word 'format' will be wrong for it. I think it's orthological between the syntax and options passed to the custom format extension. For example, even if we specify the options like "COPY ... WITH (format 'parquet', row_group_size '1000000', on_error 'ignore)", we can pass only non-built-in options (i.e. only row_group_size) to the extension. Regards, -- Masahiko Sawada Amazon Web Services: https://aws.amazon.com
Commits
-
Refactor Copy{From|To}GetRoutine() to use pass-by-reference argument.
- bacbc4863b3b 18.0 landed
-
Refactor COPY FROM to use format callback functions.
- 7717f6300693 18.0 landed
-
Refactor COPY TO to use format callback functions.
- 2e4127b6d2d8 18.0 landed
-
Another try to fix BF failure introduced in commit ddd5f4f54a.
- 9bc1eee988c3 17.0 cited
-
Revert "Refactor CopyReadAttributes{CSV,Text}() to use a callback in COPY FROM"
- 06bd311bce24 17.0 landed
-
Improve COPY TO performance when server and client encodings match
- b619852086ed 17.0 cited
-
Simplify signature of CopyAttributeOutCSV() in copyto.c
- b9d6038d7048 17.0 landed
-
Revert "Refactor CopyAttributeOut{CSV,Text}() to use a callback in COPY TO"
- 1aa8324b81fa 17.0 landed
-
Refactor CopyAttributeOut{CSV,Text}() to use a callback in COPY TO
- 2889fd23be56 17.0 landed
-
Refactor CopyReadAttributes{CSV,Text}() to use a callback in COPY FROM
- 95fb5b49024a 17.0 landed
-
Add progress reporting of skipped tuples during COPY FROM.
- 729439607ad2 17.0 cited
-
pgbench: Add \syncpipeline
- 94edfe250c6a 17.0 cited
-
meson: Make gzip and tar optional
- 9ca6e7b9411e 17.0 cited
-
Export the external file reader used in COPY FROM as APIs.
- 8ddc05fb01ee 9.1.0 cited