stdin/stdout mismatch for COPY and \copy

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема stdin/stdout mismatch for COPY and \copy
Дата
Msg-id 200404091735.i39HZwg25925@candle.pha.pa.us
обсуждение исходный текст
Ответ на Re: [PATCHES] Current-stream read for psql's \copy  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: stdin/stdout mismatch for COPY and \copy  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Tom Lane wrote:
> Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > Tom Lane wrote:
> >> No it doesn't.  EOF will do fine.  The source program doesn't
> >> necessarily have to know anything about COPY, as long as its output is
> >> in a format COPY can cope with (eg, tab-delimited).
> 
> > The current behavior seems quite strange and counter-intuitive.  We
> > might break the code for 1-2 people, but we will make it more
> > predicable for everyone using it.
> 
> I don't think it's acceptable to simply remove the functionality.
> If you wanted to argue about swapping the meanings of STDIN and -
> (as defined by the patch) then we could debate about which way is
> more consistent and whether it's worth breaking backwards compatibility
> to improve consistency.  I could probably be talked into supporting
> that; as you say, we've done that before.  But taking out a useful
> behavior that has been there a long time, simply because you've decided
> it's unintuitive, is not okay.

I am reviewing our addition of '-' in CVS for psql \copy.

Reading the manual, I think our current code is pretty confusing/contorted:For \copy table from filename operations,
psqladds the option of usinga hyphen instead of filename. This causes \copy to read rows from thesame source that
issuedthe command, continuing until \. is read or thestream reaches EOF. This option is useful for populating tables
in-linewithina SQL script file. In contrast, \copy from stdin always readsfrom psql's standard input....Note: Note the
differencein interpretation of stdin and stdout between\copy and COPY. In \copy these always refer to psql's input and
outputstreams.In COPY, stdin comes from wherever the COPY itself came from(for example, a script run with the -f
option),while stdout refers tothe query output stream (see \o meta-command below).
 

"stdin is stdin except when it isn't stdin."  :-)

I think the biggest problem is that stdin/stdout in COPY is different
from \copy.  I propose we make stdin/stdout consistent for COPY and
\copy, where stdin always reads from command input, and stdout always
writes to command output.  This does break backward compatibility of
\copy for stdin/stdout;  this change would have to be mentioned in the
release notes.  COPY is unaffected.

I propose we add 'pstdin', and 'pstdout' to read from psql's stdin and
stdout.  I think that will greatly simplify our documentation, and
clarify the stdin/stdout usage in all cases.

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
359-1001+  If your life is a hard drive,     |  13 Roberts Road +  Christ can be your backup.        |  Newtown Square,
Pennsylvania19073
 


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Josh Berkus
Дата:
Сообщение: Code Sprint at OSCON?
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: [pgsql-advocacy] Code Sprint at OSCON?