age
age copied to clipboard
Increase List Size Limit Beyond 100
In Postgres, there is a limitation that prevents more than 100 arguments from being passed to a function. This limitation also applies to lists and maps constructed using the functions agtype_build_list
and agtype_build_map
. As a result, the size of lists and maps is restricted to a maximum of 100 elements.
SELECT * FROM cypher('test', $$
RETURN [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
$$) AS (res agtype);
ERROR: cannot pass more than 100 arguments to a function
The same restriction applies to map properties.
Why:
- A user may have a reading list that includes more than 100 books.
- Neo4j doesn't impose a fixed limit on the number of list items or properties a node can have.
Implementation:
Change agtype_build_list
and agtype_build_map
to accept one agtype
argument instead of VARIADIC "any"
SELECT agtype_build_list('[1, 1, 1]'::agtype);
agtype_build_list
-------------------
[[1, 1, 1]]
(1 row)
Setup: Apache AGE (master) - PostgreSQL 11.18
SELECT * FROM cypher('test', $$
RETURN $1
$$, '[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]')
$$) AS (res agtype);
By passing the list as a single string argument, you are able to bypass this limitation since the entire list is treated as a single argument. The cypher function can then reference the list using a positional placeholder like $1. this is a way around to overcome the limitations of an argument as it makes no scene to pass all the argument and yet they are not stored in a list
the agtype_build_list
function accepts a maximum of 100 arguments. If you try to pass more than 100 arguments to the agtype_build_list
function, you will get an error.
You can use the agtype_build_list_from_array
function instead that does not have this limitation. You can pass any number of arguments to the agtype_build_list_from_array
function and it will return a list with those values.
the agtype_build_list
function accepts a maximum of 100 arguments. If you try to pass more than 100 arguments to the agtype_build_list
function, you will get an error.
You can use the agtype_build_list_from_array
function instead that does not have this limitation. You can pass any number of arguments to the agtype_build_list_from_array
function and it will return a list with those values.
the
agtype_build_list
function accepts a maximum of 100 arguments. If you try to pass more than 100 arguments to theagtype_build_list
function, you will get an error.You can use the
agtype_build_list_from_array
function instead that does not have this limitation. You can pass any number of arguments to theagtype_build_list_from_array
function and it will return a list with those values.
@farooquememon385 Can you please give us an example plsease ?
Closing this as completed. Fix in PR #1001 .