Thread: proposal - support tsv output format for psql

proposal - support tsv output format for psql

From
Pavel Stehule
Date:
Hi

I am playing with clipboard on Linux, and I found a way, how to redirect psql output to clipboard via wl-copy or xclip and then to Libre Office. Now it looks so best format is tsv

select * from pg_database \g (format=tsv) | wl-paste -t application/x-libreoffice-tsvc

Implementation of tsv format should not be hard.

What do you think about this?

Regards

Pavel

Re: proposal - support tsv output format for psql

From
Bruce Momjian
Date:
On Wed, Dec 23, 2020 at 07:18:24AM +0100, Pavel Stehule wrote:
> Hi
> 
> I am playing with clipboard on Linux, and I found a way, how to redirect psql
> output to clipboard via wl-copy or xclip and then to Libre Office. Now it looks
> so best format is tsv
> 
> select * from pg_database \g (format=tsv) | wl-paste -t application/
> x-libreoffice-tsvc
> 
> Implementation of tsv format should not be hard.
> 
> What do you think about this?

How would you handle tabs in the data?

-- 
  Bruce Momjian  <bruce@momjian.us>        https://momjian.us
  EnterpriseDB                             https://enterprisedb.com

  The usefulness of a cup is in its emptiness, Bruce Lee




Re: proposal - support tsv output format for psql

From
Pavel Stehule
Date:


st 23. 12. 2020 v 15:21 odesílatel Bruce Momjian <bruce@momjian.us> napsal:
On Wed, Dec 23, 2020 at 07:18:24AM +0100, Pavel Stehule wrote:
> Hi
>
> I am playing with clipboard on Linux, and I found a way, how to redirect psql
> output to clipboard via wl-copy or xclip and then to Libre Office. Now it looks
> so best format is tsv
>
> select * from pg_database \g (format=tsv) | wl-paste -t application/
> x-libreoffice-tsvc
>
> Implementation of tsv format should not be hard.
>
> What do you think about this?

How would you handle tabs in the data?

This is a hard question.  tabs in data in tsv are handled by backslash escaping.

Unfortunately, after some check, the LibreOffice Calc has its own format. It is not true tsv. Looks much more like CSV with a tabelator as a separator. And the current implementation is buggy. It is working well only when data doesn't hold some special chars :-/. The special chars are deleted when data is exported from LO, and when data are imported with some special chars, then the imported line can be deformated. Looks so LO should be fixed first.

This command is working well - comma, quotes, or double quotes are working

select * from foo  \g (format=csv tuples_only=on csv_fieldsep='\t') | wl-copy -t application/x-libreoffice-tsvc

But \n or \t does problems due bug in LO side

After this second check, I think the new format is not necessary, because tsv in LO is not tsv, but it is cracked csv

Pavel






--
  Bruce Momjian  <bruce@momjian.us>        https://momjian.us
  EnterpriseDB                             https://enterprisedb.com

  The usefulness of a cup is in its emptiness, Bruce Lee

Re: proposal - support tsv output format for psql

From
Tom Lane
Date:
Bruce Momjian <bruce@momjian.us> writes:
> On Wed, Dec 23, 2020 at 07:18:24AM +0100, Pavel Stehule wrote:
>> Implementation of tsv format should not be hard.
>> What do you think about this?

> How would you handle tabs in the data?

The main problem with csv is the severe lack of standardization
around what to do with corner cases (delimiters in data, empty
fields, etc).  Seems like "tsv" would be even worse.  Is there
an actual standard anywhere?

            regards, tom lane



Re: proposal - support tsv output format for psql

From
Pavel Stehule
Date:


st 23. 12. 2020 v 16:24 odesílatel Tom Lane <tgl@sss.pgh.pa.us> napsal:
Bruce Momjian <bruce@momjian.us> writes:
> On Wed, Dec 23, 2020 at 07:18:24AM +0100, Pavel Stehule wrote:
>> Implementation of tsv format should not be hard.
>> What do you think about this?

> How would you handle tabs in the data?

The main problem with csv is the severe lack of standardization
around what to do with corner cases (delimiters in data, empty
fields, etc).  Seems like "tsv" would be even worse.  Is there
an actual standard anywhere?

Probably not - there are just common conventions.

standard disallows tab chars inside


Regards

Pavel


                        regards, tom lane

Re: proposal - support tsv output format for psql

From
Bruce Momjian
Date:
On Wed, Dec 23, 2020 at 04:39:48PM +0100, Pavel Stehule wrote:
> 
> 
> st 23. 12. 2020 v 16:24 odesílatel Tom Lane <tgl@sss.pgh.pa.us> napsal:
> 
>     Bruce Momjian <bruce@momjian.us> writes:
>     > On Wed, Dec 23, 2020 at 07:18:24AM +0100, Pavel Stehule wrote:
>     >> Implementation of tsv format should not be hard.
>     >> What do you think about this?
> 
>     > How would you handle tabs in the data?
> 
>     The main problem with csv is the severe lack of standardization
>     around what to do with corner cases (delimiters in data, empty
>     fields, etc).  Seems like "tsv" would be even worse.  Is there
>     an actual standard anywhere?
> 
> 
> Probably not - there are just common conventions.
> 
> standard disallows tab chars inside
> 
> https://www.iana.org/assignments/media-types/text/tab-separated-values

Is it too awkward to throw an error if there is a tab?

-- 
  Bruce Momjian  <bruce@momjian.us>        https://momjian.us
  EnterpriseDB                             https://enterprisedb.com

  The usefulness of a cup is in its emptiness, Bruce Lee




Re: proposal - support tsv output format for psql

From
Andrew Dunstan
Date:
On 12/23/20 10:13 AM, Pavel Stehule wrote:
>
>
> After this second check, I think the new format is not necessary,
> because tsv in LO is not tsv, but it is cracked csv
>
>


I agree, I don't think this is a format we need to spent much time on.


If you set the quote to an unlikely character like ^A, the escape
character to '\', and the delimiter to TAB, COPY in CSV mode will give
you something pretty close in many cases. Embedded newlines will still
give you trouble.


cheers


andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com




Re: proposal - support tsv output format for psql

From
Pavel Stehule
Date:


st 23. 12. 2020 v 16:54 odesílatel Bruce Momjian <bruce@momjian.us> napsal:
On Wed, Dec 23, 2020 at 04:39:48PM +0100, Pavel Stehule wrote:
>
>
> st 23. 12. 2020 v 16:24 odesílatel Tom Lane <tgl@sss.pgh.pa.us> napsal:
>
>     Bruce Momjian <bruce@momjian.us> writes:
>     > On Wed, Dec 23, 2020 at 07:18:24AM +0100, Pavel Stehule wrote:
>     >> Implementation of tsv format should not be hard.
>     >> What do you think about this?
>
>     > How would you handle tabs in the data?
>
>     The main problem with csv is the severe lack of standardization
>     around what to do with corner cases (delimiters in data, empty
>     fields, etc).  Seems like "tsv" would be even worse.  Is there
>     an actual standard anywhere?
>
>
> Probably not - there are just common conventions.
>
> standard disallows tab chars inside
>
> https://www.iana.org/assignments/media-types/text/tab-separated-values

Is it too awkward to throw an error if there is a tab?

This is a question. Maybe more practical can be some form of escaping (in conformance with COPY tsv format) or using CSV rules for special chars (it does LO). But raising an error can be correct too. It is true, so typical data should not contain tabs. For example LO Calc can hold tabs in cell, can export data in cell, but the tabs in cells are not visible, and import data with tabs are broken (and then probably, the data with tabs are not common).


--
  Bruce Momjian  <bruce@momjian.us>        https://momjian.us
  EnterpriseDB                             https://enterprisedb.com

  The usefulness of a cup is in its emptiness, Bruce Lee

Re: proposal - support tsv output format for psql

From
Andreas Karlsson
Date:
On 12/23/20 7:18 AM, Pavel Stehule wrote:> I am playing with clipboard 
on Linux, and I found a way, how to redirect
> psql output to clipboard via wl-copy or xclip and then to Libre Office. 
> Now it looks so best format is tsv
> 
> select * from pg_database \g (format=tsv) | wl-paste -t 
> application/x-libreoffice-tsvc
> 
> Implementation of tsv format should not be hard.
> 
> What do you think about this?

I wonder if it would not make more sense to add support for text/csv to 
LibreOffice's clipboard code rather than implementing tsv in PostgreSQL. 
The tsv format is even less clearly defined than the csv format which at 
least has one RFC even if many homebrew their own versions of it.

Andreas




Re: proposal - support tsv output format for psql

From
Pavel Stehule
Date:


st 23. 12. 2020 v 17:38 odesílatel Andreas Karlsson <andreas@proxel.se> napsal:
On 12/23/20 7:18 AM, Pavel Stehule wrote:> I am playing with clipboard
on Linux, and I found a way, how to redirect
> psql output to clipboard via wl-copy or xclip and then to Libre Office.
> Now it looks so best format is tsv
>
> select * from pg_database \g (format=tsv) | wl-paste -t
> application/x-libreoffice-tsvc
>
> Implementation of tsv format should not be hard.
>
> What do you think about this?

I wonder if it would not make more sense to add support for text/csv to
LibreOffice's clipboard code rather than implementing tsv in PostgreSQL.
The tsv format is even less clearly defined than the csv format which at
least has one RFC even if many homebrew their own versions of it.

yes, but it is out of my competitions. But after some research, I don't think this support is necessary, because the tsv implemented by LO is much more like CSV with \t as delimiter.

Regards

Pavel


 

Andreas