Re: json_to_record Example

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: yshaladi(at)denodo(dot)com, pgsql-docs(at)lists(dot)postgresql(dot)org
Cc: 007reader(at)gmail(dot)com
Subject: Re: json_to_record Example
Date: 2018-05-26 15:03:23
Message-ID: 20180526150323.GB28324@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-docs

On Mon, May 7, 2018 at 06:14:02PM +0000, PG Doc comments form wrote:
> The following documentation comment has been logged on the website:
>
> Page: https://www.postgresql.org/docs/10/static/functions-json.html
> Description:
>
> Hi team,
>
> I had the following issue when going through your
> https://www.postgresql.org/docs/current/static/functions-json.html docs.
>
> Looking at the json_to_record example it took me quite a while that it is
> not possible to put the json_to_record function right after the the from
> clause but instead I would need to put the tables name in front, then use
> the json_to_record function. Then put the column definitions behind it and
> in the SELECT clause I need to query the columns using the alias. As you use
> a * in your examples, I assumed that json_to_record returns all values found
> in the json argument of that function.
>
> As an idea I would suggest to provide a sample json which contains key-value
> pairs as well as arrays and use this for the whole examples as someone would
> rather not query a json written by hand.
>
> Thank you very much and keep up the good work! I hope you understand and
> like my suggestion!

I think you have a good point. I was confused too and it took me a
while to get it straight. The simplest example I could create is:

CREATE TABLE test(x INT, y JSONB);

INSERT INTO test VALUES (DEFAULT, '{"a":2,"b":[1,2,3],"c":[1,2,3],"e":"bar","r": {"a": 123, "b": "a b c"}}');

SELECT x.* FROM test, jsonb_to_record(y) AS x(a int, b text, c int[], d text);
a | b | c | d
---+-----------+---------+---
2 | [1, 2, 3] | {1,2,3} |

While we could add this to the docs, I prefer some text that explains
how to use this, and perhaps why.

The benefits of jsonb_to_record and friends compared to typical ->
JSON[B] indexing was outlined in this thread, and I am CC'ing the author
in this thread:

https://www.postgresql.org/message-id/flat/C3E7372D-153D-4276-8DB5-0D232ECD91E4%40gmail.com

I have developed the attached doc patch which explains how to use
jsonb_to_record using a lateral reference (though the LATERAL keyword is
optional for function calls in Postgres), and a suggestion of the
performance benefits of using it. I feel text is really required to
accomplish all this, rather than an example.

Comments?

--
Bruce Momjian <bruce(at)momjian(dot)us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ As you are, so once was I. As I am, so you will be. +
+ Ancient Roman grave inscription +

Attachment Content-Type Size
record.diff text/x-diff 2.1 KB

In response to

Responses

Browse pgsql-docs by date

  From Date Subject
Next Message Bruce Momjian 2018-05-26 16:47:51 Re: \i and \ir separated by \if now...
Previous Message Magnus Hagander 2018-05-25 12:02:46 Re: Incorrect IPC advice for OpenBSD