postgresql/src/test/regress/expected/jsonb_jsonpath.out
Andrew Dunstan 92d2ab7554 Rationalize and improve error messages for some jsonpath items
This is a followup to commit 66ea94e8e6.

Error mssages concerning incorrect formats for date-time types are
unified and parameterized, instead of using a fully separate error
message for each type.

Similarly, error messages regarding numeric and string arguments to
certain items are standardized, and instead of saying that the argument
is out of range simply say that it is invalid. The actual invalid
arguments to these itesm are now shown in the error message.

Error messages relating to numeric inputs of Nan or Infinity are
made more informative.

Jeevan Chalke and Kyotaro Horiguchi, with some input from Tom Lane.

Discussion: https://postgr.es/m/20240129.121200.235012930453045390.horikyota.ntt@gmail.com
2024-02-27 02:07:22 -05:00

4387 lines
144 KiB
Plaintext

select jsonb '{"a": 12}' @? '$';
?column?
----------
t
(1 row)
select jsonb '{"a": 12}' @? '1';
?column?
----------
t
(1 row)
select jsonb '{"a": 12}' @? '$.a.b';
?column?
----------
f
(1 row)
select jsonb '{"a": 12}' @? '$.b';
?column?
----------
f
(1 row)
select jsonb '{"a": 12}' @? '$.a + 2';
?column?
----------
t
(1 row)
select jsonb '{"a": 12}' @? '$.b + 2';
?column?
----------
(1 row)
select jsonb '{"a": {"a": 12}}' @? '$.a.a';
?column?
----------
t
(1 row)
select jsonb '{"a": {"a": 12}}' @? '$.*.a';
?column?
----------
t
(1 row)
select jsonb '{"b": {"a": 12}}' @? '$.*.a';
?column?
----------
t
(1 row)
select jsonb '{"b": {"a": 12}}' @? '$.*.b';
?column?
----------
f
(1 row)
select jsonb '{"b": {"a": 12}}' @? 'strict $.*.b';
?column?
----------
(1 row)
select jsonb '{}' @? '$.*';
?column?
----------
f
(1 row)
select jsonb '{"a": 1}' @? '$.*';
?column?
----------
t
(1 row)
select jsonb '{"a": {"b": 1}}' @? 'lax $.**{1}';
?column?
----------
t
(1 row)
select jsonb '{"a": {"b": 1}}' @? 'lax $.**{2}';
?column?
----------
t
(1 row)
select jsonb '{"a": {"b": 1}}' @? 'lax $.**{3}';
?column?
----------
f
(1 row)
select jsonb '[]' @? '$[*]';
?column?
----------
f
(1 row)
select jsonb '[1]' @? '$[*]';
?column?
----------
t
(1 row)
select jsonb '[1]' @? '$[1]';
?column?
----------
f
(1 row)
select jsonb '[1]' @? 'strict $[1]';
?column?
----------
(1 row)
select jsonb_path_query('[1]', 'strict $[1]');
ERROR: jsonpath array subscript is out of bounds
select jsonb_path_query('[1]', 'strict $[1]', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb '[1]' @? 'lax $[10000000000000000]';
?column?
----------
(1 row)
select jsonb '[1]' @? 'strict $[10000000000000000]';
?column?
----------
(1 row)
select jsonb_path_query('[1]', 'lax $[10000000000000000]');
ERROR: jsonpath array subscript is out of integer range
select jsonb_path_query('[1]', 'strict $[10000000000000000]');
ERROR: jsonpath array subscript is out of integer range
select jsonb '[1]' @? '$[0]';
?column?
----------
t
(1 row)
select jsonb '[1]' @? '$[0.3]';
?column?
----------
t
(1 row)
select jsonb '[1]' @? '$[0.5]';
?column?
----------
t
(1 row)
select jsonb '[1]' @? '$[0.9]';
?column?
----------
t
(1 row)
select jsonb '[1]' @? '$[1.2]';
?column?
----------
f
(1 row)
select jsonb '[1]' @? 'strict $[1.2]';
?column?
----------
(1 row)
select jsonb '{"a": [1,2,3], "b": [3,4,5]}' @? '$ ? (@.a[*] > @.b[*])';
?column?
----------
f
(1 row)
select jsonb '{"a": [1,2,3], "b": [3,4,5]}' @? '$ ? (@.a[*] >= @.b[*])';
?column?
----------
t
(1 row)
select jsonb '{"a": [1,2,3], "b": [3,4,"5"]}' @? '$ ? (@.a[*] >= @.b[*])';
?column?
----------
t
(1 row)
select jsonb '{"a": [1,2,3], "b": [3,4,"5"]}' @? 'strict $ ? (@.a[*] >= @.b[*])';
?column?
----------
f
(1 row)
select jsonb '{"a": [1,2,3], "b": [3,4,null]}' @? '$ ? (@.a[*] >= @.b[*])';
?column?
----------
t
(1 row)
select jsonb '1' @? '$ ? ((@ == "1") is unknown)';
?column?
----------
t
(1 row)
select jsonb '1' @? '$ ? ((@ == 1) is unknown)';
?column?
----------
f
(1 row)
select jsonb '[{"a": 1}, {"a": 2}]' @? '$[0 to 1] ? (@.a > 1)';
?column?
----------
t
(1 row)
select jsonb_path_exists('[{"a": 1}, {"a": 2}, 3]', 'lax $[*].a', silent => false);
jsonb_path_exists
-------------------
t
(1 row)
select jsonb_path_exists('[{"a": 1}, {"a": 2}, 3]', 'lax $[*].a', silent => true);
jsonb_path_exists
-------------------
t
(1 row)
select jsonb_path_exists('[{"a": 1}, {"a": 2}, 3]', 'strict $[*].a', silent => false);
ERROR: jsonpath member accessor can only be applied to an object
select jsonb_path_exists('[{"a": 1}, {"a": 2}, 3]', 'strict $[*].a', silent => true);
jsonb_path_exists
-------------------
(1 row)
select jsonb_path_query('1', 'lax $.a');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('1', 'strict $.a');
ERROR: jsonpath member accessor can only be applied to an object
select jsonb_path_query('1', 'strict $.*');
ERROR: jsonpath wildcard member accessor can only be applied to an object
select jsonb_path_query('1', 'strict $.a', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('1', 'strict $.*', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'lax $.a');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $.a');
ERROR: jsonpath member accessor can only be applied to an object
select jsonb_path_query('[]', 'strict $.a', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{}', 'lax $.a');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{}', 'strict $.a');
ERROR: JSON object does not contain key "a"
select jsonb_path_query('{}', 'strict $.a', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('1', 'strict $[1]');
ERROR: jsonpath array accessor can only be applied to an array
select jsonb_path_query('1', 'strict $[*]');
ERROR: jsonpath wildcard array accessor can only be applied to an array
select jsonb_path_query('[]', 'strict $[1]');
ERROR: jsonpath array subscript is out of bounds
select jsonb_path_query('[]', 'strict $["a"]');
ERROR: jsonpath array subscript is not a single numeric value
select jsonb_path_query('1', 'strict $[1]', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('1', 'strict $[*]', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $[1]', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $["a"]', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{"a": 12, "b": {"a": 13}}', '$.a');
jsonb_path_query
------------------
12
(1 row)
select jsonb_path_query('{"a": 12, "b": {"a": 13}}', '$.b');
jsonb_path_query
------------------
{"a": 13}
(1 row)
select jsonb_path_query('{"a": 12, "b": {"a": 13}}', '$.*');
jsonb_path_query
------------------
12
{"a": 13}
(2 rows)
select jsonb_path_query('{"a": 12, "b": {"a": 13}}', 'lax $.*.a');
jsonb_path_query
------------------
13
(1 row)
select jsonb_path_query('[12, {"a": 13}, {"b": 14}]', 'lax $[*].a');
jsonb_path_query
------------------
13
(1 row)
select jsonb_path_query('[12, {"a": 13}, {"b": 14}]', 'lax $[*].*');
jsonb_path_query
------------------
13
14
(2 rows)
select jsonb_path_query('[12, {"a": 13}, {"b": 14}]', 'lax $[0].a');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[12, {"a": 13}, {"b": 14}]', 'lax $[1].a');
jsonb_path_query
------------------
13
(1 row)
select jsonb_path_query('[12, {"a": 13}, {"b": 14}]', 'lax $[2].a');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[12, {"a": 13}, {"b": 14}]', 'lax $[0,1].a');
jsonb_path_query
------------------
13
(1 row)
select jsonb_path_query('[12, {"a": 13}, {"b": 14}]', 'lax $[0 to 10].a');
jsonb_path_query
------------------
13
(1 row)
select jsonb_path_query('[12, {"a": 13}, {"b": 14}]', 'lax $[0 to 10 / 0].a');
ERROR: division by zero
select jsonb_path_query('[12, {"a": 13}, {"b": 14}, "ccc", true]', '$[2.5 - 1 to $.size() - 2]');
jsonb_path_query
------------------
{"a": 13}
{"b": 14}
"ccc"
(3 rows)
select jsonb_path_query('1', 'lax $[0]');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('1', 'lax $[*]');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('[1]', 'lax $[0]');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('[1]', 'lax $[*]');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('[1,2,3]', 'lax $[*]');
jsonb_path_query
------------------
1
2
3
(3 rows)
select jsonb_path_query('[1,2,3]', 'strict $[*].a');
ERROR: jsonpath member accessor can only be applied to an object
select jsonb_path_query('[1,2,3]', 'strict $[*].a', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', '$[last]');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', '$[last ? (exists(last))]');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $[last]');
ERROR: jsonpath array subscript is out of bounds
select jsonb_path_query('[]', 'strict $[last]', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[1]', '$[last]');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('[1,2,3]', '$[last]');
jsonb_path_query
------------------
3
(1 row)
select jsonb_path_query('[1,2,3]', '$[last - 1]');
jsonb_path_query
------------------
2
(1 row)
select jsonb_path_query('[1,2,3]', '$[last ? (@.type() == "number")]');
jsonb_path_query
------------------
3
(1 row)
select jsonb_path_query('[1,2,3]', '$[last ? (@.type() == "string")]');
ERROR: jsonpath array subscript is not a single numeric value
select jsonb_path_query('[1,2,3]', '$[last ? (@.type() == "string")]', silent => true);
jsonb_path_query
------------------
(0 rows)
select * from jsonb_path_query('{"a": 10}', '$');
jsonb_path_query
------------------
{"a": 10}
(1 row)
select * from jsonb_path_query('{"a": 10}', '$ ? (@.a < $value)');
ERROR: could not find jsonpath variable "value"
select * from jsonb_path_query('{"a": 10}', '$ ? (@.a < $value)', '1');
ERROR: "vars" argument is not an object
DETAIL: Jsonpath parameters should be encoded as key-value pairs of "vars" object.
select * from jsonb_path_query('{"a": 10}', '$ ? (@.a < $value)', '[{"value" : 13}]');
ERROR: "vars" argument is not an object
DETAIL: Jsonpath parameters should be encoded as key-value pairs of "vars" object.
select * from jsonb_path_query('{"a": 10}', '$ ? (@.a < $value)', '{"value" : 13}');
jsonb_path_query
------------------
{"a": 10}
(1 row)
select * from jsonb_path_query('{"a": 10}', '$ ? (@.a < $value)', '{"value" : 8}');
jsonb_path_query
------------------
(0 rows)
select * from jsonb_path_query('{"a": 10}', '$.a ? (@ < $value)', '{"value" : 13}');
jsonb_path_query
------------------
10
(1 row)
select * from jsonb_path_query('[10,11,12,13,14,15]', '$[*] ? (@ < $value)', '{"value" : 13}');
jsonb_path_query
------------------
10
11
12
(3 rows)
select * from jsonb_path_query('[10,11,12,13,14,15]', '$[0,1] ? (@ < $x.value)', '{"x": {"value" : 13}}');
jsonb_path_query
------------------
10
11
(2 rows)
select * from jsonb_path_query('[10,11,12,13,14,15]', '$[0 to 2] ? (@ < $value)', '{"value" : 15}');
jsonb_path_query
------------------
10
11
12
(3 rows)
select * from jsonb_path_query('[1,"1",2,"2",null]', '$[*] ? (@ == "1")');
jsonb_path_query
------------------
"1"
(1 row)
select * from jsonb_path_query('[1,"1",2,"2",null]', '$[*] ? (@ == $value)', '{"value" : "1"}');
jsonb_path_query
------------------
"1"
(1 row)
select * from jsonb_path_query('[1,"1",2,"2",null]', '$[*] ? (@ == $value)', '{"value" : null}');
jsonb_path_query
------------------
null
(1 row)
select * from jsonb_path_query('[1, "2", null]', '$[*] ? (@ != null)');
jsonb_path_query
------------------
1
"2"
(2 rows)
select * from jsonb_path_query('[1, "2", null]', '$[*] ? (@ == null)');
jsonb_path_query
------------------
null
(1 row)
select * from jsonb_path_query('{}', '$ ? (@ == @)');
jsonb_path_query
------------------
(0 rows)
select * from jsonb_path_query('[]', 'strict $ ? (@ == @)');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**');
jsonb_path_query
------------------
{"a": {"b": 1}}
{"b": 1}
1
(3 rows)
select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{0}');
jsonb_path_query
------------------
{"a": {"b": 1}}
(1 row)
select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{0 to last}');
jsonb_path_query
------------------
{"a": {"b": 1}}
{"b": 1}
1
(3 rows)
select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{1}');
jsonb_path_query
------------------
{"b": 1}
(1 row)
select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{1 to last}');
jsonb_path_query
------------------
{"b": 1}
1
(2 rows)
select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{2}');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{2 to last}');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{3 to last}');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{last}');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**.b ? (@ > 0)');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{0}.b ? (@ > 0)');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{1}.b ? (@ > 0)');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{0 to last}.b ? (@ > 0)');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{1 to last}.b ? (@ > 0)');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('{"a": {"b": 1}}', 'lax $.**{1 to 2}.b ? (@ > 0)');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('{"a": {"c": {"b": 1}}}', 'lax $.**.b ? (@ > 0)');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('{"a": {"c": {"b": 1}}}', 'lax $.**{0}.b ? (@ > 0)');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{"a": {"c": {"b": 1}}}', 'lax $.**{1}.b ? (@ > 0)');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{"a": {"c": {"b": 1}}}', 'lax $.**{0 to last}.b ? (@ > 0)');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('{"a": {"c": {"b": 1}}}', 'lax $.**{1 to last}.b ? (@ > 0)');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('{"a": {"c": {"b": 1}}}', 'lax $.**{1 to 2}.b ? (@ > 0)');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('{"a": {"c": {"b": 1}}}', 'lax $.**{2 to 3}.b ? (@ > 0)');
jsonb_path_query
------------------
1
(1 row)
select jsonb '{"a": {"b": 1}}' @? '$.**.b ? ( @ > 0)';
?column?
----------
t
(1 row)
select jsonb '{"a": {"b": 1}}' @? '$.**{0}.b ? ( @ > 0)';
?column?
----------
f
(1 row)
select jsonb '{"a": {"b": 1}}' @? '$.**{1}.b ? ( @ > 0)';
?column?
----------
t
(1 row)
select jsonb '{"a": {"b": 1}}' @? '$.**{0 to last}.b ? ( @ > 0)';
?column?
----------
t
(1 row)
select jsonb '{"a": {"b": 1}}' @? '$.**{1 to last}.b ? ( @ > 0)';
?column?
----------
t
(1 row)
select jsonb '{"a": {"b": 1}}' @? '$.**{1 to 2}.b ? ( @ > 0)';
?column?
----------
t
(1 row)
select jsonb '{"a": {"c": {"b": 1}}}' @? '$.**.b ? ( @ > 0)';
?column?
----------
t
(1 row)
select jsonb '{"a": {"c": {"b": 1}}}' @? '$.**{0}.b ? ( @ > 0)';
?column?
----------
f
(1 row)
select jsonb '{"a": {"c": {"b": 1}}}' @? '$.**{1}.b ? ( @ > 0)';
?column?
----------
f
(1 row)
select jsonb '{"a": {"c": {"b": 1}}}' @? '$.**{0 to last}.b ? ( @ > 0)';
?column?
----------
t
(1 row)
select jsonb '{"a": {"c": {"b": 1}}}' @? '$.**{1 to last}.b ? ( @ > 0)';
?column?
----------
t
(1 row)
select jsonb '{"a": {"c": {"b": 1}}}' @? '$.**{1 to 2}.b ? ( @ > 0)';
?column?
----------
t
(1 row)
select jsonb '{"a": {"c": {"b": 1}}}' @? '$.**{2 to 3}.b ? ( @ > 0)';
?column?
----------
t
(1 row)
select jsonb_path_query('{"g": {"x": 2}}', '$.g ? (exists (@.x))');
jsonb_path_query
------------------
{"x": 2}
(1 row)
select jsonb_path_query('{"g": {"x": 2}}', '$.g ? (exists (@.y))');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{"g": {"x": 2}}', '$.g ? (exists (@.x ? (@ >= 2) ))');
jsonb_path_query
------------------
{"x": 2}
(1 row)
select jsonb_path_query('{"g": [{"x": 2}, {"y": 3}]}', 'lax $.g ? (exists (@.x))');
jsonb_path_query
------------------
{"x": 2}
(1 row)
select jsonb_path_query('{"g": [{"x": 2}, {"y": 3}]}', 'lax $.g ? (exists (@.x + "3"))');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{"g": [{"x": 2}, {"y": 3}]}', 'lax $.g ? ((exists (@.x + "3")) is unknown)');
jsonb_path_query
------------------
{"x": 2}
{"y": 3}
(2 rows)
select jsonb_path_query('{"g": [{"x": 2}, {"y": 3}]}', 'strict $.g[*] ? (exists (@.x))');
jsonb_path_query
------------------
{"x": 2}
(1 row)
select jsonb_path_query('{"g": [{"x": 2}, {"y": 3}]}', 'strict $.g[*] ? ((exists (@.x)) is unknown)');
jsonb_path_query
------------------
{"y": 3}
(1 row)
select jsonb_path_query('{"g": [{"x": 2}, {"y": 3}]}', 'strict $.g ? (exists (@[*].x))');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{"g": [{"x": 2}, {"y": 3}]}', 'strict $.g ? ((exists (@[*].x)) is unknown)');
jsonb_path_query
----------------------
[{"x": 2}, {"y": 3}]
(1 row)
--test ternary logic
select
x, y,
jsonb_path_query(
'[true, false, null]',
'$[*] ? (@ == true && ($x == true && $y == true) ||
@ == false && !($x == true && $y == true) ||
@ == null && ($x == true && $y == true) is unknown)',
jsonb_build_object('x', x, 'y', y)
) as "x && y"
from
(values (jsonb 'true'), ('false'), ('"null"')) x(x),
(values (jsonb 'true'), ('false'), ('"null"')) y(y);
x | y | x && y
--------+--------+--------
true | true | true
true | false | false
true | "null" | null
false | true | false
false | false | false
false | "null" | false
"null" | true | null
"null" | false | false
"null" | "null" | null
(9 rows)
select
x, y,
jsonb_path_query(
'[true, false, null]',
'$[*] ? (@ == true && ($x == true || $y == true) ||
@ == false && !($x == true || $y == true) ||
@ == null && ($x == true || $y == true) is unknown)',
jsonb_build_object('x', x, 'y', y)
) as "x || y"
from
(values (jsonb 'true'), ('false'), ('"null"')) x(x),
(values (jsonb 'true'), ('false'), ('"null"')) y(y);
x | y | x || y
--------+--------+--------
true | true | true
true | false | true
true | "null" | true
false | true | true
false | false | false
false | "null" | null
"null" | true | true
"null" | false | null
"null" | "null" | null
(9 rows)
select jsonb '{"a": 1, "b":1}' @? '$ ? (@.a == @.b)';
?column?
----------
t
(1 row)
select jsonb '{"c": {"a": 1, "b":1}}' @? '$ ? (@.a == @.b)';
?column?
----------
f
(1 row)
select jsonb '{"c": {"a": 1, "b":1}}' @? '$.c ? (@.a == @.b)';
?column?
----------
t
(1 row)
select jsonb '{"c": {"a": 1, "b":1}}' @? '$.c ? ($.c.a == @.b)';
?column?
----------
t
(1 row)
select jsonb '{"c": {"a": 1, "b":1}}' @? '$.* ? (@.a == @.b)';
?column?
----------
t
(1 row)
select jsonb '{"a": 1, "b":1}' @? '$.** ? (@.a == @.b)';
?column?
----------
t
(1 row)
select jsonb '{"c": {"a": 1, "b":1}}' @? '$.** ? (@.a == @.b)';
?column?
----------
t
(1 row)
select jsonb_path_query('{"c": {"a": 2, "b":1}}', '$.** ? (@.a == 1 + 1)');
jsonb_path_query
------------------
{"a": 2, "b": 1}
(1 row)
select jsonb_path_query('{"c": {"a": 2, "b":1}}', '$.** ? (@.a == (1 + 1))');
jsonb_path_query
------------------
{"a": 2, "b": 1}
(1 row)
select jsonb_path_query('{"c": {"a": 2, "b":1}}', '$.** ? (@.a == @.b + 1)');
jsonb_path_query
------------------
{"a": 2, "b": 1}
(1 row)
select jsonb_path_query('{"c": {"a": 2, "b":1}}', '$.** ? (@.a == (@.b + 1))');
jsonb_path_query
------------------
{"a": 2, "b": 1}
(1 row)
select jsonb '{"c": {"a": -1, "b":1}}' @? '$.** ? (@.a == - 1)';
?column?
----------
t
(1 row)
select jsonb '{"c": {"a": -1, "b":1}}' @? '$.** ? (@.a == -1)';
?column?
----------
t
(1 row)
select jsonb '{"c": {"a": -1, "b":1}}' @? '$.** ? (@.a == -@.b)';
?column?
----------
t
(1 row)
select jsonb '{"c": {"a": -1, "b":1}}' @? '$.** ? (@.a == - @.b)';
?column?
----------
t
(1 row)
select jsonb '{"c": {"a": 0, "b":1}}' @? '$.** ? (@.a == 1 - @.b)';
?column?
----------
t
(1 row)
select jsonb '{"c": {"a": 2, "b":1}}' @? '$.** ? (@.a == 1 - - @.b)';
?column?
----------
t
(1 row)
select jsonb '{"c": {"a": 0, "b":1}}' @? '$.** ? (@.a == 1 - +@.b)';
?column?
----------
t
(1 row)
select jsonb '[1,2,3]' @? '$ ? (+@[*] > +2)';
?column?
----------
t
(1 row)
select jsonb '[1,2,3]' @? '$ ? (+@[*] > +3)';
?column?
----------
f
(1 row)
select jsonb '[1,2,3]' @? '$ ? (-@[*] < -2)';
?column?
----------
t
(1 row)
select jsonb '[1,2,3]' @? '$ ? (-@[*] < -3)';
?column?
----------
f
(1 row)
select jsonb '1' @? '$ ? ($ > 0)';
?column?
----------
t
(1 row)
-- arithmetic errors
select jsonb_path_query('[1,2,0,3]', '$[*] ? (2 / @ > 0)');
jsonb_path_query
------------------
1
2
3
(3 rows)
select jsonb_path_query('[1,2,0,3]', '$[*] ? ((2 / @ > 0) is unknown)');
jsonb_path_query
------------------
0
(1 row)
select jsonb_path_query('0', '1 / $');
ERROR: division by zero
select jsonb_path_query('0', '1 / $ + 2');
ERROR: division by zero
select jsonb_path_query('0', '-(3 + 1 % $)');
ERROR: division by zero
select jsonb_path_query('1', '$ + "2"');
ERROR: right operand of jsonpath operator + is not a single numeric value
select jsonb_path_query('[1, 2]', '3 * $');
ERROR: right operand of jsonpath operator * is not a single numeric value
select jsonb_path_query('"a"', '-$');
ERROR: operand of unary jsonpath operator - is not a numeric value
select jsonb_path_query('[1,"2",3]', '+$');
ERROR: operand of unary jsonpath operator + is not a numeric value
select jsonb_path_query('1', '$ + "2"', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[1, 2]', '3 * $', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('"a"', '-$', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[1,"2",3]', '+$', silent => true);
jsonb_path_query
------------------
1
(1 row)
select jsonb '["1",2,0,3]' @? '-$[*]';
?column?
----------
t
(1 row)
select jsonb '[1,"2",0,3]' @? '-$[*]';
?column?
----------
t
(1 row)
select jsonb '["1",2,0,3]' @? 'strict -$[*]';
?column?
----------
(1 row)
select jsonb '[1,"2",0,3]' @? 'strict -$[*]';
?column?
----------
(1 row)
-- unwrapping of operator arguments in lax mode
select jsonb_path_query('{"a": [2]}', 'lax $.a * 3');
jsonb_path_query
------------------
6
(1 row)
select jsonb_path_query('{"a": [2]}', 'lax $.a + 3');
jsonb_path_query
------------------
5
(1 row)
select jsonb_path_query('{"a": [2, 3, 4]}', 'lax -$.a');
jsonb_path_query
------------------
-2
-3
-4
(3 rows)
-- should fail
select jsonb_path_query('{"a": [1, 2]}', 'lax $.a * 3');
ERROR: left operand of jsonpath operator * is not a single numeric value
select jsonb_path_query('{"a": [1, 2]}', 'lax $.a * 3', silent => true);
jsonb_path_query
------------------
(0 rows)
-- extension: boolean expressions
select jsonb_path_query('2', '$ > 1');
jsonb_path_query
------------------
true
(1 row)
select jsonb_path_query('2', '$ <= 1');
jsonb_path_query
------------------
false
(1 row)
select jsonb_path_query('2', '$ == "2"');
jsonb_path_query
------------------
null
(1 row)
select jsonb '2' @? '$ == "2"';
?column?
----------
t
(1 row)
select jsonb '2' @@ '$ > 1';
?column?
----------
t
(1 row)
select jsonb '2' @@ '$ <= 1';
?column?
----------
f
(1 row)
select jsonb '2' @@ '$ == "2"';
?column?
----------
(1 row)
select jsonb '2' @@ '1';
?column?
----------
(1 row)
select jsonb '{}' @@ '$';
?column?
----------
(1 row)
select jsonb '[]' @@ '$';
?column?
----------
(1 row)
select jsonb '[1,2,3]' @@ '$[*]';
?column?
----------
(1 row)
select jsonb '[]' @@ '$[*]';
?column?
----------
(1 row)
select jsonb_path_match('[[1, true], [2, false]]', 'strict $[*] ? (@[0] > $x) [1]', '{"x": 1}');
jsonb_path_match
------------------
f
(1 row)
select jsonb_path_match('[[1, true], [2, false]]', 'strict $[*] ? (@[0] < $x) [1]', '{"x": 2}');
jsonb_path_match
------------------
t
(1 row)
select jsonb_path_match('[{"a": 1}, {"a": 2}, 3]', 'lax exists($[*].a)', silent => false);
jsonb_path_match
------------------
t
(1 row)
select jsonb_path_match('[{"a": 1}, {"a": 2}, 3]', 'lax exists($[*].a)', silent => true);
jsonb_path_match
------------------
t
(1 row)
select jsonb_path_match('[{"a": 1}, {"a": 2}, 3]', 'strict exists($[*].a)', silent => false);
jsonb_path_match
------------------
(1 row)
select jsonb_path_match('[{"a": 1}, {"a": 2}, 3]', 'strict exists($[*].a)', silent => true);
jsonb_path_match
------------------
(1 row)
select jsonb_path_query('[null,1,true,"a",[],{}]', '$.type()');
jsonb_path_query
------------------
"array"
(1 row)
select jsonb_path_query('[null,1,true,"a",[],{}]', 'lax $.type()');
jsonb_path_query
------------------
"array"
(1 row)
select jsonb_path_query('[null,1,true,"a",[],{}]', '$[*].type()');
jsonb_path_query
------------------
"null"
"number"
"boolean"
"string"
"array"
"object"
(6 rows)
select jsonb_path_query('null', 'null.type()');
jsonb_path_query
------------------
"null"
(1 row)
select jsonb_path_query('null', 'true.type()');
jsonb_path_query
------------------
"boolean"
(1 row)
select jsonb_path_query('null', '(123).type()');
jsonb_path_query
------------------
"number"
(1 row)
select jsonb_path_query('null', '"123".type()');
jsonb_path_query
------------------
"string"
(1 row)
select jsonb_path_query('{"a": 2}', '($.a - 5).abs() + 10');
jsonb_path_query
------------------
13
(1 row)
select jsonb_path_query('{"a": 2.5}', '-($.a * $.a).floor() % 4.3');
jsonb_path_query
------------------
-1.7
(1 row)
select jsonb_path_query('[1, 2, 3]', '($[*] > 2) ? (@ == true)');
jsonb_path_query
------------------
true
(1 row)
select jsonb_path_query('[1, 2, 3]', '($[*] > 3).type()');
jsonb_path_query
------------------
"boolean"
(1 row)
select jsonb_path_query('[1, 2, 3]', '($[*].a > 3).type()');
jsonb_path_query
------------------
"boolean"
(1 row)
select jsonb_path_query('[1, 2, 3]', 'strict ($[*].a > 3).type()');
jsonb_path_query
------------------
"null"
(1 row)
select jsonb_path_query('[1,null,true,"11",[],[1],[1,2,3],{},{"a":1,"b":2}]', 'strict $[*].size()');
ERROR: jsonpath item method .size() can only be applied to an array
select jsonb_path_query('[1,null,true,"11",[],[1],[1,2,3],{},{"a":1,"b":2}]', 'strict $[*].size()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[1,null,true,"11",[],[1],[1,2,3],{},{"a":1,"b":2}]', 'lax $[*].size()');
jsonb_path_query
------------------
1
1
1
1
0
1
3
1
1
(9 rows)
select jsonb_path_query('[0, 1, -2, -3.4, 5.6]', '$[*].abs()');
jsonb_path_query
------------------
0
1
2
3.4
5.6
(5 rows)
select jsonb_path_query('[0, 1, -2, -3.4, 5.6]', '$[*].floor()');
jsonb_path_query
------------------
0
1
-2
-4
5
(5 rows)
select jsonb_path_query('[0, 1, -2, -3.4, 5.6]', '$[*].ceiling()');
jsonb_path_query
------------------
0
1
-2
-3
6
(5 rows)
select jsonb_path_query('[0, 1, -2, -3.4, 5.6]', '$[*].ceiling().abs()');
jsonb_path_query
------------------
0
1
2
3
6
(5 rows)
select jsonb_path_query('[0, 1, -2, -3.4, 5.6]', '$[*].ceiling().abs().type()');
jsonb_path_query
------------------
"number"
"number"
"number"
"number"
"number"
(5 rows)
select jsonb_path_query('[{},1]', '$[*].keyvalue()');
ERROR: jsonpath item method .keyvalue() can only be applied to an object
select jsonb_path_query('[{},1]', '$[*].keyvalue()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{}', '$.keyvalue()');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{"a": 1, "b": [1, 2], "c": {"a": "bbb"}}', '$.keyvalue()');
jsonb_path_query
----------------------------------------------
{"id": 0, "key": "a", "value": 1}
{"id": 0, "key": "b", "value": [1, 2]}
{"id": 0, "key": "c", "value": {"a": "bbb"}}
(3 rows)
select jsonb_path_query('[{"a": 1, "b": [1, 2]}, {"c": {"a": "bbb"}}]', '$[*].keyvalue()');
jsonb_path_query
-----------------------------------------------
{"id": 12, "key": "a", "value": 1}
{"id": 12, "key": "b", "value": [1, 2]}
{"id": 72, "key": "c", "value": {"a": "bbb"}}
(3 rows)
select jsonb_path_query('[{"a": 1, "b": [1, 2]}, {"c": {"a": "bbb"}}]', 'strict $.keyvalue()');
ERROR: jsonpath item method .keyvalue() can only be applied to an object
select jsonb_path_query('[{"a": 1, "b": [1, 2]}, {"c": {"a": "bbb"}}]', 'lax $.keyvalue()');
jsonb_path_query
-----------------------------------------------
{"id": 12, "key": "a", "value": 1}
{"id": 12, "key": "b", "value": [1, 2]}
{"id": 72, "key": "c", "value": {"a": "bbb"}}
(3 rows)
select jsonb_path_query('[{"a": 1, "b": [1, 2]}, {"c": {"a": "bbb"}}]', 'strict $.keyvalue().a');
ERROR: jsonpath item method .keyvalue() can only be applied to an object
select jsonb '{"a": 1, "b": [1, 2]}' @? 'lax $.keyvalue()';
?column?
----------
t
(1 row)
select jsonb '{"a": 1, "b": [1, 2]}' @? 'lax $.keyvalue().key';
?column?
----------
t
(1 row)
select jsonb_path_query('null', '$.double()');
ERROR: jsonpath item method .double() can only be applied to a string or numeric value
select jsonb_path_query('true', '$.double()');
ERROR: jsonpath item method .double() can only be applied to a string or numeric value
select jsonb_path_query('null', '$.double()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('true', '$.double()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', '$.double()');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $.double()');
ERROR: jsonpath item method .double() can only be applied to a string or numeric value
select jsonb_path_query('{}', '$.double()');
ERROR: jsonpath item method .double() can only be applied to a string or numeric value
select jsonb_path_query('[]', 'strict $.double()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{}', '$.double()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('1.23', '$.double()');
jsonb_path_query
------------------
1.23
(1 row)
select jsonb_path_query('"1.23"', '$.double()');
jsonb_path_query
------------------
1.23
(1 row)
select jsonb_path_query('"1.23aaa"', '$.double()');
ERROR: argument "1.23aaa" of jsonpath item method .double() is invalid for type double precision
select jsonb_path_query('1e1000', '$.double()');
ERROR: argument "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" of jsonpath item method .double() is invalid for type double precision
select jsonb_path_query('"nan"', '$.double()');
ERROR: NaN or Infinity is not allowed for jsonpath item method .double()
select jsonb_path_query('"NaN"', '$.double()');
ERROR: NaN or Infinity is not allowed for jsonpath item method .double()
select jsonb_path_query('"inf"', '$.double()');
ERROR: NaN or Infinity is not allowed for jsonpath item method .double()
select jsonb_path_query('"-inf"', '$.double()');
ERROR: NaN or Infinity is not allowed for jsonpath item method .double()
select jsonb_path_query('"inf"', '$.double()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('"-inf"', '$.double()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{}', '$.abs()');
ERROR: jsonpath item method .abs() can only be applied to a numeric value
select jsonb_path_query('true', '$.floor()');
ERROR: jsonpath item method .floor() can only be applied to a numeric value
select jsonb_path_query('"1.2"', '$.ceiling()');
ERROR: jsonpath item method .ceiling() can only be applied to a numeric value
select jsonb_path_query('{}', '$.abs()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('true', '$.floor()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('"1.2"', '$.ceiling()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('["", "a", "abc", "abcabc"]', '$[*] ? (@ starts with "abc")');
jsonb_path_query
------------------
"abc"
"abcabc"
(2 rows)
select jsonb_path_query('["", "a", "abc", "abcabc"]', 'strict $ ? (@[*] starts with "abc")');
jsonb_path_query
----------------------------
["", "a", "abc", "abcabc"]
(1 row)
select jsonb_path_query('["", "a", "abd", "abdabc"]', 'strict $ ? (@[*] starts with "abc")');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('["abc", "abcabc", null, 1]', 'strict $ ? (@[*] starts with "abc")');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('["abc", "abcabc", null, 1]', 'strict $ ? ((@[*] starts with "abc") is unknown)');
jsonb_path_query
----------------------------
["abc", "abcabc", null, 1]
(1 row)
select jsonb_path_query('[[null, 1, "abc", "abcabc"]]', 'lax $ ? (@[*] starts with "abc")');
jsonb_path_query
----------------------------
[null, 1, "abc", "abcabc"]
(1 row)
select jsonb_path_query('[[null, 1, "abd", "abdabc"]]', 'lax $ ? ((@[*] starts with "abc") is unknown)');
jsonb_path_query
----------------------------
[null, 1, "abd", "abdabc"]
(1 row)
select jsonb_path_query('[null, 1, "abd", "abdabc"]', 'lax $[*] ? ((@ starts with "abc") is unknown)');
jsonb_path_query
------------------
null
1
(2 rows)
select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "babc", "adc\nabc", "ab\nadc"]', 'lax $[*] ? (@ like_regex "^ab.*c")');
jsonb_path_query
------------------
"abc"
"abdacb"
(2 rows)
select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "babc", "adc\nabc", "ab\nadc"]', 'lax $[*] ? (@ like_regex "^ab.*c" flag "i")');
jsonb_path_query
------------------
"abc"
"aBdC"
"abdacb"
(3 rows)
select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "babc", "adc\nabc", "ab\nadc"]', 'lax $[*] ? (@ like_regex "^ab.*c" flag "m")');
jsonb_path_query
------------------
"abc"
"abdacb"
"adc\nabc"
(3 rows)
select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "babc", "adc\nabc", "ab\nadc"]', 'lax $[*] ? (@ like_regex "^ab.*c" flag "s")');
jsonb_path_query
------------------
"abc"
"abdacb"
"ab\nadc"
(3 rows)
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "a\\b" flag "q")');
jsonb_path_query
------------------
"a\\b"
"^a\\b$"
(2 rows)
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "a\\b" flag "")');
jsonb_path_query
------------------
"a\b"
(1 row)
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\b$" flag "q")');
jsonb_path_query
------------------
"^a\\b$"
(1 row)
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\B$" flag "q")');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\B$" flag "iq")');
jsonb_path_query
------------------
"^a\\b$"
(1 row)
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\b$" flag "")');
jsonb_path_query
------------------
"a\b"
(1 row)
select jsonb_path_query('null', '$.datetime()');
ERROR: jsonpath item method .datetime() can only be applied to a string
select jsonb_path_query('true', '$.datetime()');
ERROR: jsonpath item method .datetime() can only be applied to a string
select jsonb_path_query('1', '$.datetime()');
ERROR: jsonpath item method .datetime() can only be applied to a string
select jsonb_path_query('[]', '$.datetime()');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $.datetime()');
ERROR: jsonpath item method .datetime() can only be applied to a string
select jsonb_path_query('{}', '$.datetime()');
ERROR: jsonpath item method .datetime() can only be applied to a string
select jsonb_path_query('"bogus"', '$.datetime()');
ERROR: datetime format is not recognized: "bogus"
HINT: Use a datetime template argument to specify the input data format.
select jsonb_path_query('"12:34"', '$.datetime("aaa")');
ERROR: invalid datetime format separator: "a"
select jsonb_path_query('"aaaa"', '$.datetime("HH24")');
ERROR: invalid value "aa" for "HH24"
DETAIL: Value must be an integer.
select jsonb '"10-03-2017"' @? '$.datetime("dd-mm-yyyy")';
?column?
----------
t
(1 row)
select jsonb_path_query('"10-03-2017"', '$.datetime("dd-mm-yyyy")');
jsonb_path_query
------------------
"2017-03-10"
(1 row)
select jsonb_path_query('"10-03-2017"', '$.datetime("dd-mm-yyyy").type()');
jsonb_path_query
------------------
"date"
(1 row)
select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy")');
ERROR: trailing characters remain in input string after datetime format
select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy").type()');
ERROR: trailing characters remain in input string after datetime format
select jsonb_path_query('"10-03-2017 12:34"', ' $.datetime("dd-mm-yyyy HH24:MI").type()');
jsonb_path_query
-------------------------------
"timestamp without time zone"
(1 row)
select jsonb_path_query('"10-03-2017 12:34 +05:20"', '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM").type()');
jsonb_path_query
----------------------------
"timestamp with time zone"
(1 row)
select jsonb_path_query('"12:34:56"', '$.datetime("HH24:MI:SS").type()');
jsonb_path_query
--------------------------
"time without time zone"
(1 row)
select jsonb_path_query('"12:34:56 +05:20"', '$.datetime("HH24:MI:SS TZH:TZM").type()');
jsonb_path_query
-----------------------
"time with time zone"
(1 row)
select jsonb_path_query('"10-03-2017T12:34:56"', '$.datetime("dd-mm-yyyy\"T\"HH24:MI:SS")');
jsonb_path_query
-----------------------
"2017-03-10T12:34:56"
(1 row)
select jsonb_path_query('"10-03-2017t12:34:56"', '$.datetime("dd-mm-yyyy\"T\"HH24:MI:SS")');
ERROR: unmatched format character "T"
select jsonb_path_query('"10-03-2017 12:34:56"', '$.datetime("dd-mm-yyyy\"T\"HH24:MI:SS")');
ERROR: unmatched format character "T"
-- Test .bigint()
select jsonb_path_query('null', '$.bigint()');
ERROR: jsonpath item method .bigint() can only be applied to a string or numeric value
select jsonb_path_query('true', '$.bigint()');
ERROR: jsonpath item method .bigint() can only be applied to a string or numeric value
select jsonb_path_query('null', '$.bigint()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('true', '$.bigint()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', '$.bigint()');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $.bigint()');
ERROR: jsonpath item method .bigint() can only be applied to a string or numeric value
select jsonb_path_query('{}', '$.bigint()');
ERROR: jsonpath item method .bigint() can only be applied to a string or numeric value
select jsonb_path_query('[]', 'strict $.bigint()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{}', '$.bigint()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('"1.23"', '$.bigint()');
ERROR: argument "1.23" of jsonpath item method .bigint() is invalid for type bigint
select jsonb_path_query('"1.23aaa"', '$.bigint()');
ERROR: argument "1.23aaa" of jsonpath item method .bigint() is invalid for type bigint
select jsonb_path_query('1e1000', '$.bigint()');
ERROR: argument "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" of jsonpath item method .bigint() is invalid for type bigint
select jsonb_path_query('"nan"', '$.bigint()');
ERROR: argument "nan" of jsonpath item method .bigint() is invalid for type bigint
select jsonb_path_query('"NaN"', '$.bigint()');
ERROR: argument "NaN" of jsonpath item method .bigint() is invalid for type bigint
select jsonb_path_query('"inf"', '$.bigint()');
ERROR: argument "inf" of jsonpath item method .bigint() is invalid for type bigint
select jsonb_path_query('"-inf"', '$.bigint()');
ERROR: argument "-inf" of jsonpath item method .bigint() is invalid for type bigint
select jsonb_path_query('"inf"', '$.bigint()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('"-inf"', '$.bigint()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('123', '$.bigint()');
jsonb_path_query
------------------
123
(1 row)
select jsonb_path_query('"123"', '$.bigint()');
jsonb_path_query
------------------
123
(1 row)
select jsonb_path_query('1.23', '$.bigint()');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('1.83', '$.bigint()');
jsonb_path_query
------------------
2
(1 row)
select jsonb_path_query('1234567890123', '$.bigint()');
jsonb_path_query
------------------
1234567890123
(1 row)
select jsonb_path_query('"1234567890123"', '$.bigint()');
jsonb_path_query
------------------
1234567890123
(1 row)
select jsonb_path_query('12345678901234567890', '$.bigint()');
ERROR: argument "12345678901234567890" of jsonpath item method .bigint() is invalid for type bigint
select jsonb_path_query('"12345678901234567890"', '$.bigint()');
ERROR: argument "12345678901234567890" of jsonpath item method .bigint() is invalid for type bigint
select jsonb_path_query('"+123"', '$.bigint()');
jsonb_path_query
------------------
123
(1 row)
select jsonb_path_query('-123', '$.bigint()');
jsonb_path_query
------------------
-123
(1 row)
select jsonb_path_query('"-123"', '$.bigint()');
jsonb_path_query
------------------
-123
(1 row)
select jsonb_path_query('123', '$.bigint() * 2');
jsonb_path_query
------------------
246
(1 row)
-- Test .boolean()
select jsonb_path_query('null', '$.boolean()');
ERROR: jsonpath item method .boolean() can only be applied to a bool, string, or numeric value
select jsonb_path_query('null', '$.boolean()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', '$.boolean()');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $.boolean()');
ERROR: jsonpath item method .boolean() can only be applied to a bool, string, or numeric value
select jsonb_path_query('{}', '$.boolean()');
ERROR: jsonpath item method .boolean() can only be applied to a bool, string, or numeric value
select jsonb_path_query('[]', 'strict $.boolean()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{}', '$.boolean()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('1.23', '$.boolean()');
ERROR: argument "1.23" of jsonpath item method .boolean() is invalid for type boolean
select jsonb_path_query('"1.23"', '$.boolean()');
ERROR: argument "1.23" of jsonpath item method .boolean() is invalid for type boolean
select jsonb_path_query('"1.23aaa"', '$.boolean()');
ERROR: argument "1.23aaa" of jsonpath item method .boolean() is invalid for type boolean
select jsonb_path_query('1e1000', '$.boolean()');
ERROR: argument "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" of jsonpath item method .boolean() is invalid for type boolean
select jsonb_path_query('"nan"', '$.boolean()');
ERROR: argument "nan" of jsonpath item method .boolean() is invalid for type boolean
select jsonb_path_query('"NaN"', '$.boolean()');
ERROR: argument "NaN" of jsonpath item method .boolean() is invalid for type boolean
select jsonb_path_query('"inf"', '$.boolean()');
ERROR: argument "inf" of jsonpath item method .boolean() is invalid for type boolean
select jsonb_path_query('"-inf"', '$.boolean()');
ERROR: argument "-inf" of jsonpath item method .boolean() is invalid for type boolean
select jsonb_path_query('"inf"', '$.boolean()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('"-inf"', '$.boolean()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('"100"', '$.boolean()');
ERROR: argument "100" of jsonpath item method .boolean() is invalid for type boolean
select jsonb_path_query('true', '$.boolean()');
jsonb_path_query
------------------
true
(1 row)
select jsonb_path_query('false', '$.boolean()');
jsonb_path_query
------------------
false
(1 row)
select jsonb_path_query('1', '$.boolean()');
jsonb_path_query
------------------
true
(1 row)
select jsonb_path_query('0', '$.boolean()');
jsonb_path_query
------------------
false
(1 row)
select jsonb_path_query('-1', '$.boolean()');
jsonb_path_query
------------------
true
(1 row)
select jsonb_path_query('100', '$.boolean()');
jsonb_path_query
------------------
true
(1 row)
select jsonb_path_query('"1"', '$.boolean()');
jsonb_path_query
------------------
true
(1 row)
select jsonb_path_query('"0"', '$.boolean()');
jsonb_path_query
------------------
false
(1 row)
select jsonb_path_query('"true"', '$.boolean()');
jsonb_path_query
------------------
true
(1 row)
select jsonb_path_query('"false"', '$.boolean()');
jsonb_path_query
------------------
false
(1 row)
select jsonb_path_query('"TRUE"', '$.boolean()');
jsonb_path_query
------------------
true
(1 row)
select jsonb_path_query('"FALSE"', '$.boolean()');
jsonb_path_query
------------------
false
(1 row)
select jsonb_path_query('"yes"', '$.boolean()');
jsonb_path_query
------------------
true
(1 row)
select jsonb_path_query('"NO"', '$.boolean()');
jsonb_path_query
------------------
false
(1 row)
select jsonb_path_query('"T"', '$.boolean()');
jsonb_path_query
------------------
true
(1 row)
select jsonb_path_query('"f"', '$.boolean()');
jsonb_path_query
------------------
false
(1 row)
select jsonb_path_query('"y"', '$.boolean()');
jsonb_path_query
------------------
true
(1 row)
select jsonb_path_query('"N"', '$.boolean()');
jsonb_path_query
------------------
false
(1 row)
select jsonb_path_query('true', '$.boolean().type()');
jsonb_path_query
------------------
"boolean"
(1 row)
select jsonb_path_query('123', '$.boolean().type()');
jsonb_path_query
------------------
"boolean"
(1 row)
select jsonb_path_query('"Yes"', '$.boolean().type()');
jsonb_path_query
------------------
"boolean"
(1 row)
select jsonb_path_query_array('[1, "yes", false]', '$[*].boolean()');
jsonb_path_query_array
------------------------
[true, true, false]
(1 row)
-- Test .date()
select jsonb_path_query('null', '$.date()');
ERROR: jsonpath item method .date() can only be applied to a string
select jsonb_path_query('true', '$.date()');
ERROR: jsonpath item method .date() can only be applied to a string
select jsonb_path_query('1', '$.date()');
ERROR: jsonpath item method .date() can only be applied to a string
select jsonb_path_query('[]', '$.date()');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $.date()');
ERROR: jsonpath item method .date() can only be applied to a string
select jsonb_path_query('{}', '$.date()');
ERROR: jsonpath item method .date() can only be applied to a string
select jsonb_path_query('"bogus"', '$.date()');
ERROR: date format is not recognized: "bogus"
select jsonb '"2023-08-15"' @? '$.date()';
?column?
----------
t
(1 row)
select jsonb_path_query('"2023-08-15"', '$.date()');
jsonb_path_query
------------------
"2023-08-15"
(1 row)
select jsonb_path_query('"2023-08-15"', '$.date().type()');
jsonb_path_query
------------------
"date"
(1 row)
select jsonb_path_query('"12:34:56"', '$.date()');
ERROR: date format is not recognized: "12:34:56"
select jsonb_path_query('"12:34:56 +05:30"', '$.date()');
ERROR: date format is not recognized: "12:34:56 +05:30"
select jsonb_path_query('"2023-08-15 12:34:56"', '$.date()');
jsonb_path_query
------------------
"2023-08-15"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.date()');
ERROR: cannot convert value from timestamptz to date without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz('"2023-08-15 12:34:56 +05:30"', '$.date()'); -- should work
jsonb_path_query_tz
---------------------
"2023-08-15"
(1 row)
select jsonb_path_query('"2023-08-15"', '$.date(2)');
ERROR: syntax error at or near "2" of jsonpath input
LINE 1: select jsonb_path_query('"2023-08-15"', '$.date(2)');
^
-- Test .decimal()
select jsonb_path_query('null', '$.decimal()');
ERROR: jsonpath item method .decimal() can only be applied to a string or numeric value
select jsonb_path_query('true', '$.decimal()');
ERROR: jsonpath item method .decimal() can only be applied to a string or numeric value
select jsonb_path_query('null', '$.decimal()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('true', '$.decimal()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', '$.decimal()');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $.decimal()');
ERROR: jsonpath item method .decimal() can only be applied to a string or numeric value
select jsonb_path_query('{}', '$.decimal()');
ERROR: jsonpath item method .decimal() can only be applied to a string or numeric value
select jsonb_path_query('[]', 'strict $.decimal()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{}', '$.decimal()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('1.23', '$.decimal()');
jsonb_path_query
------------------
1.23
(1 row)
select jsonb_path_query('"1.23"', '$.decimal()');
jsonb_path_query
------------------
1.23
(1 row)
select jsonb_path_query('"1.23aaa"', '$.decimal()');
ERROR: argument "1.23aaa" of jsonpath item method .decimal() is invalid for type numeric
select jsonb_path_query('1e1000', '$.decimal()');
jsonb_path_query
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
(1 row)
select jsonb_path_query('"nan"', '$.decimal()');
ERROR: NaN or Infinity is not allowed for jsonpath item method .decimal()
select jsonb_path_query('"NaN"', '$.decimal()');
ERROR: NaN or Infinity is not allowed for jsonpath item method .decimal()
select jsonb_path_query('"inf"', '$.decimal()');
ERROR: NaN or Infinity is not allowed for jsonpath item method .decimal()
select jsonb_path_query('"-inf"', '$.decimal()');
ERROR: NaN or Infinity is not allowed for jsonpath item method .decimal()
select jsonb_path_query('"inf"', '$.decimal()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('"-inf"', '$.decimal()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('123', '$.decimal()');
jsonb_path_query
------------------
123
(1 row)
select jsonb_path_query('"123"', '$.decimal()');
jsonb_path_query
------------------
123
(1 row)
select jsonb_path_query('12345678901234567890', '$.decimal()');
jsonb_path_query
----------------------
12345678901234567890
(1 row)
select jsonb_path_query('"12345678901234567890"', '$.decimal()');
jsonb_path_query
----------------------
12345678901234567890
(1 row)
select jsonb_path_query('"+12.3"', '$.decimal()');
jsonb_path_query
------------------
12.3
(1 row)
select jsonb_path_query('-12.3', '$.decimal()');
jsonb_path_query
------------------
-12.3
(1 row)
select jsonb_path_query('"-12.3"', '$.decimal()');
jsonb_path_query
------------------
-12.3
(1 row)
select jsonb_path_query('12.3', '$.decimal() * 2');
jsonb_path_query
------------------
24.6
(1 row)
select jsonb_path_query('12345.678', '$.decimal(6, 1)');
jsonb_path_query
------------------
12345.7
(1 row)
select jsonb_path_query('12345.678', '$.decimal(6, 2)');
ERROR: argument "12345.678" of jsonpath item method .decimal() is invalid for type numeric
select jsonb_path_query('1234.5678', '$.decimal(6, 2)');
jsonb_path_query
------------------
1234.57
(1 row)
select jsonb_path_query('12345.678', '$.decimal(4, 6)');
ERROR: argument "12345.678" of jsonpath item method .decimal() is invalid for type numeric
select jsonb_path_query('12345.678', '$.decimal(0, 6)');
ERROR: NUMERIC precision 0 must be between 1 and 1000
select jsonb_path_query('12345.678', '$.decimal(1001, 6)');
ERROR: NUMERIC precision 1001 must be between 1 and 1000
select jsonb_path_query('1234.5678', '$.decimal(+6, +2)');
jsonb_path_query
------------------
1234.57
(1 row)
select jsonb_path_query('1234.5678', '$.decimal(+6, -2)');
jsonb_path_query
------------------
1200
(1 row)
select jsonb_path_query('1234.5678', '$.decimal(-6, +2)');
ERROR: NUMERIC precision -6 must be between 1 and 1000
select jsonb_path_query('1234.5678', '$.decimal(6, -1001)');
ERROR: NUMERIC scale -1001 must be between -1000 and 1000
select jsonb_path_query('1234.5678', '$.decimal(6, 1001)');
ERROR: NUMERIC scale 1001 must be between -1000 and 1000
select jsonb_path_query('-1234.5678', '$.decimal(+6, -2)');
jsonb_path_query
------------------
-1200
(1 row)
select jsonb_path_query('0.0123456', '$.decimal(1,2)');
jsonb_path_query
------------------
0.01
(1 row)
select jsonb_path_query('0.0012345', '$.decimal(2,4)');
jsonb_path_query
------------------
0.0012
(1 row)
select jsonb_path_query('-0.00123456', '$.decimal(2,-4)');
jsonb_path_query
------------------
0
(1 row)
select jsonb_path_query('12.3', '$.decimal(12345678901,1)');
ERROR: precision of jsonpath item method .decimal() is out of range for type integer
select jsonb_path_query('12.3', '$.decimal(1,12345678901)');
ERROR: scale of jsonpath item method .decimal() is out of range for type integer
-- Test .integer()
select jsonb_path_query('null', '$.integer()');
ERROR: jsonpath item method .integer() can only be applied to a string or numeric value
select jsonb_path_query('true', '$.integer()');
ERROR: jsonpath item method .integer() can only be applied to a string or numeric value
select jsonb_path_query('null', '$.integer()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('true', '$.integer()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', '$.integer()');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $.integer()');
ERROR: jsonpath item method .integer() can only be applied to a string or numeric value
select jsonb_path_query('{}', '$.integer()');
ERROR: jsonpath item method .integer() can only be applied to a string or numeric value
select jsonb_path_query('[]', 'strict $.integer()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{}', '$.integer()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('"1.23"', '$.integer()');
ERROR: argument "1.23" of jsonpath item method .integer() is invalid for type integer
select jsonb_path_query('"1.23aaa"', '$.integer()');
ERROR: argument "1.23aaa" of jsonpath item method .integer() is invalid for type integer
select jsonb_path_query('1e1000', '$.integer()');
ERROR: argument "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" of jsonpath item method .integer() is invalid for type integer
select jsonb_path_query('"nan"', '$.integer()');
ERROR: argument "nan" of jsonpath item method .integer() is invalid for type integer
select jsonb_path_query('"NaN"', '$.integer()');
ERROR: argument "NaN" of jsonpath item method .integer() is invalid for type integer
select jsonb_path_query('"inf"', '$.integer()');
ERROR: argument "inf" of jsonpath item method .integer() is invalid for type integer
select jsonb_path_query('"-inf"', '$.integer()');
ERROR: argument "-inf" of jsonpath item method .integer() is invalid for type integer
select jsonb_path_query('"inf"', '$.integer()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('"-inf"', '$.integer()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('123', '$.integer()');
jsonb_path_query
------------------
123
(1 row)
select jsonb_path_query('"123"', '$.integer()');
jsonb_path_query
------------------
123
(1 row)
select jsonb_path_query('1.23', '$.integer()');
jsonb_path_query
------------------
1
(1 row)
select jsonb_path_query('1.83', '$.integer()');
jsonb_path_query
------------------
2
(1 row)
select jsonb_path_query('12345678901', '$.integer()');
ERROR: argument "12345678901" of jsonpath item method .integer() is invalid for type integer
select jsonb_path_query('"12345678901"', '$.integer()');
ERROR: argument "12345678901" of jsonpath item method .integer() is invalid for type integer
select jsonb_path_query('"+123"', '$.integer()');
jsonb_path_query
------------------
123
(1 row)
select jsonb_path_query('-123', '$.integer()');
jsonb_path_query
------------------
-123
(1 row)
select jsonb_path_query('"-123"', '$.integer()');
jsonb_path_query
------------------
-123
(1 row)
select jsonb_path_query('123', '$.integer() * 2');
jsonb_path_query
------------------
246
(1 row)
-- Test .number()
select jsonb_path_query('null', '$.number()');
ERROR: jsonpath item method .number() can only be applied to a string or numeric value
select jsonb_path_query('true', '$.number()');
ERROR: jsonpath item method .number() can only be applied to a string or numeric value
select jsonb_path_query('null', '$.number()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('true', '$.number()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', '$.number()');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $.number()');
ERROR: jsonpath item method .number() can only be applied to a string or numeric value
select jsonb_path_query('{}', '$.number()');
ERROR: jsonpath item method .number() can only be applied to a string or numeric value
select jsonb_path_query('[]', 'strict $.number()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{}', '$.number()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('1.23', '$.number()');
jsonb_path_query
------------------
1.23
(1 row)
select jsonb_path_query('"1.23"', '$.number()');
jsonb_path_query
------------------
1.23
(1 row)
select jsonb_path_query('"1.23aaa"', '$.number()');
ERROR: argument "1.23aaa" of jsonpath item method .number() is invalid for type numeric
select jsonb_path_query('1e1000', '$.number()');
jsonb_path_query
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
(1 row)
select jsonb_path_query('"nan"', '$.number()');
ERROR: NaN or Infinity is not allowed for jsonpath item method .number()
select jsonb_path_query('"NaN"', '$.number()');
ERROR: NaN or Infinity is not allowed for jsonpath item method .number()
select jsonb_path_query('"inf"', '$.number()');
ERROR: NaN or Infinity is not allowed for jsonpath item method .number()
select jsonb_path_query('"-inf"', '$.number()');
ERROR: NaN or Infinity is not allowed for jsonpath item method .number()
select jsonb_path_query('"inf"', '$.number()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('"-inf"', '$.number()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('123', '$.number()');
jsonb_path_query
------------------
123
(1 row)
select jsonb_path_query('"123"', '$.number()');
jsonb_path_query
------------------
123
(1 row)
select jsonb_path_query('12345678901234567890', '$.number()');
jsonb_path_query
----------------------
12345678901234567890
(1 row)
select jsonb_path_query('"12345678901234567890"', '$.number()');
jsonb_path_query
----------------------
12345678901234567890
(1 row)
select jsonb_path_query('"+12.3"', '$.number()');
jsonb_path_query
------------------
12.3
(1 row)
select jsonb_path_query('-12.3', '$.number()');
jsonb_path_query
------------------
-12.3
(1 row)
select jsonb_path_query('"-12.3"', '$.number()');
jsonb_path_query
------------------
-12.3
(1 row)
select jsonb_path_query('12.3', '$.number() * 2');
jsonb_path_query
------------------
24.6
(1 row)
-- Test .string()
select jsonb_path_query('null', '$.string()');
ERROR: jsonpath item method .string() can only be applied to a bool, string, numeric, or datetime value
select jsonb_path_query('null', '$.string()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', '$.string()');
ERROR: jsonpath item method .string() can only be applied to a bool, string, numeric, or datetime value
select jsonb_path_query('[]', 'strict $.string()');
ERROR: jsonpath item method .string() can only be applied to a bool, string, numeric, or datetime value
select jsonb_path_query('{}', '$.string()');
ERROR: jsonpath item method .string() can only be applied to a bool, string, numeric, or datetime value
select jsonb_path_query('[]', 'strict $.string()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('{}', '$.string()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('1.23', '$.string()');
jsonb_path_query
------------------
"1.23"
(1 row)
select jsonb_path_query('"1.23"', '$.string()');
jsonb_path_query
------------------
"1.23"
(1 row)
select jsonb_path_query('"1.23aaa"', '$.string()');
jsonb_path_query
------------------
"1.23aaa"
(1 row)
select jsonb_path_query('1234', '$.string()');
jsonb_path_query
------------------
"1234"
(1 row)
select jsonb_path_query('true', '$.string()');
jsonb_path_query
------------------
"true"
(1 row)
select jsonb_path_query('1234', '$.string().type()');
jsonb_path_query
------------------
"string"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56 +5:30"', '$.timestamp().string()');
ERROR: cannot convert value from timestamptz to timestamp without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz('"2023-08-15 12:34:56 +5:30"', '$.timestamp().string()'); -- should work
jsonb_path_query_tz
----------------------------
"Tue Aug 15 00:04:56 2023"
(1 row)
select jsonb_path_query_array('[1.23, "yes", false]', '$[*].string()');
jsonb_path_query_array
--------------------------
["1.23", "yes", "false"]
(1 row)
select jsonb_path_query_array('[1.23, "yes", false]', '$[*].string().type()');
jsonb_path_query_array
--------------------------------
["string", "string", "string"]
(1 row)
-- Test .time()
select jsonb_path_query('null', '$.time()');
ERROR: jsonpath item method .time() can only be applied to a string
select jsonb_path_query('true', '$.time()');
ERROR: jsonpath item method .time() can only be applied to a string
select jsonb_path_query('1', '$.time()');
ERROR: jsonpath item method .time() can only be applied to a string
select jsonb_path_query('[]', '$.time()');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $.time()');
ERROR: jsonpath item method .time() can only be applied to a string
select jsonb_path_query('{}', '$.time()');
ERROR: jsonpath item method .time() can only be applied to a string
select jsonb_path_query('"bogus"', '$.time()');
ERROR: time format is not recognized: "bogus"
select jsonb '"12:34:56"' @? '$.time()';
?column?
----------
t
(1 row)
select jsonb_path_query('"12:34:56"', '$.time()');
jsonb_path_query
------------------
"12:34:56"
(1 row)
select jsonb_path_query('"12:34:56"', '$.time().type()');
jsonb_path_query
--------------------------
"time without time zone"
(1 row)
select jsonb_path_query('"2023-08-15"', '$.time()');
ERROR: time format is not recognized: "2023-08-15"
select jsonb_path_query('"12:34:56 +05:30"', '$.time()');
ERROR: cannot convert value from timetz to time without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz('"12:34:56 +05:30"', '$.time()'); -- should work
jsonb_path_query_tz
---------------------
"12:34:56"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56"', '$.time()');
jsonb_path_query
------------------
"12:34:56"
(1 row)
select jsonb_path_query('"12:34:56.789"', '$.time(-1)');
ERROR: syntax error at or near "-" of jsonpath input
LINE 1: select jsonb_path_query('"12:34:56.789"', '$.time(-1)');
^
select jsonb_path_query('"12:34:56.789"', '$.time(2.0)');
ERROR: syntax error at or near "2.0" of jsonpath input
LINE 1: select jsonb_path_query('"12:34:56.789"', '$.time(2.0)');
^
select jsonb_path_query('"12:34:56.789"', '$.time(12345678901)');
ERROR: time precision of jsonpath item method .time() is out of range for type integer
select jsonb_path_query('"12:34:56.789"', '$.time(0)');
jsonb_path_query
------------------
"12:34:57"
(1 row)
select jsonb_path_query('"12:34:56.789"', '$.time(2)');
jsonb_path_query
------------------
"12:34:56.79"
(1 row)
select jsonb_path_query('"12:34:56.789"', '$.time(5)');
jsonb_path_query
------------------
"12:34:56.789"
(1 row)
select jsonb_path_query('"12:34:56.789"', '$.time(10)');
WARNING: TIME(10) precision reduced to maximum allowed, 6
jsonb_path_query
------------------
"12:34:56.789"
(1 row)
select jsonb_path_query('"12:34:56.789012"', '$.time(8)');
WARNING: TIME(8) precision reduced to maximum allowed, 6
jsonb_path_query
-------------------
"12:34:56.789012"
(1 row)
-- Test .time_tz()
select jsonb_path_query('null', '$.time_tz()');
ERROR: jsonpath item method .time_tz() can only be applied to a string
select jsonb_path_query('true', '$.time_tz()');
ERROR: jsonpath item method .time_tz() can only be applied to a string
select jsonb_path_query('1', '$.time_tz()');
ERROR: jsonpath item method .time_tz() can only be applied to a string
select jsonb_path_query('[]', '$.time_tz()');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $.time_tz()');
ERROR: jsonpath item method .time_tz() can only be applied to a string
select jsonb_path_query('{}', '$.time_tz()');
ERROR: jsonpath item method .time_tz() can only be applied to a string
select jsonb_path_query('"bogus"', '$.time_tz()');
ERROR: time_tz format is not recognized: "bogus"
select jsonb '"12:34:56 +05:30"' @? '$.time_tz()';
?column?
----------
t
(1 row)
select jsonb_path_query('"12:34:56 +05:30"', '$.time_tz()');
jsonb_path_query
------------------
"12:34:56+05:30"
(1 row)
select jsonb_path_query('"12:34:56 +05:30"', '$.time_tz().type()');
jsonb_path_query
-----------------------
"time with time zone"
(1 row)
select jsonb_path_query('"2023-08-15"', '$.time_tz()');
ERROR: time_tz format is not recognized: "2023-08-15"
select jsonb_path_query('"2023-08-15 12:34:56"', '$.time_tz()');
ERROR: time_tz format is not recognized: "2023-08-15 12:34:56"
select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(-1)');
ERROR: syntax error at or near "-" of jsonpath input
LINE 1: select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(...
^
select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(2.0)');
ERROR: syntax error at or near "2.0" of jsonpath input
LINE 1: select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(...
^
select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(12345678901)');
ERROR: time precision of jsonpath item method .time_tz() is out of range for type integer
select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(0)');
jsonb_path_query
------------------
"12:34:57+05:30"
(1 row)
select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(2)');
jsonb_path_query
---------------------
"12:34:56.79+05:30"
(1 row)
select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(5)');
jsonb_path_query
----------------------
"12:34:56.789+05:30"
(1 row)
select jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(10)');
WARNING: TIME(10) WITH TIME ZONE precision reduced to maximum allowed, 6
jsonb_path_query
----------------------
"12:34:56.789+05:30"
(1 row)
select jsonb_path_query('"12:34:56.789012 +05:30"', '$.time_tz(8)');
WARNING: TIME(8) WITH TIME ZONE precision reduced to maximum allowed, 6
jsonb_path_query
-------------------------
"12:34:56.789012+05:30"
(1 row)
-- Test .timestamp()
select jsonb_path_query('null', '$.timestamp()');
ERROR: jsonpath item method .timestamp() can only be applied to a string
select jsonb_path_query('true', '$.timestamp()');
ERROR: jsonpath item method .timestamp() can only be applied to a string
select jsonb_path_query('1', '$.timestamp()');
ERROR: jsonpath item method .timestamp() can only be applied to a string
select jsonb_path_query('[]', '$.timestamp()');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $.timestamp()');
ERROR: jsonpath item method .timestamp() can only be applied to a string
select jsonb_path_query('{}', '$.timestamp()');
ERROR: jsonpath item method .timestamp() can only be applied to a string
select jsonb_path_query('"bogus"', '$.timestamp()');
ERROR: timestamp format is not recognized: "bogus"
select jsonb '"2023-08-15 12:34:56"' @? '$.timestamp()';
?column?
----------
t
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp()');
jsonb_path_query
-----------------------
"2023-08-15T12:34:56"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp().type()');
jsonb_path_query
-------------------------------
"timestamp without time zone"
(1 row)
select jsonb_path_query('"2023-08-15"', '$.timestamp()');
jsonb_path_query
-----------------------
"2023-08-15T00:00:00"
(1 row)
select jsonb_path_query('"12:34:56"', '$.timestamp()');
ERROR: timestamp format is not recognized: "12:34:56"
select jsonb_path_query('"12:34:56 +05:30"', '$.timestamp()');
ERROR: timestamp format is not recognized: "12:34:56 +05:30"
select jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(-1)');
ERROR: syntax error at or near "-" of jsonpath input
LINE 1: ...ect jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timesta...
^
select jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(2.0)');
ERROR: syntax error at or near "2.0" of jsonpath input
LINE 1: ...ect jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timesta...
^
select jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(12345678901)');
ERROR: time precision of jsonpath item method .timestamp() is out of range for type integer
select jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(0)');
jsonb_path_query
-----------------------
"2023-08-15T12:34:57"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(2)');
jsonb_path_query
--------------------------
"2023-08-15T12:34:56.79"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(5)');
jsonb_path_query
---------------------------
"2023-08-15T12:34:56.789"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(10)');
WARNING: TIMESTAMP(10) precision reduced to maximum allowed, 6
jsonb_path_query
---------------------------
"2023-08-15T12:34:56.789"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56.789012"', '$.timestamp(8)');
WARNING: TIMESTAMP(8) precision reduced to maximum allowed, 6
jsonb_path_query
------------------------------
"2023-08-15T12:34:56.789012"
(1 row)
-- Test .timestamp_tz()
select jsonb_path_query('null', '$.timestamp_tz()');
ERROR: jsonpath item method .timestamp_tz() can only be applied to a string
select jsonb_path_query('true', '$.timestamp_tz()');
ERROR: jsonpath item method .timestamp_tz() can only be applied to a string
select jsonb_path_query('1', '$.timestamp_tz()');
ERROR: jsonpath item method .timestamp_tz() can only be applied to a string
select jsonb_path_query('[]', '$.timestamp_tz()');
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $.timestamp_tz()');
ERROR: jsonpath item method .timestamp_tz() can only be applied to a string
select jsonb_path_query('{}', '$.timestamp_tz()');
ERROR: jsonpath item method .timestamp_tz() can only be applied to a string
select jsonb_path_query('"bogus"', '$.timestamp_tz()');
ERROR: timestamp_tz format is not recognized: "bogus"
select jsonb '"2023-08-15 12:34:56 +05:30"' @? '$.timestamp_tz()';
?column?
----------
t
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp_tz()');
jsonb_path_query
-----------------------------
"2023-08-15T12:34:56+05:30"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp_tz().type()');
jsonb_path_query
----------------------------
"timestamp with time zone"
(1 row)
select jsonb_path_query('"2023-08-15"', '$.timestamp_tz()');
ERROR: cannot convert value from date to timestamptz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz('"2023-08-15"', '$.timestamp_tz()'); -- should work
jsonb_path_query_tz
-----------------------------
"2023-08-15T07:00:00+00:00"
(1 row)
select jsonb_path_query('"12:34:56"', '$.timestamp_tz()');
ERROR: timestamp_tz format is not recognized: "12:34:56"
select jsonb_path_query('"12:34:56 +05:30"', '$.timestamp_tz()');
ERROR: timestamp_tz format is not recognized: "12:34:56 +05:30"
select jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(-1)');
ERROR: syntax error at or near "-" of jsonpath input
LINE 1: ...nb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timesta...
^
select jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(2.0)');
ERROR: syntax error at or near "2.0" of jsonpath input
LINE 1: ...nb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timesta...
^
select jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(12345678901)');
ERROR: time precision of jsonpath item method .timestamp_tz() is out of range for type integer
select jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(0)');
jsonb_path_query
-----------------------------
"2023-08-15T12:34:57+05:30"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(2)');
jsonb_path_query
--------------------------------
"2023-08-15T12:34:56.79+05:30"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(5)');
jsonb_path_query
---------------------------------
"2023-08-15T12:34:56.789+05:30"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(10)');
WARNING: TIMESTAMP(10) WITH TIME ZONE precision reduced to maximum allowed, 6
jsonb_path_query
---------------------------------
"2023-08-15T12:34:56.789+05:30"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56.789012 +05:30"', '$.timestamp_tz(8)');
WARNING: TIMESTAMP(8) WITH TIME ZONE precision reduced to maximum allowed, 6
jsonb_path_query
------------------------------------
"2023-08-15T12:34:56.789012+05:30"
(1 row)
set time zone '+00';
select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.time()');
ERROR: cannot convert value from timestamptz to time without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz('"2023-08-15 12:34:56 +05:30"', '$.time()'); -- should work
jsonb_path_query_tz
---------------------
"07:04:56"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.time_tz()');
jsonb_path_query
------------------
"07:04:56+00:00"
(1 row)
select jsonb_path_query('"12:34:56"', '$.time_tz()');
ERROR: cannot convert value from time to timetz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz('"12:34:56"', '$.time_tz()'); -- should work
jsonb_path_query_tz
---------------------
"12:34:56+00:00"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp()');
ERROR: cannot convert value from timestamptz to timestamp without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz('"2023-08-15 12:34:56 +05:30"', '$.timestamp()'); -- should work
jsonb_path_query_tz
-----------------------
"2023-08-15T07:04:56"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp_tz()');
ERROR: cannot convert value from timestamp to timestamptz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz('"2023-08-15 12:34:56"', '$.timestamp_tz()'); -- should work
jsonb_path_query_tz
-----------------------------
"2023-08-15T12:34:56+00:00"
(1 row)
select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy HH24:MI")');
jsonb_path_query
-----------------------
"2017-03-10T12:34:00"
(1 row)
select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
ERROR: input string is too short for datetime format
select jsonb_path_query('"10-03-2017 12:34 +05"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
jsonb_path_query
-----------------------------
"2017-03-10T12:34:00+05:00"
(1 row)
select jsonb_path_query('"10-03-2017 12:34 -05"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
jsonb_path_query
-----------------------------
"2017-03-10T12:34:00-05:00"
(1 row)
select jsonb_path_query('"10-03-2017 12:34 +05:20"', '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")');
jsonb_path_query
-----------------------------
"2017-03-10T12:34:00+05:20"
(1 row)
select jsonb_path_query('"10-03-2017 12:34 -05:20"', '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")');
jsonb_path_query
-----------------------------
"2017-03-10T12:34:00-05:20"
(1 row)
select jsonb_path_query('"12:34"', '$.datetime("HH24:MI")');
jsonb_path_query
------------------
"12:34:00"
(1 row)
select jsonb_path_query('"12:34"', '$.datetime("HH24:MI TZH")');
ERROR: input string is too short for datetime format
select jsonb_path_query('"12:34 +05"', '$.datetime("HH24:MI TZH")');
jsonb_path_query
------------------
"12:34:00+05:00"
(1 row)
select jsonb_path_query('"12:34 -05"', '$.datetime("HH24:MI TZH")');
jsonb_path_query
------------------
"12:34:00-05:00"
(1 row)
select jsonb_path_query('"12:34 +05:20"', '$.datetime("HH24:MI TZH:TZM")');
jsonb_path_query
------------------
"12:34:00+05:20"
(1 row)
select jsonb_path_query('"12:34 -05:20"', '$.datetime("HH24:MI TZH:TZM")');
jsonb_path_query
------------------
"12:34:00-05:20"
(1 row)
set time zone '+10';
select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.time()');
ERROR: cannot convert value from timestamptz to time without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz('"2023-08-15 12:34:56 +05:30"', '$.time()'); -- should work
jsonb_path_query_tz
---------------------
"17:04:56"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.time_tz()');
jsonb_path_query
------------------
"17:04:56+10:00"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp()');
ERROR: cannot convert value from timestamptz to timestamp without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz('"2023-08-15 12:34:56 +05:30"', '$.timestamp()'); -- should work
jsonb_path_query_tz
-----------------------
"2023-08-15T17:04:56"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp_tz()');
ERROR: cannot convert value from timestamp to timestamptz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz('"2023-08-15 12:34:56"', '$.timestamp_tz()'); -- should work
jsonb_path_query_tz
-----------------------------
"2023-08-15T02:34:56+00:00"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp_tz()');
jsonb_path_query
-----------------------------
"2023-08-15T12:34:56+05:30"
(1 row)
select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy HH24:MI")');
jsonb_path_query
-----------------------
"2017-03-10T12:34:00"
(1 row)
select jsonb_path_query('"10-03-2017 12:34"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
ERROR: input string is too short for datetime format
select jsonb_path_query('"10-03-2017 12:34 +05"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
jsonb_path_query
-----------------------------
"2017-03-10T12:34:00+05:00"
(1 row)
select jsonb_path_query('"10-03-2017 12:34 -05"', '$.datetime("dd-mm-yyyy HH24:MI TZH")');
jsonb_path_query
-----------------------------
"2017-03-10T12:34:00-05:00"
(1 row)
select jsonb_path_query('"10-03-2017 12:34 +05:20"', '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")');
jsonb_path_query
-----------------------------
"2017-03-10T12:34:00+05:20"
(1 row)
select jsonb_path_query('"10-03-2017 12:34 -05:20"', '$.datetime("dd-mm-yyyy HH24:MI TZH:TZM")');
jsonb_path_query
-----------------------------
"2017-03-10T12:34:00-05:20"
(1 row)
select jsonb_path_query('"12:34"', '$.datetime("HH24:MI")');
jsonb_path_query
------------------
"12:34:00"
(1 row)
select jsonb_path_query('"12:34"', '$.datetime("HH24:MI TZH")');
ERROR: input string is too short for datetime format
select jsonb_path_query('"12:34 +05"', '$.datetime("HH24:MI TZH")');
jsonb_path_query
------------------
"12:34:00+05:00"
(1 row)
select jsonb_path_query('"12:34 -05"', '$.datetime("HH24:MI TZH")');
jsonb_path_query
------------------
"12:34:00-05:00"
(1 row)
select jsonb_path_query('"12:34 +05:20"', '$.datetime("HH24:MI TZH:TZM")');
jsonb_path_query
------------------
"12:34:00+05:20"
(1 row)
select jsonb_path_query('"12:34 -05:20"', '$.datetime("HH24:MI TZH:TZM")');
jsonb_path_query
------------------
"12:34:00-05:20"
(1 row)
set time zone default;
select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.time()');
ERROR: cannot convert value from timestamptz to time without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz('"2023-08-15 12:34:56 +05:30"', '$.time()'); -- should work
jsonb_path_query_tz
---------------------
"00:04:56"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.time_tz()');
jsonb_path_query
------------------
"00:04:56-07:00"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp()');
ERROR: cannot convert value from timestamptz to timestamp without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz('"2023-08-15 12:34:56 +05:30"', '$.timestamp()'); -- should work
jsonb_path_query_tz
-----------------------
"2023-08-15T00:04:56"
(1 row)
select jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp_tz()');
jsonb_path_query
-----------------------------
"2023-08-15T12:34:56+05:30"
(1 row)
select jsonb_path_query('"2017-03-10"', '$.datetime().type()');
jsonb_path_query
------------------
"date"
(1 row)
select jsonb_path_query('"2017-03-10"', '$.datetime()');
jsonb_path_query
------------------
"2017-03-10"
(1 row)
select jsonb_path_query('"2017-03-10 12:34:56"', '$.datetime().type()');
jsonb_path_query
-------------------------------
"timestamp without time zone"
(1 row)
select jsonb_path_query('"2017-03-10 12:34:56"', '$.datetime()');
jsonb_path_query
-----------------------
"2017-03-10T12:34:56"
(1 row)
select jsonb_path_query('"2017-03-10 12:34:56+3"', '$.datetime().type()');
jsonb_path_query
----------------------------
"timestamp with time zone"
(1 row)
select jsonb_path_query('"2017-03-10 12:34:56+3"', '$.datetime()');
jsonb_path_query
-----------------------------
"2017-03-10T12:34:56+03:00"
(1 row)
select jsonb_path_query('"2017-03-10 12:34:56+3:10"', '$.datetime().type()');
jsonb_path_query
----------------------------
"timestamp with time zone"
(1 row)
select jsonb_path_query('"2017-03-10 12:34:56+3:10"', '$.datetime()');
jsonb_path_query
-----------------------------
"2017-03-10T12:34:56+03:10"
(1 row)
select jsonb_path_query('"2017-03-10T12:34:56+3:10"', '$.datetime()');
jsonb_path_query
-----------------------------
"2017-03-10T12:34:56+03:10"
(1 row)
select jsonb_path_query('"2017-03-10t12:34:56+3:10"', '$.datetime()');
ERROR: datetime format is not recognized: "2017-03-10t12:34:56+3:10"
HINT: Use a datetime template argument to specify the input data format.
select jsonb_path_query('"2017-03-10 12:34:56.789+3:10"', '$.datetime()');
jsonb_path_query
---------------------------------
"2017-03-10T12:34:56.789+03:10"
(1 row)
select jsonb_path_query('"2017-03-10T12:34:56.789+3:10"', '$.datetime()');
jsonb_path_query
---------------------------------
"2017-03-10T12:34:56.789+03:10"
(1 row)
select jsonb_path_query('"2017-03-10t12:34:56.789+3:10"', '$.datetime()');
ERROR: datetime format is not recognized: "2017-03-10t12:34:56.789+3:10"
HINT: Use a datetime template argument to specify the input data format.
select jsonb_path_query('"2017-03-10T12:34:56.789EST"', '$.datetime()');
jsonb_path_query
---------------------------------
"2017-03-10T12:34:56.789-05:00"
(1 row)
select jsonb_path_query('"2017-03-10T12:34:56.789Z"', '$.datetime()');
jsonb_path_query
---------------------------------
"2017-03-10T12:34:56.789+00:00"
(1 row)
select jsonb_path_query('"12:34:56"', '$.datetime().type()');
jsonb_path_query
--------------------------
"time without time zone"
(1 row)
select jsonb_path_query('"12:34:56"', '$.datetime()');
jsonb_path_query
------------------
"12:34:56"
(1 row)
select jsonb_path_query('"12:34:56+3"', '$.datetime().type()');
jsonb_path_query
-----------------------
"time with time zone"
(1 row)
select jsonb_path_query('"12:34:56+3"', '$.datetime()');
jsonb_path_query
------------------
"12:34:56+03:00"
(1 row)
select jsonb_path_query('"12:34:56+3:10"', '$.datetime().type()');
jsonb_path_query
-----------------------
"time with time zone"
(1 row)
select jsonb_path_query('"12:34:56+3:10"', '$.datetime()');
jsonb_path_query
------------------
"12:34:56+03:10"
(1 row)
set time zone '+00';
-- date comparison
select jsonb_path_query(
'["2017-03-10", "2017-03-11", "2017-03-09", "12:34:56", "01:02:03+04", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
'$[*].datetime() ? (@ == "10.03.2017".datetime("dd.mm.yyyy"))');
ERROR: cannot convert value from date to timestamptz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["2017-03-10", "2017-03-11", "2017-03-09", "12:34:56", "01:02:03+04", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
'$[*].datetime() ? (@ >= "10.03.2017".datetime("dd.mm.yyyy"))');
ERROR: cannot convert value from date to timestamptz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["2017-03-10", "2017-03-11", "2017-03-09", "12:34:56", "01:02:03+04", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
'$[*].datetime() ? (@ < "10.03.2017".datetime("dd.mm.yyyy"))');
ERROR: cannot convert value from date to timestamptz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz(
'["2017-03-10", "2017-03-11", "2017-03-09", "12:34:56", "01:02:03+04", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
'$[*].datetime() ? (@ == "10.03.2017".datetime("dd.mm.yyyy"))');
jsonb_path_query_tz
-----------------------------
"2017-03-10"
"2017-03-10T00:00:00"
"2017-03-10T03:00:00+03:00"
(3 rows)
select jsonb_path_query_tz(
'["2017-03-10", "2017-03-11", "2017-03-09", "12:34:56", "01:02:03+04", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
'$[*].datetime() ? (@ >= "10.03.2017".datetime("dd.mm.yyyy"))');
jsonb_path_query_tz
-----------------------------
"2017-03-10"
"2017-03-11"
"2017-03-10T00:00:00"
"2017-03-10T12:34:56"
"2017-03-10T03:00:00+03:00"
(5 rows)
select jsonb_path_query_tz(
'["2017-03-10", "2017-03-11", "2017-03-09", "12:34:56", "01:02:03+04", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
'$[*].datetime() ? (@ < "10.03.2017".datetime("dd.mm.yyyy"))');
jsonb_path_query_tz
-----------------------------
"2017-03-09"
"2017-03-10T01:02:03+04:00"
(2 rows)
select jsonb_path_query_tz(
'["2017-03-10", "2017-03-11", "2017-03-09", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
'$[*].datetime() ? (@ == "2017-03-10".date())');
jsonb_path_query_tz
-----------------------------
"2017-03-10"
"2017-03-10T00:00:00"
"2017-03-10T03:00:00+03:00"
(3 rows)
select jsonb_path_query_tz(
'["2017-03-10", "2017-03-11", "2017-03-09", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
'$[*].datetime() ? (@ >= "2017-03-10".date())');
jsonb_path_query_tz
-----------------------------
"2017-03-10"
"2017-03-11"
"2017-03-10T00:00:00"
"2017-03-10T12:34:56"
"2017-03-10T03:00:00+03:00"
(5 rows)
select jsonb_path_query_tz(
'["2017-03-10", "2017-03-11", "2017-03-09", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
'$[*].datetime() ? (@ < "2017-03-10".date())');
jsonb_path_query_tz
-----------------------------
"2017-03-09"
"2017-03-10T01:02:03+04:00"
(2 rows)
select jsonb_path_query(
'["2017-03-10", "2017-03-11", "2017-03-09", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
'$[*].date() ? (@ == "2017-03-10".date())');
ERROR: cannot convert value from timestamptz to date without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["2017-03-10", "2017-03-11", "2017-03-09", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
'$[*].date() ? (@ >= "2017-03-10".date())');
ERROR: cannot convert value from timestamptz to date without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["2017-03-10", "2017-03-11", "2017-03-09", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
'$[*].date() ? (@ < "2017-03-10".date())');
ERROR: cannot convert value from timestamptz to date without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz(
'["2017-03-10", "2017-03-11", "2017-03-09", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
'$[*].date() ? (@ == "2017-03-10".date())');
jsonb_path_query_tz
---------------------
"2017-03-10"
"2017-03-10"
"2017-03-10"
"2017-03-10"
(4 rows)
select jsonb_path_query_tz(
'["2017-03-10", "2017-03-11", "2017-03-09", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
'$[*].date() ? (@ >= "2017-03-10".date())');
jsonb_path_query_tz
---------------------
"2017-03-10"
"2017-03-11"
"2017-03-10"
"2017-03-10"
"2017-03-10"
(5 rows)
select jsonb_path_query_tz(
'["2017-03-10", "2017-03-11", "2017-03-09", "2017-03-10 00:00:00", "2017-03-10 12:34:56", "2017-03-10 01:02:03+04", "2017-03-10 03:00:00+03"]',
'$[*].date() ? (@ < "2017-03-10".date())');
jsonb_path_query_tz
---------------------
"2017-03-09"
"2017-03-09"
(2 rows)
-- time comparison
select jsonb_path_query(
'["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
'$[*].datetime() ? (@ == "12:35".datetime("HH24:MI"))');
ERROR: cannot convert value from time to timetz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
'$[*].datetime() ? (@ >= "12:35".datetime("HH24:MI"))');
ERROR: cannot convert value from time to timetz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
'$[*].datetime() ? (@ < "12:35".datetime("HH24:MI"))');
ERROR: cannot convert value from time to timetz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz(
'["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
'$[*].datetime() ? (@ == "12:35".datetime("HH24:MI"))');
jsonb_path_query_tz
---------------------
"12:35:00"
"12:35:00+00:00"
(2 rows)
select jsonb_path_query_tz(
'["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
'$[*].datetime() ? (@ >= "12:35".datetime("HH24:MI"))');
jsonb_path_query_tz
---------------------
"12:35:00"
"12:36:00"
"12:35:00+00:00"
(3 rows)
select jsonb_path_query_tz(
'["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
'$[*].datetime() ? (@ < "12:35".datetime("HH24:MI"))');
jsonb_path_query_tz
---------------------
"12:34:00"
"12:35:00+01:00"
"13:35:00+01:00"
(3 rows)
select jsonb_path_query_tz(
'["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
'$[*].datetime() ? (@ == "12:35:00".time())');
jsonb_path_query_tz
---------------------
"12:35:00"
"12:35:00+00:00"
(2 rows)
select jsonb_path_query_tz(
'["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
'$[*].datetime() ? (@ >= "12:35:00".time())');
jsonb_path_query_tz
---------------------
"12:35:00"
"12:36:00"
"12:35:00+00:00"
(3 rows)
select jsonb_path_query_tz(
'["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
'$[*].datetime() ? (@ < "12:35:00".time())');
jsonb_path_query_tz
---------------------
"12:34:00"
"12:35:00+01:00"
"13:35:00+01:00"
(3 rows)
select jsonb_path_query(
'["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
'$[*].time() ? (@ == "12:35:00".time())');
ERROR: cannot convert value from timetz to time without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
'$[*].time() ? (@ >= "12:35:00".time())');
ERROR: cannot convert value from timetz to time without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
'$[*].time() ? (@ < "12:35:00".time())');
ERROR: cannot convert value from timetz to time without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["12:34:00.123", "12:35:00.123", "12:36:00.1123", "12:35:00.1123+00", "12:35:00.123+01", "13:35:00.123+01", "2017-03-10 12:35:00.1", "2017-03-10 12:35:00.123+01"]',
'$[*].time(2) ? (@ >= "12:35:00.123".time(2))');
ERROR: cannot convert value from timetz to time without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz(
'["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
'$[*].time() ? (@ == "12:35:00".time())');
jsonb_path_query_tz
---------------------
"12:35:00"
"12:35:00"
"12:35:00"
"12:35:00"
(4 rows)
select jsonb_path_query_tz(
'["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
'$[*].time() ? (@ >= "12:35:00".time())');
jsonb_path_query_tz
---------------------
"12:35:00"
"12:36:00"
"12:35:00"
"12:35:00"
"13:35:00"
"12:35:00"
(6 rows)
select jsonb_path_query_tz(
'["12:34:00", "12:35:00", "12:36:00", "12:35:00+00", "12:35:00+01", "13:35:00+01", "2017-03-10 12:35:00", "2017-03-10 12:35:00+01"]',
'$[*].time() ? (@ < "12:35:00".time())');
jsonb_path_query_tz
---------------------
"12:34:00"
"11:35:00"
(2 rows)
select jsonb_path_query_tz(
'["12:34:00.123", "12:35:00.123", "12:36:00.1123", "12:35:00.1123+00", "12:35:00.123+01", "13:35:00.123+01", "2017-03-10 12:35:00.1", "2017-03-10 12:35:00.123+01"]',
'$[*].time(2) ? (@ >= "12:35:00.123".time(2))');
jsonb_path_query_tz
---------------------
"12:35:00.12"
"12:36:00.11"
"12:35:00.12"
"13:35:00.12"
(4 rows)
-- timetz comparison
select jsonb_path_query(
'["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00 +1"]',
'$[*].datetime() ? (@ == "12:35 +1".datetime("HH24:MI TZH"))');
ERROR: cannot convert value from time to timetz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00 +1"]',
'$[*].datetime() ? (@ >= "12:35 +1".datetime("HH24:MI TZH"))');
ERROR: cannot convert value from time to timetz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00 +1"]',
'$[*].datetime() ? (@ < "12:35 +1".datetime("HH24:MI TZH"))');
ERROR: cannot convert value from time to timetz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz(
'["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00 +1"]',
'$[*].datetime() ? (@ == "12:35 +1".datetime("HH24:MI TZH"))');
jsonb_path_query_tz
---------------------
"12:35:00+01:00"
(1 row)
select jsonb_path_query_tz(
'["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00 +1"]',
'$[*].datetime() ? (@ >= "12:35 +1".datetime("HH24:MI TZH"))');
jsonb_path_query_tz
---------------------
"12:35:00+01:00"
"12:36:00+01:00"
"12:35:00-02:00"
"11:35:00"
"12:35:00"
(5 rows)
select jsonb_path_query_tz(
'["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10", "2017-03-10 12:35:00", "2017-03-10 12:35:00 +1"]',
'$[*].datetime() ? (@ < "12:35 +1".datetime("HH24:MI TZH"))');
jsonb_path_query_tz
---------------------
"12:34:00+01:00"
"12:35:00+02:00"
"10:35:00"
(3 rows)
select jsonb_path_query_tz(
'["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10 12:35:00 +1"]',
'$[*].datetime() ? (@ == "12:35:00 +1".time_tz())');
jsonb_path_query_tz
---------------------
"12:35:00+01:00"
(1 row)
select jsonb_path_query_tz(
'["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10 12:35:00 +1"]',
'$[*].datetime() ? (@ >= "12:35:00 +1".time_tz())');
jsonb_path_query_tz
---------------------
"12:35:00+01:00"
"12:36:00+01:00"
"12:35:00-02:00"
"11:35:00"
"12:35:00"
(5 rows)
select jsonb_path_query_tz(
'["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10 12:35:00 +1"]',
'$[*].datetime() ? (@ < "12:35:00 +1".time_tz())');
jsonb_path_query_tz
---------------------
"12:34:00+01:00"
"12:35:00+02:00"
"10:35:00"
(3 rows)
select jsonb_path_query(
'["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10 12:35:00 +1"]',
'$[*].time_tz() ? (@ == "12:35:00 +1".time_tz())');
ERROR: cannot convert value from time to timetz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10 12:35:00 +1"]',
'$[*].time_tz() ? (@ >= "12:35:00 +1".time_tz())');
ERROR: cannot convert value from time to timetz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10 12:35:00 +1"]',
'$[*].time_tz() ? (@ < "12:35:00 +1".time_tz())');
ERROR: cannot convert value from time to timetz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["12:34:00.123+01", "12:35:00.123+01", "12:36:00.1123+01", "12:35:00.1123+02", "12:35:00.123-02", "10:35:00.123", "11:35:00.1", "12:35:00.123", "2017-03-10 12:35:00.123 +1"]',
'$[*].time_tz(2) ? (@ >= "12:35:00.123 +1".time_tz(2))');
ERROR: cannot convert value from time to timetz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz(
'["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10 12:35:00 +1"]',
'$[*].time_tz() ? (@ == "12:35:00 +1".time_tz())');
jsonb_path_query_tz
---------------------
"12:35:00+01:00"
(1 row)
select jsonb_path_query_tz(
'["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10 12:35:00 +1"]',
'$[*].time_tz() ? (@ >= "12:35:00 +1".time_tz())');
jsonb_path_query_tz
---------------------
"12:35:00+01:00"
"12:36:00+01:00"
"12:35:00-02:00"
"11:35:00+00:00"
"12:35:00+00:00"
"11:35:00+00:00"
(6 rows)
select jsonb_path_query_tz(
'["12:34:00+01", "12:35:00+01", "12:36:00+01", "12:35:00+02", "12:35:00-02", "10:35:00", "11:35:00", "12:35:00", "2017-03-10 12:35:00 +1"]',
'$[*].time_tz() ? (@ < "12:35:00 +1".time_tz())');
jsonb_path_query_tz
---------------------
"12:34:00+01:00"
"12:35:00+02:00"
"10:35:00+00:00"
(3 rows)
select jsonb_path_query_tz(
'["12:34:00.123+01", "12:35:00.123+01", "12:36:00.1123+01", "12:35:00.1123+02", "12:35:00.123-02", "10:35:00.123", "11:35:00.1", "12:35:00.123", "2017-03-10 12:35:00.123 +1"]',
'$[*].time_tz(2) ? (@ >= "12:35:00.123 +1".time_tz(2))');
jsonb_path_query_tz
---------------------
"12:35:00.12+01:00"
"12:36:00.11+01:00"
"12:35:00.12-02:00"
"12:35:00.12+00:00"
"11:35:00.12+00:00"
(5 rows)
-- timestamp comparison
select jsonb_path_query(
'["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
'$[*].datetime() ? (@ == "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
ERROR: cannot convert value from timestamp to timestamptz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
'$[*].datetime() ? (@ >= "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
ERROR: cannot convert value from timestamp to timestamptz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
'$[*].datetime() ? (@ < "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
ERROR: cannot convert value from timestamp to timestamptz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz(
'["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
'$[*].datetime() ? (@ == "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
jsonb_path_query_tz
-----------------------------
"2017-03-10T12:35:00"
"2017-03-10T13:35:00+01:00"
(2 rows)
select jsonb_path_query_tz(
'["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
'$[*].datetime() ? (@ >= "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
jsonb_path_query_tz
-----------------------------
"2017-03-10T12:35:00"
"2017-03-10T12:36:00"
"2017-03-10T13:35:00+01:00"
"2017-03-10T12:35:00-01:00"
"2017-03-11"
(5 rows)
select jsonb_path_query_tz(
'["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
'$[*].datetime() ? (@ < "10.03.2017 12:35".datetime("dd.mm.yyyy HH24:MI"))');
jsonb_path_query_tz
-----------------------------
"2017-03-10T12:34:00"
"2017-03-10T12:35:00+01:00"
"2017-03-10"
(3 rows)
select jsonb_path_query_tz(
'["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11"]',
'$[*].datetime() ? (@ == "2017-03-10 12:35:00".timestamp())');
jsonb_path_query_tz
-----------------------------
"2017-03-10T12:35:00"
"2017-03-10T13:35:00+01:00"
(2 rows)
select jsonb_path_query_tz(
'["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11"]',
'$[*].datetime() ? (@ >= "2017-03-10 12:35:00".timestamp())');
jsonb_path_query_tz
-----------------------------
"2017-03-10T12:35:00"
"2017-03-10T12:36:00"
"2017-03-10T13:35:00+01:00"
"2017-03-10T12:35:00-01:00"
"2017-03-11"
(5 rows)
select jsonb_path_query_tz(
'["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11"]',
'$[*].datetime() ? (@ < "2017-03-10 12:35:00".timestamp())');
jsonb_path_query_tz
-----------------------------
"2017-03-10T12:34:00"
"2017-03-10T12:35:00+01:00"
"2017-03-10"
(3 rows)
select jsonb_path_query(
'["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11"]',
'$[*].timestamp() ? (@ == "2017-03-10 12:35:00".timestamp())');
ERROR: cannot convert value from timestamptz to timestamp without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11"]',
'$[*].timestamp() ? (@ >= "2017-03-10 12:35:00".timestamp())');
ERROR: cannot convert value from timestamptz to timestamp without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11"]',
'$[*].timestamp() ? (@ < "2017-03-10 12:35:00".timestamp())');
ERROR: cannot convert value from timestamptz to timestamp without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["2017-03-10 12:34:00.123", "2017-03-10 12:35:00.123", "2017-03-10 12:36:00.1123", "2017-03-10 12:35:00.1123+01", "2017-03-10 13:35:00.123+01", "2017-03-10 12:35:00.1-01", "2017-03-10", "2017-03-11"]',
'$[*].timestamp(2) ? (@ >= "2017-03-10 12:35:00.123".timestamp(2))');
ERROR: cannot convert value from timestamptz to timestamp without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz(
'["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11"]',
'$[*].timestamp() ? (@ == "2017-03-10 12:35:00".timestamp())');
jsonb_path_query_tz
-----------------------
"2017-03-10T12:35:00"
"2017-03-10T12:35:00"
(2 rows)
select jsonb_path_query_tz(
'["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11"]',
'$[*].timestamp() ? (@ >= "2017-03-10 12:35:00".timestamp())');
jsonb_path_query_tz
-----------------------
"2017-03-10T12:35:00"
"2017-03-10T12:36:00"
"2017-03-10T12:35:00"
"2017-03-10T13:35:00"
"2017-03-11T00:00:00"
(5 rows)
select jsonb_path_query_tz(
'["2017-03-10 12:34:00", "2017-03-10 12:35:00", "2017-03-10 12:36:00", "2017-03-10 12:35:00+01", "2017-03-10 13:35:00+01", "2017-03-10 12:35:00-01", "2017-03-10", "2017-03-11"]',
'$[*].timestamp() ? (@ < "2017-03-10 12:35:00".timestamp())');
jsonb_path_query_tz
-----------------------
"2017-03-10T12:34:00"
"2017-03-10T11:35:00"
"2017-03-10T00:00:00"
(3 rows)
select jsonb_path_query_tz(
'["2017-03-10 12:34:00.123", "2017-03-10 12:35:00.123", "2017-03-10 12:36:00.1123", "2017-03-10 12:35:00.1123+01", "2017-03-10 13:35:00.123+01", "2017-03-10 12:35:00.1-01", "2017-03-10", "2017-03-11"]',
'$[*].timestamp(2) ? (@ >= "2017-03-10 12:35:00.123".timestamp(2))');
jsonb_path_query_tz
--------------------------
"2017-03-10T12:35:00.12"
"2017-03-10T12:36:00.11"
"2017-03-10T12:35:00.12"
"2017-03-10T13:35:00.1"
"2017-03-11T00:00:00"
(5 rows)
-- timestamptz comparison
select jsonb_path_query(
'["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
'$[*].datetime() ? (@ == "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
ERROR: cannot convert value from timestamp to timestamptz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
'$[*].datetime() ? (@ >= "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
ERROR: cannot convert value from timestamp to timestamptz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
'$[*].datetime() ? (@ < "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
ERROR: cannot convert value from timestamp to timestamptz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz(
'["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
'$[*].datetime() ? (@ == "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
jsonb_path_query_tz
-----------------------------
"2017-03-10T12:35:00+01:00"
"2017-03-10T11:35:00"
(2 rows)
select jsonb_path_query_tz(
'["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
'$[*].datetime() ? (@ >= "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
jsonb_path_query_tz
-----------------------------
"2017-03-10T12:35:00+01:00"
"2017-03-10T12:36:00+01:00"
"2017-03-10T12:35:00-02:00"
"2017-03-10T11:35:00"
"2017-03-10T12:35:00"
"2017-03-11"
(6 rows)
select jsonb_path_query_tz(
'["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11", "12:34:56", "12:34:56+01"]',
'$[*].datetime() ? (@ < "10.03.2017 12:35 +1".datetime("dd.mm.yyyy HH24:MI TZH"))');
jsonb_path_query_tz
-----------------------------
"2017-03-10T12:34:00+01:00"
"2017-03-10T12:35:00+02:00"
"2017-03-10T10:35:00"
"2017-03-10"
(4 rows)
select jsonb_path_query_tz(
'["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11"]',
'$[*].datetime() ? (@ == "2017-03-10 12:35:00 +1".timestamp_tz())');
jsonb_path_query_tz
-----------------------------
"2017-03-10T12:35:00+01:00"
"2017-03-10T11:35:00"
(2 rows)
select jsonb_path_query_tz(
'["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11"]',
'$[*].datetime() ? (@ >= "2017-03-10 12:35:00 +1".timestamp_tz())');
jsonb_path_query_tz
-----------------------------
"2017-03-10T12:35:00+01:00"
"2017-03-10T12:36:00+01:00"
"2017-03-10T12:35:00-02:00"
"2017-03-10T11:35:00"
"2017-03-10T12:35:00"
"2017-03-11"
(6 rows)
select jsonb_path_query_tz(
'["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11"]',
'$[*].datetime() ? (@ < "2017-03-10 12:35:00 +1".timestamp_tz())');
jsonb_path_query_tz
-----------------------------
"2017-03-10T12:34:00+01:00"
"2017-03-10T12:35:00+02:00"
"2017-03-10T10:35:00"
"2017-03-10"
(4 rows)
select jsonb_path_query(
'["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11"]',
'$[*].timestamp_tz() ? (@ == "2017-03-10 12:35:00 +1".timestamp_tz())');
ERROR: cannot convert value from timestamp to timestamptz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11"]',
'$[*].timestamp_tz() ? (@ >= "2017-03-10 12:35:00 +1".timestamp_tz())');
ERROR: cannot convert value from timestamp to timestamptz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11"]',
'$[*].timestamp_tz() ? (@ < "2017-03-10 12:35:00 +1".timestamp_tz())');
ERROR: cannot convert value from timestamp to timestamptz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query(
'["2017-03-10 12:34:00.123+01", "2017-03-10 12:35:00.123+01", "2017-03-10 12:36:00.1123+01", "2017-03-10 12:35:00.1123+02", "2017-03-10 12:35:00.123-02", "2017-03-10 10:35:00.123", "2017-03-10 11:35:00.1", "2017-03-10 12:35:00.123", "2017-03-10", "2017-03-11"]',
'$[*].timestamp_tz(2) ? (@ >= "2017-03-10 12:35:00.123 +1".timestamp_tz(2))');
ERROR: cannot convert value from timestamp to timestamptz without time zone usage
HINT: Use *_tz() function for time zone support.
select jsonb_path_query_tz(
'["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11"]',
'$[*].timestamp_tz() ? (@ == "2017-03-10 12:35:00 +1".timestamp_tz())');
jsonb_path_query_tz
-----------------------------
"2017-03-10T12:35:00+01:00"
"2017-03-10T11:35:00+00:00"
(2 rows)
select jsonb_path_query_tz(
'["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11"]',
'$[*].timestamp_tz() ? (@ >= "2017-03-10 12:35:00 +1".timestamp_tz())');
jsonb_path_query_tz
-----------------------------
"2017-03-10T12:35:00+01:00"
"2017-03-10T12:36:00+01:00"
"2017-03-10T12:35:00-02:00"
"2017-03-10T11:35:00+00:00"
"2017-03-10T12:35:00+00:00"
"2017-03-11T00:00:00+00:00"
(6 rows)
select jsonb_path_query_tz(
'["2017-03-10 12:34:00+01", "2017-03-10 12:35:00+01", "2017-03-10 12:36:00+01", "2017-03-10 12:35:00+02", "2017-03-10 12:35:00-02", "2017-03-10 10:35:00", "2017-03-10 11:35:00", "2017-03-10 12:35:00", "2017-03-10", "2017-03-11"]',
'$[*].timestamp_tz() ? (@ < "2017-03-10 12:35:00 +1".timestamp_tz())');
jsonb_path_query_tz
-----------------------------
"2017-03-10T12:34:00+01:00"
"2017-03-10T12:35:00+02:00"
"2017-03-10T10:35:00+00:00"
"2017-03-10T00:00:00+00:00"
(4 rows)
select jsonb_path_query_tz(
'["2017-03-10 12:34:00.123+01", "2017-03-10 12:35:00.123+01", "2017-03-10 12:36:00.1123+01", "2017-03-10 12:35:00.1123+02", "2017-03-10 12:35:00.123-02", "2017-03-10 10:35:00.123", "2017-03-10 11:35:00.1", "2017-03-10 12:35:00.123", "2017-03-10", "2017-03-11"]',
'$[*].timestamp_tz(2) ? (@ >= "2017-03-10 12:35:00.123 +1".timestamp_tz(2))');
jsonb_path_query_tz
--------------------------------
"2017-03-10T12:35:00.12+01:00"
"2017-03-10T12:36:00.11+01:00"
"2017-03-10T12:35:00.12-02:00"
"2017-03-10T12:35:00.12+00:00"
"2017-03-11T00:00:00+00:00"
(5 rows)
-- overflow during comparison
select jsonb_path_query('"1000000-01-01"', '$.datetime() > "2020-01-01 12:00:00".datetime()'::jsonpath);
jsonb_path_query
------------------
true
(1 row)
set time zone default;
-- jsonpath operators
SELECT jsonb_path_query('[{"a": 1}, {"a": 2}]', '$[*]');
jsonb_path_query
------------------
{"a": 1}
{"a": 2}
(2 rows)
SELECT jsonb_path_query('[{"a": 1}, {"a": 2}]', '$[*] ? (@.a > 10)');
jsonb_path_query
------------------
(0 rows)
SELECT jsonb_path_query('[{"a": 1}]', '$undefined_var');
ERROR: could not find jsonpath variable "undefined_var"
SELECT jsonb_path_query('[{"a": 1}]', 'false');
jsonb_path_query
------------------
false
(1 row)
SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}, {}]', 'strict $[*].a');
ERROR: JSON object does not contain key "a"
SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}]', '$[*].a');
jsonb_path_query_array
------------------------
[1, 2]
(1 row)
SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ == 1)');
jsonb_path_query_array
------------------------
[1]
(1 row)
SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ > 10)');
jsonb_path_query_array
------------------------
[]
(1 row)
SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*].a ? (@ > $min && @ < $max)', vars => '{"min": 1, "max": 4}');
jsonb_path_query_array
------------------------
[2, 3]
(1 row)
SELECT jsonb_path_query_array('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*].a ? (@ > $min && @ < $max)', vars => '{"min": 3, "max": 4}');
jsonb_path_query_array
------------------------
[]
(1 row)
SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}, {}]', 'strict $[*].a');
ERROR: JSON object does not contain key "a"
SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}, {}]', 'strict $[*].a', silent => true);
jsonb_path_query_first
------------------------
1
(1 row)
SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}]', '$[*].a');
jsonb_path_query_first
------------------------
1
(1 row)
SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ == 1)');
jsonb_path_query_first
------------------------
1
(1 row)
SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ > 10)');
jsonb_path_query_first
------------------------
(1 row)
SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*].a ? (@ > $min && @ < $max)', vars => '{"min": 1, "max": 4}');
jsonb_path_query_first
------------------------
2
(1 row)
SELECT jsonb_path_query_first('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*].a ? (@ > $min && @ < $max)', vars => '{"min": 3, "max": 4}');
jsonb_path_query_first
------------------------
(1 row)
SELECT jsonb_path_query_first('[{"a": 1}]', '$undefined_var');
ERROR: could not find jsonpath variable "undefined_var"
SELECT jsonb_path_query_first('[{"a": 1}]', 'false');
jsonb_path_query_first
------------------------
false
(1 row)
SELECT jsonb '[{"a": 1}, {"a": 2}]' @? '$[*].a ? (@ > 1)';
?column?
----------
t
(1 row)
SELECT jsonb '[{"a": 1}, {"a": 2}]' @? '$[*] ? (@.a > 2)';
?column?
----------
f
(1 row)
SELECT jsonb_path_exists('[{"a": 1}, {"a": 2}]', '$[*].a ? (@ > 1)');
jsonb_path_exists
-------------------
t
(1 row)
SELECT jsonb_path_exists('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*] ? (@.a > $min && @.a < $max)', vars => '{"min": 1, "max": 4}');
jsonb_path_exists
-------------------
t
(1 row)
SELECT jsonb_path_exists('[{"a": 1}, {"a": 2}, {"a": 3}, {"a": 5}]', '$[*] ? (@.a > $min && @.a < $max)', vars => '{"min": 3, "max": 4}');
jsonb_path_exists
-------------------
f
(1 row)
SELECT jsonb_path_exists('[{"a": 1}]', '$undefined_var');
ERROR: could not find jsonpath variable "undefined_var"
SELECT jsonb_path_exists('[{"a": 1}]', 'false');
jsonb_path_exists
-------------------
t
(1 row)
SELECT jsonb_path_match('true', '$', silent => false);
jsonb_path_match
------------------
t
(1 row)
SELECT jsonb_path_match('false', '$', silent => false);
jsonb_path_match
------------------
f
(1 row)
SELECT jsonb_path_match('null', '$', silent => false);
jsonb_path_match
------------------
(1 row)
SELECT jsonb_path_match('1', '$', silent => true);
jsonb_path_match
------------------
(1 row)
SELECT jsonb_path_match('1', '$', silent => false);
ERROR: single boolean result is expected
SELECT jsonb_path_match('"a"', '$', silent => false);
ERROR: single boolean result is expected
SELECT jsonb_path_match('{}', '$', silent => false);
ERROR: single boolean result is expected
SELECT jsonb_path_match('[true]', '$', silent => false);
ERROR: single boolean result is expected
SELECT jsonb_path_match('{}', 'lax $.a', silent => false);
ERROR: single boolean result is expected
SELECT jsonb_path_match('{}', 'strict $.a', silent => false);
ERROR: JSON object does not contain key "a"
SELECT jsonb_path_match('{}', 'strict $.a', silent => true);
jsonb_path_match
------------------
(1 row)
SELECT jsonb_path_match('[true, true]', '$[*]', silent => false);
ERROR: single boolean result is expected
SELECT jsonb '[{"a": 1}, {"a": 2}]' @@ '$[*].a > 1';
?column?
----------
t
(1 row)
SELECT jsonb '[{"a": 1}, {"a": 2}]' @@ '$[*].a > 2';
?column?
----------
f
(1 row)
SELECT jsonb_path_match('[{"a": 1}, {"a": 2}]', '$[*].a > 1');
jsonb_path_match
------------------
t
(1 row)
SELECT jsonb_path_match('[{"a": 1}]', '$undefined_var');
ERROR: could not find jsonpath variable "undefined_var"
SELECT jsonb_path_match('[{"a": 1}]', 'false');
jsonb_path_match
------------------
f
(1 row)
-- test string comparison (Unicode codepoint collation)
WITH str(j, num) AS
(
SELECT jsonb_build_object('s', s), num
FROM unnest('{"", "a", "ab", "abc", "abcd", "b", "A", "AB", "ABC", "ABc", "ABcD", "B"}'::text[]) WITH ORDINALITY AS a(s, num)
)
SELECT
s1.j, s2.j,
jsonb_path_query_first(s1.j, '$.s < $s', vars => s2.j) lt,
jsonb_path_query_first(s1.j, '$.s <= $s', vars => s2.j) le,
jsonb_path_query_first(s1.j, '$.s == $s', vars => s2.j) eq,
jsonb_path_query_first(s1.j, '$.s >= $s', vars => s2.j) ge,
jsonb_path_query_first(s1.j, '$.s > $s', vars => s2.j) gt
FROM str s1, str s2
ORDER BY s1.num, s2.num;
j | j | lt | le | eq | ge | gt
---------------+---------------+-------+-------+-------+-------+-------
{"s": ""} | {"s": ""} | false | true | true | true | false
{"s": ""} | {"s": "a"} | true | true | false | false | false
{"s": ""} | {"s": "ab"} | true | true | false | false | false
{"s": ""} | {"s": "abc"} | true | true | false | false | false
{"s": ""} | {"s": "abcd"} | true | true | false | false | false
{"s": ""} | {"s": "b"} | true | true | false | false | false
{"s": ""} | {"s": "A"} | true | true | false | false | false
{"s": ""} | {"s": "AB"} | true | true | false | false | false
{"s": ""} | {"s": "ABC"} | true | true | false | false | false
{"s": ""} | {"s": "ABc"} | true | true | false | false | false
{"s": ""} | {"s": "ABcD"} | true | true | false | false | false
{"s": ""} | {"s": "B"} | true | true | false | false | false
{"s": "a"} | {"s": ""} | false | false | false | true | true
{"s": "a"} | {"s": "a"} | false | true | true | true | false
{"s": "a"} | {"s": "ab"} | true | true | false | false | false
{"s": "a"} | {"s": "abc"} | true | true | false | false | false
{"s": "a"} | {"s": "abcd"} | true | true | false | false | false
{"s": "a"} | {"s": "b"} | true | true | false | false | false
{"s": "a"} | {"s": "A"} | false | false | false | true | true
{"s": "a"} | {"s": "AB"} | false | false | false | true | true
{"s": "a"} | {"s": "ABC"} | false | false | false | true | true
{"s": "a"} | {"s": "ABc"} | false | false | false | true | true
{"s": "a"} | {"s": "ABcD"} | false | false | false | true | true
{"s": "a"} | {"s": "B"} | false | false | false | true | true
{"s": "ab"} | {"s": ""} | false | false | false | true | true
{"s": "ab"} | {"s": "a"} | false | false | false | true | true
{"s": "ab"} | {"s": "ab"} | false | true | true | true | false
{"s": "ab"} | {"s": "abc"} | true | true | false | false | false
{"s": "ab"} | {"s": "abcd"} | true | true | false | false | false
{"s": "ab"} | {"s": "b"} | true | true | false | false | false
{"s": "ab"} | {"s": "A"} | false | false | false | true | true
{"s": "ab"} | {"s": "AB"} | false | false | false | true | true
{"s": "ab"} | {"s": "ABC"} | false | false | false | true | true
{"s": "ab"} | {"s": "ABc"} | false | false | false | true | true
{"s": "ab"} | {"s": "ABcD"} | false | false | false | true | true
{"s": "ab"} | {"s": "B"} | false | false | false | true | true
{"s": "abc"} | {"s": ""} | false | false | false | true | true
{"s": "abc"} | {"s": "a"} | false | false | false | true | true
{"s": "abc"} | {"s": "ab"} | false | false | false | true | true
{"s": "abc"} | {"s": "abc"} | false | true | true | true | false
{"s": "abc"} | {"s": "abcd"} | true | true | false | false | false
{"s": "abc"} | {"s": "b"} | true | true | false | false | false
{"s": "abc"} | {"s": "A"} | false | false | false | true | true
{"s": "abc"} | {"s": "AB"} | false | false | false | true | true
{"s": "abc"} | {"s": "ABC"} | false | false | false | true | true
{"s": "abc"} | {"s": "ABc"} | false | false | false | true | true
{"s": "abc"} | {"s": "ABcD"} | false | false | false | true | true
{"s": "abc"} | {"s": "B"} | false | false | false | true | true
{"s": "abcd"} | {"s": ""} | false | false | false | true | true
{"s": "abcd"} | {"s": "a"} | false | false | false | true | true
{"s": "abcd"} | {"s": "ab"} | false | false | false | true | true
{"s": "abcd"} | {"s": "abc"} | false | false | false | true | true
{"s": "abcd"} | {"s": "abcd"} | false | true | true | true | false
{"s": "abcd"} | {"s": "b"} | true | true | false | false | false
{"s": "abcd"} | {"s": "A"} | false | false | false | true | true
{"s": "abcd"} | {"s": "AB"} | false | false | false | true | true
{"s": "abcd"} | {"s": "ABC"} | false | false | false | true | true
{"s": "abcd"} | {"s": "ABc"} | false | false | false | true | true
{"s": "abcd"} | {"s": "ABcD"} | false | false | false | true | true
{"s": "abcd"} | {"s": "B"} | false | false | false | true | true
{"s": "b"} | {"s": ""} | false | false | false | true | true
{"s": "b"} | {"s": "a"} | false | false | false | true | true
{"s": "b"} | {"s": "ab"} | false | false | false | true | true
{"s": "b"} | {"s": "abc"} | false | false | false | true | true
{"s": "b"} | {"s": "abcd"} | false | false | false | true | true
{"s": "b"} | {"s": "b"} | false | true | true | true | false
{"s": "b"} | {"s": "A"} | false | false | false | true | true
{"s": "b"} | {"s": "AB"} | false | false | false | true | true
{"s": "b"} | {"s": "ABC"} | false | false | false | true | true
{"s": "b"} | {"s": "ABc"} | false | false | false | true | true
{"s": "b"} | {"s": "ABcD"} | false | false | false | true | true
{"s": "b"} | {"s": "B"} | false | false | false | true | true
{"s": "A"} | {"s": ""} | false | false | false | true | true
{"s": "A"} | {"s": "a"} | true | true | false | false | false
{"s": "A"} | {"s": "ab"} | true | true | false | false | false
{"s": "A"} | {"s": "abc"} | true | true | false | false | false
{"s": "A"} | {"s": "abcd"} | true | true | false | false | false
{"s": "A"} | {"s": "b"} | true | true | false | false | false
{"s": "A"} | {"s": "A"} | false | true | true | true | false
{"s": "A"} | {"s": "AB"} | true | true | false | false | false
{"s": "A"} | {"s": "ABC"} | true | true | false | false | false
{"s": "A"} | {"s": "ABc"} | true | true | false | false | false
{"s": "A"} | {"s": "ABcD"} | true | true | false | false | false
{"s": "A"} | {"s": "B"} | true | true | false | false | false
{"s": "AB"} | {"s": ""} | false | false | false | true | true
{"s": "AB"} | {"s": "a"} | true | true | false | false | false
{"s": "AB"} | {"s": "ab"} | true | true | false | false | false
{"s": "AB"} | {"s": "abc"} | true | true | false | false | false
{"s": "AB"} | {"s": "abcd"} | true | true | false | false | false
{"s": "AB"} | {"s": "b"} | true | true | false | false | false
{"s": "AB"} | {"s": "A"} | false | false | false | true | true
{"s": "AB"} | {"s": "AB"} | false | true | true | true | false
{"s": "AB"} | {"s": "ABC"} | true | true | false | false | false
{"s": "AB"} | {"s": "ABc"} | true | true | false | false | false
{"s": "AB"} | {"s": "ABcD"} | true | true | false | false | false
{"s": "AB"} | {"s": "B"} | true | true | false | false | false
{"s": "ABC"} | {"s": ""} | false | false | false | true | true
{"s": "ABC"} | {"s": "a"} | true | true | false | false | false
{"s": "ABC"} | {"s": "ab"} | true | true | false | false | false
{"s": "ABC"} | {"s": "abc"} | true | true | false | false | false
{"s": "ABC"} | {"s": "abcd"} | true | true | false | false | false
{"s": "ABC"} | {"s": "b"} | true | true | false | false | false
{"s": "ABC"} | {"s": "A"} | false | false | false | true | true
{"s": "ABC"} | {"s": "AB"} | false | false | false | true | true
{"s": "ABC"} | {"s": "ABC"} | false | true | true | true | false
{"s": "ABC"} | {"s": "ABc"} | true | true | false | false | false
{"s": "ABC"} | {"s": "ABcD"} | true | true | false | false | false
{"s": "ABC"} | {"s": "B"} | true | true | false | false | false
{"s": "ABc"} | {"s": ""} | false | false | false | true | true
{"s": "ABc"} | {"s": "a"} | true | true | false | false | false
{"s": "ABc"} | {"s": "ab"} | true | true | false | false | false
{"s": "ABc"} | {"s": "abc"} | true | true | false | false | false
{"s": "ABc"} | {"s": "abcd"} | true | true | false | false | false
{"s": "ABc"} | {"s": "b"} | true | true | false | false | false
{"s": "ABc"} | {"s": "A"} | false | false | false | true | true
{"s": "ABc"} | {"s": "AB"} | false | false | false | true | true
{"s": "ABc"} | {"s": "ABC"} | false | false | false | true | true
{"s": "ABc"} | {"s": "ABc"} | false | true | true | true | false
{"s": "ABc"} | {"s": "ABcD"} | true | true | false | false | false
{"s": "ABc"} | {"s": "B"} | true | true | false | false | false
{"s": "ABcD"} | {"s": ""} | false | false | false | true | true
{"s": "ABcD"} | {"s": "a"} | true | true | false | false | false
{"s": "ABcD"} | {"s": "ab"} | true | true | false | false | false
{"s": "ABcD"} | {"s": "abc"} | true | true | false | false | false
{"s": "ABcD"} | {"s": "abcd"} | true | true | false | false | false
{"s": "ABcD"} | {"s": "b"} | true | true | false | false | false
{"s": "ABcD"} | {"s": "A"} | false | false | false | true | true
{"s": "ABcD"} | {"s": "AB"} | false | false | false | true | true
{"s": "ABcD"} | {"s": "ABC"} | false | false | false | true | true
{"s": "ABcD"} | {"s": "ABc"} | false | false | false | true | true
{"s": "ABcD"} | {"s": "ABcD"} | false | true | true | true | false
{"s": "ABcD"} | {"s": "B"} | true | true | false | false | false
{"s": "B"} | {"s": ""} | false | false | false | true | true
{"s": "B"} | {"s": "a"} | true | true | false | false | false
{"s": "B"} | {"s": "ab"} | true | true | false | false | false
{"s": "B"} | {"s": "abc"} | true | true | false | false | false
{"s": "B"} | {"s": "abcd"} | true | true | false | false | false
{"s": "B"} | {"s": "b"} | true | true | false | false | false
{"s": "B"} | {"s": "A"} | false | false | false | true | true
{"s": "B"} | {"s": "AB"} | false | false | false | true | true
{"s": "B"} | {"s": "ABC"} | false | false | false | true | true
{"s": "B"} | {"s": "ABc"} | false | false | false | true | true
{"s": "B"} | {"s": "ABcD"} | false | false | false | true | true
{"s": "B"} | {"s": "B"} | false | true | true | true | false
(144 rows)