postgresql 函数文本参数拆分

postgresql function text parameter splitting up

我创建了以下 postgres 函数

CREATE OR REPLACE FUNCTION public.fn(param TEXT)
RETURNS void
LANGUAGE plpgsql
AS
$$
DECLARE param TEXT;
BEGIN
    DELETE FROM public."table_name"
    WHERE "column_name" = param;
END
$$

我尝试将字符串作为参数传递:

293507407
<class 'str'>

但我总是运行进入以下错误:

psycopg2.errors.UndefinedFunction: function fn(unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown) does not exist
LINE 1: SELECT * FROM fn('2','9','3','5','0','7','4','0'...
                      ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
'''

我已经在我的 python 代码和函数本身中尝试了所有可能的转换。然而,没有任何运气。

我做错了什么?

  1. param TEXT 不需要在 DECLARE 部分重复,因为它已经定义为参数

  2. cursor.callproc(fn, param) 应该是 cursor.callproc(fn, [param])。你现在拥有它的方式 '293507407' 正在采用一系列字符,例如fn('2','9','3','5','0','7','4','0'... 有关使用信息,请参阅 callproc

  3. 远离使用 callproc,在 psycopg3 中它将不存在。只需使用 execute 到 运行 的功能。这也适用于 Postgres 过程,尽管名称如此,但不能在 callproc.

    中使用