pgsql: Add support for piping COPY to/from an external program.

From: Heikki Linnakangas <heikki(dot)linnakangas(at)iki(dot)fi>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Add support for piping COPY to/from an external program.
Date: 2013-02-27 16:22:53
Message-ID: E1UAjmP-0007Ln-B3@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Add support for piping COPY to/from an external program.

This includes backend "COPY TO/FROM PROGRAM '...'" syntax, and corresponding
psql \copy syntax. Like with reading/writing files, the backend version is
superuser-only, and in the psql version, the program is run in the client.

In the passing, the psql \copy STDIN/STDOUT syntax is subtly changed: if you
the stdin/stdout is quoted, it's now interpreted as a filename. For example,
"\copy foo from 'stdin'" now reads from a file called 'stdin', not from
standard input. Before this, there was no way to specify a filename called
stdin, stdout, pstdin or pstdout.

This creates a new function in pgport, wait_result_to_str(), which can
be used to convert the exit status of a process, as returned by wait(3),
to a human-readable string.

Etsuro Fujita, reviewed by Amit Kapila.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/3d009e45bde2a2681826ef549637ada76508b597

Modified Files
--------------
contrib/file_fdw/file_fdw.c | 4 +-
doc/src/sgml/keywords.sgml | 7 +
doc/src/sgml/ref/copy.sgml | 50 +++++++-
doc/src/sgml/ref/psql-ref.sgml | 33 ++++--
src/backend/commands/copy.c | 205 ++++++++++++++++++++++--------
src/backend/nodes/copyfuncs.c | 1 +
src/backend/nodes/equalfuncs.c | 1 +
src/backend/parser/gram.y | 48 ++++++--
src/backend/storage/file/fd.c | 98 ++++++++++++++-
src/bin/psql/copy.c | 131 ++++++++++++++++----
src/bin/psql/stringutils.c | 5 +-
src/bin/psql/stringutils.h | 2 +
src/include/commands/copy.h | 2 +-
src/include/nodes/parsenodes.h | 1 +
src/include/parser/kwlist.h | 1 +
src/include/port.h | 3 +
src/include/storage/fd.h | 4 +
src/interfaces/ecpg/preproc/ecpg.addons | 2 +-
src/port/Makefile | 3 +-
src/port/exec.c | 37 ++----
src/port/wait_error.c | 92 ++++++++++++++
21 files changed, 581 insertions(+), 149 deletions(-)

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Thom Brown 2013-02-27 16:35:03 Re: pgsql: Add support for piping COPY to/from an external program.
Previous Message Tom Lane 2013-02-27 15:41:02 pgsql: Add missing error check in regexp parser.