У меня есть таблица, определенная с помощью поля integer_array. Он содержит следующие данные:Каков правильный способ проверить, является ли поле массива Postgresql ни пустым, ни пустым
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)
Мне нужно написать запрос, чтобы увидеть, если поле массива пусто - 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}
и т.д.
Я понимаю, что могу просто написать инверсию и тест, чтобы увидеть, больше ли длина, чем 0, но я хотел бы знать, почему, похоже, нет способа проверить ее таким образом; –
{} представляется пустым массивом, который объясняет, что значение NOT NULL и ARRAY_LENGTH ({}) ничего не возвращает, хотя я ожидаю, что он вернет 0 на {}, возможно, это особенность PostgreSQL, с которой Я незнакома. Есть ли причина, по которой вы не можете просто проверить возвращаемое значение ARRAY_LENGTH, например. 'SELECT id FROM table WHERE ARRAY_LENGTH (black_list) IS NULL ИЛИ ARRAY_LENGTH (black_list) <1'? Предполагая, что ARRAY_LENGTH() не потеряет рассудок о пустых значениях, таких как id = 12 в приведенном выше примере, похоже, что это сделало бы трюк. –
(У меня нет сервера Postgre на данный момент, чтобы протестировать его, следовательно, непроверенный запрос в моем предыдущем комментарии. Извините, если я отправил вас в тупик.) –