Re: Make COPY format extendable: Extract COPY TO format implementations
Sutou Kouhei <kou@clear-code.com>
Hi,
In <CAKFQuwaRDXANaL+QcT6LZRAem4rwkSwv9v+viv_mcR+Rex3quA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Sat, 3 May 2025 22:27:36 -0700,
"David G. Johnston" <david.g.johnston@gmail.com> wrote:
> In any case, I’m doubtful either of us can make a convincing enough
> argument to sway the other fully. Both options are plausible, IMO. Others
> need to chime in.
I may misunderstand but here is the current summary, right?
Proposed approaches to register custom COPY formats:
a. Create a function that has the same name of custom COPY
format
b. Call a register function from _PG_init()
FYI: I proposed c. approach that uses a. but it always
requires schema name for format name in other e-mail.
Users can register the same format name:
a. Yes
* Users can distinct the same format name by schema name
* If format name doesn't have schema name, the used
format depends on search_path
* Pros:
* Using schema for it is consistent with other
PostgreSQL mechanisms
* Custom format never conflict with built-in
format. For example, an extension register "xml" and
PostgreSQL adds "xml" later, they are never
conflicted because PostgreSQL's "xml" is registered
to pg_catalog.
* Cons: Different format may be used with the same
input. For example, "jsonlines" may choose
"jsonlines" implemented by extension X or implemented
by extension Y when search_path is different.
b. No
* Users can use "${schema}.${name}" for format name
that mimics PostgreSQL's builtin schema (but it's just
a string)
Built-in formats (text/csv/binary) should be able to
overwritten by extensions:
a. (The current patch is no but David's answer is) Yes
* Pros: Users can use drop-in replacement faster
implementation without changing input
* Cons: Users may overwrite them accidentally.
It may break pg_dump result.
(This is called as "backward incompatibility.")
b. No
Are there any missing or wrong items? If we can summarize
the current discussion here correctly, others will be able
to chime in this discussion. (At least I can do it.)
Thanks,
--
kou
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