On Thu, Jan 30, 2014 at 4:52 PM, Andrew Dunstan <and...@dunslane.net> wrote: > > On 01/30/2014 07:21 PM, Merlin Moncure wrote: >> postgres=# select hstore(row(1, array[row(1, array[row(1, >> array[1,2])::z])::y])::x); >> hstore >> >> ---------------------------------------------------------------------------------------------- >> "a"=>1, >> "b"=>"{\"(1,\\\"{\\\"\\\"(1,\\\\\\\\\\\"\\\"{1,2}\\\\\\\\\\\"\\\")\\\"\\\"}\\\")\"}" >> >> here, the output escaping has leaked into the internal array >> structures. istm we should have a json expressing the internal >> structure. > > What has this to do with json at all? It's clearly a failure in the hstore() > function.
yeah -- meant to say 'hstore' there. Also I'm not sure that it's 'wrong'; it's just doing what it always did. That brings up another point: are there any interesting cases of compatibility breakage? I'm inclined not to care about this particular case though... >> array[row(1, array[row(1, array[1,2])::z])::y])::x)::jsonb::hstore); >> ERROR: malformed array literal: "{{"a"=>1, "b"=>{{"a"=>1, "b"=>{1, >> 2}}}}}" >> >> yikes. The situation as I read it is that (notwithstanding my comments >> upthread) there is no clean way to slide rowtypes to/from hstore and >> jsonb while preserving structure. IMO, the above query should work >> and the populate function record above should return the internally >> structured row object, not the text escaped version. > > > > And this is a failure in populate_record(). > > I think we possibly need to say that handling of nested composites and > arrays is an area that needs further work. OTOH, the refusal of > json_populate_record() and json_populate_recordset() to handle these in 9.3 > has not generated a flood of complaints, so I don't think it's a tragedy, > just a limitation, which should be documented if it's not already. (And of > course hstore hasn't handled nested anything before now.) > > Meanwhile, maybe Teodor can fix the two hstore bugs shown here. While not a "flood", there certainly have been complaints. See http://postgresql.1045698.n5.nabble.com/Best-way-to-populate-nested-composite-type-from-JSON-td5770566.html http://osdir.com/ml/postgresql-pgsql-general/2014-01/msg00205.html But, if we had to drop this in the interests of time I'd rather see the behavior cauterized off so that it errored out 'not supported' (as json_populate does) that attempt to implement the wrong behavior. merlin -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers