diff options
author | Bruce Momjian <bruce@momjian.us> | 2004-04-12 15:58:52 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2004-04-12 15:58:52 +0000 |
commit | abdabeb99571a093af5b063c045a65d1c1b09038 (patch) | |
tree | 7a06266eadf19c7524a33f8655cdc44ac352a5e7 | |
parent | 7b3189c18598e57045a09af5036fa2190165c49c (diff) | |
download | postgresql-abdabeb99571a093af5b063c045a65d1c1b09038.tar.gz |
Change psql \copy stdin/stdout to read from command input/output.
Add pstdin/pstdout to read from psql's stdin/stdout.
BACKWARD INCOMPATIBLE CHANGE
-rw-r--r-- | doc/src/sgml/ref/psql-ref.sgml | 39 | ||||
-rw-r--r-- | src/bin/psql/copy.c | 21 |
2 files changed, 22 insertions, 38 deletions
diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index e6bbcea60b..206fe2719b 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1,5 +1,5 @@ <!-- -$PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.109 2004/03/30 15:54:33 momjian Exp $ +$PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.110 2004/04/12 15:58:52 momjian Exp $ PostgreSQL documentation --> @@ -706,7 +706,7 @@ testdb=> <term><literal>\copy <replaceable class="parameter">table</replaceable> [ ( <replaceable class="parameter">column_list</replaceable> ) ] { <literal>from</literal> | <literal>to</literal> } - { <replaceable class="parameter">filename</replaceable> | stdin | stdout | - } + { <replaceable class="parameter">filename</replaceable> | stdin | stdout | pstdin | pstdout } [ <literal>with</literal> ] [ <literal>oids</literal> ] [ <literal>delimiter [as] </literal> '<replaceable class="parameter">character</replaceable>' ] @@ -736,18 +736,17 @@ testdb=> </para> <para> - For <literal>\copy <replaceable + <literal>\copy <replaceable class="parameter">table</replaceable> from <replaceable - class="parameter">filename</replaceable></literal> operations, - <application>psql</application> adds the option of using a - hyphen instead of <replaceable - class="parameter">filename</replaceable>. This causes - <literal>\copy</literal> to read rows from the same source that - issued the command, continuing until <literal>\.</literal> is - read or the stream reaches <acronym>EOF</>. This option is - useful for populating tables in-line within a SQL script file. - In contrast, <literal>\copy from stdin</> always reads from - <application>psql</application>'s standard input. + class="parameter">stdin | stdout</replaceable></literal> + reads/writes based on the command input and output respectively. + All rows are read from the same source that issued the command, + continuing until <literal>\.</literal> is read or the stream + reaches <acronym>EOF</>. Output is sent to the same place as + command output. To read/write from + <application>psql</application>'s standard input or output, use + <literal>pstdin</> or <literal>pstdout</>. This option is useful + for populating tables in-line within a SQL script file. </para> <tip> @@ -759,20 +758,6 @@ testdb=> </para> </tip> - <note> - <para> - Note the difference in interpretation of - <literal>stdin</literal> and <literal>stdout</literal> between - <literal>\copy</literal> and <command>COPY</command>. - In <literal>\copy</literal> these always - refer to <application>psql</application>'s input and output - streams. In <command>COPY</command>, <literal>stdin</literal> comes - from wherever the <command>COPY</command> itself came from (for - example, a script run with the <option>-f</option> option), while - <literal>stdout</literal> refers to the query output stream (see - <command>\o</command> meta-command below). - </para> - </note> </listitem> </varlistentry> diff --git a/src/bin/psql/copy.c b/src/bin/psql/copy.c index 9fb35f532d..49b8b8a064 100644 --- a/src/bin/psql/copy.c +++ b/src/bin/psql/copy.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2003, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/copy.c,v 1.42 2004/01/29 12:34:59 neilc Exp $ + * $PostgreSQL: pgsql/src/bin/psql/copy.c,v 1.43 2004/04/12 15:58:52 momjian Exp $ */ #include "postgres_fe.h" #include "copy.h" @@ -62,7 +62,7 @@ struct copy_options char *table; char *column_list; char *file; /* NULL = stdin/stdout */ - bool in_dash; /* true = use src stream not true stdin */ + bool psql_inout; /* true = use psql stdin/stdout */ bool from; bool binary; bool oids; @@ -220,21 +220,18 @@ parse_slash_copy(const char *args) if (strcasecmp(token, "stdin") == 0 || strcasecmp(token, "stdout") == 0) { - result->in_dash = false; + result->psql_inout = false; result->file = NULL; } - else if (strcmp(token, "-") == 0) + else if (strcasecmp(token, "pstdin") == 0 || + strcasecmp(token, "pstdout") == 0) { - /* Can't do this on output */ - if (!result->from) - goto error; - - result->in_dash = true; + result->psql_inout = true; result->file = NULL; } else { - result->in_dash = false; + result->psql_inout = false; result->file = pg_strdup(token); expand_tilde(&result->file); } @@ -394,7 +391,7 @@ do_copy(const char *args) { if (options->file) copystream = fopen(options->file, "r"); - else if (options->in_dash) + else if (!options->psql_inout) copystream = pset.cur_cmd_source; else copystream = stdin; @@ -403,6 +400,8 @@ do_copy(const char *args) { if (options->file) copystream = fopen(options->file, "w"); + else if (!options->psql_inout) + copystream = pset.queryFout; else copystream = stdout; } |