Search code examples
postgresqlpsql

psql expanded display - avoid dashes


When I have a very wide column (like a json document) and I am using expanded display to make the contents at least partly readable, I am still seeing extremely ugly record separators, that seems to want to be as wide as the widest column, like so:

Is there a way to avoid the "Sea of Dashes"?

-[ RECORD 1 ]--+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

id | 18

description | {json data xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}

parameter | {json data xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}

name | Foo

-[ RECORD 2 ]--+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

id | 19

description | {}

parameter | {json data xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}

name | CustomerRequestEventType


Solution

  • to avoid sea of dashes, use \pset format unaligned, eg:

    t=# \x
    Expanded display is on.
    t=# \pset format unaligned
    Output format is unaligned.
    t=# with ts as (select generate_series('2010-01-01'::timestamp,'2010-01-10'::timestamp,'1 day'::interval) s) select array_agg(s) from ts;                 array_agg|{"2010-01-01 00:00:00","2010-01-02 00:00:00","2010-01-03 00:00:00","2010-01-04 00:00:00","2010-01-05 00:00:00","2010-01-06 00:00:00","2010-01-07 00:00:00","2010-01-08 00:00:00","2010-01-09 00:00:00","2010-01-10 00:00:00"}
    Time: 0.250 ms
    

    As you can see, no dashes, but the long string is still wrapped over lines by the length of the window (or not wrapped at all). In case of unformatted string this is the solution, but you mentioned json - it can be devided in a pretty way. To do so instead of using unaligned format in psql, consume jsonb_pretty function or pretty flag of other functions, eg (with array_to_json(..., true):

    t=# with ts as (select generate_series('2010-01-01'::timestamp,'2010-01-31'::timestamp,'1 day'::interval) s) select array_to_json(array_agg(s),true) from ts;
    array_to_json|["2010-01-01T00:00:00",
     "2010-01-02T00:00:00",
     "2010-01-03T00:00:00",
     "2010-01-04T00:00:00",
     "2010-01-05T00:00:00",
     "2010-01-06T00:00:00",
     "2010-01-07T00:00:00",
     "2010-01-08T00:00:00",
     "2010-01-09T00:00:00",
     "2010-01-10T00:00:00",
     "2010-01-11T00:00:00",
     "2010-01-12T00:00:00",
     "2010-01-13T00:00:00",
     "2010-01-14T00:00:00",
     "2010-01-15T00:00:00",
     "2010-01-16T00:00:00",
     "2010-01-17T00:00:00",
     "2010-01-18T00:00:00",
     "2010-01-19T00:00:00",
     "2010-01-20T00:00:00",
     "2010-01-21T00:00:00",
     "2010-01-22T00:00:00",
     "2010-01-23T00:00:00",
     "2010-01-24T00:00:00",
     "2010-01-25T00:00:00",
     "2010-01-26T00:00:00",
     "2010-01-27T00:00:00",
     "2010-01-28T00:00:00",
     "2010-01-29T00:00:00",
     "2010-01-30T00:00:00",
     "2010-01-31T00:00:00"]
    Time: 0.291 ms
    

    Note I still use unaligned format to avoid "+" though...