Postgresql 将字符串转换为数组并在where子句中使用

Postgresql 将字符串转换为数组并在where子句中使用,postgresql,Postgresql,我需要传递一个需要转换为数组的整数字符串。这将是一个主键数组,用作表的筛选器 尝试使用以下参数调用函数时:asset.get\u asset\u stores('example.com','1,2,3'),出现以下错误: SQL Error [42883]: ERROR: function string_to_array(character varying) does not exist Hint: No function matches the given name and argument

我需要传递一个需要转换为数组的整数字符串。这将是一个主键数组,用作表的筛选器

尝试使用以下参数调用函数时:
asset.get\u asset\u stores('example.com','1,2,3')
,出现以下错误:

SQL Error [42883]: ERROR: function string_to_array(character varying) does not exist
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
功能如下:

DROP FUNCTION IF EXISTS asset.get_asset_stores;

CREATE OR REPLACE FUNCTION asset.get_asset_stores(
    IN _username VARCHAR(100),
    IN _asset_store_type_ids VARCHAR)


RETURNS TABLE(
 asset_store_id INT
,asset_store_name VARCHAR
,asset_store_desc VARCHAR
,asset_store_type_id INT
,asset_store_type VARCHAR
,site_id INT) 

AS $$

DECLARE 
i_user_id INT;
a_asset_store_type_ids INT[];

BEGIN

i_user_id = erbaccess.getUserIdFromUserName(_username);

a_asset_store_type_ids = STRING_TO_ARRAY(_asset_store_type_ids, ',')::INT[];

RETURN QUERY
    SELECT
        astores.asset_store_id
        ,astores.asset_store_name
        ,astores.asset_store_desc
        ,astores.asset_store_type_id
        ,astores.asset_store_type
        ,astores.site_id
    FROM asset.asset_stores AS astores
    INNER JOIN customer.sitesvsusers AS svu
        ON svu.siteid = astores.site_id
            AND svu.userid = i_user_id
    WHERE astores.asset_store_type_id IN (a_asset_store_type_ids);


 END;
 $$ LANGUAGE PLPGSQL SECURITY DEFINER;
如文件所述,您需要提供拆分字符串的分隔符,例如a
,“

a_asset_store_type_ids := STRING_TO_ARRAY(_asset_store_type_ids, ',');
您不能在中使用
来检查数组中的元素,您需要使用:


谢谢,我像你说的那样进行了更新,还尝试添加了
::INT[]
。。在这两种情况下,我现在仍然得到以下错误:SQL错误[42883]:错误:运算符不存在:integer=integer[]提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。在不更改转换类型的情况下,会出现以下错误:SQL错误[42846]:错误:无法将类型文本[]转换为整数删除转换类型并使用
,其中astores.asset\u store\u type\u id=ANY(a\u asset\u store\u type\u id)成功了…谢谢@kravb:最好将函数参数定义为
int[]
而不是传递字符串。该函数将从Python调用,当我们尝试将整数作为参数传递时,我们似乎随机得到一个错误,即函数参数与传递的值不匹配,并提示可能显式键入cast。。。不知道为什么Postgres不喜欢从Python获取整数。。。我们使用的是psycopg2Unrelated,但是如果您只想封装一个查询,
语言sql
更有效
WHERE astores.asset_store_type_id = ANY(a_asset_store_type_ids);