简体   繁体   中英

How to query for empty array in JSONB?

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

You could use:

SELECT * from emptyarray where Fields-> 'key' = '[]'::jsonb;

Rextester Demo

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM