Re: ERROR: cannot pass more than 100 arguments to a function

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

In response to

Browse pgsql-bugs by date

  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