【发布时间】:2020-12-09 21:14:37
【问题描述】:
我有以下 postgres 存储函数:
CREATE OR REPLACE FUNCTION wg.get_user(
req jsonb)
RETURNS jsonb
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
DECLARE
user_email VARCHAR;
resp JSONB;
BEGIN
user_email := req->'email';
raise notice '(%)', user_email;
SELECT row_to_json(t) INTO resp FROM (
SELECT email, name, default_project_id
FROM wg.users
WHERE (email = user_email)
) t;
RETURN resp;
END;
$BODY$;
我称之为:
选择 wg.get_user('{ "email": "x@x" }'::jsonb);
我在电子邮件列中有一行包含“x@x”,定义为 VARCHAR(100)。以下 SQL 返回我的行:
SELECT email, name, default_project_id
FROM wg.users
WHERE email = 'x@x'
存储函数中的通知调用返回:
注意:("x@x")
但是,该函数返回 NULL,因为显然 WHERE 子句不匹配,即使两者似乎都评估为“x@x”。
如果我将比较更改为不等式(电子邮件 > user_email 有效),它会起作用。
【问题讨论】:
标签: sql json postgresql where-clause stored-functions