Postgresql Postgres:将参数发送到函数中的JSONB字段

Postgresql Postgres:将参数发送到函数中的JSONB字段,postgresql,postgresql-9.4,jsonb,Postgresql,Postgresql 9.4,Jsonb,我试图在postgres函数中使用Jsonb。我无法正确发送参数 mac=# CREATE TABLE json_test (id serial, json jsonb); CREATE TABLE mac=# INSERT INTO json_test (json) VALUES ('{"key": "value"}'); INSERT 0 1 mac=# SELECT * FROM json_test; id | json ----+---------------

我试图在postgres函数中使用Jsonb。我无法正确发送参数

mac=# CREATE TABLE json_test (id serial, json jsonb);
CREATE TABLE
mac=# INSERT INTO json_test (json) VALUES ('{"key": "value"}');
INSERT 0 1
mac=# SELECT * FROM json_test;
 id |       json       
----+------------------
  1 | {"key": "value"}
(1 row)

mac=# SELECT * FROM json_test WHERE json->'key' @> '"value"';
 id |       json       
----+------------------
  1 | {"key": "value"}
(1 row)

mac=# CREATE OR REPLACE FUNCTION testando() RETURNS setof int AS $$
mac$#   SELECT id FROM json_test WHERE json->'key' @> '"value"';
mac$# $$ LANGUAGE SQL;
CREATE FUNCTION
mac=# SELECT * FROM testando();
 testando 
----------
    1
(1 row)

mac=# CREATE OR REPLACE FUNCTION testando(value_param varchar) RETURNS setof int AS $$
mac$#   SELECT id FROM json_test WHERE json->'key' @> '"$1"';
mac$# $$ LANGUAGE SQL;
CREATE FUNCTION
mac=# SELECT * FROM testando('value');
 testando 
----------
(0 rows)
此查询应返回值:

SELECT * FROM testando('value');

有人知道在这种情况下如何正确发送参数吗?

在编写
json->'key'@>“$1”时
您正在使用
“$1”
作为带有值的文本常量。不要将参数括在引号中,使其实际引用参数:

CREATE OR REPLACE FUNCTION testando(value_param varchar) RETURNS setof int AS $$
SELECT id FROM json_test WHERE json->'key' @> $1::jsonb;
$$ LANGUAGE SQL;
SELECT * FROM testando('"value"');