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