Postgres:将参数发送到函数中的 JSONB 字段
Postgres: Sending parameter to JSONB field in a function
我正在尝试在 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' @> '""';
mac$# $$ LANGUAGE SQL;
CREATE FUNCTION
mac=# SELECT * FROM testando('value');
testando
----------
(0 rows)
这个查询应该return值:
SELECT * FROM testando('value');
有人知道在这种情况下如何正确发送参数吗?
当写 json->'key' @> '""';
时,您正在使用 '""'
作为具有 值 </code> 的文字常量。不要将参数用引号括起来,这样它实际上引用了参数:</p>
<pre><code>CREATE OR REPLACE FUNCTION testando(value_param varchar) RETURNS setof int AS $$
SELECT id FROM json_test WHERE json->'key' @> ::jsonb;
$$ LANGUAGE SQL;
SELECT * FROM testando('"value"');
我正在尝试在 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' @> '""';
mac$# $$ LANGUAGE SQL;
CREATE FUNCTION
mac=# SELECT * FROM testando('value');
testando
----------
(0 rows)
这个查询应该return值:
SELECT * FROM testando('value');
有人知道在这种情况下如何正确发送参数吗?
当写 json->'key' @> '""';
时,您正在使用 '""'
作为具有 值 </code> 的文字常量。不要将参数用引号括起来,这样它实际上引用了参数:</p>
<pre><code>CREATE OR REPLACE FUNCTION testando(value_param varchar) RETURNS setof int AS $$
SELECT id FROM json_test WHERE json->'key' @> ::jsonb;
$$ LANGUAGE SQL;
SELECT * FROM testando('"value"');