首页 > 解决方案 > Postgres:如何在 psql 查询中的字符串中插入双引号?

问题描述

我有这个查询,它工作得很好。这里,“数据”是“信息”表中的 jsonb 列。

select data from info where data @> '{"last_name": "Pinkman"}';

现在,我必须在函数中将此特定查询作为参数传递。在函数内部,我试图通过以下方式连接此查询来形成一个 jsonb 对象,但出现错误。

CREATE OR REPLACE FUNCTION run_query(query text) RETURNS jsonb AS $$
    DECLARE
        obj text;
    BEGIN
        obj := '{' || '"query"' || ':"' || query || '"}';
        RETURN obj::jsonb;
    END
$$ LANGUAGE plpgsql;
db=# select run_query('select data from info where data @> ''{"last_name": "Pinkman"}''');
ERROR:  invalid input syntax for type json
DETAIL:  Token "last_name" is invalid.
CONTEXT:  JSON data, line 1: ..."select data from info where data @> '{"last_name...
PL/pgSQL function run_query(text) line 6 at RETURN

我知道我可以使用 jsonb_build_object() 来创建对象,但我必须先将其创建为字符串,然后再转换为 jsonb。我怎么做?谢谢。

标签: postgresqlplpgsql

解决方案


我知道我可以使用 jsonb_build_object() 来创建对象,但我必须先将其创建为字符串

然后这样做:

CREATE OR REPLACE FUNCTION run_query(query text) 
  RETURNS jsonb
AS
$$
DECLARE
  obj text;
BEGIN
  obj := jsonb_build_object('query', query)::text;

  ... work with the text ...

  RETURN obj::jsonb; 
END
$$
LANGUAGE plpgsql;

推荐阅读