测试Postgresql数组字段是空还是空的正确方法是什么

Chr*_*oom 5 arrays postgresql comparison null function

我有一个用integer_array字段定义的表.它包含以下数据:

 id | black_list 
----+------------
  4 |            
  5 |            
  8 |            
 12 |            
  6 |            
  7 |            
 10 | {5}        
 13 | {5}        
  3 | {}         
  9 | {3}        
 11 | {}         
 14 | {}         
  1 | {}         
  2 | {}         
 15 | {}         
 16 | {}         
 17 | {}         
(17 rows)
Run Code Online (Sandbox Code Playgroud)

我需要编写一个查询来查看数组字段是否为空 - NULL或其他.问题是{}值不是null,也不是从ARRAY_LENGTH函数返回任何长度.http://www.postgresql.org/docs/8.4/static/functions-array.html中列出的其他数组函数似乎都不是我需要的.我发现我可以写ARRAY_LENGTH(0 || black_list)它让所有这些都返回1或更长的长度,但这似乎是一个讨厌的黑客.测试这个的正确方法是什么?

奖金问题:究竟{}代表什么?我一直无法编写将返回该值的select语句.ARRAY[]抛出错误,ARRAY[""]返回{""},ARRAY[NULL]返回{NULL}

Aar*_*ler 5

{}似乎代表着一个空数组,这可以解释的价值既是NOT NULLARRAY_LENGTH({})没有返回任何东西-但我希望它在返回0 {},也许这是一个PostgreSQL的特点与我不熟悉.

有没有理由你不能只测试返回值ARRAY_LENGTH,例如

SELECT id FROM table WHERE ARRAY_LENGTH(black_list, 1) IS NULL OR ARRAY_LENGTH(black_list, 1) < 1
Run Code Online (Sandbox Code Playgroud)

假设ARRAY_LENGTH()没有失去对空值的思考,id=12例如上面的例子中的空值,似乎就是这样做的.