Postgres: 如何在psql查询的字符串中插入双引号?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Postgres: 如何在psql查询的字符串中插入双引号?相关的知识,希望对你有一定的参考价值。

我有这样一个查询,它的工作完全正常。这里,"data "是 "info "表中的一个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中。我应该怎么做呢?谢谢。

答案

我知道我可以使用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;

以上是关于Postgres: 如何在psql查询的字符串中插入双引号?的主要内容,如果未能解决你的问题,请参考以下文章

Postgres/PSQL - 使用批处理文件自动将查询导出到 CSV

Postgres 选择查询在使用 JDBC 时运行缓慢,但在从同一服务器在 PSQL 中运行时快速

如何解决这个问题以使用 psql? | psql:错误:致命:角色“postgres”不存在

如何使用 psql 从 postgres 中的数据库切换?

Perl dbi 运行 psql 代码

查询postgres中表的授予