The unwrapping behavior of lax mode can lead to surprising results. For
instance, the following query using the .** accessor
selects every HR value twice:
-
-
=> select jsonb_path_query(:'json', 'lax $.**.HR');
- jsonb_path_query
- ------------------
- 73
- 135
- 73
- 135
-
+
+
=> select jsonb_path_query(:'json', 'lax $.**.HR');
+ jsonb_path_query
+------------------
+ 73
+ 135
+ 73
+ 135
+
This happens because the .** accessor selects both
the segments array and each of its elements, while
the .HR accessor automatically unwraps arrays when
using lax mode. To avoid surprising results, we recommend using
the .** accessor only in strict mode. The
following query selects each HR value just once:
-
-
=> select jsonb_path_query(:'json', 'strict $.**.HR');
- jsonb_path_query
- ------------------
- 73
- 135
-
+
+
=> select jsonb_path_query(:'json', 'strict $.**.HR');
+ jsonb_path_query
+------------------
+ 73
+ 135
+
now only choose one of these two commands, since all other commands
will be ignored:
- ROLLBACK;
- ROLLBACK TO SAVEPOINT sp1;
+ROLLBACK;
+ROLLBACK TO SAVEPOINT sp1;
Choosing ROLLBACK will abort everything, including
value 1, whereas ROLLBACK TO SAVEPOINT sp1 will retain