Re: Make COPY format extendable: Extract COPY TO format implementations

Alvaro Herrera <alvherre@alvh.no-ip.org>

From: Alvaro Herrera <alvherre@alvh.no-ip.org>
To: Masahiko Sawada <sawada.mshk@gmail.com>
Cc: Sutou Kouhei <kou@clear-code.com>, michael@paquier.xyz, pgsql-hackers@postgresql.org
Date: 2024-11-21T10:41:18Z
Lists: pgsql-hackers

Attachments

I ran `make headerscheck` after these patches and it reported a few
problems:

/pgsql/source/master/src/tools/pginclude/headerscheck /pgsql/source/master /pgsql/build/master
In file included from /tmp/headerscheck.xdG40Y/test.c:2:
/pgsql/source/master/src/include/commands/copyapi.h:76:44: error: unknown type name ‘CopyFromState’; did you mean ‘CopyToState’?
   76 |         void            (*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
      |                                            ^~~~~~~~~~~~~
      |                                            CopyToState
/pgsql/source/master/src/include/commands/copyapi.h:87:43: error: unknown type name ‘CopyFromState’; did you mean ‘CopyToState’?
   87 |         void            (*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
      |                                           ^~~~~~~~~~~~~
      |                                           CopyToState
/pgsql/source/master/src/include/commands/copyapi.h:98:44: error: unknown type name ‘CopyFromState’; did you mean ‘CopyToState’?
   98 |         bool            (*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
      |                                            ^~~~~~~~~~~~~
      |                                            CopyToState
/pgsql/source/master/src/include/commands/copyapi.h:102:41: error: unknown type name ‘CopyFromState’; did you mean ‘CopyToState’?
  102 |         void            (*CopyFromEnd) (CopyFromState cstate);
      |                                         ^~~~~~~~~~~~~
      |                                         CopyToState
/pgsql/source/master/src/include/commands/copyapi.h:103:1: warning: no semicolon at end of struct or union
  103 | } CopyFromRoutine;
      | ^

I think the fix should be the attached.

-- 
Álvaro Herrera               48°01'N 7°57'E  —  https://www.EnterpriseDB.com/
"In Europe they call me Niklaus Wirth; in the US they call me Nickel's worth.
 That's because in Europe they call me by name, and in the US by value!"

Commits

  1. Refactor Copy{From|To}GetRoutine() to use pass-by-reference argument.

  2. Refactor COPY FROM to use format callback functions.

  3. Refactor COPY TO to use format callback functions.

  4. Another try to fix BF failure introduced in commit ddd5f4f54a.

  5. Revert "Refactor CopyReadAttributes{CSV,Text}() to use a callback in COPY FROM"

  6. Improve COPY TO performance when server and client encodings match

  7. Simplify signature of CopyAttributeOutCSV() in copyto.c

  8. Revert "Refactor CopyAttributeOut{CSV,Text}() to use a callback in COPY TO"

  9. Refactor CopyAttributeOut{CSV,Text}() to use a callback in COPY TO

  10. Refactor CopyReadAttributes{CSV,Text}() to use a callback in COPY FROM

  11. Add progress reporting of skipped tuples during COPY FROM.

  12. pgbench: Add \syncpipeline

  13. meson: Make gzip and tar optional

  14. Export the external file reader used in COPY FROM as APIs.