Jak znaleźć rozmiar tablicy w postgresql


100

Czy istnieje sposób na znalezienie rozmiaru tablicy?

Na przykład,

CREATE TABLE example (id integer[]) ;

INSERT INTO exam VALUES ( '{}');

INSERT INTO exam VALUES ( '{5,6,7}');

Czy na tej podstawie można uzyskać taki wynik,

size

0

3

Odpowiedzi:


123

Jak wspomniał vyegorov, załatwi sprawę array_length. Lub jeśli wiesz, że tablica jest 1-wymiarowa (co jest prawdopodobne) i działa na PostgreSQL 9.4 lub nowszym, możesz użyć cardinality:

SELECT cardinality(id) FROM example;

10
Jeśli ktokolwiek może wspomnieć o dużej różnicy w używaniu długości_tablicy i liczności, to byłoby świetnie
Zia Ul Rehman Mughal

6
cardinalityzwraca liczbę wszystkich elementów w jednej lub wielowymiarowej tablicy. Więc select cardinality(ARRAY[[1,2], [3,4]]);wróci 4, podczas gdy select array_length(ARRAY[[1,2], [3,4]], 1)wróci 2. Jeśli liczysz pierwszy wymiar, array_lengthjest to bezpieczniejszy zakład.
Roshambo

2
Działa to również dla tablicy zapisanej w polu z texttypem, while function array_length(text[]) does not exist;)
santuxus

2
@ZiaUlRehmanMughal również długość tablicy pustej tablicy niespodziewanie ocenia się null, a nie 0podczas cardinalitypowrotów, czego można oczekiwać. Nie mam pojęcia, co myśleli, kierując się tą logiką.
EoghanM

82

To trywialne czytanie dokumentów :

SELECT array_length(id, 1) FROM example;

14
Czy wiesz, jaki jest drugi parametr funkcji array_length. Nie znalazłem tych informacji w dokumentach.
suzanshakya

19
@suzanshakya, długość żądanego wymiaru tablicyツ
vyegorov

5
Powróci nulli 3zamiast 0i 3dla przykładu PO. Zdecydowanie powinien promować używanie cardinalityprzy akceptowaniu odpowiedzi, ponieważ jest łatwiejszy w użyciu i mniej nieoczekiwany (wyobrażam sobie, że 99,999% tablic jest jednowymiarowych)
EoghanM


9

Zakładanie, że wymiar tablicy zawsze będzie wynosił 1, nie jest czymś, z czym czuję się komfortowo, więc zdecydowałem się na następujące:

SELECT coalesce(array_length(id, 1), 0) as size FROM example;

Minęło ... co najmniej dekadę, ale dużo z coalescetym robiliśmy i było to całkiem przydatne. Może sięgam po to z wygody?


3

Musiałem użyć array_upper w postgres 8.2.


Oszczędza życie. Jak prawie wszystkie posty używają array_length () zakładając, że ludzie są na postgres 9+; (
uniquegino
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.