Postgres 比较来自 json 和 table 的字符串
Postgres comparing strings from json and table
我有以下 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$;
我称之为:
select wg.get_user( '{ "email": "x@x" }'::jsonb);
我在电子邮件列中有一行 'x@x',定义为 VARCHAR(100)。以下SQLreturns我的行:
SELECT email, name, default_project_id
FROM wg.users
WHERE email = 'x@x'
存储函数内的通知调用returns:
注意:(“x@x”)
但是,该函数返回 NULL,因为显然 WHERE 子句不匹配,即使两者似乎都评估为“x@x”。
如果我将比较更改为不等式(电子邮件 > user_email 有效),它会起作用。
据推测,您需要将电子邮件 提取为文本 ,如下所示:
user_email := req ->> 'email';
->
提取一个 json 字符串 ,因此对于您的样本数据,这会产生:"x@x"
.
另一方面,->>
将数据提取为文本,生成 x@x
。
我有以下 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$;
我称之为:
select wg.get_user( '{ "email": "x@x" }'::jsonb);
我在电子邮件列中有一行 'x@x',定义为 VARCHAR(100)。以下SQLreturns我的行:
SELECT email, name, default_project_id
FROM wg.users
WHERE email = 'x@x'
存储函数内的通知调用returns:
注意:(“x@x”)
但是,该函数返回 NULL,因为显然 WHERE 子句不匹配,即使两者似乎都评估为“x@x”。
如果我将比较更改为不等式(电子邮件 > user_email 有效),它会起作用。
据推测,您需要将电子邮件 提取为文本 ,如下所示:
user_email := req ->> 'email';
->
提取一个 json 字符串 ,因此对于您的样本数据,这会产生:"x@x"
.
另一方面,->>
将数据提取为文本,生成 x@x
。