Re: Why does to_json take "anyelement" rather than "any"?

Поиск
Список
Период
Сортировка
От Mohamed Wael Khobalatte
Тема Re: Why does to_json take "anyelement" rather than "any"?
Дата
Msg-id CABZeWdwoR9UGJuLEMg7HxfboYUH_MX+yWq6e6DicW+WCKj7bpg@mail.gmail.com
обсуждение исходный текст
Ответ на Why does to_json take "anyelement" rather than "any"?  (Nikhil Benesch <nikhil.benesch@gmail.com>)
Ответы Re: Why does to_json take "anyelement" rather than "any"?
Список pgsql-hackers


On Tue, Nov 3, 2020 at 11:54 AM Nikhil Benesch <nikhil.benesch@gmail.com> wrote:
to_json is declared as taking "anyelement" as input, which means
you can't pass it something of unknown type:

     postgres=# SELECT to_json('foo');
     ERROR:  could not determine polymorphic type because input has type unknown

But this works fine with the very similar json_build_array function:

     postgres=# SELECT json_build_array('foo');
      json_build_array
     ------------------
      ["foo"]
     (1 row)

The difference is that json_build_array takes type "any" as input, while
to_json takes "anyelement" as input.

Is there some reason to_json couldn't be switched to take "any" as input?
Hacking this together seems to mostly just work:

     postgres=# CREATE FUNCTION my_to_json ("any") RETURNS json LANGUAGE 'internal' AS 'to_json';
     postgres=# SELECT my_to_json('foo');
      my_to_json
     ------------
      "foo"
     (1 row)

Is there something I'm missing?

Nikhil


Hm, good question. I am also curious as to why this happens. `json_build_array` ends up casting unknowns to text (from reading the code), which seems like a reasonable (although not completely tight) assumption. Not sure why `to_json` can't just do the same. You can always cast to text yourself, of course, but I am not familiar with the type hierarchy enough to tell why `to_json` can't deduce that as text whereas the other function can. 

В списке pgsql-hackers по дате отправления:

Предыдущее
От: David Rowley
Дата:
Сообщение: Re: Hybrid Hash/Nested Loop joins and caching results from subplans
Следующее
От: Thomas Munro
Дата:
Сообщение: Re: [Patch] Optimize dropping of relation buffers using dlist