• Tom Lane's avatar
    Fix conversion of JSON strings to JSON output columns in json_to_record(). · 6f34fcbb
    Tom Lane authored
    json_to_record(), when an output column is declared as type json or jsonb,
    should emit the corresponding field of the input JSON object.  But it got
    this slightly wrong when the field is just a string literal: it failed to
    escape the contents of the string.  That typically resulted in syntax
    errors if the string contained any double quotes or backslashes.
    
    jsonb_to_record() handles such cases correctly, but I added corresponding
    test cases for it too, to prevent future backsliding.
    
    Improve the documentation, as it provided only a very hand-wavy
    description of the conversion rules used by these functions.
    
    Per bug report from Robert Vollmert.  Back-patch to v10 where the
    error was introduced (by commit cf35346e).
    
    Note that PG 9.4 - 9.6 also get this case wrong, but differently so:
    they feed the de-escaped contents of the string literal to json[b]_in.
    That behavior is less obviously wrong, so possibly it's being depended on
    in the field, so I won't risk trying to make the older branches behave
    like the newer ones.
    
    Discussion: https://postgr.es/m/D6921B37-BD8E-4664-8D5F-DB3525765DCD@vllmrt.net
    6f34fcbb
func.sgml 811 KB