From: | VENKTESH GUTTEDAR <venkteshguttedar(at)gmail(dot)com> |
---|---|
To: | Michael Paquier <michael(dot)paquier(at)gmail(dot)com> |
Cc: | PostgreSQL mailing lists <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Appending new data to existing field of Json data type |
Date: | 2014-10-29 08:06:05 |
Message-ID: | CA+iwz4kJW+yHUWkkc5h0UyH32+PzU79dJvawxXv0TGzOcYGBvQ@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Ya agreed thats not legal JSON, that was typing mistake sorry for that,
let me make you clear what i need exactly,
I have table named (exampleTable) with json field as (example_list), and
when i say
SELECT * FROM exampleTable;
id |
example_list
---+----------------------------------------------
2 | {"abc":[ { "a":"b","c":"d" } ] }
And this data i am inserting through DJango view by writing the following
statement
test = ExampleTable(id = 2, example_list = {"abc" : [ { "a":"b","c":"d" } ]
})
test.save()
now i want to append { "e":"f", "g":"h" } to example_list by specifying the
id.
and after appending the data should be stored in the following way :
After appending,
for example if i say :
SELECT * FROM exampleTable;
i should get this.
id |
example_list
---+--------------------------------------------------------
2 | {"abc":[ { "a":"b","c":"d" }, { "e":"f", "g":"h" } ] }
Hope your clear now.
So now Guide me to append it through Python Djnago View. or through raw sql
query.
On Wed, Oct 29, 2014 at 12:45 PM, Michael Paquier <michael(dot)paquier(at)gmail(dot)com
> wrote:
> On Wed, Oct 29, 2014 at 3:42 PM, VENKTESH GUTTEDAR
> <venkteshguttedar(at)gmail(dot)com> wrote:
> > As i am new to postgresql, i am learning through experimenting
> things.
> >
> > i have a table with json data type field, so there is some data for
> > example :
> >
> > { [ { a:b, b:c } ] }
> >
> > and now if i append data then it should be like :
> >
> > { [ { a:b, b:c }, { e:f, g:h } ] }
> That's not legal JSON, no? A key needs to be appended for the array
> defined, like that:
> =# select '{"f1":[{ "a":"b", "b":"c" }]}'::json;
> json
> -------------------------------
> {"f1":[{ "a":"b", "b":"c" }]}
> (1 row)
>
> > Is there any way to achieve this. please help.!
> > I have Postgresql 9.3.5.
> Er, you can use the concatenate operator || to achieve that:
> =# select '{"a":"b","b":"c"}'||','||'{"e":"f","f":"g"}'::json;
> ?column?
> -------------------------------------
> {"a":"b","b":"c"},{"e":"f","f":"g"}
> (1 row)
>
> You may prefer actually something that really merges everything, among
> many methods here is one (not the fastest one, now on the top of my
> mind):
> =# with union_json as (
> select * from json_each('{"a":"b","b":"c"}'::json)
> union all
> select * from json_each('{"d":"e","e":"f"}'::json))
> select '{'||string_agg(to_json(key)||':'||value, ',')||'}'
> from union_json;
> ?column?
> -----------------------------------
> {"a":"b","b":"c","d":"e","e":"f"}
> (1 row)
>
> Regards,
> --
> Michael
>
--
Regards :
Venktesh Guttedar.
From | Date | Subject | |
---|---|---|---|
Next Message | Brilliantov Kirill Vladimirovich | 2014-10-29 08:17:48 | undefined struct 'pg_conn' on Windows7 |
Previous Message | Michael Paquier | 2014-10-29 07:15:21 | Re: Appending new data to existing field of Json data type |