Я пытаюсь вызвать хранимый процесс на Postgres / PLPGSQL из Django / Python.У меня есть сохраненный процесс, определенный с помощью параметра VARIADIC:
CREATE OR REPLACE FUNCTION udf_getmultiplecategoriescodetypes (VARIADIC NUMERIC[])
, тогда единственное место, где я хочу использовать массив параметров в процессе, - это WHERE stmt:
WHERE cct.code_category_fk_id = ANY($1)
Все это прекрасно работает, когда я вызываю функцию из консоли DBeaver:
SELECT * FROM udf_getmultiplecategoriescodetypes(1, 2)
Однако, если я использую функцию callproc в Django / Python, использую синтаксис того же типа, например:
c.callproc("udf_getmultpilecategoriescodetypes", (1, 2))
Я получаю ошибки:
LINE 1: SELECT * FROM udf_getmultpilecategoriescodetypes(1,2)
HINT: No function matches the given name and argument types. You might need to add
explicit type casts.
function udf_getmultpilecategoriescodetypes(integer, integer) does not exist
Кроме того, в DBeaver, когда функция создается и сохраняется в списке функций, если я пытаюсь удалить ее, она говорит, что функция не найдена.
Отображение функции в TreeView
Ошибка удаления Msg
С тех пор я обнаружил, что могу удалить его с помощьюDROP FUNCTION, включая параметр VARIADIC, чтобы он распознавал его по количеству и типу параметров.Но почему это так?
Итак, два вопроса:
- Как правильно передать массив целых чисел из функции callproc Django / Python в параметр VARIADIC вхранимый протокол Postgres / PLPGSQL?
- Почему DBeaver не распознает перечисленную сохраненную функцию proc как существующую, когда в качестве параметра используется массив или VARIADIC?И может ли это как-то быть связано с ошибкой callproc, поскольку ошибки обеих проблем, похоже, связаны с параметром VARIADIC?