Есть ли способ узнать размер массива?
Например,
CREATE TABLE example (id integer[]) ;
INSERT INTO exam VALUES ( '{}');
INSERT INTO exam VALUES ( '{5,6,7}');
Отсюда можно ли получить такой результат, как:
size
0
3
Ответы:
Как сказал Вегоров, свое дело array_lengthсделает. Или, если вы знаете, что массив одномерный (что вероятно) и работаете с PostgreSQL 9.4 или выше, вы можете использовать cardinality:
SELECT cardinality(id) FROM example;
cardinalityвозвращает количество всех элементов в одном или многомерном массиве. Так select cardinality(ARRAY[[1,2], [3,4]]);бы вернулся 4, тогда как select array_length(ARRAY[[1,2], [3,4]], 1)вернулся бы 2. Если вы считаете первое измерение, array_lengthэто более безопасная ставка.
textтипом, while function array_length(text[]) does not exist;)
nullа не 0тогда cardinalityвозвращает то , что вы ожидали бы. Понятия не имею, о чем они думали с такой логикой.
Это банальное чтение документов :
SELECT array_length(id, 1) FROM example;
array_length. Не нашел этой информации в документах.
nulland 3вместо 0и 3для примера OPs. Определенно следует продвигать использование cardinalityпри принятии ответа, поскольку это проще в использовании и менее неожиданно (я полагаю, что использование массивов на 99,999% является одномерным)
Предполагая, что размерность массива всегда будет равняться 1, я не чувствую себя комфортно, поэтому я выбрал следующее:
SELECT coalesce(array_length(id, 1), 0) as size FROM example;
Прошло ... по крайней мере десять лет, но мы много работали, coalesceи это было очень удобно. Может, тянусь к нему из-за комфорта?
Пришлось использовать array_upper в postgres 8.2.