Hologres est compatible avec PostgreSQL et prend en charge les fonctions de tableau standard de PostgreSQL, ainsi que plusieurs extensions pour les opérations sur les ensembles et l'agrégation. Cette rubrique décrit la syntaxe, les paramètres et des exemples pour chaque fonction.
Limitations
Les fonctions array_max, array_min, array_contains, array_except, array_distinct et array_union ne prennent pas en charge les requêtes portant sur des constantes. Par exemple, SELECT array_max(ARRAY[-2, NULL, -3, -12, -7]); n'est pas pris en charge ; utilisez plutôt des colonnes de tableau issues d'une table.
Références des fonctions
| Fonction | Syntaxe | Renvoie | Description |
|---|---|---|---|
| ARRAY_AGG | array_agg(anyelement) |
ARRAY | Agrège les valeurs d'une colonne provenant de plusieurs lignes dans un tableau. |
| ARRAY_APPEND | array_append(anyarray, anyelement) |
ARRAY | Ajoute un élément à la fin d'un tableau. |
| ARRAY_CAT | array_cat(anyarray, anyarray) |
ARRAY | Concatène deux tableaux. |
| ARRAY_CONTAINS | array_contains(array, target_value) |
BOOLEAN | Vérifie si un tableau contient une valeur spécifiée. |
| ARRAY_DIMS | array_dims(anyarray) |
TEXT | Renvoie les limites des dimensions d'un tableau sous forme de chaîne de texte. |
| ARRAY_DISTINCT | array_distinct(array) |
ARRAY | Supprime les éléments en double d'un tableau. |
| ARRAY_EXCEPT | array_except(array1, array2) |
ARRAY | Renvoie les éléments présents dans array1 mais absents de array2. |
| ARRAY_LENGTH | array_length(anyarray, int) |
INT | Renvoie le nombre d'éléments dans une dimension de tableau spécifiée. |
| ARRAY_LOWER | array_lower(anyarray, int) |
INT | Renvoie la limite inférieure d'une dimension de tableau spécifiée. |
| ARRAY_MAX | array_max(array) |
INT | Renvoie la valeur maximale des éléments, en ignorant les valeurs NULL. |
| ARRAY_MIN | array_min(array) |
INT | Renvoie la valeur minimale des éléments. |
| ARRAY_NDIMS | array_ndims(anyarray) |
INT | Renvoie le nombre de dimensions d'un tableau. |
| ARRAY_POSITIONS | array_positions(anyarray, anyelement) |
ARRAY | Renvoie les indices de toutes les occurrences d'un élément dans un tableau unidimensionnel. |
| ARRAY_PREPEND | array_prepend(anyelement, anyarray) |
ARRAY | Ajoute un élément au début d'un tableau. |
| ARRAY_REMOVE | array_remove(anyarray, anyelement) |
ARRAY | Supprime tous les éléments égaux à une valeur spécifiée d'un tableau unidimensionnel. |
| ARRAY_SORT | array_sort(anyarray) |
ARRAY | Trie les éléments d'un tableau par ordre croissant. |
| ARRAY_TO_STRING | array_to_string(anyarray, text[, text]) |
TEXT | Concatène les éléments d'un tableau à l'aide d'un séparateur, avec remplacement facultatif des valeurs NULL. |
| ARRAY_UNION | array_union(array1, array2) |
ARRAY | Fusionne deux tableaux et supprime les doublons. |
| ARRAY_UPPER | array_upper(anyarray, int) |
INT | Renvoie la limite supérieure d'une dimension de tableau spécifiée. |
| REGEXP_MATCH | regexp_match(text, text) |
ARRAY | Fait correspondre une chaîne à une expression régulière et renvoie les sous-chaînes capturées. |
| REGEXP_SPLIT_TO_ARRAY | regexp_split_to_array(text, text) |
ARRAY | Divise une chaîne selon une expression régulière et renvoie les parties sous forme de tableau. |
| UNNEST | unnest(anyarray) |
setof TEXT | Développe chaque élément d'un tableau en une ligne distincte. |
Fonctions de tableau
ARRAY_TO_STRING
array_to_string(anyarray, text[, text]) → TEXT
Concatène les éléments d'un tableau à l'aide d'un séparateur spécifié. Le troisième argument facultatif remplace les éléments NULL ; s'il est omis, les valeurs NULL sont ignorées.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
anyarray |
Oui | Tableau dont les éléments doivent être concaténés. |
text (2e) |
Oui | Chaîne de séparation. |
text (3e) |
Non | Chaîne à utiliser à la place des valeurs NULL. |
Exemple
-- Result: 1,2,3
SELECT array_to_string(ARRAY[1, 2, 3], ',');
ARRAY_AGG
array_agg(anyelement) → ARRAY
Agrège les valeurs d'une colonne provenant de plusieurs lignes dans un seul tableau. Deux formes de syntaxe sont prises en charge.
Syntaxe 1 : Agrégation de base
array_agg(anyelement)
Syntaxe 2 : Agrégation avec tri et filtrage
array_agg(expression [order_by_clause]) [FILTER (WHERE filter_clause)]
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
anyelement / expression |
Oui | Colonne ou expression à agréger. |
order_by_clause |
Non | Clause ORDER BY contrôlant l'ordre des éléments dans le tableau résultant. |
filter_clause |
Non | Condition pour la clause FILTER. Seules les lignes satisfaisant cette condition sont incluses. |
Notes d'utilisation
Pris en charge dans Hologres V1.3 et versions ultérieures : DECIMAL, DATE, TIMESTAMP, TIMESTAMPTZ.
Non pris en charge : JSON, JSONB, TIMETZ, INTERVAL, INET, OID, UUID, ARRAY.
La clause FILTER nécessite Hologres V1.3 ou version ultérieure. Pour mettre à niveau votre instance, consultez les rubriques Mise à niveau de l'instance ou Comment obtenir plus d'assistance en ligne ?.
Exemples
Agrégation de base :
CREATE TABLE test_array_agg_int (
c1 int
);
INSERT INTO test_array_agg_int
VALUES (1), (2);
SELECT array_agg(c1)
FROM test_array_agg_int;
Résultat :
array_agg
-----------
{2,1}
(1 row)
Agrégation avec FILTER (nécessite Hologres V1.3+) :
SELECT array_agg(c1) FILTER (WHERE c1 > 1)
FROM test_array_agg_int;
Résultat :
array_agg
-----------
{2}
(1 row)
ARRAY_APPEND
array_append(anyarray, anyelement) → ARRAY
Ajoute un élément à la fin d'un tableau.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
anyarray |
Oui | Tableau source. |
anyelement |
Oui | Élément à ajouter. |
Exemple
-- Result: {1,2,3}
SELECT array_append(ARRAY[1,2], 3);
ARRAY_CAT
array_cat(anyarray, anyarray) → ARRAY
Concatène deux tableaux du même type d'élément.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
anyarray (1er) |
Oui | Premier tableau. |
anyarray (2e) |
Oui | Deuxième tableau. |
Exemple
-- Result: {1,2,3,4,5}
SELECT array_cat(ARRAY[1,2,3], ARRAY[4,5]);
ARRAY_NDIMS
array_ndims(anyarray) → INT
Renvoie le nombre de dimensions d'un tableau.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
anyarray |
Oui | Tableau à inspecter. |
Exemple
-- Result: 2
SELECT array_ndims(ARRAY[[1,2,3], [4,5,6]]);
ARRAY_DIMS
array_dims(anyarray) → TEXT
Renvoie les limites des dimensions d'un tableau sous forme de chaîne de texte, en affichant les limites inférieure et supérieure de chaque dimension.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
anyarray |
Oui | Tableau à inspecter. |
Exemple
-- Result: [1:2][1:3]
SELECT array_dims(ARRAY[[1,2,3], [4,5,6]]);
ARRAY_LENGTH
array_length(anyarray, int) → INT
Renvoie le nombre d'éléments dans la dimension spécifiée d'un tableau. Les dimensions sont numérotées à partir de 1.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
anyarray |
Oui | Tableau à inspecter. |
int |
Oui | Numéro de la dimension (base 1). |
Exemple
-- Result: 3
SELECT array_length(ARRAY[1,2,3], 1);
ARRAY_LOWER
array_lower(anyarray, int) → INT
Renvoie la limite inférieure de la dimension de tableau spécifiée. Pour les tableaux standard, cette valeur est 1. Pour les tableaux avec une limite inférieure personnalisée (tels que '[0:2]={1,2,3}'::int[]), la limite inférieure réelle est renvoyée. Les dimensions sont numérotées à partir de 1.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
anyarray |
Oui | Tableau à inspecter. |
int |
Oui | Numéro de la dimension (base 1). |
Exemple
-- Result: 0
SELECT array_lower('[0:2]={1,2,3}'::int[], 1);
ARRAY_POSITIONS
array_positions(anyarray, anyelement) → ARRAY
Renvoie les indices d'un élément spécifié dans un tableau unidimensionnel.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
anyarray |
Oui | Tableau unidimensionnel à rechercher. |
anyelement |
Oui | Élément à trouver. |
Exemple
-- Result: {1,2,4}
SELECT array_positions(ARRAY['A','A','B','A'], 'A');
ARRAY_PREPEND
array_prepend(anyelement, anyarray) → ARRAY
Ajoute un élément au début d'un tableau.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
anyelement |
Oui | Élément à ajouter au début. |
anyarray |
Oui | Tableau source. |
Exemple
-- Result: {1,2,3}
SELECT array_prepend(1, ARRAY[2,3]);
ARRAY_REMOVE
array_remove(anyarray, anyelement) → ARRAY
Supprime tous les éléments égaux à la valeur spécifiée d'un tableau unidimensionnel.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
anyarray |
Oui | Tableau unidimensionnel à traiter. |
anyelement |
Oui | Valeur à supprimer. Tous les éléments correspondants sont supprimés. |
Exemple
-- Result: {1,3}
SELECT array_remove(ARRAY[1,2,3,2], 2);
ARRAY_SORT
array_sort(anyarray) → ARRAY
Trie les éléments d'un tableau par ordre croissant.
Notes d'utilisation
| Version de Hologres | Types de tableau pris en charge |
|---|---|
| V1.1.46+ | Tableaux TEXT (convertis en INT8 pour le tri ; le tableau TEXT trié est renvoyé) |
| V1.3.18+ | Tableaux INT4, INT8, FLOAT4, FLOAT8, BOOLEAN et TEXT. Les tableaux TEXT sont triés par ordre lexicographique. |
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
anyarray |
Oui | Tableau à trier. |
Exemple
-- Result: {1,1,2,3}
SELECT array_sort(ARRAY[1,3,2,1]);
ARRAY_UPPER
array_upper(anyarray, int) → INT
Renvoie la limite supérieure de la dimension de tableau spécifiée. Pour un tableau unidimensionnel standard, cette valeur correspond au nombre d'éléments. Les dimensions sont numérotées à partir de 1.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
anyarray |
Oui | Tableau à inspecter. |
int |
Oui | Numéro de la dimension (base 1). |
Exemple
-- Result: 4
SELECT array_upper(ARRAY[1,8,3,7], 1);
UNNEST
unnest(anyarray) → setof TEXT
Développe chaque élément d'un tableau en une ligne distincte. Utilisez cette fonction dans la clause FROM ou comme fonction renvoyant un ensemble.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
anyarray |
Oui | Tableau à développer. |
Exemple
SELECT unnest(ARRAY[1,2]);
Résultat :
unnest
------
1
2
(2 rows)
ARRAY_MAX
array_max(array) → INT
Renvoie la valeur maximale des éléments d'un tableau. Les valeurs NULL sont ignorées lors du calcul. Nécessite Hologres V1.3.19 ou version ultérieure.
array_max ne prend pas en charge les requêtes sur des constantes ; utilisez une colonne de table en entrée.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
array |
Oui | Tableau à évaluer. Les valeurs NULL sont ignorées. |
Exemple
CREATE TABLE test_array_max_int (
c1 int[]
);
INSERT INTO test_array_max_int
VALUES (NULL), (ARRAY[-2, NULL, -3, -12, -7]);
SELECT c1, array_max(c1)
FROM test_array_max_int;
Résultat :
c1 | array_max
------------------+-----------
\N | \N
{-2,0,-3,-12,-7} | 0
(2 rows)
ARRAY_MIN
array_min(array) → INT
Renvoie la valeur minimale des éléments d'un tableau. Nécessite Hologres V1.3.19 ou version ultérieure.
array_min ne prend pas en charge les requêtes sur des constantes ; utilisez une colonne de table en entrée.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
array |
Oui | Tableau à évaluer. |
Exemple
CREATE TABLE test_array_min_text (
c1 text[]
);
INSERT INTO test_array_min_text
VALUES (NULL), (ARRAY['hello', 'holo', 'blackhole', 'array']);
SELECT c1, array_min(c1)
FROM test_array_min_text;
Résultat :
c1 | array_min
------------------------------+-----------
\N | \N
{hello,holo,blackhole,array} | array
(2 rows)
ARRAY_CONTAINS
array_contains(array, target_value) → BOOLEAN
Vérifie si un tableau contient une valeur spécifiée. Renvoie true si la valeur est trouvée, false sinon. Nécessite Hologres V1.3.19 ou version ultérieure.
array_contains ne prend pas en charge les requêtes sur des constantes ; utilisez une colonne de table en entrée.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
array |
Oui | Tableau à rechercher. |
target_value |
Oui | Valeur à rechercher. |
Exemple
CREATE TABLE test_array_contains_text (
c1 text[],
c2 text
);
INSERT INTO test_array_contains_text
VALUES (ARRAY[NULL, 'cs', 'holo', 'sql', 'a', NULL, ''], 'holo'),
(ARRAY['holo', 'array', 'FE', 'l', NULL, ''], 'function');
SELECT c1, c2, array_contains(c1, c2)
FROM test_array_contains_text;
Résultat :
c1 | c2 | array_contains
--------------------------+----------+----------------
{holo,array,FE,l,"",""} | function | f
{"",cs,holo,sql,a,"",""} | holo | t
(2 rows)
ARRAY_EXCEPT
array_except(array1, array2) → ARRAY
Renvoie les éléments présents dans array1 mais absents de array2. Nécessite Hologres V1.3.19 ou version ultérieure.
array_except ne prend pas en charge les requêtes sur des constantes ; utilisez des colonnes de table en entrée.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
array1 |
Oui | Tableau source. |
array2 |
Oui | Tableau des éléments à exclure de array1. |
Exemple
CREATE TABLE test_array_except_text (
c1 text[],
c2 text[]
);
INSERT INTO test_array_except_text
VALUES (ARRAY['o', 'y', 'l', 'l', NULL, ''], NULL),
(ARRAY['holo', 'hello', 'hello', 'SQL', '', 'blackhole'], ARRAY['holo', 'SQL', NULL, 'kk']);
SELECT c1, c2, array_except(c1, c2)
FROM test_array_except_text;
Résultat :
c1 | c2 | array_except
-------------------------------------+------------------+-------------------
{o,y,l,l,"",""} | | {o,l,y,""}
{holo,hello,hello,SQL,"",blackhole} | {holo,SQL,"",kk} | {blackhole,hello}
(2 rows)
ARRAY_DISTINCT
array_distinct(array) → ARRAY
Supprime les éléments en double d'un tableau. Nécessite Hologres V1.3.19 ou version ultérieure.
array_distinct ne prend pas en charge les requêtes sur des constantes ; utilisez une colonne de table en entrée.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
array |
Oui | Tableau dont les doublons doivent être supprimés. |
Exemple
CREATE TABLE test_array_distinct_text (
c1 text[]
);
INSERT INTO test_array_distinct_text
VALUES (ARRAY['holo', 'hello', 'holo', 'SQL', 'SQL']),
(ARRAY[]::text[]);
SELECT c1, array_distinct(c1)
FROM test_array_distinct_text;
Résultat :
c1 | array_distinct
---------------------------+------------------
{holo,hello,holo,SQL,SQL} | {SQL,hello,holo}
{} | {NULL}
(2 rows)
ARRAY_UNION
array_union(array1, array2) → ARRAY
Fusionne deux tableaux en un nouveau tableau et supprime les éléments en double. Nécessite Hologres V1.3.19 ou version ultérieure.
array_union ne prend pas en charge les requêtes sur des constantes ; utilisez des colonnes de table en entrée.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
array1 |
Oui | Premier tableau. |
array2 |
Oui | Deuxième tableau. Les doublons entre les deux tableaux sont supprimés après la fusion. |
Exemple
CREATE TABLE test_array_union_int (
c1 int[],
c2 int[]
);
INSERT INTO test_array_union_int
VALUES (NULL, ARRAY[2, -3, 2, 7]),
(ARRAY[2, 7, -3, 2, 7], ARRAY[12, 9, 8, 7]);
SELECT c1, c2, array_union(c1, c2)
FROM test_array_union_int;
Résultat :
c1 | c2 | array_union
--------------+------------+-----------------
\N | {2,-3,2,7} | {2,7,-3}
{2,7,-3,2,7} | {12,9,8,7} | {9,2,7,8,12,-3}
(2 rows)
REGEXP_MATCH
regexp_match(str TEXT, pattern TEXT) → ARRAY
Fait correspondre une chaîne à une expression régulière et renvoie un tableau des sous-chaînes capturées.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
str |
Oui | Chaîne à faire correspondre. |
pattern |
Oui | Expression régulière. Utilisez des groupes de capture (...) pour extraire les sous-chaînes. |
Exemple
SELECT regexp_match('foobarbequebaz', '(bar)(beque)');
Résultat :
regexp_match
--------------
{bar,beque}
REGEXP_SPLIT_TO_ARRAY
regexp_split_to_array(str TEXT, pattern TEXT) → ARRAY
Divise une chaîne selon un délimiteur d'expression régulière et renvoie les parties sous forme de tableau.
Paramètres
| Paramètre | Obligatoire | Description |
|---|---|---|
str |
Oui | Chaîne à diviser. |
pattern |
Oui | Expression régulière utilisée comme délimiteur de division. |
Exemple
CREATE TABLE interests_test (
name text,
intrests text
);
INSERT INTO interests_test
VALUES ('Ava', 'singing, dancing'),
('Bob', 'playing football, running, painting'),
('Jack', 'arranging flowers, writing calligraphy, playing the piano, sleeping');
SELECT name, regexp_split_to_array(intrests, ',')
FROM interests_test;
Résultat :
name | regexp_split_to_array
----------------------------
Ava | {singing, dancing}
Bob | {playing football, running, painting}
Jack | {arranging flowers, writing calligraphy, playing the piano, sleeping}
Opérateurs
Les opérateurs suivants fonctionnent avec les tableaux.
| Opérateur | Renvoie | Description | Exemple | Résultat |
|---|---|---|---|---|
@> |
BOOLEAN | Vérifie si le tableau de gauche contient tous les éléments du tableau de droite. | SELECT ARRAY[1,2,3] @> ARRAY[1,2]; |
t |
<@ |
BOOLEAN | Vérifie si le tableau de gauche est contenu dans le tableau de droite. | SELECT ARRAY[1,2,3] <@ ARRAY[1,2]; |
f |
&& |
BOOLEAN | Vérifie si les deux tableaux partagent des éléments communs. Hologres V1.3.37+ prend également en charge les colonnes de tableau en entrée. | SELECT ARRAY[1,2,3] && ARRAY[1,2]; |
t |
Fonctions de tableau d'ordre supérieur
Hologres V3.2 et versions ultérieures prennent en charge les fonctions de tableau d'ordre supérieur. Pour plus d'informations, consultez la rubrique Expressions LAMBDA et fonctions associées.