Thread: Tabbed data in tab-separated output

Tabbed data in tab-separated output

From
felix@crowfix.com
Date:
I have a table which has a few VARCHAR columns whose first character
is a tab.  If I run pg_dump on this table, it outputs data like this:

    43158  \t555-1212    3

where the two embedded white spaces are actually tabs.

If I use psql to execute SQL to dump parts of the table, like this:

    psql -qtA -f '\t' -U xyzzy xyzzy -c 'select ... >/tmp/xxx

I get this:

    43158        310-319-1333, x1070    3

where that initial embeded white space represents two tabs.  When I
use psql to restore this data, it thinks the 2nd column is empty and
complains that the third column is the wrong type.

pg_dump apparently is smart enough to print embedded tabs as escaped
chars, but not psql.  Is there a fix for this?  I thought of reverting
to standard output, without the -t option, and analyzing the first two
lines to tell exactly how many spaces are assigned to each column, but
that gives me the shudders.

--
            ... _._. ._ ._. . _._. ._. ___ .__ ._. . .__. ._ .. ._.
     Felix Finch: scarecrow repairman & rocket surgeon / felix@crowfix.com
  GPG = E987 4493 C860 246C 3B1E  6477 7838 76E9 182E 8151 ITAR license #4933
I've found a solution to Fermat's Last Theorem but I see I've run out of room o

Re: Tabbed data in tab-separated output

From
mike
Date:
How are you attempting to restore the table after using psql?  Psql
insert statements? Pgdump? COPY FROM?

Mike
On Wed, 2007-01-03 at 17:59 -0800, felix@crowfix.com wrote:
> I have a table which has a few VARCHAR columns whose first character
> is a tab.  If I run pg_dump on this table, it outputs data like this:
>
>     43158  \t555-1212    3
>
> where the two embedded white spaces are actually tabs.
>
> If I use psql to execute SQL to dump parts of the table, like this:
>
>     psql -qtA -f '\t' -U xyzzy xyzzy -c 'select ... >/tmp/xxx
>
> I get this:
>
>     43158        310-319-1333, x1070    3
>
> where that initial embeded white space represents two tabs.  When I
> use psql to restore this data, it thinks the 2nd column is empty and
> complains that the third column is the wrong type.
>
> pg_dump apparently is smart enough to print embedded tabs as escaped
> chars, but not psql.  Is there a fix for this?  I thought of reverting
> to standard output, without the -t option, and analyzing the first two
> lines to tell exactly how many spaces are assigned to each column, but
> that gives me the shudders.
>


Re: Tabbed data in tab-separated output

From
felix@crowfix.com
Date:
On Wed, Jan 03, 2007 at 10:31:46PM -0600, mike wrote:
> How are you attempting to restore the table after using psql?  Psql
> insert statements? Pgdump? COPY FROM?

Actually, right now I feed the dump file into a program which mangles
it and analyzes it in various ways.  It will eventually be fed into
psql for restoration elsewhere.  The problem isn't restoring it.  It's
not knowing how to tell which tabs are field separators and which are
part of the data.

> On Wed, 2007-01-03 at 17:59 -0800, felix@crowfix.com wrote:
> > pg_dump apparently is smart enough to print embedded tabs as escaped
> > chars, but not psql.  Is there a fix for this?  I thought of reverting
> > to standard output, without the -t option, and analyzing the first two
> > lines to tell exactly how many spaces are assigned to each column, but
> > that gives me the shudders.

--
            ... _._. ._ ._. . _._. ._. ___ .__ ._. . .__. ._ .. ._.
     Felix Finch: scarecrow repairman & rocket surgeon / felix@crowfix.com
  GPG = E987 4493 C860 246C 3B1E  6477 7838 76E9 182E 8151 ITAR license #4933
I've found a solution to Fermat's Last Theorem but I see I've run out of room o

Re: Tabbed data in tab-separated output

From
Martijn van Oosterhout
Date:
On Thu, Jan 04, 2007 at 12:16:17AM -0800, felix@crowfix.com wrote:
> On Wed, Jan 03, 2007 at 10:31:46PM -0600, mike wrote:
> > How are you attempting to restore the table after using psql?  Psql
> > insert statements? Pgdump? COPY FROM?
>
> Actually, right now I feed the dump file into a program which mangles
> it and analyzes it in various ways.  It will eventually be fed into
> psql for restoration elsewhere.  The problem isn't restoring it.  It's
> not knowing how to tell which tabs are field separators and which are
> part of the data.

psql is prety dumb that way, being designed for people not programs. I
think recent versions will escape the tab.

I suggest you use \copy instead, which on recent versions will allow you
to copy from a query. Alternativly, use a delimiter that doesn't exist
in your data.

Have a nice day,
--
Martijn van Oosterhout   <kleptog@svana.org>   http://svana.org/kleptog/
> From each according to his ability. To each according to his ability to litigate.

Attachment