On 07/13/2015 05:41 AM, Shulgin, Oleksandr wrote:
On Mon, Jul 13, 2015 at 9:44 AM, Pavel Stehule <pavel.steh...@gmail.com <mailto:pavel.steh...@gmail.com>> wrote:


        To reiterate: for my problem, that is escaping numerics that
        can potentially overflow[1] under ECMAScript standard, I want
        to be able to override the code that outputs the numeric
        converted to string.  There is no way in current
        implementation to do that *at all*, short of copying all the
        code involved in producing JSON output and changing it at
        certain points.  One could try re-parsing JSON instead, but
        that doesn't actually solve the issue, because type
        information is lost forever at that point.

        The whitespace unification was a mere side-effect of the
        original effort on this patch.


    The dynamic type change is some what I would not to do in
    database, really :)

    If you afraid about overflow, then convert numeric to string
    immediately - in this case, the client have to support both
    variant - so immediate cast should not be a problem.


Yeah, but how would you do that in context of a logical replication decoding plugin? I've tried a number of tricks for that, including, but not limited to registering phony types to wrap numeric type and replacing the OID of numeric with this custom type OID in TupleDesc, but then again one has to register that as known record type, etc.

    Anyway this check on max number should be implemented in our
    JSON(b) out functions (as warning?).


Not really, since this is a problem of ECMAScript standard, not JSON spec. For example, Python module for handling JSON doesn't suffer from this overflow problem,

The thing is, we cannot know which clients are going to consume the stream of decoded events, and if it's some implementation of JavaScript, it can suffer silent data corruption if we don't guard against that in the logical decoding plugin.

Hope that makes it clear. :-)



Yes, but I think the plugin is the right place to do it. What is more, this won't actually prevent you completely from producing non-ECMAScript compliant JSON, since json or jsonb values containing offending numerics won't be caught, AIUI. But a fairly simple to write function that reparsed and fixed the JSON inside the decoder would work.

cheers

andrew






--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to