sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan kontrolleres, om et array er tomt i Postgres

array_length() kræver to parametre, den anden er dimensionen af ​​arrayet:

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;

Dette udelukker både tomme array og NULL.

Eller brug cardinality() i Postgres 9.4 eller nyere. Se tilføjet svar af @bronzenose.

Men hvis du sammenkæder en forespørgsel til at køre med EXECUTE , ville det være smartere at sende værdier med en USING klausul. Eksempler:

BTW, for eksplicit at kontrollere, om et array er tomt (som din overskrift siger - men det er ikke hvad du har brug for her) bare sammenligne det med et tomt array:

id_clients = '{}'

Det er alt. Du får:

TRUE .. array er tom
NULL .. array er NULL
FALSE .. enhver anden sag (array har elementer - også selvom det kun er NULL-elementer)



  1. Er der nogen logisk grund til at have forskellig tablespace til indekser?

  2. Indeks ikke brugt på grund af typekonvertering?

  3. Sidste_værdi vinduesfunktion fungerer ikke korrekt

  4. tilføje flere værdier i én kolonne