From: | raf <raf(at)raf(dot)org> |
---|---|
To: | pgsql-bugs(at)lists(dot)postgresql(dot)org |
Subject: | Re: ERROR: cannot pass more than 100 arguments to a function |
Date: | 2020-04-08 21:34:13 |
Message-ID: | 20200408213413.kyohygx2ick2zo7f@raf.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
Ján Máté wrote:
> Hi PostgreSQL,
>
> I noticed an interesting problem with the default max. number of
> function arguments, especially related to JSON processing.
>
> I understand that there is a need to limit the max. number of
> arguments for functions, but the current limit (100) is simply too
> restrictive for tables with large number of columns (according to my
> findings it is >250 depending on column types).
>
> A simple example:
>
> - I have a table with 70 columns
>
> - I want to select the most simple JSON output from that table:
>
> SELECT
> json_build_object(
> 'a', "col1",
> 'b', "col2",
> 'c', "col2",
> ...
> )
> FROM "schema"."table";
>
> - with the 100 arguments limit I can select only 50 columns - 50 x
> (jsonKeyName + ColumnName) = 100 arguments
>
> - if the limit of columns in the table is >250, why I cannot select at
> least 250 columns using the built-in json_build_object(...) function?
>
>
> Please someone consider to increase the default limit from 100 to at
> least 500 (2x max. number of columns) for json_build_object(...) and
> other similar JSON functions.
>
> Kind regards,
> JM
If you need that many arguments to represent the columns in a table,
then you can use a single argument whose type is the table. e.g.
create table t (...);
create or replace function f(a t) ...;
select * from f(row(...));
If you need that many arguments, and they don't represent a table,
you can create an empty table just for its type definition and then
do the above.
cheers,
raf
From | Date | Subject | |
---|---|---|---|
Next Message | Fan Liu | 2020-04-09 01:45:52 | RE: why wal_max_size does not work? |
Previous Message | Tom Lane | 2020-04-08 21:34:08 | Re: ERROR: cannot pass more than 100 arguments to a function |