Index: doc/src/sgml/ref/psql-ref.sgml =================================================================== RCS file: /cvsroot/pgsql-server/doc/src/sgml/ref/psql-ref.sgml,v retrieving revision 1.109 diff -c -c -r1.109 psql-ref.sgml *** doc/src/sgml/ref/psql-ref.sgml 30 Mar 2004 15:54:33 -0000 1.109 --- doc/src/sgml/ref/psql-ref.sgml 10 Apr 2004 15:18:58 -0000 *************** *** 706,712 **** \copy table [ ( column_list ) ] { from | to } ! { filename | stdin | stdout | - } [ with ] [ oids ] [ delimiter [as] 'character' ] --- 706,712 ---- \copy table [ ( column_list ) ] { from | to } ! { filename | stdin | stdout | pstdin | pstdout } [ with ] [ oids ] [ delimiter [as] 'character' ] *************** *** 736,753 **** ! For \copy table from filename operations, ! psql adds the option of using a ! hyphen instead of filename. This causes ! \copy to read rows from the same source that ! issued the command, continuing until \. is ! read or the stream reaches EOF. This option is ! useful for populating tables in-line within a SQL script file. ! In contrast, \copy from stdin always reads from ! psql's standard input. --- 736,752 ---- ! \copy table from stdin | stdout ! reads/writes based on the command input and output respectively. ! All rows are read from the same source that issued the command, ! continuing until \. is read or the stream ! reaches EOF. Output is sent to the same place as ! command output. To read/write from ! psql's standard input or output, use ! pstdin or pstdout. This option is useful ! for populating tables in-line within a SQL script file. *************** *** 759,778 **** - - - Note the difference in interpretation of - stdin and stdout between - \copy and COPY. - In \copy these always - refer to psql's input and output - streams. In COPY, stdin comes - from wherever the COPY itself came from (for - example, a script run with the option), while - stdout refers to the query output stream (see - \o meta-command below). - - --- 758,763 ---- Index: src/bin/psql/copy.c =================================================================== RCS file: /cvsroot/pgsql-server/src/bin/psql/copy.c,v retrieving revision 1.42 diff -c -c -r1.42 copy.c *** src/bin/psql/copy.c 29 Jan 2004 12:34:59 -0000 1.42 --- src/bin/psql/copy.c 10 Apr 2004 15:19:05 -0000 *************** *** 62,68 **** char *table; char *column_list; char *file; /* NULL = stdin/stdout */ ! bool in_dash; /* true = use src stream not true stdin */ bool from; bool binary; bool oids; --- 62,68 ---- char *table; char *column_list; char *file; /* NULL = stdin/stdout */ ! bool psql_inout; /* true = use psql stdin/stdout */ bool from; bool binary; bool oids; *************** *** 220,240 **** if (strcasecmp(token, "stdin") == 0 || strcasecmp(token, "stdout") == 0) { ! result->in_dash = false; result->file = NULL; } ! else if (strcmp(token, "-") == 0) { ! /* Can't do this on output */ ! if (!result->from) ! goto error; ! ! result->in_dash = true; result->file = NULL; } else { ! result->in_dash = false; result->file = pg_strdup(token); expand_tilde(&result->file); } --- 220,237 ---- if (strcasecmp(token, "stdin") == 0 || strcasecmp(token, "stdout") == 0) { ! result->psql_inout = false; result->file = NULL; } ! else if (strcasecmp(token, "pstdin") == 0 || ! strcasecmp(token, "pstdout") == 0) { ! result->psql_inout = true; result->file = NULL; } else { ! result->psql_inout = false; result->file = pg_strdup(token); expand_tilde(&result->file); } *************** *** 394,400 **** { if (options->file) copystream = fopen(options->file, "r"); ! else if (options->in_dash) copystream = pset.cur_cmd_source; else copystream = stdin; --- 391,397 ---- { if (options->file) copystream = fopen(options->file, "r"); ! else if (!options->psql_inout) copystream = pset.cur_cmd_source; else copystream = stdin; *************** *** 403,408 **** --- 400,407 ---- { if (options->file) copystream = fopen(options->file, "w"); + else if (!options->psql_inout) + copystream = pset.queryFout; else copystream = stdout; }