Search Postgresql Archives

need of a lateral join with record set returning function?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I'm trying to understand what happens here:

I have  atype product defined:
=# \d product
        Composite type "public.product"
     Column      |       Type       | Modifiers
-----------------+------------------+-----------
 price_advantage | double precision |
 type            | integer          |
 gender          | text             |
 status          | integer          |
 brand           | integer          |
 price           | double precision |
 id              | integer          |
 algorithm       | text             |


which I'm trying to use in this query calling json_populate_recordset

=# select q.* from (select json_populate_recordset(null::product, event->'products') from events where timestamp>'2014-02-02' and type='gallery' limit 1) q;
   json_populate_recordset
-----------------------------
 (68,121,F,3,493,17,88753,)

This query illustrates what I want to achieve:

=# select f.* from json_populate_recordset(null::product,'[{"id":80723,"type":41,"brand":41,"price":65.0,"status":3,"price_advantage":1.0,"gender":"M", "algorithm":"v1"}]'::json) f;
 price_advantage | type | gender | status | brand | price |  id   | algorithm
-----------------+------+--------+--------+-------+-------+-------+-----------
               1 |   41 | M      |      3 |    41 |    65 | 80723 | v1

I see the difference in the query ( the second working directly on the return value of the function), but in the first example, isn"t the inner returning a set, from which the outer query can do a select *?
There is a difference with the second query which I've not  identified. Anyone caring to enlighten me?

Thanks

Raph

PS: to get it working, I have to write the query as this:

=# select q.* from (select * from events where timestamp>'2014-02-02' and type='gallery') q1 CROSS JOIN LATERAL json_populate_recordset(null::product, event->'products') q limit 1;
 price_advantage | type | gender | status | brand | price |  id   | algorithm
-----------------+------+--------+--------+-------+-------+-------+-----------
              68 |  121 | F      |      3 |   493 |    17 | 88753 |

What I'm interested is an explanation of why this is needed.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux