Re: How to assemble all fields of (any) view into a string? - Mailing list pgsql-general

From Adrian Klaver
Subject Re: How to assemble all fields of (any) view into a string?
Date
Msg-id cab5feae-5cf3-6384-1451-42daeb2040ba@aklaver.com
Whole thread Raw
In response to Re: How to assemble all fields of (any) view into a string?  (Ken Tanzer <ken.tanzer@gmail.com>)
Responses Re: How to assemble all fields of (any) view into a string?
List pgsql-general
On 09/07/2016 03:32 PM, Ken Tanzer wrote:
>
>
> On Wed, Sep 7, 2016 at 3:18 PM, Adrian Klaver <adrian.klaver@aklaver.com
> <mailto:adrian.klaver@aklaver.com>> wrote:
>
>     On 09/07/2016 01:36 PM, Ken Tanzer wrote:
>
>
>
>         On Wed, Sep 7, 2016 at 1:22 PM, Adrian Klaver
>         <adrian.klaver@aklaver.com <mailto:adrian.klaver@aklaver.com>
>         <mailto:adrian.klaver@aklaver.com
>         <mailto:adrian.klaver@aklaver.com>>> wrote:
>
>             On 09/07/2016 01:15 PM, Ken Tanzer wrote:
>
>                 Hi.  Using version 9.2.  I'm trying to create a function
>         that
>                 will take
>                 a record from any view and assemble it into a string,
>         for export to
>                 another system.  For example, this view:
>
>                     \d ebh_gain
>
>                             View "public.ebh_gain"
>                       Column       |     Type      | Modifiers
>                 -------------------+---------------+-----------
>                  reporting_unit_id | character(3)  |
>                  case_id           | character(10) |
>                  event_date        | character(8)  |
>                  ids_score         | character(1)  |
>                  eds_score         | character(1)  |
>                  sds_score         | character(1)  |
>                  kc_auth_number    | integer       |
>                  king_county_id    | integer       |
>
>                 would get converted into a string with all the fields
>         concatenated
>                 together, and space-padded to their full lengths.
>
>
>             I think an example is needed. I was thinking you wanted the
>         field
>             values transformed, but the below seems to indicate
>         something different.
>
>         No transformation is needed, except for padding the fields out
>         to their
>         maximum lengths.  So for example with these values
>
>         ('AA','1243','20160801','2','1','1',37,24)
>
>         I need a string created that looks like this:
>
>         'AA 1243      201608012113724'
>
>         I have a whole bunch of views that I need to do this for, and am
>         hoping
>         to avoid coding something specific for each one.
>
>
>     I can do it relatively easy in plpythonu:
>
>     production=# \d str_test
>                Table "history.str_test"
>           Column       |     Type      | Modifiers
>     -------------------+---------------+-----------
>      reporting_unit_id | character(3)  |
>      case_id           | character(10) |
>      event_date        | character(8)  |
>
>     production=# insert into str_test values ('1', '1234', '09/07/16');
>     INSERT 0 1
>
>
>     DO
>     $$
>     rs =  plpy.execute("SELECT * FROM str_test", 1)
>     cols = rs.colnames()
>     plpy.notice(rs.colnames())
>     str_out = ""
>     for col in cols:
>         str_out += str(rs[0][col])
>     plpy.notice(str_out)
>     $$ LANGUAGE plpythonu;
>
>     NOTICE:  ['reporting_unit_id', 'case_id', 'event_date']
>     CONTEXT:  PL/Python anonymous code block
>     NOTICE:  1  1234      09/07/16
>     CONTEXT:  PL/Python anonymous code block
>     DO
>
> Yeah, that and a trip to the information schema to pad out the fields
> would get me the string I need.  But I was hoping to be able to do this

Well the above has the padding already there, though that assumes
char(x) fields.

> without having the function select the individual record.  Ideally:
>
> SELECT my_cat(ebh_gain) FROM ebh_gain;

So do you want one record to be converted at a time or many?

>
> or, at least somewhat more realistically:
>
> SELECT my_cat(ebh_gain,'ebh_gain') FROM ebh_gain;
>
> I know TCL and probably Python and others can work with a record as a
> trigger function.  But TCL doesn't seem to accept a record as an
> argument.  Can any of the other languages that could also accomplish
> this function? Or some other way? Thanks.
>
>
>


--
Adrian Klaver
adrian.klaver@aklaver.com


pgsql-general by date:

Previous
From: Tom Lane
Date:
Subject: Re: How to assemble all fields of (any) view into a string?
Next
From: Jim Nasby
Date:
Subject: Re: Postgres UPGRADE from 9.2 to 9.4