我正在尝试编写一个postgresql函数,该函数接收一个数组并返回用户不具有属于该数组的id。我写了这样的话:
CREATE OR REPLACE FUNCTION user_api.get_user(banned_list TEXT[])
RETURNS SETOF JSONB
AS $$
SELECT to_jsonb(result)
FROM (
SELECT
*
FROM my_user.user_info
WHERE my_user.user_info.user_id NOT IN (banned_list::TEXT[])
) AS result;
$$ LANGUAGE SQL SECURITY DEFINER;
但它会像这样抛出错误
ERROR: operator does not exist text <> text[]
LINE 24: ... WHERE my_user.user_info.user_id NOT IN (no...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
我也试过使用CAST功能,但是没有用。
提前感谢您的帮助。
答案 0 :(得分:1)
您无法在阵列上使用IN
运算符。您应该使用ALL()
代替:
WHERE my_user.user_info.user_id <> ALL(banned_list)
请注意,仅当my_user.user_info.user_id
的类型为文本时,此方法才有效。如果它是一个整数列,那么你应该使用一个整数数组作为参数:
CREATE OR REPLACE FUNCTION user_api.get_user(banned_list int[])
RETURNS SETOF JSONB
AS $$
SELECT to_jsonb(result)
FROM (
SELECT
*
FROM my_user.user_info
WHERE my_user.user_info.user_id <> ALL(banned_list)
) AS result;
$$ LANGUAGE SQL SECURITY DEFINER;