pg.ddx.io  pgsql-hackers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Nikita Glukhov <n.gluhov@postgrespro.ru>
Cc: Darafei "Komяpa" Praliaskouski <me@komzpa.net>
Cc: Anastasia Lubennikova <a.lubennikova@postgrespro.ru>
Cc: pgsql-hackers@lists.postgresql.org
Subject: Re: Cast jsonb to numeric, int, float, bool
Date: Mon, 12 Mar 2018 11:00:19 -0400
Message-ID: <29252.1520866819@sss.pgh.pa.us> (raw)
In-Reply-To: <af9cb89f-390e-9dce-74cf-f50371116847@postgrespro.ru>
References: <0154d35a-24ae-f063-5273-9ffcdf1c7f2e@postgrespro.ru>
	<9c013081-5dc0-1b87-a559-a0c2d405727a@postgrespro.ru>
	<151985418868.6915.17223208131889314092.pgcf@coridan.postgresql.org>
	<76b000ae-94d1-cd8f-a2e0-e536096469b0@postgrespro.ru>
	<CAC8Q8t+LDe9XMohGVnhNE3GgFhsVMJ38JvEVNf1DG1tg=mGD5Q@mail.gmail.com>
	<af9cb89f-390e-9dce-74cf-f50371116847@postgrespro.ru>

Nikita Glukhov <n.gluhov@postgrespro.ru> writes:
> On 01.03.2018 11:19, Darafei "Komяpa" Praliaskouski wrote:
>> I would expect some casts to be implicit, so that chaining with other 
>> functions is possible:

> I think that only cast to a numeric type can be made implicit, because 
> it does not lose precision.

I hadn't been following this thread particularly, but I happened to notice
this bit, and I thought I'd better pop up to say No Way.  There will be
*no* implicit casts from json to any numeric type.  We have learned the
hard way that implicit cross-category casts are dangerous.  See the
advice in the CREATE CAST man page:

    It is wise to be conservative about marking casts as implicit. An
    overabundance of implicit casting paths can cause PostgreSQL to choose
    surprising interpretations of commands, or to be unable to resolve
    commands at all because there are multiple possible interpretations. A
    good rule of thumb is to make a cast implicitly invokable only for
    information-preserving transformations between types in the same
    general type category. For example, the cast from int2 to int4 can
    reasonably be implicit, but the cast from float8 to int4 should
    probably be assignment-only. Cross-type-category casts, such as text
    to int4, are best made explicit-only.


			regards, tom lane




view thread (31+ messages)  latest in thread

Message-ID: <29252.1520866819@sss.pgh.pa.us>
Permalink:  ../29252.1520866819@sss.pgh.pa.us/
Also on:    postgresql.org/message-id/29252.1520866819@sss.pgh.pa.us

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-hackers@postgresql.org
  Cc: tgl@sss.pgh.pa.us, n.gluhov@postgrespro.ru, me@komzpa.net, a.lubennikova@postgrespro.ru, pgsql-hackers@lists.postgresql.org
  Subject: Re: Cast jsonb to numeric, int, float, bool
  In-Reply-To: <29252.1520866819@sss.pgh.pa.us>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox