mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
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.
This commit is contained in:
@@ -830,7 +830,7 @@ testdb=>
|
||||
<varlistentry id="APP-PSQL-meta-commands-copy">
|
||||
<term><literal>\copy { <replaceable class="parameter">table</replaceable> [ ( <replaceable class="parameter">column_list</replaceable> ) ] | ( <replaceable class="parameter">query</replaceable> ) }
|
||||
{ <literal>from</literal> | <literal>to</literal> }
|
||||
{ <replaceable class="parameter">filename</replaceable> | stdin | stdout | pstdin | pstdout }
|
||||
{ <replaceable class="parameter">'filename'</replaceable> | program <replaceable class="parameter">'command'</replaceable> | stdin | stdout | pstdin | pstdout }
|
||||
[ [ with ] ( <replaceable class="parameter">option</replaceable> [, ...] ) ]</literal></term>
|
||||
|
||||
<listitem>
|
||||
@@ -847,16 +847,14 @@ testdb=>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The syntax of the command is similar to that of the
|
||||
<acronym>SQL</acronym> <xref linkend="sql-copy">
|
||||
command, and
|
||||
<replaceable class="parameter">option</replaceable>
|
||||
must indicate one of the options of the
|
||||
<acronym>SQL</acronym> <xref linkend="sql-copy"> command.
|
||||
Note that, because of this,
|
||||
special parsing rules apply to the <command>\copy</command>
|
||||
command. In particular, the variable substitution rules and
|
||||
backslash escapes do not apply.
|
||||
When <literal>program</> is specified,
|
||||
<replaceable class="parameter">command</replaceable> is
|
||||
executed by <application>psql</application> and the data from
|
||||
or to <replaceable class="parameter">command</replaceable> is
|
||||
routed between the server and the client.
|
||||
This means that the execution privileges are those of
|
||||
the local user, not the server, and no SQL superuser
|
||||
privileges are required.
|
||||
</para>
|
||||
|
||||
<para><literal>\copy ... from stdin | to stdout</literal>
|
||||
@@ -870,6 +868,19 @@ testdb=>
|
||||
for populating tables in-line within a SQL script file.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The syntax of the command is similar to that of the
|
||||
<acronym>SQL</acronym> <xref linkend="sql-copy">
|
||||
command, and
|
||||
<replaceable class="parameter">option</replaceable>
|
||||
must indicate one of the options of the
|
||||
<acronym>SQL</acronym> <xref linkend="sql-copy"> command.
|
||||
Note that, because of this,
|
||||
special parsing rules apply to the <command>\copy</command>
|
||||
command. In particular, the variable substitution rules and
|
||||
backslash escapes do not apply.
|
||||
</para>
|
||||
|
||||
<tip>
|
||||
<para>
|
||||
This operation is not as efficient as the <acronym>SQL</acronym>
|
||||
|
Reference in New Issue
Block a user