On Tue, Sep 7, 2021 at 11:27 AM Денис Романенко <deromane...@gmail.com> wrote:
>
> If we create a column name longer than 64 bytes, it will be truncated in 
> PostgreSQL to max (NAMEDATALEN) length.
>
> For example: 
> "VeryLongNameVeryLongNameVeryLongNameVeryLongNameVeryLongNameVeryLongName" 
> will be truncated in database to 
> "VeryLongNameVeryLongNameVeryLongNameVeryLongNameVeryLongNameVer"
>
> But in the codebase we could work with full column name - SQL functions like 
> INSERT/UPDATE work with long names without problem, automatically searches 
> for suitable column (thank you for it).
>
> But if we try to update it with "json_populate_recordset" using full name, it 
> will not just ignore column with long name - data in that record will be 
> nulled.
>
> How to reproduce:
> 1. create table 
> wow("VeryLongNameVeryLongNameVeryLongNameVeryLongNameVeryLongNameVeryLongName"
>  text);
> 2. select * from 
> json_populate_recordset(null::wow,'[{"VeryLongNameVeryLongNameVeryLongNameVeryLongNameVeryLongNameVeryLongName":
>  "haha"}]');
> 3. "VeryLongNameVeryLongNameVeryLongNameVeryLongNameVeryLongNameVer" becomes 
> null.

Yes, that's because json identifiers have different rules from
relation identifiers.  Your only option here is to use the real /
truncated identifier.  Also I don't think it would be a good thing to
add a way to truncate identifiers in json objects using the
NAMEDATALEN limit, as this could easily lead to invalid json object
that should be valid.


Reply via email to