On Wed, Oct 8, 2014 at 4:25 PM, Andrew Dunstan <and...@dunslane.net> wrote:

>
> On 10/08/2014 04:38 AM, Paweł Cesar Sanjuan Szklarz wrote:
>
>> Hello.
>>
>> I am interested in the json type on postgresql. I would like to implement
>> additional operations on the json structure that may extract/insert table
>> like information from the json tree structure.
>> I have a implementation on javascript that shows this type of operations.
>> You can see examples in this page
>> https://github.com/paweld2/eelnss/wiki
>>
>> Following the examples in the previous page, it may by possible to
>> implement a function similar to json_populate_record to extract multiple
>> records from a single json value, for example:
>> select * from json_populate_records_with_clen(null::myrowtype_users,
>> 'app.users.{:uID}.(email,data.name <http://data.name>,isActive)', '...
>> nested json value ...')
>>
>> may return
>> uID  |  email                          | name              | isActive
>> ------------------------------------------------------------
>> --------------
>> "u1" | "ad...@pmsoft.eu <mailto:ad...@pmsoft.eu>"    | "administrator" |
>> true
>> "u2" | "nor...@pmsoft.eu <mailto:nor...@pmsoft.eu>"   | "user"
>>      | true
>> "u3" | "testu...@pmsoft.eu <mailto:testu...@pmsoft.eu>" | "testUser"
>>     | false
>>
>>
>> Also, assuming that we have a table User as above (uID, email, name,
>> isActive), with context lenses it is very simple to map the table to a json
>> object. I assume that a similar api to table_to_xml,query_to_xml may be
>> provided:
>>
>> table_to_json( Person, 'app.users.{:uID}.(email,data.name <
>> http://data.name>,isActive)');
>> query_to_json( 'select * from Person where ... ',
>> 'app.users.{:uID}.(email,data.name <http://data.name>,isActive)');
>>
>>
>> I don't know the details about the integration of functions/operators to
>> sql queries, but because context lenses maps between tables and tree
>> objects, it may be possible to use a column json value as a separate table
>> in the queries. Assume the table
>> create table Person {
>>   pID  Integer
>>   address Json
>> }
>> then it  may be possible to query:
>> select * from Person as P left join ( select * from
>> json_populate_records_with_clen(null::addressType,
>> 'addres.(street.number, street.local,city.code,city.name <
>> http://city.name>)', P.address);
>>
>> A final api for such functions needs to be defined. If such functions may
>> be usefull, I can try to prepare a implementation in postgres base code.
>>
>>
>>
>
> I don't think we need to import Mongo type notation here. But there is
> probably a good case for some functions like:
>
>    json_table_agg(anyrecord) -> json
>
> which would work like json_agg() but would return an array of arrays
> instead of an array of objects. The caller would be assumed to know which
> field is which in the array. That should take care of both the
> table_to_json and query_to_json suggestions above.
>
> In the other direction, we could have something like:
>
>     json_populate_recordset_from_table(base anyrecord, fields text[],
> jsontable json) -> setof record
>
> where jsontable is an array of arrays of values  and fields is a
> corresponding array of field names.
>
> I'm not sure how mainstream any of this is. Maybe an extension would be
> more appropriate?
>
> cheers
>
> andrew
>
>
Hello.

My personal interest is to send updates to a single json value in the
server. Which is the best way to make a update to a json value in postgres
without a full update of the already stored value??  the -> operator
extract a internal value, but to update the value I don't see any operator.

I was not familiar with the extensions, but it looks like the best way to
start is to create a extension with possible implementations of new
functions. I will do so.

In my project I considered to use mongo, but in my case the core part of
the model match perfectly a relational schema. I have some leaf concepts
that will change frequently, and to avoid migrations I store that
information in a json value. To make changes in such leaf values I would
like to have a "context lenses like api" in the server. I will start with
some toy extension and try to feel if this make sense.

Regards.
Pawel.

Reply via email to