Re: Cast jsonb to numeric, int, float, bool - Mailing list pgsql-hackers

From Aleksander Alekseev
Subject Re: Cast jsonb to numeric, int, float, bool
Date
Msg-id 20180330120552.GB8526@e733.localdomain
Whole thread Raw
In response to Re: Cast jsonb to numeric, int, float, bool  (Robert Haas <robertmhaas@gmail.com>)
List pgsql-hackers
Hello Robert,

> I would like to complain about this patch.  First, I think that it
> would've been a better idea to use functions for this rather than
> operators, because now ::text does something totally unlike what ::int
> does, and that's confusing.

This is not entirely accurate. ::text casts any jsonb to text, e.g:

```
select '{}'::jsonb::text;
 text
------
 {}
(1 row)
```

This is exactly what ::bool and ::numeric casts do. Naturally not every
jsonb value can be represented as boolean or numeric though.

> If we had json_to_WHATEVER for various values of WHATEVER then all of
> the conversions could be spelled similarly; as the commit message
> right points out, the cast can only do one thing.

I believe it's not as convenient for users as having casts. Also this
would be inconsistent with the rest of the system since we already have
int4 -> text, int4 -> bool and various other casts.

> Also, I think the error messages aren't great:
>
> +select '[]'::jsonb::bool;
> +ERROR:  jsonb value must be boolean
>
> In this simple scenario, it's clear enough what has gone wrong, but in
> a more complicated case I suspect people will have a hard time
> figuring out what the source of that error message is.  It seems like
> it would be better to say something about casting or converting in the
> error message, to give users a clue.

I agree. How about "unable to cast jsonb value to %typename%"?

--
Best regards,
Aleksander Alekseev

Attachment

pgsql-hackers by date:

Previous
From: Stephen Frost
Date:
Subject: Re: [PATCH] Verify Checksums during Basebackups
Next
From: Konstantin Knizhnik
Date:
Subject: Re: JIT compiling with LLVM v12.2