Postgresql Postgres函数输入参数作为文本数组问题

Postgresql Postgres函数输入参数作为文本数组问题,postgresql,Postgresql,我的桌子看起来像 CREATE TABLE dev.clbk_logs ( id bigint NOT NULL, clbk_typ character varying(255) COLLATE pg_catalog."default", clbk_json json, cre_dte timestamp without time zone, ld_id bigint, ld_num character varying(255)

我的桌子看起来像

CREATE TABLE dev.clbk_logs
(
    id bigint NOT NULL,
    clbk_typ character varying(255) COLLATE pg_catalog."default",
    clbk_json json,
    cre_dte timestamp without time zone,
    ld_id bigint,
    ld_num character varying(255) COLLATE pg_catalog."default",
    mod_dte timestamp without time zone,
    CONSTRAINT clbk_logs_pkey PRIMARY KEY (id)
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;
我的职能是

CREATE OR REPLACE FUNCTION dev.my_method(p_callback_types TEXT[], p_days_ago INT) 
RETURNS SETOF dev.clbk_logs 
    LANGUAGE 'plpgsql'
AS $BODY$      
BEGIN
    return query
    SELECT * FROM dev.clbk_logs  
    WHERE  (clbk_Typ::TEXT) IN (($1))  AND (current_date - cre_dte::date)< p_days_ago;
       
END;
$BODY
创建或替换函数dev.my_方法(p_callback_type TEXT[],p_days_ago INT)
返回dev.clbk_日志集
语言“plpgsql”
作为$BODY$
开始
返回查询
从dev.clbk_日志中选择*
其中($1)中的(clbk类型::文本)和(当前日期-cre dte::日期)
有人能帮我解决上面的问题吗,并且应该做出预期的结果。 我想在查询中传递一个字符串数组和

我得到的错误是

LINE 2:  WHERE  (clbk_Typ::TEXT) IN (($1))  AND (current_date - cre_...
                                 ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.
QUERY:  SELECT * FROM dev.clbk_logs  
    WHERE  (clbk_Typ::TEXT) IN (($1))  AND (current_date - cre_dte::date)< p_days_ago
CONTEXT:  PL/pgSQL function dev.my_method(text[],integer) line 3 at RETURN QUERY
SQL state: 42883
第2行:($1)中的(clbk_Typ::TEXT)和(current_date-cre_…)。。。
^
提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。
查询:从dev.clbk_日志中选择*
其中($1)中的(clbk类型::文本)和(当前日期-cre dte::日期)
您需要将
=any()
而不是
与数组一起使用

也不需要转换为
::text
。为了便于阅读,我建议使用参数名称,而不是数字:

CREATE OR REPLACE FUNCTION dev.my_method(p_callback_types TEXT[], p_days_ago INT) 
RETURNS SETOF dev.fourkites_clbk_logs 
    LANGUAGE plpgsql
AS $BODY$      
BEGIN
    return query
    SELECT * 
    FROM dev.fourkites_clbk_logs  
    WHERE clbk_Typ = any (p_callback_type)  
      AND (current_date - cre_dte::date) < p_days_ago;
END;
$BODY

谢谢没有名字的@a_horse_,但是出现了问题,结果如下“(194507,更新,{“Scac”:“HLCU”,“Tags”:[“0001311330”,“Shipper”:“mercedesbenz usa”,“纬度”:“41.0”,“位置”:“41.00,-32.30”,“时区”:“欧盟”,“经度”:“32..7”,“时间戳”:“2020-11-22T00:50:46+01:00”,“装货编号”:“HLBU-BU 3082”“MessageType”“:“UPDATE”“TimezoneOffset”“:300”“FourKitesLoadId”“:85061”“ReferenceNumber”“:[“HLBU 3081422”“026627449”“],“TimezoneShortName”“:”“CET”“}”,“2020-11-22 00:01:37.274”,85417061,“HLCUS-81422”,NULL)结果看起来像是在单列中,而不是在不同的列中。遗漏了什么?这是一个不同的问题,已经得到了回答。例如:这里:或者是的,很抱歉我在开头没有提到它本身。它对我有效,我从上面的块中得到了预期的结果。谢谢
and cre_dte >= current_date - p_days_ago;