Postgres函数与jsonb参数

时间:2016-03-02 17:57:14

标签: database postgresql function stored-procedures pgadmin

我在这里看到过类似的帖子,但我的情况与我迄今为止发现的情况略有不同。我试图调用一个postgres函数,其中包含我可以在函数逻辑中使用的参数,因为它们与jsonb查询有关。以下是我尝试使用参数重新创建的查询示例。

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

我可以在PGAdmin中运行这个查询,但到目前为止我所有的尝试都是在一个函数中运行它,参数是"我的描述"和" 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

1 个答案:

答案 0 :(得分:1)

您可以使用函数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)

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