Re: Re: csv format for psql

From: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
To: Fabien COELHO <coelho(at)cri(dot)ensmp(dot)fr>
Cc: Daniel Verite <daniel(at)manitou-mail(dot)org>, David Steele <david(at)pgmasters(dot)net>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Re: csv format for psql
Date: 2018-03-24 07:24:47
Message-ID: CAFj8pRDs96KgN7tAzh7M7iuytR7we5rFC_tob4iQVWoSHLemtQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

2018-03-24 8:15 GMT+01:00 Fabien COELHO <coelho(at)cri(dot)ensmp(dot)fr>:

>
> Hello Pavel,
>
> The patch adds a simple way to generate csv output from "psql" queries,
>>> much simpler than playing around with COPY or \copy. It allows to
>>> generate
>>> a clean CSV dump from something as short as:
>>>
>>> sh> psql --csv -c 'TABLE foo' > foo.csv
>>>
>>> Documentation is clear.
>>>
>>> Test cover a significant number of cases (fieldsep, expanded,
>>> tuples-only).
>>> Although recordsep changes are not actually tested, it worked
>>> interactively
>>> and I think that tests are sufficient as is.
>>>
>>> There are somehow remaining point about which a committer/other people
>>> input would be nice:
>>>
>>> (1) There are some mild disagreement whether the fieldsep should be
>>> format specific shared with other format. I do not think that a specific
>>> fieldsep is worth it, but this is a marginal preference, and other people
>>> opinion differ. What is best is not obvious.
>>>
>>> Pavel also suggested to have a special handling based on whether the
>>> fieldsep is explicitely set or not. I'm not too keen on that because it
>>> departs significantly from the way psql formatting is currently handled,
>>> and what is happening becomes unclear to the user.
>>>
>>> (2) For interactive use, two commands are required: \pset format csv +
>>> \pset fieldsep ',' (or ';' or '\t' or whatever...). Maybe some \csv command
>>> similar to \H would be appropriate, or not, to set both values more
>>> efficiently. Could be something for another patch.
>>>
>>> Not sure what is the status of the patch if we do not have a clear
>>> consensus.
>>>
>>
>> I am sorry, but I don't think so this interface is good enough. Using | as
>> default CSV separator is just wrong. It and only it is a problem. Any
>> other
>> is perfect.
>>
>
> I do not think that there is a perfect solution, so some compromise will
> be needed or we won't get it.
>
> (1) patch v4:
>
> "\pset format csv" retains the current fieldsep value, so fields are
> separated by whatever is in the variable, which means that for getting
> a standard csv two commands are needed, which is clearly documented,
> but may be considered as surprising. ISTM that the underlying point is
> that "format" is really about string escaping, not about the full
> output
> format, but this is a pre-existing situation.
>
> I'm suggesting to add \csv which would behave like \H to toggle CSV
> mode so as to improve this situation, with a caveat which is that
> toggling back \csv would have forgotted the previous settings (just
> like \H does, though, so would for instance reset to aligned with |),
> so it would not be perfect.
>

this doesn't solve usual format settings by \pset format csv

>
> (2) your proposal as I understand it:
>
> "\pset format csv" may or may not use the fieldsep, depending on
> whether it was explicitely set, an information which is not shown,
> i.e.:
>
> \pset fieldsep # fieldsep separator is "|"
> \pset format csv # would output a,b,c or a|b|c...
>
> Because it depends on whether fieldsep was set explicitely to '|' or
> whether it has this value but it was due to the default.
>
> This kind of unclear behavioral determinism does not seem desirable.
>

please, check and test attached patch. It is very simply for usage - and
there is not any unclear behave. Just you should to accept so formats can
have own defaults for separators.

>
> (3) other option, always use a comma:
>
> this was rejected because some people like their comma separated
> values to be separated by semi-colons or tabs (aka tsv).
>
> (4) other option, Daniel v3 or v2:
>
> use a distinct "fieldsep_csv" variable initially set to ','. This adds
> yet another specific variable that has to be remembered, some styles
> would use fieldsep but csv would not so it is some kind of exception
> that I would wish to avoid.
>
> My current preference order in the suggested solutions is 1, 4, 2, 3, with
> a significant preference for 1.
>

I am thinking so @1 solves nothing - people are using \pset format ...

@3 is clearly bad - there are not any discussion

@4 can be compromise solution, but then there should be renamed fieldsep.
Now, fieldsep is used just for unaligned format - for nothing else. If we
introduce fieldsep_csv, then fieldsep should be renamed to
fieldsep_unaligned. I can live with it.

But I think so default fieldsep is better option. Please, try my patch and
comment it.

Regards

Pavel

>
> --
> Fabien.
>

Attachment Content-Type Size
default_format_fieldsep-2.patch text/x-patch 22.3 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Kapil Sharma 2018-03-24 08:02:47 Running Installcheck remotely
Previous Message Fabien COELHO 2018-03-24 07:15:08 Re: Re: csv format for psql