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 12:41:21
Message-ID: CAFj8pRCk93uNmwdLjreobyzee5DFTafxYPDY91rKiEBFbT+OLg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

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

>
> Hello Pavel,
>
> 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
>>>
>>
> Indeed, it does not. Alas, "format" is not strictly about format but more
> about string escaping.
>
> (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.
>>>
>>
> I checked, and the behavior is intrinsically strange.
>
> Your patch shows an empty '' fieldsep at startup, which is debatable
> because it is not its actual value.
>

it is correct. Default format is aligned, that doesn't use fieldsep.

>
> psql> \pset # fieldsep '' -- doubtful
>
> ISTM that at the minimum it should show a special "<format-default>" or
> whatever value, which creates some kind of exception because this special
> value cannot be set and special values are a bad thing.
>
> When a format is set, a current default fielsep is shown.
>
> psql> \pset format unaligned
> psql> \pset # fieldsep '|' -- new default shown
> psql> SELECT 1 AS one, 2 AS two;
> one|two
> 1|2
>
> psql> \pset format csv
> psql> \pset # fieldsep ',' -- new default shown
>
> psql> SELECT 1 AS one, 2 AS two;
> one,two
> 1,2
>
> However, if fieldsep is set once, the behaviors changes indefinitely:
>
> psql> \pset fieldsep '|'
> psql> \pset format unaligned
> # unaligned with '|'
>
> psql> \pset format csv
> # csv with '|'
>
>
There should be similar mechanism like fieldsep_zero, that reset settings.
Some like fieldsep_default.

> That is once the fieldsep has been used, you are back to the v4 behavior
> that you are disagreeing with in the first place.
>
> The patch creates an incomplete state automaton which some unreachable
> states, because once a value is set there is no way to switch back to the
> previous "use default" behavior.
>

It is not implemented, but it is small problem

>
> Also, if I do "\pset fielsep ''" then the \pset output does not allow to
> distinguish between the unset state and set to empty state.
>

This is question - how to fieldsep be related to current format. Aligned
format doesn't use fieldsep.

The alternative can be words "not used" -- and then you can see difference
between "" and other. But if you see the code, the empty string is used
like info about empty fieldsep now.

> I would not expect a committer to accept such a strange no-possible-return
> to previous state because of a hidden state (whether fieldsep has been set
> or not in the past) behavior.
>

This design is very similar to already implemented fieldsep_zero - look to
code. It is nothing new.

>
> So I do not think that this proposed version is really satisfactory.
>

So I can do better?

1. use special default string for formats that doesn't field sep - like
"not used" or some
2. I can implemet the option fieldsep_default - very similary to
fieldsep_zero to reset fieldsep to default state.

please, check updated patch

Regards

Pavel

>
> --
> Fabien.
>

Attachment Content-Type Size
default_format_fieldsep-5.patch text/x-patch 26.1 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Amit Kapila 2018-03-24 13:40:30 Re: [HACKERS] why not parallel seq scan for slow functions
Previous Message Simon Riggs 2018-03-24 12:37:21 Re: Changing WAL Header to reduce contention during ReserveXLogInsertLocation()