Reputation: 1649
Consider this example:
postgres=# CREATE TABLE emptyarray (fields jsonb);
CREATE TABLE
postgres=# INSERT INTO emptyarray VALUES ('{"key":["a","b"]}');
INSERT 0 1
postgres=# INSERT INTO emptyarray VALUES ('{"key":[]}');
INSERT 0 1
postgres=# SELECT * from emptyarray where Fields@>'{"key":["b"]}';
fields
---------------------
{"key": ["a", "b"]}
(1 row)
postgres=# SELECT * from emptyarray where Fields@>'{"key":[]}';
fields
---------------------
{"key": ["a", "b"]}
{"key": []}
(2 rows)
In the second query I expected only one rows in the results (the one record with empty array). But as you can see there are two rows in the result. How do I query for a empty array using @>
syntax?
I am using PostgreSQL 9.6
Upvotes: 20
Views: 18192
Reputation: 175606
You could use:
SELECT * from emptyarray where Fields-> 'key' = '[]'::jsonb;
Upvotes: 27