带有 jsonb 参数的 Postgres 函数

Postgres function with jsonb parameters

我在这里看到了类似的 post,但我的情况与目前发现的情况略有不同。我正在尝试使用参数调用 postgres 函数,我可以在函数逻辑中利用这些参数,因为它们与 jsonb 查询有关。这是我尝试使用参数重新创建的查询示例。

SELECT * 
  from edit_data 
  where ( "json_field"#>'{Attributes}' )::jsonb @> 
                    '{"issue_description":"**my description**",  
                      "reporter_email":"**user@generic.com**"}'::jsonb

我可以 运行 这个查询在 PGAdmin 中很好,但是到目前为止我在一个函数中 运行 这个带有参数 "my description" 和 "user@generic.com" 值的所有尝试都有失败的。这是我要创建的函数的一个简单示例:

CREATE OR REPLACE FUNCTION get_Features(
    p1 character varying,
    p2 character varying)
  RETURNS SETOF edit_metadata AS
$BODY$ 
SELECT * from edit_metadata where ("geo_json"#>'{Attributes}' )::jsonb @> '{"issue_description":**$p1**, "reporter_email":**$p2**}'::jsonb;
$BODY$
  LANGUAGE sql VOLATILE
  COST 100
  ROWS 1000;

我知道语法不正确,我为此苦恼了一两天。谁能帮助我了解如何最好地处理值周围的这些双引号并在此处利用参数?

TIA

您可以使用函数 json_build_object:

select json_build_object(
    'issue_description', '**my description**',
    'reporter_email', '**user@generic.com**');

你得到:

                                    json_build_object                                    
-----------------------------------------------------------------------------------------
 {"issue_description" : "**my description**", "reporter_email" : "**user@generic.com**"}
(1 row)

这样你就不会输入无效的语法(没有引号字符串的麻烦)并且你可以用参数交换值。