sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man kontrollerar om en array är tom i Postgres

array_length() kräver två parametrar, den andra är dimensionen för arrayen:

array_length(id_clients, 1) > 0

Så:

IF array_length(id_clients, 1) > 0 THEN
    query := query || format(' AND id = ANY(%L))', id_clients);
END IF;

Detta utesluter både tom array och NULL.

Eller använd cardinality() i Postgres 9.4 eller senare. Se tillagt svar av @bronzenose.

Men om du sammanfogar en fråga som ska köras med EXECUTE , skulle det vara smartare att skicka värden med en USING klausul. Exempel:

BTW, för att uttryckligen kontrollera om en array är tom (som din rubrik säger - men det är inte vad du behöver här) jämför bara det med en tom array:

id_clients = '{}'

Det är allt. Du får:

TRUE .. arrayen är tom
NULL .. matrisen är NULL
FALSE .. alla andra fall (arrayen har element - även om bara NULL-element)



  1. Hur väljer och optimerar man orakelindex?

  2. Lagra händelser när du använder Event Sourcing

  3. Hur och när används index i INSERT- och UPDATE-operationer?

  4. Varför ska du inte använda mysql_fetch_assoc mer än 1 gång?