From: | Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> |
---|---|
To: | Andrew Dunstan <andrew(at)dunslane(dot)net> |
Cc: | pgsql-patches(at)postgresql(dot)org |
Subject: | Re: COPY for CSV documentation |
Date: | 2004-04-12 03:11:17 |
Message-ID: | 200404120311.i3C3BH013638@candle.pha.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-patches |
Andrew Dunstan wrote:
> > I am thinking just:
> >
> >> COPY a FROM stdin WITH CSV ',"';
> >
> > or
> >
> >> COPY a FROM stdin WITH DELIMITER "," QUOTE '"' EQUOTE '"';
> >
> > EQUOTE for embedded quote. These are used in very limited situations
> > and don't have to be reserved words or anything.
> >
> > I can help with these changes if folks like them.
> >
>
>
> I prefer either the first, because it ensures things are specified
> together.
>
> If you want to do that I will work on some regression tests.
( Jump to the bottom for my final solution.)
I thought about this today. I am thinking of:
> COPY a FROM stdin WITH CSV
or
> COPY a FROM stdin WITH CSV '""' DELIMITER ','
In other words, the string after CSV is optional. However, looking at
the COPY syntax, there isn't any case where we have an optional string
after a keyword. Is that OK?
In this case, CVS is a mode that makes the delimiter ',' and the quote
and quote escape '"'. This way, CVS doesn't require any special quote
if you want the default.
However, this still has CSV using a two-character string with special
meaning for the first and second characters. What if we call it QUOTE
mode:
> COPY a FROM stdin WITH QUOTE
that enables CVS with comma delimiters and '"' for quote escape, so the
above would be equavalent to:
> COPY a FROM stdin WITH QUOTE '"' ESCAPE '"' DELIMITER ','
(I have used ESCAPE because Tom suggested it and it is already a
keyword.)
I am a little worried that ESCAPE only has meaning with QUOTE, and QUOTE
sets defaults for all the others. This makes the syntax addition pretty
confusing for users.
---------------------------------------------------------------------------
Thinking further, maybe we need to add CSV, QUOTE, and ESCAPE to COPY.
QUOTE and ESCAPE are only available in CVS mode, so you can say:
> COPY a FROM stdin WITH CSV
or
> COPY a FROM stdin WITH CSV ESCAPE '\\'
This means that there is no optional string for keywords. Here is the
line at the bottom we have to add to the COPY syntax.
COPY tablename [ ( column [, ...] ) ]
TO { 'filename' | STDOUT }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ] ]
[ CSV [ QUOTE 'quote' ] [ ESCAPE 'escape' ] ]
DELIMITER default to tab, except in CSV mode, where it is a comma.
That sounds very clear to me.
--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2004-04-12 03:12:13 | Re: COPY for CSV documentation |
Previous Message | Tom Lane | 2004-04-12 02:39:13 | Re: COPY for CSV documentation |