Tous les produits
Search
Centre de documentation

Hologres:Notable fixes

Dernière mise à jour :Aug 25, 2026

Cette rubrique répertorie les problèmes résolus dans chaque version de Hologres, y compris leur description et une analyse de leur impact. Utilisez les messages d'erreur ou les descriptions des problèmes pour déterminer si votre instance est concernée. Nous vous recommandons de rejoindre le groupe d'utilisateurs de l'entrepôt de données en temps réel Hologres afin de contacter le support technique pour obtenir de l'aide lors de la mise à niveau de votre instance vers la dernière version. Pour plus d'informations, consultez la rubrique Comment obtenir un support en ligne ?.

Contexte

  • Bugs et corrections

    • Un bug identifié dans une version spécifique existe également dans toutes les versions antérieures, sauf indication contraire.

      Par exemple, un bug présent dans la version V1.3 l'est également dans les versions V1.1 et V0.10.

    • Un bug corrigé dans une version spécifique reste corrigé dans toutes les versions ultérieures.

      Par exemple, un bug corrigé dans la version V1.1 le reste dans la version V1.3 et les versions suivantes.

  • Gravité des bugs

    • P0 (Critique) : effectuez la mise à niveau immédiatement. Ces bugs peuvent impacter les services de production, tels que l'exactitude des requêtes et le taux de réussite des écritures.

    • P1 (Élevé) : vous devez effectuer la mise à niveau pour prévenir d'éventuels problèmes.

    • P2 (Moyen) : effectuez la mise à niveau selon vos besoins. Vous pouvez résoudre ces bugs intermittents en réécrivant une méthode ou en redémarrant l'instance.

Défauts de 2026

Juillet 2026

Niveau de gravité

Description

Cause racine

Version affectée

Version corrigée

Solution de contournement

P1

Hologres prend uniquement en charge la syntaxe CREATE INDEX pour des fonctionnalités spécifiques (telles que les index inversés en texte intégral). Toutefois, dans d'autres scénarios, l'instruction create index if not exists on xx; peut être exécutée sans être correctement bloquée. Après une exécution incorrecte, une incohérence des métadonnées se produit entre les nœuds FE (Frontend), où l'index est visible sur certains nœuds FE mais pas sur d'autres. Lorsque la corbeille est activée et qu'une table contenant un tel index problématique est supprimée (entrant ainsi dans la corbeille), un retard de relecture (replay delay) peut survenir. Même si aucun retard de relecture ne se produit à ce moment-là, il surviendra lorsque la table sera définitivement supprimée de la corbeille. Une fois le retard de relecture déclenché, l'instance ne peut plus exécuter d'instructions DDL et les tables peuvent sembler visibles ou invisibles de manière intermittente.

Les utilisateurs peuvent exécuter par erreur l'instruction non prise en charge create index if not exists on xx;, ce qui provoque une incohérence des métadonnées des nœuds FE.

V4.2.0~V4.2.9

V4.2.10

  • Effectuez la mise à niveau vers la dernière version.

  • Solution de contournement temporaire : désactivez la corbeille avant de supprimer les tables problématiques (avant qu'elles n'entrent dans la corbeille) afin d'éviter tout retard de relecture.

  • Si un retard de relecture s'est déjà produit, une réparation manuelle par les ingénieurs de garde est requise.

Juin 2026

Niveau de gravité

Description

Cause racine

Version affectée

Version corrigée

Solution de contournement

P0

La vidange (flush) des données sur une table partitionnée logique avec des mises à jour partielles de la clé primaire peut provoquer le redémarrage de l'instance.

Un défaut dans la manière dont les tables partitionnées logiques gèrent les scénarios de mise à jour de la clé primaire lors des opérations de vidage.

V3.1.1

V3.2.29, V3.1.43

Effectuez la mise à niveau vers une version corrigée.

P0

Les écritures de données échouent avec l'erreur Partition count [65535] in memtable has exceed the limit [65535], suivie d'un redémarrage du worker.

Un défaut dans la validation du nombre de partitions de la memtable ne prend pas en compte les partitions du lot d'écriture actuel, ce qui entraîne l'arrêt inattendu du worker.

V4.0.1

V4.1.21, V4.2.2, V4.0.37

Mai 2026

Niveau de gravité

Description

Cause racine

Version affectée

Version corrigée

Solution de contournement

P1

L'exécution de l'opération Rebuild sur une table avec Binlog activé peut provoquer le blocage du nœud frontend, rendant l'instance indisponible.

Un défaut dans la gestion des tables avec Binlog activé par l'opération Rebuild provoque une contention de verrous, susceptible de bloquer le nœud frontend.

V4.1.1 à V4.1.20

V4.1.21

  • Effectuez la mise à niveau vers une version corrigée.

  • Désactivez le paramètre GUC set hg_experimental_rebuild_try_to_using_dynamic_table_mode=off avant d'exécuter l'opération Rebuild.

P2

La spécification de plusieurs options dans la chaîne de connexion entraîne des échecs de connexion ou des valeurs de paramètres incorrectes. Par exemple, la définition des options sur -c statement_timeout=1000 -c search_path=public génère l'erreur suivante : Connect to FE failed, invalid value for parameter "statement_timeout": "1000-csearch_path=public"

Le module gateway supprime incorrectement les espaces blancs lors de l'analyse du champ options, ce qui fusionne plusieurs paramètres en une seule valeur mal formée.

  • V2.0.18 à V2.0.35

  • V2.1.1 à V2.1.15

  • V2.0.36

  • V2.1.16

  • Effectuez la mise à niveau vers une version corrigée.

  • Évitez de spécifier plusieurs options dans la chaîne d'options de connexion.

Avril 2026

Niveau de gravité

Description

Cause racine

Version affectée

Version corrigée

Solution de contournement

P2

Lorsque vous utilisez Data Masking V2 pour interroger une VIEW contenant une table masquée, vous pouvez recevoir à tort un message d'erreur permission denied for schema xxx ou permission denied for table xxx.

La fonctionnalité de masquage des données gère incorrectement les autorisations.

  • V4.0.1 à V4.0.27

  • V4.1.1 à V4.1.12

  • V4.0.28

  • V4.1.13

Effectuez la mise à niveau vers une version corrigée.

P1

Lorsque vous exécutez une instruction DML sur une table disposant d'un index secondaire global (Global Index), une erreur est signalée si le plan d'exécution utilise l'opérateur Shard Prune : Transaction xxxxxxxxxxxxx has no snapshot of table xxxxx index 1.

La fonctionnalité d'index secondaire global ne prend pas encore en charge l'opérateur Shard Prune.

V4.0.1

À corriger

  • Pour résoudre une erreur de requête, désactivez le paramètre GUC hg_experimental_enable_shard_pruning.

  • Effectuez la mise à niveau vers la version corrigée dès sa publication.

Mars 2026

Gravité

Description

Cause racine

Versions affectées

Versions corrigées

Solution de contournement

P1

L'utilisation du mode de recherche par phrase d'un index inversé en texte intégral peut produire des résultats incorrects si le paramètre slop dépasse 255.

La logique de correspondance pour les index inversés en texte intégral est défectueuse lorsque la valeur slop est supérieure à 255.

V4.0.1

V4.1.9

  • Mettez à jour vers la dernière version.

  • Évitez de définir le paramètre slop sur une valeur supérieure à 255.

P2

L'actualisation d'une dynamic table échoue en incremental refresh mode si une fonction Volatile précède une fonction d'agrégation et ne se trouve pas dans la dernière colonne. L'erreur est la suivante :

ERROR: Feature not supported: Distribution key must be contained by output columns, residual key list:[3, ]

La liste des clés de distribution est transmise à la requête interne, mais elle correspond aux colonnes de sortie finales et ne peut pas être mappée aux colonnes de la requête interne.

V3.1

  • V4.1.8

  • V4.0.24

  • Utilisez le mode complet ou placez la fonction Volatile après la clé de distribution.

  • Mettez à jour vers la dernière version.

P2

Lors du chargement d'un groupe de tables dans un virtual warehouse, le FE (Frontend) peut ne pas récupérer toutes les informations d'emplacement des shards depuis le SE (Storage Engine), ce qui entraîne l'échec des opérations d'écriture FixedFE pendant environ 1 seconde.

Dans la fonction DDLReadService::DoGetTableGroupShards, l'instruction break était utilisée au lieu de continue lorsque ShardInfos était vide, ce qui provoquait une récupération incomplète des données.

V1.1

  • V4.1.7

  • V4.0.24

  • Mettez à jour vers la dernière version.

P2

Le traitement par lots d'une colonne de type tableau avec un type de données de longueur variable dépassant 64 Mo génère l'erreur suivante : Copy overflow with offset xx, length xx, and array length xx.

Un tableau mutable réserve de l'espace pour une seule ligne, mais le tableau ajouté contient plus d'une ligne. Lorsqu'une colonne de texte dépasse 64 Mo, la taille du générateur est réservée pour une seule ligne sans prendre en compte la taille minimale requise.

V4.0

  • V4.1.6

  • V4.0.21

  • Solution de contournement : exécutez alter database xxx set hg_experimental_enable_batch_accumulator_v2=off;.

  • Mettez à jour vers la dernière version.

P2

Lorsqu'un utilisateur exécute une instruction SQL, le nom du compte Alibaba Cloud n'est pas automatiquement converti en ID, par exemple dans GRANT USAGE ON SCHEMA public TO "ALIYUN$a".

is_initdb est incorrectement considéré comme vrai car extern bool is_initdb; n'est pas déclaré.

  • V2.2

  • V3.0

  • V3.1

  • V3.2

  • V4.0

V3.0.53

  • Utilisez les ID de compte au lieu des noms de compte pour effectuer les opérations.

  • Mettez à jour vers la dernière version.

P2

Lors du traitement par lots de copies, une mémoire partagée saturée peut provoquer une erreur ERROR: Parse data from copy encountered internal error ou un vidage de mémoire (coredump). La trace de pile contient holo_copy ou CopyReadLineText.

En mode de copie par lots, les données client sont regroupées par nombre de lignes et écrites dans la mémoire partagée. Si une seule ligne est volumineuse (environ 600 Mo par lot), les écritures concurrentes provenant de plusieurs connexions peuvent épuiser la mémoire partagée. Cela peut entraîner l'échec des écritures suivantes ou le plantage du processus, car le côté lecture lit des valeurs invalides en raison d'un débordement.

V1.1

  • V4.1.5

  • V4.0.21

  • V3.2.31

  • Solution de contournement : utilisez des écritures de copie en flux continu ou réduisez la valeur du paramètre hg_experimental_query_batch_size (par défaut : 8192). Par exemple, alter user xx set hg_experimental_query_batch_size = 512;.

  • Mettez à jour vers la dernière version.

P2

Une erreur se produit lors de la lecture des colonnes de tableau à partir de fichiers Parquet en raison du saut d'index de page. Ce problème peut être déclenché lorsque l'index de page est activé (par défaut), qu'une requête SQL lit des colonnes de tableau et qu'un predicate pushdown vers le lecteur Parquet filtre n'importe quelle page de n'importe quelle colonne.

Il existe un problème de compatibilité entre la logique de saut d'index de page et la lecture des colonnes de tableau. Lorsque predicate pushdown provoque le saut d'une page, l'état de lecture de la colonne de tableau n'est pas correctement synchronisé.

V3.1

  • V4.1.5

  • V4.0.19

  • V3.2.29

  • V3.1.43

  • Solution de contournement : désactivez l'index de page : set hg_experimental_enable_external_parquet_use_page_index = off;.

  • Mettez à jour vers la dernière version.

P2

Correction d'un problème en mode Fixed plan où une instruction INSERT ON CONFLICT produisait un résultat incorrect si la clause WHERE était une constante. Par exemple, lors de l'exécution de insert into a values(0,1) on conflict(id) do update set id = excluded.id, name = excluded.name where 1 = 0;, aucune ligne n'était écrite même si l'ID n'entrait pas en conflit.

Lorsque la condition WHERE est une expression constante, la condition n'est pas réécrite correctement, ce qui empêche l'écriture des données répondant à la condition.

V4.0

  • V4.1.6

  • V4.0.24

  • Utilisez la syntaxe INSERT OR IGNORE et évitez d'utiliser des conditions constantes dans les expressions ON CONFLICT.

  • Mettez à jour vers la dernière version.

P2

Le lecteur Parquet ne peut pas traiter les groupes de lignes vides. Une erreur est signalée lors de la lecture d'un groupe de lignes contenant 0 ligne. Dans Hologres V3.1 et versions ultérieures, cela peut provoquer un vidage de mémoire (coredump), et la trace de pile contient hologram::spi::parquet::RowRange.

Le lecteur suppose qu'un groupe de lignes contient des données et n'est pas vide. Lors du traitement d'un groupe de lignes vide, le marqueur de fin de fichier (EOF) renvoyé par l'analyseur de pages de données est ignoré, ce qui déclenche incorrectement la logique de gestion des erreurs.

V3.0

  • V4.1.4

  • V4.0.19

  • V3.2.29

  • Solution de contournement : exécutez la requête en utilisant hiveqe et définissez le paramètre GUC sur set hg_experimental_force_access_dlf_paimon_via_hiveqe = on; ou set hg_experimental_force_access_dlf_iceberg_via_hiveqe = on; ou hg_experimental_enable_access_dlf_via_fse = off;.

  • Mettez à jour vers la dernière version.

P0

La soumission d'un fichier vide lors d'une opération bulkload entraîne l'échec de l'opération de vidage (flush). Lorsqu'un fichier de taille 0 est soumis, l'opération de vidage suivante échoue car elle ne peut pas ouvrir le fichier pour lire ses métadonnées.

Lorsqu'une opération bulkload déclenche une compaction par suppression, toutes les lignes du fichier sélectionné sont marquées pour suppression, ce qui génère un fichier vide.

V3.1

  • V4.1.2

  • V4.0.18

  • V3.2.29

  • V3.1.43

  • Solution de contournement : définissez le paramètre GUC et réimportez la table : set hg_serverless_computing_run_compaction_before_commit_bulk_load = off;.

  • Mettez à jour vers la dernière version.

P2

Une opération d'écriture échoue pour un Fixed plan si l'index secondaire global contient un type booléen. Une erreur est signalée lors de la création d'un index global et de l'insertion de données : ERROR: XX000: internal error: unexpected error, failed to write, detail: Unsupported type in fixed dispatcher.

Le distributeur fixe ne prend pas en charge l'écriture de valeurs booléennes dans un global secondary index.

V4.0.0

  • V4.0.16

  • V4.1.2

  • Mettez à jour vers la dernière version.

P2

Une requête cross-instance Holo FDW échoue. Après la mise à niveau vers la version 4.0, l'erreur suivante est signalée lors de l'interrogation d'une table étrangère : Fetch table group shards failed on meta proxy:Loading cached shard location value for table group[...] failed.

Le FDW ne parvient pas à charger la valeur d'emplacement de shard mise en cache.

V4.0.6

  • V4.0.15

  • V4.1.1

  • Mettez à jour vers la dernière version.

P2

L'écriture de données d'une table masquée vers une table de destination avec une colonne à incrémentation automatique provoque un comportement inattendu. Dans Hologres V4.0 et versions antérieures, cette opération peut provoquer un vidage de mémoire (coredump) ou un comportement d'erreur anormal.

Le code suppose un mappage un-à-un entre parsetree->targetList et rte_insert->insertedCols. Cette hypothèse est invalide lorsque la table de destination contient une colonne à incrémentation automatique car parsetree->targetList inclut à la fois les colonnes à incrémentation automatique et celles spécifiées par l'utilisateur, tandis que rte_insert->insertedCols n'inclut que les colonnes spécifiées par l'utilisateur.

V3.1

  • V3.2.26

  • V4.0.14

  • V3.1.42

  • Évitez d'utiliser des colonnes à incrémentation automatique.

  • Mettez à jour vers la dernière version.

P2

L'interface Array Ref n'est pas thread-safe et peut provoquer un vidage de mémoire (coredump). À partir de Hologres V2.2, dans la logique de shuffle pour le shuffle au niveau worker et QE v2, l'accès multithread à array->type peut provoquer un vidage de mémoire, et le champ type du tableau devient une valeur invalide.

Bien que l'interface de récupération de type ArrayRef soit marquée comme const, le mot-clé mutable permet de modifier la variable membre type_. L'accès concurrent à type par plusieurs threads peut corrompre le bloc de contrôle de type_, ce qui entraîne des problèmes de sécurité des threads.

V3.1

  • V4.1.6

  • V4.0.21

  • V3.2.31

  • V3.1.45

  • Solution de contournement temporaire : désactivez le shuffle au niveau worker et QE v2.set hg_experimental_enable_worker_level_connection = off; set hg_experimental_enable_qe_v2 = off;.

  • Mettez à jour vers la dernière version.

P2

Une erreur se produit lorsque vous ajoutez une colonne à une Dynamic table existante à l'aide de l'instruction alter definition. Si la table de base est une table partitionnée physique et que la Dynamic Table (DT) est une table partitionnée logique, l'exécution de l'instruction alter definition sur la DT signale l'une des erreurs suivantes : ERROR: New definition is not supported in incremental mode: Multiple partitions of table XXX is selected ou ERROR: New definition is not supported in incremental mode: No partitions of table XXX is selected.

Lors du processus de création, un paramètre GUC a été défini pour ignorer la vérification du nombre de partitions par l'optimiseur de requêtes, mais cette logique n'a pas été synchronisée dans le processus ALTER DEFINITION.

V3.1

  • V3.1.40

  • V3.2.24

  • V4.0.12

  • V4.0.13

  • Solution de contournement : définissez le paramètre GUC en exécutant set hg_experimental_check_selected_partition_table_number_for_dynamic_table = off;, puis exécutez alter definition.

  • Mettez à jour vers la dernière version.

P2

Une erreur de clé primaire en double est signalée lors de la création d'une External Dynamic table. Cela se produit lorsque la requête select pour l'External DT joint ou unionne plusieurs tables identiques. Par conséquent, la liste des tables de base générée contient des doublons, ce qui provoque une erreur lors de l'insertion de données dans la table système : ERROR: duplicate key value violates unique constraint "pg_holo_external_dynamic_table_dependencies_name_index".

Ce problème affecte à la fois les dynamic tables et les external dynamic tables. La table système d'une dynamic table n'a pas de primary key, donc l'insertion d'enregistrements en double ne provoque pas d'erreur. Cependant, la table système d'une dynamic table externe possède une contrainte de primary key, qui interdit les enregistrements en double.

V4.0

V4.0.13

  • Mettez à jour vers la dernière version.

P2

Une requête d'agrégation sur des données de type char(n) échoue. Après avoir activé AQE, l'exécution de l'instruction select col1, max(col2) from t1 group by col1 renvoie l'erreur suivante : hos_exception: Internal error: HGERR_code XX000 ExecuteQuery failed, last errmsg: syntax error at or near "4294967291".

Dans ORCA, le champ type_modifier n'a pas été déduit pour les résultats d'agrégation de type char. Cela a entraîné la définition du type_modifier du résultat d'agrégation sur -5 (soit 4294967291 en tant qu'entier non signé). Lorsque AQE était activé, il tentait de créer un champ char(4294967291), ce qui dépassait la limite de longueur et provoquait une erreur.

V3.1

  • V3.1.39

  • V3.2.24

  • V4.0.12

  • V4.0.13

  • Solution de contournement : désactivez AQE : alter database xxx set hg_experimental_enable_adaptive_execution = off;.

  • Mettez à jour vers la dernière version.

P2

L'exécution SQL d'un snapshot échoue lorsqu'une vue contient une sous-requête sans alias. Si l'instruction SELECT d'une vue utilise la fonctionnalité subquery alias optional pour créer une sous-requête sans alias, l'exécution du SQL de snapshot généré par hg_dump_script renvoie une erreur : unnamed_subquery does not exist.

Lorsque PostgreSQL déduit le SQL de définition de la vue à partir de la règle de vue, il n'impose pas d'alias pour la sous-requête. Si la vue d'un utilisateur comporte une sous-requête sans alias, le SQL de définition de la vue déduit manque également d'alias, mais la liste cible en spécifie un, ce qui provoque un échec d'analyse SQL.

V4.0

  • V4.1.6

  • V4.0.12

  • Recréez ces vues en utilisant CREATE OR REPLACE et fournissez un alias pour chaque sous-requête.

  • Mettez à jour vers la dernière version.

P1

Des enregistrements en double apparaissent après le regroupement d'une table Paimon Deletion Vector (DV) par primary key. Ce problème survient lorsqu'un fichier Parquet contient une page avec un format physique FIXED_LEN_BYTE_ARRAY, un format logique decimal et un encodage plain. Si un lot d'enregistrements lu depuis cette colonne traverse une limite de page, les données situées après la limite au sein de ce lot sont incorrectement placées au début du lot d'enregistrements.

Le décodeur Parquet n'appliquait pas de décalage lors du placement des données, ce qui entraînait un positionnement incorrect des données lorsqu'un lot d'enregistrements traversait une limite de page.

V3.1.0

  • V3.1.39

  • V3.2.23

  • V3.2.24

  • V4.0.12

  • Solution de contournement : Exécutez select hg_admin_command('set_global_flag', 'enable_create_decimal_array_v2 = true');.

  • Mettez à jour vers la dernière version.

P2

Après le basculement des requêtes sur les MaxCompute table vers le chemin d'accès Common Table, Auto Analyze ne peut pas obtenir la dernière heure de modification de la table, ce qui peut provoquer des erreurs Out of Memory (OOM). Après une mise à niveau vers Hologres V3.0.51, les erreurs OOM peuvent persister lors de l'interrogation des foreign tables via le chemin Common Table. Dans un modèle à trois niveaux pour une MaxCompute table, le nom du schéma dans la réponse du chemin d'accès Common Table devient default au lieu du nom du projet Hologres. Cela empêche Auto Analyze de récupérer par lot l'horodatage de la dernière modification de la foreign table, et aucune information de changement n'est collectée.

Le chemin d'accès Common Table et holo_native ne sont pas alignés dans leur gestion du modèle à trois niveaux. Pour l'interface fetcher->GetTables dans un modèle à trois niveaux, holo_native renvoie le project_name comme schema_name, tandis que le chemin d'accès Common Table renvoie default comme schema_name. Cela entraîne un échec du remplissage des données.

V3.0

  • V3.0.52

  • V3.1.39

  • V3.2.23

  • V3.2.24

  • Exécutez manuellement la commande ANALYZE.

  • Mettez à jour vers la dernière version.

P2

Lorsque Hologres interroge les données MC via CommonTable, une fuite de mémoire lente se produit dans l'interface oct_get_partition_names. Le problème survient après une mise à niveau de Hologres V3.1.22 vers V3.1.30, provoquant une augmentation continue et lente de l'utilisation de la mémoire sur le long terme. Il est déclenché par des requêtes à haute fréquence sur les tables partitionnées MC lorsque CommonTable est activé.

L'interface oct_get_partition_names présente une fuite de mémoire lente, entraînant une augmentation continue de l'utilisation de la mémoire au fil du temps.

V3.0

  • V3.0.51

  • V3.1.36

  • V3.2.18

  • V4.0.7

  • La memory leak est lente. Lorsque la mémoire de holo_worker est élevée, vous pouvez redémarrer les pods ayant une consommation mémoire importante pour récupérer les ressources. Si de nombreux pods sont concernés, vous pouvez redémarrer l'instance.

  • Mettez à jour vers la dernière version.

P1

Du côté de la sonde d'une jointure de hachage, un runtime filter généré à partir du premier enfant d'un UNION ALL est propagé vers le second enfant, ce qui entraîne une perte de données dans le résultat de la requête.

Lors du processus de mappage et de propagation vers le second enfant de l'opération UNION ALL, le runtime filter du premier enfant a été fusionné de manière incorrecte, conduisant à une propagation erronée.

V3.1

  • V3.1.39

  • V3.2.23

  • V3.2.24

  • V4.0.12

  • Solution de contournement : Définissez le paramètre GUC : alter database set hg_experimental_enable_runtime_filter_push_thru_union_all=off;.

  • Mettez à jour vers la dernière version.

P2

Les tables dynamiques qui ont été renommées ou dont les schémas ont été modifiés ne peuvent pas être actualisées automatiquement après une mise à niveau vers Hologres V4.0.7 ou une version ultérieure. Le message d'erreur suivant s'affiche : ExecuteQuery failed, last errmsg: Can not find dynamic table properties of XXX ou relation "XXX" does not exist.

Une dynamic table doit périodiquement récupérer les dernières propriétés depuis le FE (Frontend) dans le pilote. Lorsque le code a été déplacé du pilote de table vers le maître du pilote, la logique de synchronisation des derniers noms de table et de schéma a été omise. Cela entraîne l'échec des actualisations après une mise à niveau, car elles utilisent le nom initial de création.

V4.0.7

  • V4.0.10

  • V4.0.13

  • Mettez à jour vers la dernière version.

P2

Une instruction CREATE TABLE AS SELECT (CTAS) affiche des performances dégradées en raison de certaines étapes d'optimisation durant la phase createstmt de l'optimisation des requêtes.

Certaines étapes d'optimisation inutiles dans la phase d'optimisation des requêtes pour les instructions CTAS ont eu un impact négatif sur les performances.

V4.0

  • V4.0.10

  • V4.0.13

  • Mettez à jour vers la dernière version.

P1

L'utilisation de la fonction d'agrégation ANY_VALUE sur une dynamic table actualisée de manière incrémentielle produit des résultats incorrects. Plusieurs valeurs sont retournées lors de l'interrogation de la dynamic table, bien que le champ de la table de base ne contienne qu'une seule valeur.

Dans FinalizeStateRows, le result_array était généré de manière incorrecte à l'intérieur d'une boucle. Ce bogue n'a pas été rétroporté vers la branche de publication V3.2.

V3.2

V3.2.24

  • Solution de contournement : Remplacez la fonction par une fonction MIN ou MAX, telle que select id, sum(col1), min(col2) from t1 group by id.

  • Mettez à jour vers la dernière version.

P2

Le nombre d'erreurs d'épuisement de la mémoire (OOM) augmente lorsque vous interrogez des tables externes après être passé du lien normal au lien Common Table. L'erreur suivante est signalée : ERROR: internal error: common table memory pool out of memory.

Les modifications des autorisations dans le chemin d'accès Common Table lors de la collecte Auto Analyze empêchent le système d'obtenir la dernière heure de modification de la table. Cela empêche le déclenchement d'Auto Analyze, ce qui conduit à des statistiques obsolètes et à des erreurs OOM.

  • V3.0.42

  • V3.1

  • V3.2

  • V4.0

  • V4.0.9

  • V3.1.38

  • V3.2.21

  • V3.0.51

  • V3.2.24

  • Exécutez manuellement la commande ANALYZE.

  • Mettez à jour vers la dernière version.

P2

Une erreur se produit en mode serverless lors de l'actualisation d'une dynamic table alors que plusieurs transactions au niveau des lignes sont ouvertes.

Un correctif a déplacé la vérification d'un groupe de tables inexistant vers le FE (Frontend) mais n'a pas pris en compte le scénario serverless. Ce problème est déclenché lorsqu'une instruction DML serverless qui ne peut pas être routée automatiquement est exécutée sur un virtual warehouse follower.

V4.0

  • V4.0.9

  • V4.0.13

  • Utilisez le routage automatique DML en accordant des autorisations au virtual warehouse leader, ou connectez-vous au virtual warehouse leader pour exécuter des instructions SQL ou créer la dynamic table.

  • Mettez à jour vers la dernière version.

P2

Une requête entraîne une erreur Out of Memory (OOM).

La priorité de la classe d'exécution (EC) de l'opération de brassage a été abaissée, l'empêchant d'obtenir suffisamment de tranches de temps lorsque l'utilisation du processeur était élevée. Cela a ralenti la récupération des données du côté de la construction, retardé la construction du runtime filter et amené le côté sonde à lire des données excessives, réduisant ainsi l'efficacité du filtrage.

Versions ultérieures à V4.0.x

  • V4.0.10

  • V4.0.13

  • Solution de contournement : Définissez les paramètres GUC suivants : hg_experimental_enable_qe_v2 = on, hg_experimental_runtime_filter_wait_time_ms = 10000 et hg_experimental_wait_for_all_runtime_filters = on.

  • Mettez à jour vers la dernière version.

P1

Le champ client_addr est vide dans certains journaux d'audit de connexion.

Lorsque la passerelle signale les journaux d'audit de connexion, elle effectue un appel supplémentaire à getpeername pour récupérer l'adresse IP du client. Si la connexion client a déjà été déconnectée de manière anormale, l'adresse IP ne peut pas être obtenue.

Toutes les versions prenant en charge les journaux d'audit de connexion

V4.0.13

  • Mettez à jour vers la dernière version.

P2

Une erreur est signalée lorsque vous utilisez preparestmt pour exécuter une requête contenant une clé de clustering : ERROR: XX000: Dispatch query failed: internal error: DataType::STRING column range conjuncts should use string literal or parameter ref.

mask_md5 est une clé de clustering. Durant la phase d'instruction préparée, l'expression mask_md5 in (md5($1),md5($2)) ne peut pas être évaluée à la compilation (constant-folded). Cela amène le filtre de clustering extrait à contenir la fonction md5, et le backend signale une erreur car il ne peut pas analyser ce filtre.

V1.1

  • V3.1.37

  • V3.2.20

  • V4.0.8

  • V3.2.24

  • Solution de contournement : N'utilisez pas preparestmt ou remplacez mask_md5 in (md5($1),md5($2)) par mask_md5 = md5($1) or mask_md5 = md5($2).

  • Mettez à jour vers la dernière version.

P2

Dans de rares cas, un vidage sur incident (coredump) se produit lorsqu'une requête avec une clause LIMIT est exécutée ou annulée manuellement prématurément, ce qui entraîne l'échec de la requête et le redémarrage du worker.

La fonction SplitFactory::Close libérait des ressources mais n'utilisait pas son propre ExecutionContext. Cela entraînait la libération des ressources avant que d'autres fonctions n'aient terminé, ce qui déclenchait un vidage sur incident.

V3.2.4

  • V4.0.7

  • V3.2.19

  • V3.2.24

  • V4.0.13

  • Pour contourner ce problème, définissez le paramètre GUC : alter role all set hg_experimental_enable_qe_v2 = off;.

  • Mettez à jour vers la dernière version.

P2

Après le déchargement d'un TableGroup, la connexion Holoweb échoue et l'entrepôt de métadonnées signale l'erreur ERROR: 42704: Table group[bizp.bizp_tg_default] is not found in warehouse bdmp_api_warehoue. Les métriques de la passerelle affichent un nombre élevé de nouvelles demandes de connexion et une latence élevée, et un grand nombre de nouvelles connexions fixed fe sont créées en peu de temps. Lors de la consommation du journal binlog au démarrage, l'acquisition du verrou prend beaucoup de temps et une concurrence élevée peut bloquer les opérations insert.

Lorsqu'un déchargement se produit, les nouvelles demandes telles que les requêtes binlog ou fixed plan sur l'ancien virtual warehouse effectuent des tentatives dans bhclient pendant 27,5 secondes. La consommation du journal binlog sur FixedFE appelle cette méthode de manière synchrone lors de la connexion à l'EC. Lorsqu'une nouvelle tentative se produit, elle bloque la connexion à l'EC, ce qui entraîne le blocage de la création de nouvelles connexions FixedFE et provoque une accumulation de connexions.

V3.2

V4.0.8

  • Arrêtez la tâche de consommation du journal binlog et modifiez le job Flink pour utiliser le bon virtual warehouse. Vous pouvez également vous connecter à HoloWeb et charger le groupe de tables déchargé vers le virtual warehouse cible. Si HoloWeb est inaccessible, contactez un développeur FE (Frontend) pour redémarrer la passerelle depuis le backend.

  • Mettez à jour vers la dernière version.

P2

Dans Hologres V3.1, après avoir activé l'actualisation automatique pour une Dynamic Table, la mémoire du conteneur augmente continuellement sur une période de 7 jours. La mémoire du FE augmente tandis que la mémoire du holo worker reste stable. La mémoire augmente également continuellement lorsque vous exécutez répétitivement hg_generate_query_options_for_dynamic_table.

L'UDF hg_generate_query_options_for_dynamic_table présente une fuite de mémoire. L'UDF instancie un objet HoloQmDispatcher. Bien que l'objet soit géré par un shared_ptr, le DispatcherManager le stocke dans une map indexée par query_id. Le query_id créé par le code est un ID distinct et ne correspond pas au query_id de la requête exécutée par l'UDF. Lorsqu'une requête est terminée, RemoveDispatcher(query_id) devrait être appelé pour supprimer le dispatcher. Cependant, cette étape est manquante dans le code. Étant donné que le cycle de vie du DispatcherManager est lié au processus de connexion (conn), les objets dispatcher s'accumulent au fil du temps.

V3.1.0

  • V4.0.0

  • V3.1.26

  • V3.2.8

  • Solution de contournement : Identifiez et terminez les connexions de longue durée dans pg_stat_activity, ou enregistrez une tâche cron pour nettoyer automatiquement les connexions âgées de plus d'une heure : SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE length(query) > 0 AND pid != pg_backend_pid() AND backend_type = 'client backend' AND state = 'idle' AND application_name = 'DynamicTableTableDriver' AND current_timestamp - backend_start > '1 hour';

  • Mettez à jour vers la dernière version.

P2

Dans une instance, deux workers présentent une utilisation de la mémoire plus élevée que les autres workers, sans déséquilibre des shards. La surveillance montre une différence significative dans la mémoire du FE (Frontend). Les requêtes effectuées depuis le début de l'augmentation de la mémoire révèlent une connexion de longue durée qui a exécuté un grand nombre d'instructions DDL (query_count > 1000).

Le processus d'exécution DDL présente une memory leak. La mémoire d'un objet QueryDesc est libérée lorsque le MemoryContext au niveau de la requête est libéré à la fin de la requête. Cependant, UtilityStmt (au sens large, DDL) alloue de la mémoire dans un MemoryContext de longue durée. Cette mémoire n'est pas libérée lorsque le MemoryContext au niveau de la requête est libéré, ce qui provoque une memory leak.

Toutes les versions

  • V3.1.22

  • V3.2.5

  • V3.2.24

  • Solution de contournement : Fermez les connexions de longue durée qui présentent des fuites de mémoire pour libérer de l'espace. Vous pouvez utiliser la requête SQL suivante pour identifier ces connexions :SELECT pid, session_id, count(*) as query_count, max(query_start) FROM meta_warehouse.query_info WHERE query_start > now() - '1 hour'::interval AND command_tag NOT IN ('INSERT','SELECT','DELETE','UPDATE') GROUP BY 1,2 ORDER BY 3 DESC LIMIT 20;

  • Mettez à jour vers la dernière version.

Février 2026

Gravité

Description

Cause

Versions concernées

Versions corrigées

Solution de contournement

P1

Une instance peut redémarrer brièvement lorsque vous créez une table dont le nom contient des espaces, des caractères spéciaux et des lettres en majuscules et minuscules.

L'instance plante (coredump) car elle lit un état incorrect lors de la récupération des propriétés de la table à partir d'une table système.

  • V4.1.6

  • V4.0.23

  • V4.1.7

  • V4.0.24

  • Mettez à jour vers la dernière version.

P2

Une erreur se produit lorsque ai_gen est utilisé avec to_file.

function ai_gen(text, text, file, bytea) does not exist

Une erreur de conversion de type entraîne l'échec de la fonction ai_gen lorsqu'elle est utilisée avec to_file.

  • V4.1.5

  • V4.0.21

  • V4.1.6

  • V4.0.22

  • Mettez à jour vers la dernière version.

P1

Si un entrepôt virtuel consomme le journal binlog d'une table source en mode de connexion légère sans charger le groupe de tables (Table Group) de la table source, l'instance peut ne pas être en mesure de créer de nouvelles connexions. Ce mode est actif si le paramètre connection.fixed.enabled de la table source Flink est activé, ou s'il est activé par défaut sur certaines versions d'instance.

Lors de l'initialisation en mode de connexion légère, les requêtes sont automatiquement réessayées car l'entrepôt virtuel actuel n'a pas chargé le groupe de tables. Pendant ces tentatives, le chemin de gestion des erreurs conserve incorrectement un verrou global, ce qui bloque les nouvelles demandes de connexion.

  • V3.1.13

  • V3.2.10

  • V4.0.0

  • V4.0.8

  • Mettez à jour vers la dernière version.

  • Si l'instance dispose de suffisamment de connexions, définissez le paramètre connection.fixed.enabled sur la table source sur false.

P1

Une table dynamique incrémentielle contenant une jointure flux-flux (stream-stream join) peut échouer lors de son premier rafraîchissement ou lorsque vous exécutez REFRESH OVERWRITE.

ERROR: hos_exception: Internal error: status { code: OPERATION_INVALID_ARGUMENT message: "duplicate key value violates unique constraint...

Si la définition de la table inclut une agrégation basée sur le résultat de la jointure flux-flux, le résultat de l'agrégation peut être incorrect.

Le premier rafraîchissement incrémentiel peut occasionnellement inclure des données récemment supprimées dans son calcul, entraînant des erreurs ou des résultats incorrects.

  • V3.2.5

  • V4.0.1

  • V4.1.1

  • V4.0.21

  • V4.1.6

  • Mettez à jour vers la dernière version.

P2

Lorsque la fonction array_to_string est appelée avec deux arguments, les valeurs NULL des données d'entrée sont incluses dans le calcul. Ce comportement est incohérent avec PostgreSQL, qui exclut les valeurs NULL.

Remarque

Pour les appels à trois arguments, les valeurs NULL sont également incluses dans le calcul, ce qui est cohérent avec le comportement de PostgreSQL.

Un défaut logique dans le moteur HQE affecte les appels à deux arguments de la fonction array_to_string.

  • V3.0.1

  • V3.1.1

  • V3.2.1

  • V3.0.46

  • V3.1.25

  • V3.2.24

  • Mettez à jour vers la dernière version.

Janvier 2026

Gravité

Description

Cause

Versions concernées

Versions corrigées

Solution de contournement

P2

Une requête échoue si elle utilise une JOIN et est traitée par le moteur d'exécution PQE.

ERROR: XX000: internal error: unmatched data row schema number

Une incompatibilité entre les colonnes de sortie de l'opérateur JOIN et les colonnes d'entrée du moteur d'exécution PQE provoque l'erreur.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.33

  • V3.2.24

  • V4.0.13

  • Réécrivez le SQL pour éviter d'utiliser le moteur d'exécution PQE.

  • Mettez à jour vers la dernière version.

P2

L'utilisation de l'opérateur BETWEEN dans une requête traitée par le moteur d'exécution PQE provoque une erreur.

ERROR: 0A000: ORCA failed to produce a plan : Operator BetweenAnd not supported

Le moteur d'exécution PQE ne prend pas en charge l'opérateur BETWEEN.

  • V3.2.0

  • V4.0.0

  • V3.2.24

  • V4.0.13

Mettez à jour vers la dernière version.

P1

Le filtrage sur une colonne timestamp utilisée comme clé de segment ou de cluster ne parvient pas à filtrer l'ensemble de résultats.

Un problème dans la logique d'extraction des clés de segment du moteur de stockage entraîne un filtrage incorrect.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.38

  • V3.2.24

  • V4.0.13

Mettez à jour vers la dernière version.

P1

Après une mise à niveau vers la V4.0, l'utilisation de la mémoire augmente continuellement et ne se stabilise ni ne diminue, même lorsqu'aucune requête n'est active.

Une fuite de mémoire se produit dans le chemin du cache de résultats V4.0 lors du traitement des tableaux de dictionnaire.

  • V4.0.0

  • V4.0.10

  • Pour contourner ce problème, désactivez l'indicateur de fonctionnalité :

     select hg_admin_command('set_global_flag', 'enable_dict_array=false');
  • Mettez à jour vers la dernière version.

P2

Lorsqu'une CTE est réutilisée, le système ne peut pas générer de plan de requête et renvoie une erreur.

ORCA failed to produce a plan : No plan has been computed for required properties

L'optimiseur de requêtes (QO) ne met pas correctement à jour le compteur CTE, ce qui provoque l'erreur.

  • V3.2.0

  • V4.0.0

  • V3.2.24

  • V4.0.7

  • Comme solution de contournement, modifiez la stratégie CTE pour utiliser l'inlining :

    ALTER DATABASE <database_name> SET hg_cte_strategy = 'inlining';
  • Mettez à jour vers la dernière version.

P2

L'accès aux éléments d'un tableau à l'aide de la notation de plage, telle que array_column[1:1], provoque une erreur.

Un bogue dans la gestion des éléments de tableau par l'optimiseur de requêtes (QO) provoque cette erreur.

  • V3.0.0

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.39

  • V3.2.24

  • V4.0.13

Mettez à jour vers la dernière version.

P1

Des données peuvent manquer dans les résultats PQE si le nombre de shards dépasse le nombre de buckets et que les conditions suivantes sont remplies. Cela se produit lorsque la sortie PQE contourne la phase de brassage (shuffle) et est directement utilisée dans des opérations JOIN ou UNION ALL avec les résultats d'analyse d'une autre table columnaire dans le même groupe de tables.

  • Une table columnaire utilise un index de clé primaire, ce qui déclenche une recherche ponctuelle (point seek).

  • Les données sont traitées directement par PQE.

Lorsqu'une table columnaire utilise un index de clé primaire, le plan généré par l'optimiseur de requêtes (QO) n'inclut pas d'opérateur Gather. Si le nombre de buckets n'est pas égal au nombre de shards et qu'un bucket contient plusieurs shards, une perte de données peut se produire car PQE calcule incorrectement le ratio shard_count sur bucket_count.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.39

  • V3.2.24

  • V4.0.10

Mettez à jour vers la dernière version.

P2

  • La reconstruction d'une table dont le nom contient des lettres majuscules (mais aucun autre caractère spécial) échoue. La vue de progression affiche une erreur indiquant que la vue est introuvable.

  • La reconstruction d'une table dont les noms de colonnes contiennent des lettres majuscules (mais aucun autre caractère spécial) échoue. La vue de progression signale une colonne manquante dans la table temporaire.

Le processus de reconstruction dans les anciennes versions ne gérait pas correctement les identifiants sensibles à la casse.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.40

  • V3.2.25

  • V4.0.13

Mettez à jour vers la dernière version.

P2

Une sous-requête contenant une expression CASE WHEN provoque l'erreur suivante :

ERROR: column "xxx" does not exist

Un bogue de l'optimiseur de requêtes l'empêche de générer un plan valide pour ce scénario.

  • V3.0.0

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V4.1.0

  • V3.0.53

  • V3.1.41

  • V3.2.25

  • V4.0.14

  • Pour contourner ce problème, désactivez l'indicateur de fonctionnalité :

    ALTER DATABASE <database_name> SET hg_experimental_reuse_switch_case_expression = 'off';
  • Mettez à jour vers la dernière version.

P1

Lorsqu'un travail Flink consomme le journal binlog Hologres, si sa table source est définie avec un sous-ensemble de colonnes de la table physique, le travail peut ingérer des valeurs NULL inattendues.

Le connecteur Hologres pour Flink ne gère pas correctement la consommation du journal binlog avec des colonnes projetées.

  • Flink VVR 11.3 ou 11.4 avec Hologres V4.0.1 ou ultérieure.

  • Des correctifs pour Flink VVR 11.3 et 11,4 ont été publiés le 9 janvier 2026.

  • Après la publication du correctif, redémarrez le travail Flink.

  • Avant que le correctif ne soit disponible, ajoutez la configuration suivante à la clause WITH de la table source Flink et redémarrez le travail : source.binlog.project-columns.enabled' = 'false'.

P1

Les requêtes terminées peuvent ne pas être nettoyées correctement, laissant des transactions résiduelles qui maintiennent des verrous de table.

Un défaut dans la logique de garbage collection (GC) pour certaines requêtes terminées entraîne des identifiants de requête (query_id) résiduels.

  • V2.2.0 et antérieures

  • V3.0.0

  • V2.2.32

  • V3.0.12

  • Mettez à jour vers la dernière version.

  • Nettoyez manuellement les requêtes résiduelles en exécutant la commande SQL suivante :

    SELECT pg_terminate_backend(pid) FROM hg_stat_activity WHERE query_id = <query_id>;

Défauts de 2025

Décembre 2025

Gravité

Description

Cause

Versions concernées

Versions corrigées

Solution de contournement

P0

L'interrogation d'une table Postpone DLF Paimon lit des données validées non compactées, ce qui peut entraîner la présence de clés primaires en double.

Le comportement de la classe SnapshotReader de Paimon a évolué après la mise à niveau de Hologres vers la version V3.2.12 :

  • Anciennes versions du SDK Paimon : la classe SnapshotReader ajoutait automatiquement l'option onlyReadRealBuckets pour les tables Postpone. Cette option limitait la lecture aux données finales et compactées.

  • Les versions plus récentes du SDK Paimon ont supprimé cette logique automatique. Vous devez désormais configurer manuellement cette option pour que SnapshotReader ne lise que les données finales.

  • V3.2.12

  • V4.0.0

  • V3.2.24

  • V4.0.11

  • Effectuez une mise à niveau vers la dernière version.

P1

Lorsque vous utilisez une table externe DLF avec bucket_num=-2 pour une table Paimon, un plan de jointure incorrect lors de jointures multi-tables peut produire des résultats inexacts.

Lorsque le paramètre bucket_num d'une table Paimon est défini sur -2 dans des scénarios impliquant des jointures JOIN entre plusieurs tables, un plan JOIN incorrect est généré. Cela empêche une jointure efficace des données et entraîne des résultats de requête inexacts.

  • V3.2.0

  • V4.0.0

  • V3.2.21

  • V4.0.8

  • À titre de solution temporaire, désactivez la fonctionnalité à l'aide de la commande SQL suivante :

    ALTER DATABASE <database_name> set hg_experimental_use_shard_info_in_hashed_dist_spec=off;  
  • Effectuez une mise à niveau vers la dernière version.

P1

L'utilisation d'une expression CTE produit des résultats incohérents entre l'exécution fractionnée et l'exécution combinée.

Lorsqu'une expression CTE est utilisée, le système ne signale pas l'échec d'un résultat intermédiaire au FE (Frontend), ce qui conduit à un résultat final incorrect.

  • V3.2.0

  • V4.0.0

  • V3.2.17

  • V4.0.6

  • Effectuez une mise à niveau vers la dernière version.

P1

Même si l'utilisateur dispose des autorisations requises, les requêtes sur hologres.hg_query_log et hologres.hg_table_info renvoient des résultats vides.

Le système ne parvient pas à signaler les données pour hologres.hg_query_log et hologres.hg_table_info.

  • V2.0.39

  • V2.2.16

  • V3.0.0

  • V2.0.47

  • V2.1.44

  • V2.2.24

  • V3.0.2

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • Effectuez une mise à niveau vers la dernière version.

P0

Lors d'une actualisation incrémentielle d'une table dynamique avec une jointure multi-flux, si un seul flux contient des données incluant des rétractations, l'actualisation produit des résultats incorrects par rapport à une requête directe.

Lors d'une actualisation incrémentielle d'une table dynamique, la rétraction des données provenant d'un seul flux n'est pas gérée correctement. Par conséquent, le système ne supprime pas les lignes devant être effacées de la table de résultats, ce qui rend cette dernière incorrecte.

  • V4.0.1

  • V4.0.9

  • Commencez par modifier les données de la table. Ensuite, utilisez refresh overwrite pour corriger les données erronées. Exécutez les deux commandes SQL suivantes :

    alter table xxx set (refresh_guc_hg_experimental_incremental_agg_insert_bulkload_batch_size = 1);
        refresh overwrite table xxx with (refresh_mode = 'incremental');
  • Effectuez une mise à niveau vers la dernière version.

P1

Après une mise à niveau vers la version V4.0, des erreurs OOM (Out Of Memory) peuvent survenir sur les workers. Les messages d'erreur sont similaires aux suivants :

  1. Erreur : ERROR: XX000: ERPC_ERROR_CONNECTION_CLOSED

  2. Erreur : ERROR: Dispatch query failed: Connect to xxx.xxx.xxx:xxx failed

Pour mettre en cache davantage de données en mémoire, la version V4.0 optimise la structure mémoire. Toutefois, la nouvelle structure présente un défaut lors du traitement du type Decimal. Lorsqu'une table contenant des colonnes Decimal participe à une jointure hash (hash join), l'instance peut générer un vidage de mémoire (core dump).

  • V4.0.0

V4.0.10

  • À titre de solution temporaire, désactivez l'optimisation de la mémoire des requêtes à l'aide de la commande SQL suivante :

    select hg_admin_command('set_global_flag', 'enable_selection_vector=false');
  • Effectuez une mise à niveau vers la dernière version.

P1

Les requêtes sur une table Append Delta MaxCompute non vide renvoient incorrectement un ensemble de résultats vide.

Un bogue dans le cache de splits (split cache) entraîne le renvoi d'un résultat vide par les requêtes.

  • V4.0.0

V4.0.9

  • À titre de solution temporaire, désactivez le cache de splits à l'aide de la commande ci-dessous.

ALTER DATABASE <database_name> set hg_experimental_enable_maxcompute_sdk_splits_cache=off;
  • Effectuez une mise à niveau vers la dernière version.

P0

Dans la version V4.0, lorsque vous utilisez une table partitionnée logique dotée d'une clé primaire et d'une clé de clustering, des valeurs de clé primaire en double peuvent apparaître.

Pour améliorer les performances d'écriture des tables partitionnées logiques, la version V4.0 prend en charge le vidage multi-partitions (multi-partition flush). Cependant, un bogue dans la logique de traitement de l'index de cluster durant cette opération peut corrompre l'index de cluster dans les fichiers AliORC (fichiers de données pour les tables columnaires internes) stockés sur Pangu. Un index de cluster corrompu peut rendre les données existantes illisibles. Par conséquent, lors d'une mise à jour, le système ne parvient pas à trouver les anciennes données et insère une nouvelle ligne, créant ainsi un doublon.

  • V4.0.0

V4.0.9

  • Effectuez une mise à niveau vers la dernière version. Après la mise à niveau, le système ajoute une logique de détection des fichiers corrompus. Si un fichier corrompu est analysé, le système signale une erreur : clustered_index size [x] incorrect. Si cette erreur se produit, exécutez une compaction complète sur la table concernée pour la réparer. Pour plus d'informations, consultez FAQ sur les tables partitionnées.

P1

Après une mise à niveau vers la version V4.0, des erreurs OOM (Out Of Memory) peuvent survenir sur les workers. Les messages d'erreur sont similaires aux suivants :Error 1: ERROR: XX000: ERPC_ERROR_CONNECTION_CLOSED

Error 2: ERROR: Dispatch query failed: Connect to xxx.xxx.xxx:xxx failed

Pour mettre en cache davantage de données en mémoire, la version V4.0 optimise la structure mémoire. Toutefois, la nouvelle structure calcule incorrectement la taille des données, sous-estimant la mémoire requise et provoquant une erreur OOM sur le worker.

  • V4.0.0

V4.0.7

  • À titre de solution temporaire, désactivez le cache de résultats à l'aide de la commande ci-dessous.

ALTER DATABASE <database_name> set hg_experimental_enable_result_cache=off;
  • Effectuez une mise à niveau vers la dernière version.

Novembre 2025

Niveau

Description

Cause

Versions concernées

Versions corrigées

Solution de contournement

P1

Dans les scénarios d'écriture en temps réel avec Flink, la suppression d'un utilisateur suivie de sa recréation avec le même nom et les mêmes autorisations peut entraîner des erreurs d'autorisation pour le nouvel utilisateur, même lors d'une nouvelle connexion.

Un problème lié à la stratégie de mise à jour du cache des autorisations utilisateur dans le composant FixedFE.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.38

  • V3.2.21

  • V4.0.9

  • Mettez à jour vers la dernière version.

P1

Lors de l'utilisation du mode stream pour une actualisation incrémentielle d'une Dynamic Table, l'exécution d'opérations INSERT, UPDATE ou DELETE sur la table source, immédiatement suivies d'une opération TRUNCATE ou INSERT OVERWRITE, peut entraîner des données incorrectes lors des actualisations suivantes.

Si une opération TRUNCATE ou INSERT OVERWRITE suit immédiatement des opérations DML (INSERT, UPDATE ou DELETE) sur la table source pendant une actualisation incrémentielle, la Dynamic Table peut traiter des messages DELETE en double pour la même clé primaire, ce qui génère des données incorrectes.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.37

  • V3.2.20

  • V4.0.8

  • Mettez à jour vers la dernière version.

P2

L'exécution de la commande SELECT hg_rebalance_instance() pour rééquilibrer une instance à usage général provoque une erreur shard group not found.

Un paramètre par défaut incorrect est transmis lors du rééquilibrage d'une instance à usage général.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.37

  • V3.2.20

  • V4.0.8

  • Mettez à jour vers la dernière version.

P2

Lors d'une opération de mise à l'échelle, une erreur ShardPermissionDenied peut rarement se produire sur les entrepôts virtuels principaux et secondaires d'un groupe de tables, entraînant de brefs échecs d'écriture.

Le système est conçu pour convertir une erreur ShardPermissionDenied en une erreur kShardHotMigrationInProgress pouvant faire l'objet d'une nouvelle tentative pendant la mise à l'échelle. Toutefois, cette conversion échoue et l'erreur d'origine est renvoyée au client.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.37

  • V3.2.20

  • V4.0.8

  • Mettez à jour vers la dernière version.

P2

Après avoir basculé vers le chemin d'accès Common Table pour MaxCompute, l'actualisation d'une Dynamic Table utilisant une table externe MaxCompute échoue avec l'erreur suivante :

MaxCompute csdk open reader failed: set_reader_filter, parser filter error: (Invalid: File is smaller than indicated metadata size) filter= (ARROW1)

La méthode de transmission du plan de requête pour une Dynamic Table diffère de celle d'une requête OLAP classique. Lors de la transmission, les données binaires du plan sont corrompues, ce qui empêche l'analyse correcte du filtre.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • V3.1.36

  • V3.2.17

  • V4.0.6

  • Désactivez le chemin d'accès Common Table comme solution de contournement temporaire.

ALTER DATABASE <database name> SET hg_experimental_external_catalog_routing = 'odps:holo_native,dlf:hqe';
  • Mettez à jour vers la dernière version.

P2

Lors de l'utilisation du modèle d'autorisation PostgreSQL standard, même après qu'un utilisateur a reçu l'autorisation Owner sur une Dynamic Table, l'actualisation d'une table d'historique ou d'une partition en tant que propriétaire peut toujours entraîner une erreur Permission Denied.

L'identité utilisée pour l'actualisation est mise en cache. Après une modification des autorisations, les actualisations suivantes utilisent incorrectement l'identité obsolète mise en cache, ce qui déclenche l'erreur.

  • V3.1.0

  • V3.2.0

  • V4.0.0

  • Correction prévue

  • Mettez à jour vers la dernière version.

P2

L'interrogation des données dans DLF avec un filtre de plage sur une colonne timestamp provoque l'erreur suivante :

ERROR:  XX000: Dispatch query failed: Internal error: hos_exception: Internal error: status { code: SERVER_INTERNAL_ERROR message: "Call iterator Next() Failed: is_meta_mirror_iter: 1, error: hos_exception: [meta_util.cc:292 CompareSimpleValue] HGERR_code XX000 HGERR_msge internal error: value1 should has long literal HGERR_end" err_data { filename: "snapshot_api.cc" lineno: 1136 funcname: "GetSnapshotDataSetBatch" sqlerrcode: 2600 message: "internal error: Call iterator Next() Failed: is_meta_mirror_iter: 1, error: hos_exception: [meta_util.cc:292 CompareSimpleValue] HGERR_code XX000 HGERR_msge internal error: value1 should has long literal HGERR_end" context: "" } }

Le système gère incorrectement le type de littéral, le traitant à tort comme un littéral long.

  • V3.2.0

  • V4.0.0

  • V3.2.17

  • V4.0.6

  • Désactivez le chemin d'accès Bigmeta comme solution de contournement temporaire.

ALTER DATABASE <database_name> set hg_experimental_enable_big_meta=off;
  • Mettez à jour vers la dernière version.

P2

Lors de l'insertion de moins de 10 lignes avec une instruction DML dans une table dont la clé primaire contient une colonne booléenne, l'erreur suivante se produit :

ERROR:  XX000: internal error: hos_exception: [literal.cc:181 Init] HGERR_code XX000 HGERR_msge internal error: Unsupported output data type BOOL in type { id: LIST children { id: BOOL nullable: false field_name: "is_ciga" } } long_literal { array { values: 0 values: 0 values: 0 values: 0 values: 0 values: 0 values: 0 } }. HGERR_end

Le moteur de requête convertit un tableau booléen en tableau uint8. Lorsque le DML hybride crée un filtre de groupe de lignes, il ne prend pas en compte ce scénario. Cela entraîne une incompatibilité entre le type de littéral (bool) et le type de valeur réel (long) dans le filtre de groupe de lignes.

  • V3.1.0

  • V3.2.0

  • V3.1.25

  • V3.2.7

  • Désactivez le DML hybride comme solution de contournement temporaire.

ALTER DATABASE <database_name> set hg_experimental_enable_hybrid_dml = off;
  • Mettez à jour vers la dernière version.

P2

L'utilisation d'une UDF distante provoque l'erreur suivante :

 [Invoke function 'random_between' qualifier 'LATEST' compression 'None' failed: Fail to check http status: 403, {"RequestId":"xxxxx","Code":"SignatureNotMatch","Message":"The request signature we calculated does not match the signature you provided. Check your access key and signing method."} with request: Request {
  url: /2023-03-30/functions/random_between/invocations,
  method: POST,
  params: {qualifier: LATEST},
  headers: {Authorization: xxxxx}

L'erreur est causée par un défaut dans la logique de gestion des appels multithread.

  • V3.1.0

  • V3.2.0

  • V3.1.25

  • V3.2.8

  • Mettez à jour vers la dernière version.

P1

Lors de l'utilisation du mode stream pour une actualisation incrémentielle d'une Dynamic Table, une actualisation qui suit immédiatement une compactation de la table source peut entraîner des données incrémentielles hors ordre.

Des événements incrémentiels hors ordre pour la même clé peuvent provoquer des résultats incorrects dans la table de destination.

  • V3.1.0

  • V3.2.0

  • V3.1.23

  • V3.2.6

  • Mettez à jour vers la dernière version.

P1

Lorsque vous utilisez la commande REBUILD :

  • binlog désactivé : si le binlog est désactivé, la reconstruction d'une table physique partitionnée en table logique active incorrectement le binlog sur la table résultante.

  • binlog activé : si le binlog est activé, la reconstruction d'une table physique partitionnée en table logique n'active pas le binlog sur la table résultante.

La logique de gestion du binlog est incorrecte lors d'une opération rebuild partition to logical partition.

  • V3.1.1

  • V3.2.1

  • V4.0.1

Correction prévue

P2

Lorsque vous utilisez create table as pour lire une table externe DLF, le message d'erreur suivant s'affiche :

check permission for dlf table failed: failed to check permission: DLF error,


L'instruction create table as provoque une erreur de lecture d'autorisation lors de la lecture d'une table DLF V2.0.

  • V3.0.1-V3.0.49

  • V3.1.1-V3.1.34

  • V3.2.1-V3.2.16

  • V4.0.1-V4.0.4

  • V3.0.50

  • V3.1.35

  • V3.2.17

  • V4.0.6

  • Mettez à jour vers la dernière version et utilisez plutôt la commande REBUILD.

P2

Si le masquage des données est appliqué à la table source, le message d'erreur the insert table has not set security label s'affiche lorsque vous utilisez une instruction CREATE TABLE ... AS. Voici un exemple d'instruction SQL :

create table tb1(id int, data text);
    insert into tb1 select i, i::text from generate_series(1, 10) i;
    security label for hg_anon on column tb1.data is 'default_value';

    set hg_anon_enable = t;
    create table bk as select * from tb1;

Les paramètres de masquage des données ne sont pas transmis au processus create table as, ce qui provoque une erreur.

  • V3.1.1-V3.1.32

  • V3.2.1-V3.2.12

  • V4.0.1-V4.0.2

  • V3.1.33

  • V3.2.13

  • V4.0.3

  • Mettez à jour vers la dernière version.

P0

Lors de l'utilisation de fonctions de tableau d'ordre supérieur, si tous les éléments du tableau de résultat sont identiques, le résultat peut être incorrectement dédupliqué en un tableau à un seul élément. Exemples :

create table tbl1(col1 text[]);
insert into tbl1 values(array['1', '1']);
select hg_array_map(lambda[x => '1' || '1'], col1) from tbl1; 
-- Returns {11}, but expected {11, 11}

create table tbl2(col1 jsonb);
insert into tbl2 values('{"a": "a", "b": "b", "c": null}');
select hg_array_map(lambda[x => col1 ->> x], array['c', 'd']) from tbl2; 
-- Returns {NULL}, but expected {NULL, NULL}

select hg_array_map(lambda[x => case when col1 ->> x is null then '' else col1 ->> x end], array['c', 'd']) from tbl2;
-- Returns {''}, but expected {'', ''}

select hg_array_map(lambda[x => case when col1 ->> x is null then '1' else col1 ->> x end], array['c', 'd']) from tbl2;
-- Returns {1}, but expected {1, 1}

Un défaut dans le framework de calcul de tableaux lui fait gérer incorrectement les tableaux dont tous les éléments sont identiques.

  • V3.2.1-V3.2.16

  • V4.0.1-V4.0.5

  • V3.2.17

  • V4.0.6

  • Mettez à jour vers la dernière version.

Octobre 2025

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P0

Lors de l'utilisation de la fonctionnalité Table Resharding dans HoloWeb, si une tâche échoue puis est annulée, le système ne nettoie pas correctement la table temporaire.
L'exécution manuelle de DROP TABLE sur cette table temporaire entraîne ensuite une absence de réponse du frontend (FE).































































































































































































































































Fonction de nettoyage défectueuse dans HoloWeb.

Versions concernées :

  • V2.0.24

Versions corrigées :

  • V2.2.28

Mettez à jour vers la dernière version.

P2

La fonction HG_MOVE_TABLE_TO_TABLE_GROUP (resharding) échoue si le nom de la table cible contient des caractères spéciaux ou correspond à un mot-clé. L'échec est silencieux et le groupe de tables reste inchangé.

La fonction HG_MOVE_TABLE_TO_TABLE_GROUP gère incorrectement l'échappement des caractères.

Versions concernées : toutes les versions

Versions corrigées : aucune. Consultez la solution de contournement.

Mettez à jour vers la version V3.1 ou ultérieure et utilisez la fonctionnalité Rebuild.

P2

Dans les factures au paiement à l'utilisation pour les ressources Hologres Serverless Computing, le champ ID d'instance affiche incorrectement <instance_id>_<uid>_<region_id>. L'affichage attendu est <instance_id>.

Problème de configuration sous-jacent.

Ce problème n'est pas spécifique à une version et affecte les factures générées entre 2025-09-09 16:00:00 et 2025-10-14 16:00:00.

Le problème a été résolu. Les factures générées après le 2025-10-14 16:00:00 sont correctes.

Traitez séparément les factures de la plage horaire concernée.

Septembre 2025

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P0

Lors d'une opération de shard rebalance (comme un scaling ou un redémarrage), si plusieurs requêtes se terminent simultanément, les processus en arrière-plan peuvent échouer. Cela peut entraîner des échecs de lecture et d'écriture sur l'instance.

Le backend traite incorrectement plusieurs requêtes qui se terminent en même temps.

Version concernée : V3.0.9.

Versions corrigées : V3.0.14 et ultérieures.

Mettez à jour vers la dernière version.

P0

Lors de l'importation de données d'une table étrangère Hologres vers une table interne, la fonctionnalité d'importation adaptative peut provoquer une perte de données si toutes les conditions suivantes sont réunies :

  • Les données sont importées à l'aide d'une instruction INSERT INTO ... SELECT ....

  • Le système ajuste automatiquement la vitesse d'importation en raison d'une pression élevée sur les ressources système. Si l'opération de lecture sur la table étrangère revient au SQE path lors de cet ajustement, certains segments de données peuvent être ignorés, entraînant une perte partielle des données.

Lorsque les lectures de tables étrangères reviennent au SQE path, la fonctionnalité d'importation adaptative peut abandonner des segments de données, provoquant une perte de données.

Versions concernées :

  • V3.0.1 à V3.0.46.

  • V3.1.1 à V3.1.27.

  • V3.2.1 à V3.2.9.

Versions corrigées :

  • V3.0.47 et ultérieures.

  • V3.1.28 et ultérieures.

  • V3.2.10 et ultérieures.

Désactivez la fonctionnalité adaptive import au niveau de l'instance en définissant le GUC suivant :

ALTER ROLE ALL SET hg_experimental_enable_adaptive_adjust_bulkload_dop = off;

P1

Après avoir configuré le data masking, une opération UPDATE sur une table peut renvoyer des données non masquées dans les résultats de requête. Par exemple :

create table tb1(id int, data text);
    create table tb2(id int, data text);
    insert into tb1 select i, i::text from generate_series(1, 10) i;
    insert into tb2 select i, null from generate_series(1, 10) i;
    security label for hg_anon on column tb1.data is 'default_value';

    set hg_anon_enable = t;
    update tb2 set data = tb1.data from tb1 where tb1.id = tb2.id;
    SELECT * FROM tb2 LIMIT 2;
    id	| data
    ----|----
    1	  | 1
    2	  | 2

Lorsque le data masking est activé, l'instruction UPDATE gère incorrectement les champs masqués.

Versions concernées :

  • V3.1.0-V3.1.31

Versions corrigées :

  • V3.1.32

Mettez à jour vers la dernière version.

P1

Après le redémarrage d'une instance, les dynamic tables ne s'actualisent plus automatiquement.

Un problème dans le système de planification backend provoque ce comportement.

Versions concernées :

  • V3.0.0-V3.0.45

  • V3.1.0-V3.1.24

  • V3.2.0-V3.2.6

Versions corrigées :

  • V3.0.46

  • V3.1.25

  • V3.2.7

  • V4.0.0

Mettez à jour vers la dernière version.

P1

Pour une dynamic table avec des logical partitions et l'actualisation automatique activée, lorsqu'une partition active devient inactive, elle peut ne pas passer du mode incremental refresh au mode full refresh. Cela entraîne une croissance continue du stockage.

Le système gère incorrectement la transition d'état des partitions actives dans une dynamic table.

Versions concernées :

  • V3.1.0-V3.1.23

  • V3.2.0-V3.2.6

Versions corrigées :

  • V3.1.24

  • V3.2.7

Mettez à jour vers la dernière version.

P2

Lorsque vous configurez une dynamic table avec une clustering key nullable, l'exécution d'une instruction ALTER DYNAMIC TABLE échoue avec l'erreur clustering_key should not be nullable.

L'instruction ALTER DYNAMIC TABLE ne parvient pas à déduire correctement les propriétés de la clustering key.

Versions concernées :

  • V3.1.0-V3.1.31

  • V3.2.0-V3.2.11

Versions corrigées :

  • V3.1.32

  • V3.2.12

Mettez à jour vers la dernière version.

P2

Pour une column-oriented table sans clustering key, des clés primaires en double peuvent apparaître. Ce problème peut survenir si vous effectuez une importation hors ligne à l'aide de INSERT ON CONFLICT DO UPDATE puis réalisez des écritures en temps réel.


Le système gère incorrectement les données de primary key lors d'une importation hors ligne. Par conséquent, les écritures en temps réel ultérieures ne détectent pas les clés existantes, ce qui entraîne une duplication potentielle des clés primaires.

Versions concernées :

  • V3.1.0-V3.1.29

  • V3.2.0-V3.2.9

  • V4.0.0-V4.0.1

Versions corrigées :

  • V3.1.30

  • V3.2.10

  • V4.0.2

Mettez à jour vers la dernière version.

P2

Lorsque vous effectuez une opération INSERT ON CONFLICT avec des clés primaires en double, le système peut toujours signaler une erreur duplicate key value violates unique constraint, même si le GUC hg_experimental_affect_row_multiple_times_keep_last est activé.

Lorsque des données en double sont rencontrées, le GUC hg_experimental_affect_row_multiple_times_keep_last ne prend pas effet, provoquant une violation de contrainte de clé primaire.

Versions concernées :

  • V3.1.0-V3.1.29

  • V3.2.0-V3.2.9

  • V4.0.0-V4.0.1

Versions corrigées :

  • V3.1.30

  • V3.2.10

  • V4.0.2

Mettez à jour vers la dernière version.

P2

Après une mise à niveau vers la version V3.1, l'interrogation d'une view contenant des colonnes masquées peut échouer avec une erreur relation "xxx" does not exist.

Cette erreur survient car la fonctionnalité data masking de la version V3.1 traite incorrectement les noms de tables dans les views.

Versions concernées :

  • V3.1.0-V3.1.22

  • V3.2.0-V3.2.5

Versions corrigées :

  • V3.1.23

  • V3.2.6

Mettez à jour vers la dernière version.

P2

Lorsque vous utilisez hg_insert_overwrite pour lire depuis une foreign table associée dans une base de données externe, la requête SQL peut se bloquer.

La commande hg_insert_overwrite expire lors de l'accès aux tables de la base de données externe, ce qui bloque la requête.

Versions concernées :

  • V3.1.0-V3.1.21

  • V3.2.0-V3.2.4

Versions corrigées :

  • V3.1.22

  • V3.2.5

Mettez à jour vers la dernière version.

Août 2025

Niveau

Description

Cause

Versions

Solution de contournement

P1

Un worker node pouvait se bloquer lorsque une query request se terminait, bloquant ainsi les opérations DDL operations ultérieures et les requêtes avec une clause LIMIT sur les tables associées. Ce problème était déclenché lorsque la query request :

  • Provoquait une erreur out-of-memory (OOM).

  • Était annulée manuellement.

  • Était annulée manuellement ou terminée par une exception.

La cause était un défaut dans le processus de nettoyage des ressources du query engine après la fin d'une requête.

Versions concernées :

  • V3.1.18

  • V3.2.3

Versions corrigées :

  • V3.1.21 et ultérieures

  • V3.2.5 et ultérieures

  • Mettez à jour vers la dernière version.

  • En cas de blocage, redémarrez l'instance ou le virtual warehouse.

  • Sinon, désactivez le nouveau query engine en exécutant cette commande :

    ALTER ROLE ALL SET hg_experimental_enable_qe_v2=off;

P1

Lors de l'utilisation de Holo Client V2.6.0 pour se connecter à une Hologres instance avec une Alibaba Cloud AccessKey (pour un compte Alibaba Cloud, un RAM user ou un RAM role), la connexion échouait pendant une fenêtre horaire spécifique chaque jour. Cette fenêtre dépendait du client time zone. Par exemple, en UTC+8, les connexions échouaient de 00:00:00+08 à 08:00:00+08, et en UTC-5, elles échouaient de 19:00:00-05 à 00:00:00-05.

La cause était un problème de gestion du fuseau horaire dans Holo Client V2.6.0.

Ce problème est spécifique à Holo Client V2.6.0 et indépendant de la version de l'Hologres instance.

Mettez à jour Holo Client vers la version V2.6.1 ou ultérieure.

P0

Dans Hologres V3.1, une instance pouvait entrer dans une boucle de redémarrage continu si elle disposait d'une read-only dynamic table qui consommait des données de base table en mode stream.

Cela se produisait car le vidage des données échouait lorsque la dynamic table était dans un read-only state, ce qui déclenchait des redémarrages continus de l'instance.

Versions concernées :

  • V3.1.1 à V3.1.20

  • V3.2.1 à V3.2.2

Versions corrigées :

  • V3.1.21 et ultérieures

  • V3.2.3 et ultérieures

Mettez à jour vers la dernière version.

Juillet 2025

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P2

Lorsqu'une tâche d'importation de données utilisant Serverless Computing échoue, des fichiers intermédiaires peuvent ne pas être supprimés, ce qui augmente l'utilisation du stockage de l'instance.

La logique de nettoyage des fichiers intermédiaires peut parfois échouer.

Versions concernées : V3.1.1.

Corrigé dans : V3.1.20 et versions ultérieures.

  • Redémarrez l'instance pour nettoyer les fichiers intermédiaires.

  • Effectuez une mise à niveau vers la dernière version.

P2

L'interrogation des données d'une table externe Iceberg via Data Lake Formation (DLF) renvoie un ensemble de résultats vide.

Une erreur d'analyse de fichier se produit lors de l'interrogation de la table Iceberg, entraînant un ensemble de résultats vide.

Versions concernées : V3.1.1 à V3.1.16.

Corrigé dans : V3.1.17 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

Lorsque vous interrogez une table contenant une colonne générée, la requête échoue avec l'erreur ERROR: ORCA failed to produce a plan : Query Translation: No variable entry found due to incorrect normalization of query. Exemple SQL :

CREATE TABLE lpt1 (
      a TEXT,
      b INT,
      ts TIMESTAMP NOT NULL,
      d TIMESTAMP GENERATED ALWAYS AS (date_trunc('day', ts)) STORED NOT NULL
    )
    LOGICAL PARTITION BY LIST(d);

    CREATE VIEW v1 AS SELECT * FROM lpt1;

    SELECT * FROM v1 WHERE ts >= '2025-03-12 01:00:00';

L'échec de la requête est dû à une traduction incorrecte de la colonne générée par l'optimiseur.

Versions concernées : V3.1.1 à V3.1.16.

Corrigé dans : V3.1.17 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P1

Lors de la création d'une Dynamic Table dont la requête source contient un type de données BOOLEAN, l'opération d'actualisation échoue avec l'erreur ERROR: Internal error: HGERR_code XX000 HGERR_msge can not get pg type string %s: id: UINT8.

L'opération d'actualisation échoue car la fonctionnalité Dynamic Table déduit incorrectement le type de données pour les champs BOOLEAN.

Versions concernées : V3.1.1 à V3.1.15.

Corrigé dans : V3.1.16 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

Après une mise à niveau vers Hologres V3.1, la fonction hg_dynamic_table_state_size renvoie un ensemble de résultats vide.

La fonction hg_dynamic_table_state_size n'est pas compatible avec la version V3.1.

Versions concernées :

  • V3.1.1 à V3.1.15

  • V3.2.0 à V3.2.1

Corrigé dans :

  • V3.1.16 et versions ultérieures

  • V3.2.2 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P2

Dans Hologres V3.1, la suppression d'une Dynamic Table configurée pour une actualisation incrémentielle ne supprime pas sa table d'état.

La suppression d'une Dynamic Table utilisant l'actualisation incrémentielle ne parvient pas à nettoyer la table d'état associée.

Versions concernées : V3.1.1 à V3.1.12.

Corrigé dans : V3.1.13 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

L'utilisation de fonctions RoaringBitmap 64 bits, telles que rb_or_cardinality_agg, entre différents schémas entraîne l'erreur suivante : Unsupported agg function:public.rb_or_cardinality_agg.

Une inférence de schéma incorrecte pour les fonctions RoaringBitmap 64 bits provoque l'échec des requêtes inter-schémas.

Versions concernées :

  • V3.1.1 à V3.1.11

  • V3.2.0

Corrigé dans :

  • V3.1.12 et versions ultérieures

  • V3.2.1 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P2

La création d'une Dynamic Table en tant que table partitionnée logiquement échoue si la table de base possède une colonne NOT NULL, renvoyant l'erreur : failed:the index xx "xxx" should not by nullable. Exemple SQL :

CREATE TABLE t1 (
        day DATE,
        key INT NOT NULL,
        val TEXT
    );

    INSERT INTO t1 VALUES ('20201010', 1, '2'), ('20201111', 2, '4'), ('20201212', 3, 'test');

    CREATE DYNAMIC TABLE dt1 
    logical PARTITION BY LIST (day) 
    WITH (
        clustering_key = 'day', 
        segment_key = 'day', 
        auto_refresh_mode = 'incremental', 
        freshness = '1 hour') AS
    SELECT
        day, MAX(key), val
        FROM t1
        GROUP BY day, val;
    failed:the index xx "xxx" should not by nullable

Cet échec est causé par une inférence incorrecte de l'attribut NOT NULL pour la Dynamic Table.

Versions concernées :

  • V3.1.1 à V3.1.11

  • V3.2.0

Corrigé dans :

  • V3.1.12 et versions ultérieures

  • V3.2.1 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P2

Si une vue matérialisée sur une seule table contient une agrégation SUM(DECIMAL), l'instance peut redémarrer brièvement.

Lors du calcul de SUM(DECIMAL) pour une vue matérialisée, un problème de désalignement de la mémoire peut provoquer un vidage sur incident (core dump) de l'instance.

Versions concernées :

  • V3.1.1 à V3.1.17

  • V3.0.41 à V3.0.43

  • V3.2.0 à V3.2.1

Corrigé dans :

  • V3.1.17 et versions ultérieures

  • V3.0.44 et versions ultérieures

  • V3.2.2 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P1

Après une mise à niveau vers Hologres V3.0.41, l'interrogation d'une table externe MaxCompute via le chemin d'accès CommonTable entraîne une augmentation lente de l'utilisation de la mémoire.

Une fuite de mémoire se produit lors de l'interrogation des tables externes MaxCompute via le chemin d'accès CommonTable.

Versions concernées :

  • V3.1.1 à V3.1.17

  • V3.0.41 à V3.0.43

  • V3.2.0 à V3.2.1

Corrigé dans :

  • Version 3.1.17 ou ultérieure.

  • V3.0.44 et versions ultérieures

  • V3.2.2 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P0

Dans certains scénarios concurrents, l'exécution d'opérations DML avec Serverless Computing sur une table, simultanément à l'exécution de TRUNCATE TABLE ou DROP TABLE sur la même table, peut provoquer des exceptions de lecture/écriture sur le shard de la table. Ce problème est dû à un problème de synchronisation de l'état interne du moteur.

Un problème de concurrence dans le moteur peut entraîner un état interne anormal au sein d'un shard, l'empêchant temporairement de traiter les demandes de lecture ou d'écriture. Ce problème peut également affecter l'accès à d'autres tables.

Versions concernées :

  • V2.1.45 et versions antérieures

  • V2.2.45 et versions antérieures

Corrigé dans :

  • V2.1.46

  • V2.2.46

  • V3.0.27 et versions ultérieures

  • V3.1.1 et versions ultérieures

  • Solutions de contournement temporaires :

    • Planifiez les opérations DML et TRUNCATE TABLE/DROP TABLE à des moments différents.

    • N'utilisez pas Serverless Computing pour effectuer des opérations DML.

  • Solution recommandée :

    Effectuez une mise à niveau vers la dernière version.

Juin 2025

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P1

Un nœud de calcul pouvait parfois redémarrer lors du scale-out d'une instance de virtual warehouse.

Des opérations concurrentes de tâche DML et de tâche de compaction sur une table pouvaient déclencher ce problème lors du scale-out.

Version concernée : V3.0.1.

Versions corrigées : V3.0.28 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P1

Une instance pouvait redémarrer de manière inattendue lorsque l'optimisation du stockage columnaire JSONB était utilisée avec un index GIN.

Une incompatibilité entre l'optimisation du stockage columnaire JSONB et l'index GIN a provoqué ce problème.

Version concernée : V3.1.1.

Versions corrigées :

  • V3.0.42 et versions ultérieures.

  • V3.1.10 et versions ultérieures.

  • Supprimez l'index GIN de la table.

  • Effectuez une mise à niveau vers la dernière version.

P2

Une instance pouvait redémarrer lors de l'actualisation d'une dynamic table basée entièrement sur des vues.

Une erreur de traitement a provoqué un vidage sur incident (core dump) lors de l'actualisation d'une dynamic table utilisant des vues comme tables de base.

Version concernée : V3.1.8.

Versions corrigées : V3.1.9 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

En mode d'actualisation incrémentielle pour une dynamic table, une requête avec la fonction ARRAY_AGG renvoyait un résultat vide au lieu de null lorsque le filtre d'agrégation supprimait toutes les données.

Aucune.

Versions concernées :

  • V3.0.40.

  • V3.1.7.

Versions corrigées :

  • V3.0.41 et versions ultérieures.

  • V3.1.8 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P1

La fonction d'entonnoir basée sur les propriétés (finder_funnel) renvoyait des résultats incorrects lorsqu'un fuseau horaire était spécifié. Exemple SQL :

SELECT
        id,
        finder_funnel (86400000, 57600, 86400, 2, 3, 0, 'Asia/Shanghai', TRUE, eventtime * 1000, eventtime * 1000, event = 1000, event = 1001, event = 1002)
    FROM
        a
    GROUP BY
        id
    ORDER BY
        id;

La fonction finder_funnel ignorait incorrectement le fuseau horaire spécifié et utilisait UTC par défaut.

Version concernée : V3.0.40.

Versions corrigées : V3.0.41 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

Dans une instance de virtual warehouse, les fonctions PG_RELATION_SIZE, PG_DATABASE_SIZE et HOLOGRES.HG_RELATION_SIZE renvoyaient une taille de stockage incorrecte.

Dans une instance de virtual warehouse, l'utilisation de PG_RELATION_SIZE pour interroger la taille de stockage entraîne une surestimation de la valeur, ce qui donne un résultat incorrect.

Version concernée : V3.0.39.

Versions corrigées : V3.0.40 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

En mode d'actualisation incrémentielle, l'actualisation d'une dynamic table échouait avec l'erreur ERROR: internal error: Filter has 1 rows but length of columns si la table de base contenait plusieurs lignes dupliquées.

Le processus d'actualisation incrémentielle ne parvenait pas à gérer correctement plusieurs lignes dupliquées au cours d'une seule opération d'actualisation.

Version concernée : V3.0.39.

Versions corrigées : V3.0.40 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

L'opération d'actualisation incrémentielle d'une dynamic table échouait avec l'erreur XX000: internal error: Not Implements si l'opération impliquait une jointure multi-tables et que l'une des tables contenait un champ ARRAY.

Le processus d'actualisation incrémentielle pour les jointures multi-tables ne parvenait pas à gérer correctement les tables contenant un champ ARRAY.

Versions concernées :

  • V3.0.38.

  • V3.1.2.

Versions corrigées :

  • V3.0.39 et versions ultérieures.

  • V3.1.3 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P1

Une instance pouvait redémarrer lors de la validation d'une transaction écrivant dans une table avec des partitions logiques, si la cardinalité élevée de la clé de partition faisait dépasser le nombre de partitions à la limite de 5 200.

L'instance générait un vidage sur incident (core dump) car, lors de la validation d'une transaction, le processus détectait que le nombre de partitions logiques dans la table dépassait la limite.

Version concernée : V3.1.1.

Versions corrigées : V3.1.9 et versions ultérieures.

Nettoyez les données de la clé de partition dans vos tâches d'importation pour éviter de créer un nombre excessif de partitions.

Avril 2025

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P2

Correction d'un problème entraînant l'échec de la lecture depuis une table étrangère MaxCompute avec l'erreur suivante : ERROR: XX000: internal error: max compuate csdk get next error: storage/formats/orcfile/orc_reader.cpp(362): RetryableStorageException: ODPS-0010000:BadAllocError:allocated pointer 1b658028 not aligned with 64.

Une erreur de conversion d'interface s'est produite lors de la lecture de la table étrangère MaxCompute.

Versions concernées : V3.0.1 à V3.0.35.

Versions corrigées : V3.0.36 et ultérieures.

Mettez à jour vers la dernière version.

P2

Correction d'un problème empêchant la copie du commentaire d'une table lors de l'utilisation de hg_create_table_like.

La fonction hg_create_table_like copiait incorrectement le commentaire de la table en tant que commentaire de colonne.

Versions concernées : V3.0.1 à V3.0.33.

Versions corrigées : V3.0.34 et ultérieures.

Mettez à jour vers la dernière version.

P2

Correction d'un problème provoquant l'échec d'une requête sur une table étrangère Data Lake avec l'erreur suivante : ERROR: failed to get foreign table split from hive:Failed to generate splits: IllegalStateException: Weights must be non-negative.

Une erreur de conversion de format de données s'est produite lors de la lecture de la table étrangère.

Versions concernées : V3.0.1 à V3.0.30.

Versions corrigées : V3.0.31 et ultérieures.

Mettez à jour vers la dernière version.

P1

Correction d'un problème où l'utilisation de la fonction ARRAY_AGG pouvait entraîner une croissance continue de la mémoire de manière intermittente.

Une fuite de mémoire dans la fonction ARRAY_AGG.

Versions concernées : V3.0.1 à V3.0.29.

Versions corrigées : V3.0.30 et ultérieures.

Mettez à jour vers la dernière version.

P2

Correction d'un problème où une requête CTE contenant une jointure par boucle imbriquée échouait avec l'erreur suivante : Cannot open a fragment with explicit_seek set to false.

L'optimiseur a déduit incorrectement l'ordre des jointures.

Versions concernées : V3.0.1 à V3.0.27.

Versions corrigées : V3.0.28 et ultérieures.

Mettez à jour vers la dernière version.

P2

Correction d'un problème où l'utilisation de la fonction GENERATE_SERIES avec des champs de type DECIMAL échouait avec l'erreur suivante : generate series first and second arguments should has same type.

L'optimiseur a déduit incorrectement la précision pour le champ de type DECIMAL.

Versions concernées : V3.0.1 à V3.0.25.

Versions corrigées : V3.0.26 et ultérieures.

Mettez à jour vers la dernière version.

P2

Correction d'un problème où le champ query_id dans la vue hg_stat_activity était inexact lorsque engine_type était défini sur {PG}.

hg_stat_activity signalait un query_id désordonné lorsque engine_type était défini sur {PG}.

Versions concernées : V3.0.1 à V3.0.25.

Versions corrigées : V3.0.26 et ultérieures.

Mettez à jour vers la dernière version.

Mars 2025

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P2

Correction d'un problème où l'utilisation d'une fonction de fenêtrage, telle que ROW_NUMBER() OVER, pour traiter le champ lc_state_split_idx provoquait une erreur ORCA failed to produce a plan.

La fonction de fenêtrage identifiait incorrectement le champ lc_state_split_idx comme un mot-clé, ce qui entraînait une troncature incorrecte. Cela empêchait la génération d'un plan d'exécution et provoquait l'échec de la requête SQL.

Concernées : V3.0.24 et antérieures.

Corrigées : V3.0.25 et ultérieures.

Mettez à jour vers la dernière version.

P1

Correction d'un problème empêchant la prise en compte d'une clé de distribution spécifiée manuellement dans une table dynamique.

Une erreur d'inférence du moteur a entraîné l'ignorance de la clé de distribution spécifiée manuellement.

Concernées : V3.0.24 et antérieures.

Corrigées : V3.0.25 et ultérieures.

Mettez à jour vers la dernière version.

Février 2025

Niveau

Description

Cause

Versions concernées et corrigées

Solutions de contournement

P1

Lors de la connexion à une instance Hologres avec un outil BI ou de développement, les utilisateurs non autorisés peuvent voir les métadonnées des bases de données, des schémas et des tables.

Le contrôle d'accès aux métadonnées n'est pas suffisamment strict.

Concernées : V3.0.23 et antérieures.

Corrigées : V3.0.24 et ultérieures.

Mettez à jour vers la dernière version.

P2

Lors de la jointure d'une table étrangère MaxCompute avec une table étrangère hologres_fdw, la requête échoue avec l'erreur error: Build desc failed: Fetch table group shards failed on meta proxy.

Une erreur logique se produit lors de l'élagage des shards sur une table interne pendant une jointure entre une table étrangère hologres_fdw et une table étrangère MaxCompute.

Concernées : V3.0.22 et antérieures.

Corrigées : V3.0.23 et ultérieures.

Mettez à jour vers la dernière version.

P2

Après la mise à niveau d'une instance Hologres vers la version V2.2, l'utilisation de la fonction renvoyant un ensemble GENERATE_SERIES pour traiter un champ DECIMAL échoue avec l'erreur error: generate series first and second arguments should has same type.

La requête échoue car l'optimiseur infère incorrectement la précision du type DECIMAL lorsque la fonction GENERATE_SERIES traite un champ DECIMAL.

Concernées : V2.2.22 et antérieures.

Corrigées : V2.2.23 et ultérieures.

Mettez à jour vers la dernière version.

P2

Lorsqu'une règle de masquage des données pour un compte est définie sur all:unmasked, la règle ne prend pas effet et les données interrogées restent masquées.

Après la définition d'une règle de masquage des données, le système ne parvient pas à évaluer correctement la règle pour le compte.

Concernées :

  • V3.0.1 et antérieures.

  • V2.2.21 et antérieures.

Corrigées :

  • V3.0.2 et ultérieures.

  • V2.2.22 et ultérieures.

Mettez à jour vers la dernière version.

P2

Lors de la consommation des journaux binaires Hologres en mode JDBC, les tâches peuvent générer des exceptions telles que Binlog Convert Failed et Java heap space, ou la consommation de données depuis certains shards peut s'arrêter de manière inattendue.

Si un opérateur Flink en aval subit une contre-pression lors de la consommation des journaux binaires, les données de la table source ne sont pas consommées rapidement. Cela provoque une exception de délai d'attente côté backend. La passerelle transmet ensuite incorrectement cette exception au client, ce qui bloque la tâche de consommation de données ou entraîne son échec avec une erreur d'analyse.

  • Concernées : V2.2.21 et antérieures.

  • Corrigées : V2.2.22 et ultérieures.

Mettez à jour vers la dernière version et redémarrez la tâche Flink.

P2

Si l'optimisation du stockage orienté colonne est activée pour une colonne JSONB disposant également d'un index bitmap, les opérations de vidage (flush) et de compactage peuvent échouer après l'écriture des données. Cela augmente la consommation de stockage de l'instance et l'utilisation de la mémoire.

Un défaut dans l'optimisation du stockage orienté colonne pour JSONB l'empêche de gérer correctement un index bitmap sur le type BINARY.

Concernées :

  • V3.0.1 à V3.0.9.

  • V2.2.31 et antérieures.

Corrigées :

  • V3.0.10 et ultérieures.

  • V2.2.32 et ultérieures.

  • Mettez à jour vers la dernière version.

  • Sinon, désactivez l'optimisation du stockage orienté colonne pour la table et reconstruisez-la.

Janvier 2025

Niveau

Description

Cause

Versions

Solutions de contournement

P2

La fonction array_agg renvoie des résultats incorrects lorsqu'elle est utilisée dans une fonction de fenêtrage. Exemple :

CREATE TABLE ttt(a text, b int);
INSERT INTO ttt VALUES ('0101', 1), ('0102', 2), ('0103', 3);
SELECT a, array_agg(b) OVER (ORDER BY a DESC) FROM ttt;
--Execution result:
a	array_agg
0103	{3}
0102	{2}
0101	{1}

--Correct result:
a	array_agg
0103	{3}
0102	{3,2}
0101	{3,2,1}

La fonction array_agg produit des résultats incorrects avec une fonction de fenêtrage en raison d'une erreur dans la logique de calcul.

Versions concernées :

  • V3.0.1 à V3.0.21.

  • V2.2.38 et antérieures.

Corrigées dans :

  • V3.0.22 et ultérieures.

  • V2.2.39 et ultérieures.

Mettez à jour vers la dernière version.

P2

L'interrogation d'une table externe échoue si un nom de colonne contient des caractères majuscules :

CREATE TABLE 'dlf_paimon'.'ods'.'ods_test' ( 'ID' VARCHAR(64) NOT NULL) WITH ( 
  'bucket' = '1', 
  'path' = 'dls://xxx', xxx );
  SELECT * FROM 'dlf_paimon'.'ods'.'ods_test' ;
  ERROR: internal : scan column 'ID' cannot be found in Paimon table

Une erreur de conversion de casse provoque l'échec des requêtes sur les tables externes dont les noms de colonnes contiennent des majuscules.

  • Versions concernées : V3.0.18 et antérieures.

  • Corrigées dans : V3.0.19 et ultérieures.

Mettez à jour vers la dernière version.

P2

L'interrogation d'une table dans DLF échoue si un endpoint OSS n'est pas configuré. L'erreur suivante est signalée :

SELECT * FROM openlake_demo_dlf.github_events.ods_github_events_raw;

--Error message
ERROR: internal error: external dataset reader missing required oss_endpoint option.

Sans endpoint OSS configuré, le système ne peut pas router vers la table OSS correspondante, ce qui provoque l'échec de la requête.

  • Versions concernées : V3.0.17 et antérieures.

  • Corrigées dans : V3.0.18 et ultérieures.

Mettez à jour vers la dernière version.

Remarque

Après la mise à jour, vous pouvez interroger les tables sans configurer d'endpoint OSS.

Anomalies de 2024

Décembre 2024

Niveau

Description

Cause

Versions concernées / corrigées

Solution de contournement

P2

L'actualisation complète ou incrémentielle d'une table dynamique contenant un champ DECIMAL échoue avec l'erreur column type doesn't match, decimal(28, 10) v.s. decimal(38, 10).

L'échec de l'actualisation est dû à une inférence incorrecte de la précision du champ DECIMAL par le système.

Versions concernées : V3.0.16 et antérieures.

Versions corrigées : V3.0.17 et ultérieures.

  • Spécifiez manuellement la précision du champ DECIMAL dans la requête.

  • Mettez à jour vers la dernière version.

P2

Si les schémas de requête des deux côtés d'un opérateur UNION ALL sont incohérents, la requête échoue avec l'erreur schema's field number from producers are not equal [1 vs 0].

Cette erreur est provoquée par une inférence incorrecte du schéma pour l'opérateur UNION ALL.

Versions concernées : V3.0.16 et antérieures.

Versions corrigées : V3.0.17 et ultérieures.

Mettez à jour vers la dernière version.

P2

L'agrégation d'un champ SMALLINT dans une table dynamique lors d'une actualisation incrémentielle provoque une erreur « non pris en charge ».

Le processus d'actualisation incrémentielle des tables dynamiques ne prend pas entièrement en charge le type SMALLINT.

Versions concernées : V3.0 à V3.0.16.

Versions corrigées : V3.0.17 et ultérieures.

Mettez à jour vers la dernière version.

P2

Après la mise à niveau d'une instance d'entrepôt virtuel, les requêtes échouent avec l'erreur CreateFile ignore since it's not leader.

Lors de la mise à niveau d'un entrepôt virtuel, le système ne met pas à jour rapidement les métadonnées de la table. Par conséquent, les requêtes suivantes utilisent des métadonnées obsolètes, ce qui entraîne des erreurs.

Versions concernées :

  • V3.0.12 à V3.0.15.

  • V2.0.35 et antérieures.

Versions corrigées :

  • V3.0.16 et ultérieures.

  • V2.2.36 et ultérieures.

  • Redémarrez l'entrepôt virtuel mis à niveau.

  • Mettez à jour vers la dernière version.

P1

Après une mise à niveau vers Hologres V3.0.12–V3.0.15, la planification du partitionnement dynamique peut échouer pour les tables utilisant une clé de partition TEXT. Cet échec empêche la création de nouvelles tables partitionnées.

Le système de planification gère mal les clés de partition TEXT, ce qui entraîne l'échec d'une conversion interne. Cela empêche à son tour la création de la table.

Versions concernées : V3.0.12 à V3.0.15.

Versions corrigées : V3.0.16 et ultérieures.

Mettez à jour vers la dernière version.

P1

Après la mise à niveau de Hologres vers une version comprise entre V3.0 et V3.0.13, les requêtes sur les tables externes MaxCompute deviennent plus lentes.

Hologres V3.0 a introduit des contrôles d'autorisations plus stricts pour l'accès aux métadonnées des tables MaxCompute. Ces nouveaux contrôles amènent le nœud frontal (FE) à effectuer plusieurs appels redondants, ce qui dégrade les performances des requêtes sur les tables externes MaxCompute.

Versions concernées : V3.0 à V3.0.13.

Versions corrigées : V3.0.14 et ultérieures.

Mettez à jour vers la dernière version.

Novembre 2024

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P2

Lorsque vous activez Binlog en mode d'actualisation complète de table dynamique, l'opération Refresh signale l'erreur ERROR: internal error: refresh table failed: internal error: new_values is missing col.

Lorsque le binary log est activé pour une dynamic table en full refresh mode, une dérivation incohérente des hidden columns provoque l'échec de l'opération d'actualisation.

Versions concernées : V3.0.11 et antérieures.

Versions corrigées : V3.0.12 et ultérieures.

Mettez à jour vers la dernière version.

Remarque

Nous vous déconseillons d'activer Binlog en mode d'actualisation complète, car chaque actualisation complète équivaut à l'exécution de INSERT OVERWRITE, ce qui rend le Binlog incomplet.

P2

Dans le modèle d'autorisations SLPM, la suppression puis la recréation de l'extension Orafce provoquent une erreur : "role slpm xxx already exists".

Dans le SLPM permission model, la suppression de l'Orafce extension ne supprime pas complètement les autorisations du user group. Par conséquent, le user group persiste, ce qui empêche la recréation de l'extension.

Versions concernées : V3.0.9 et antérieures.

Versions corrigées : V3.0.10 et ultérieures.

  • Basculez du SLPM permission model vers le standard PostgreSQL authorization model, puis recréez l'Orafce extension.

  • Mettez à jour vers la dernière version.

P2

L'actualisation d'une table dynamique contenant un champ Decimal provoque l'erreur invalid definition of a numeric type.

Une inférence incorrecte de la précision du Decimal field entraîne une incompatibilité de précision lors de l'actualisation de la dynamic table.

Versions concernées : V3.0.9 et antérieures.

Versions corrigées : V3.0.10 et ultérieures.

  • Spécifiez manuellement la précision du Decimal field lors de la création de la dynamic table.

  • Mettez à jour vers la dernière version.

P2

Pour les requêtes dont la durée d'exécution dépasse 10 secondes, la Plan column du metadata warehouse ne contient parfois pas les résultats EXPLAIN ANALYZE.

Des retards de reporting occasionnels pour les requêtes dépassant 10 secondes empêchent la Plan column de collecter les résultats.

Versions concernées :

  • V3.0.8 et antérieures.

  • V2.2.33 et antérieures.

Versions corrigées :

  • V3.0.9 et ultérieures.

  • V2.2.34 et ultérieures.

Mettez à jour vers la dernière version.

P2

L'analyse d'une table de type BIS signale l'erreur Not supported type: bsi0.] in cache failed.

Ce problème survient car la prise en charge de l'analyse des champs de type BSI est incomplète.

Versions concernées :

  • V3.0.9 et antérieures.

  • V2.2.31 et antérieures.

Versions corrigées :

  • V3.0.10 et ultérieures.

  • V2.2.32 et ultérieures.

Mettez à jour vers la dernière version.

P2

Après l'utilisation de hg_insert_overwrite, la table temporaire générée n'est pas automatiquement nettoyée.

La table temporaire n'a pas été nettoyée car le mécanisme de nettoyage n'a pas été déclenché pendant le processus hg_insert_overwrite.

Versions concernées : V2.2.30 et antérieures.

Versions corrigées : V2.2.31 et ultérieures.

Mettez à jour vers la dernière version.

P2

Sur une instance où les opérations DDL sont fréquentes, l'exécution d'une opération TRUNCATE alors que les versions des FE node sont incohérentes empêche l'annulation de l'opération. Cela peut entraîner une incohérence des données.

Des versions incohérentes des FE node peuvent bloquer le relais des nœuds et faire échouer les opérations DDL suivantes. Par conséquent, les opérations DROP ou TRUNCATE exécutées durant cette période ne peuvent pas être annulées.

Versions concernées : V2.2.26 et antérieures.

Versions corrigées : V2.2.27 et ultérieures.

Mettez à jour vers la dernière version.

P2

L'exécution d'une instruction SQL trop longue et dépassant la limite provoque l'erreur suivante : ERROR: Current query length xxx exceeds the limit 10000000.

Hologres limite la longueur des instructions SQL à 10 000 000 caractères par défaut.

Introduit dans les versions :

  • V2.2.22 et ultérieures.

  • V3.0.1 et ultérieures.

Pour supprimer la limite de longueur SQL, définissez le paramètre suivant :

ALTER DATABASE db_name SET hg_experimental_query_length_limit = 0;

Septembre 2024

Niveau

Description

Cause

Versions concernées/corrigées

Solution de contournement

P1

Une opération DDL concurrente sur une table peut bloquer une requête si elle est exécutée après la première transaction DML de la base de données.

La première transaction DML d'une base de données a acquis un verrou de table. Une opération DDL concurrente ultérieure sur la même table a ensuite placé le système dans une boucle de création, entraînant un interblocage qui a bloqué la requête.

Versions concernées : V2.2.24 et antérieures.

Versions corrigées : V2.2.25 et ultérieures.

Mettez à jour vers la dernière version.

P2

Pour une table Hologres contenant un champ de type roaringbitmap, lorsque vous utilisez la commande CREATE FOREIGN TABLE pour créer une table externe destinée aux requêtes inter-bases de données sans inclure le champ roaringbitmap, la table externe est créée avec succès. Toutefois, une erreur cache lookup failed for type 22243 est signalée lorsque vous interrogez cette table à l'aide de SELECT * FROM.

Les tables externes pour les requêtes inter-bases de données ne prennent pas en charge le type roaringbitmap. Cette validation aurait dû être effectuée lors de la création de la table externe.

Versions concernées : V2.2.24 et antérieures.

Versions corrigées : V2.2.25 et ultérieures.

Mettez à jour vers la dernière version.

Remarque

Après la mise à niveau, si une table externe dans une requête inter-bases de données contient un type roaringbitmap, la requête échoue avec une erreur indiquant que le type n'est pas pris en charge.

P2

L'utilisation de la méthode JDBC prepareStatement pour exécuter à plusieurs reprises la commande CREATE EXTENSION provoque un échec avec l'erreur unrecognized extension: "PostgreSQL JDBC Driver". Ce problème est spécifique à cette méthode. Exemple de code :

Connection conn = DBInitializer.BuildSlaveDsOnHolo().getConnection();
    List sqls = Arrays.asList(
        "SET application_name TO 'PostgreSQL JDBC Driver'",
        "CREATE EXTENSION IF NOT EXISTS hologres_fdw"
        );

L'exécution répétée de la commande CREATE EXTENSION en boucle avec la méthode JDBC prepareStatement a corrompu le cache, ce qui a provoqué l'échec.

Versions concernées :

  • V2.2.23 et antérieures.

  • V3.0.3 et antérieures.

Versions corrigées :

  • V2.2.24 et ultérieures.

  • V3.0.4 et ultérieures.

  • Exécutez la commande CREATE EXTENSION une seule fois par base de données.

  • Mettez à jour vers la dernière version.

P2

Les valeurs de result_rows et affected_rows dans le journal des requêtes du metadata warehouse ne correspondent pas aux valeurs réelles.

Le metadata warehouse a signalé incorrectement les valeurs result_rows et affected_rows, ce qui a provoqué cet écart.

Versions concernées : V2.2.22 et antérieures.

Versions corrigées : V2.2.23 et ultérieures.

Mettez à jour vers la dernière version.

P2

Le redémarrage de l'entrepôt virtuel principal peut ralentir les requêtes ponctuelles sur un entrepôt virtuel secondaire.

Lors du redémarrage de l'entrepôt virtuel principal, les shards de l'entrepôt virtuel secondaire ont interrogé en continu l'état du shard principal. Cette interrogation a bloqué les requêtes ponctuelles jusqu'à ce que tous les shards soient récupérés.

Versions concernées : V2.2.21 et antérieures.

Versions corrigées : V2.2.22 et ultérieures.

Mettez à jour vers la dernière version.

P2

La fonction BSI_SUM renvoie un résultat incorrect si la somme de tous les éléments du tableau de résultats dépasse 2^31.

La fonction a mal géré une condition de dépassement de données.

Versions concernées : V2.1.1 et ultérieures.

Versions corrigées : En attente.

  • Mettez à jour vers la dernière version une fois le correctif publié.

  • Réécrivez la requête SQL. Exemple :

    SELECT SUM(a[2]) FROM (SELECT BSI_ITERATE(BSI_BUILD('{20240901,1}','{3101397531,100}')) a) b;

P2

Les nouvelles connexions à une instance Hologres peuvent parfois expirer ou se bloquer.

Un processus au sein d'un nœud se bloque parfois, ce qui empêche ce nœud de créer de nouvelles connexions.

Versions concernées : V2.2.22 et antérieures, V2.1.42 et antérieures, V2.0.45 et antérieures, et V1.3.70 et antérieures.

Versions corrigées : Les versions suivantes et ultérieures : V3.0.4, V2.2.23, V2.1.43, V2.0.46 et V1.3.71.

  • Solution à court terme : Redémarrez l'instance pour résoudre temporairement le problème.

  • Solution à long terme : Mettez à niveau vers la dernière version de correctif pour votre version majeure.

Août 2024

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P2

Lorsqu'un entrepôt virtuel devient indisponible (par exemple, lors d'un redémarrage), la latence augmente pour les requêtes ponctuelles provenant d'autres entrepôts virtuels sur les tables d'un groupe de tables chargé par cet entrepôt.

Un bogue dans un module interne du chemin de lecture/écriture en temps réel oblige un entrepôt virtuel à attendre l'état du groupe de tables lors des requêtes ponctuelles, ce qui augmente la latence.

Versions concernées : V2.1.1 à V2.2.21.

Correction apportée : V2.2.22 et versions ultérieures.

Mettez à jour vers la dernière version.

P1

L'utilisation de Fixed Plan pour des écritures en temps réel dépassant 1 million de QPS présente un faible risque d'échecs d'écriture et de redémarrages de l'instance.

Un bogue dans le gestionnaire de mémoire du chemin de lecture/écriture en temps réel.

Versions concernées :

  • V2.0.1 à V2.0.43.

  • V2.1.1 à V2.1.36.

  • V2.2.1 à V2.2.8.

Correction apportée :

  • V2.0.44 et versions ultérieures (V2.0).

  • V2.1.37 et versions ultérieures (V2.1).

  • V2.2.9 et versions ultérieures (V2.2).

Mettez à jour vers la dernière version.

Juillet 2024

Niveau

Description

Cause

Versions concernées

Solution de contournement

P1

Une tâche Flink lisant les journaux binaires Hologres en mode jdbc ou jdbc_fixed peut se bloquer ou déclencher un basculement si une contre-pression provoque un délai d'expiration du backend.

Un problème dans la manière dont la passerelle renvoie une exception de délai d'expiration du backend au client entraîne un blocage de la lecture des données ou un échec avec une erreur d'analyse.

Versions concernées : V1.3 et versions ultérieures.

Correction apportée : V2.2.21 et versions ultérieures.

Redémarrez la tâche Flink à partir du dernier point de contrôle et mettez à jour vers la dernière version.

P2

Dans la version V2.2 et les versions ultérieures, le moteur de requêtes parallèles (PQE) exécute les opérations COUNT DISTINCT qui utilisent l'élagage de shards (lorsque le plan d'exécution inclut un opérateur d'élagage de shard), ce qui dégrade les performances.

CREATE TABLE t1 (a int, b int) WITH (distribution_key = 'b');
    INSERT INTO t1 VALUES(1,1),(2,2),(3,3),(4,4);
    EXPLAIN SELECT count(DISTINCT a) FROM t1 WHERE b =1;
    --The following result is returned:
    QUERY PLAN
    Final Aggregate  (cost=0.00..105.00 rows=1 width=8)
      ->  Partial Aggregate  (cost=0.00..5.00 rows=1 width=8)
            ->  Partial HashAggregate  (cost=0.00..5.00 rows=10 width=4)
                  Group Key: a
                  ->  Local Gather  (cost=0.00..5.00 rows=32 width=4)
                        ->  Partial HashAggregate  (cost=0.00..5.00 rows=32 width=4)
                              Group Key: a
                              ->  Seq Scan on t1  (cost=0.00..5.01 rows=1000 width=4)
                                    Shard Prune: Eagerly
                                    Shards selected: 1 out of 21
                                    Filter: (b = 1)
                                    RowGroupFilter: (b = 1)
    Optimizer: HQO version 2.2.0

Le système déduit incorrectement le plan d'exécution pour COUNT DISTINCT lorsque l'élagage de shards est appliqué. Cela amène le PQE à exécuter la requête, ce qui dégrade les performances.

Versions concernées : V2.2.1 à V2.2.18.

Correction apportée : V2.2.19 et versions ultérieures.

  • Mettez à jour vers la dernière version.

  • Remplacez COUNT DISTINCT par UNIQ.

P2

Dans le journal des requêtes lentes (la table query_log), le format de date du champ query_start est 2024-07-08 22:00:00, tandis que le format du champ query_date est 19700101.

Le système collecte incorrectement le champ query_date pour le journal des requêtes lentes.

Versions concernées : V2.2.1 à V2.2.18.

Correction apportée : V2.2.19 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

Lors de l'écriture dans une table enfant partitionnée, si la liste de colonnes COPY inclut la colonne de clé de partition, des valeurs non nulles peuvent être écrites par erreur dans une partition définie pour la valeur 0. Cela peut entraîner la présence de données erronées dans la colonne de clé de partition.

begin;
    create table tp(a int, b int) partition by list (a);
    create table c0 partition of tp for values in (0);
    commit;

    COPY c0 FROM stdin WITH (stream_mode ON, format 'csv', null 'null');

    # Input
    1,0
    null,0
    \.

Lorsque vous écrivez dans une table enfant partitionnée et que la liste de colonnes COPY inclut la colonne de clé de partition, le système ne valide pas la clé de partition lorsque la valeur de partition est 0. Cela permet l'écriture de données erronées.

Versions concernées : V2.2.1 à V2.2.18.

Correction apportée : V2.2.19 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

Lorsque le fuseau horaire est explicitement défini sur SET timezone='+8' dans la chaîne de connexion et qu'une requête contient une fonction de date PQE telle que to_char, la requête renvoie incorrectement les résultats pour le fuseau horaire UTC-8 au lieu du fuseau horaire attendu UTC+8. Exemple :

CREATE TABLE date_test(a timestamptz);
    --Expected result: 2001-09-28
    INSERT INTO date_test VALUES ('2001-09-28 03:00:00+08');
    SELECT to_char(a, 'YYYY-MM-DD') FROM date_test;

    --Incorrect result: 2001-09-27
    SET hg_experimental_udf_pushdown_blacklist =timestamptz_to_char;
    SET timezone='+8';
    SELECT to_char(a, 'YYYY-MM-DD') FROM date_test;

Le PQE calcule incorrectement le fuseau horaire à partir de la chaîne de connexion lors de l'analyse des fonctions de date.

Versions concernées : V2.2.1 à V2.2.18.

Correction apportée : V2.2.19 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

L'appel de la fonction pad_sub_cost échoue avec l'erreur Column should be non-nullable but the values contain 609 nulls.

La fonction pad_sub_cost déduit incorrectement la propriété nullable lors du calcul, ce qui entraîne l'échec de la requête.

Versions concernées : V2.2.1 à V2.2.18.

Correction apportée : V2.2.19 et versions ultérieures.

Mettez à jour vers la dernière version.

P0

Lorsque vous utilisez la gestion dynamique des partitions et définissez time_unit sur MONTH (partitions dynamiques mensuelles), le système peut créer par erreur une partition future ou supprimer la partition actuelle.

À partir de la version V2.2, la fonctionnalité de gestion dynamique des partitions prend en charge une heure de début de planification personnalisée, mais le calcul du temps pour les partitions mensuelles est incorrect.

Versions concernées : V2.2.1 à V2.2.17.

Correction apportée : V2.2.18 et versions ultérieures.

Mettez à jour vers la dernière version.

Juin 2024

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P1

L'exécution des commandes hg_insert_overwrite, CREATE TABLE AS,

et COPY sur une table externe entraîne l'erreur suivante : Fail to access foreign data as user xxx, no token found in request header.

Depuis la version V2.2, les opérations sur les tables externes MaxCompute nécessitent une authentification via un rôle lié au service (SLR). Cependant, en raison d'un problème d'implémentation, les utilisateurs ayant déjà créé un SLR ont rencontré un échec d'accès lors de l'exécution des commandes hg_insert_overwrite, CREATE TABLE AS,

et COPY.

Versions concernées :

V2.2.1 à V2.2.14.

Versions corrigées :

V2.2.15 et versions ultérieures.

Mettez à jour vers la dernière version.

P1

Si une table source contient des données en double, l'exécution d'une opération UPDATE ou UPSERT avec déduplication basée sur la clé primaire peut occasionnellement entraîner la présence de données en double dans la table cible, même si le TTL des données de la table n'a pas expiré.

Lors d'une opération UPDATE ou UPSERT, la table cible et la table source sont jointes. Si les clés de jointure des deux tables sont différentes, la table cible peut être redistribuée. Dans ce scénario, si la table source contient des données en double, l'optimiseur peut les traiter incorrectement. Cela peut entraîner un échec de la déduplication et aboutir à une clé primaire en double.

Versions concernées :

V2.2.13 et versions antérieures.

Versions corrigées :

V2.2.14 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

Lors de l'utilisation de Flink pour lire des données depuis Paimon et les écrire dans Hologres, les données VARCHAR peuvent être écrites sous forme de caractères illisibles.

VARCHAR data in Paimon: Chinese characters
    VARCHAR data in Hologres: ??? (garbled characters)

Hologres convertit incorrectement les données VARCHAR de Paimon, ce qui provoque l'apparition de caractères illisibles.

Versions concernées :

V2.2.12 et versions antérieures.

Versions corrigées :

V2.2.13 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

La syntaxe IS DISTINCT FROM gère les données NaN de manière incohérente par rapport à PostgreSQL.

--PostgreSQL behavior:
    CREATE TABLE test_f8 (a float8);
    INSERT INTO test_f8 VALUES ('NaN');
    SELECT * FROM test_f8 WHERE a IS DISTINCT FROM 'NaN';
    -- The following result is returned:
     a
    ---
    (0 rows)
    --------------------------------------------------------
    --Hologres behavior:
    CREATE TABLE test_f8 (a float8);
    INSERT INTO test_f8 VALUES ('NaN');
    SELECT * FROM test_f8 WHERE a IS DISTINCT FROM 'NaN';
    -- The following result is returned:
      a  
    -----
     NaN

Pour utiliser un index, PostgreSQL définit des règles de comparaison qui traitent les valeurs NaN comme égales entre elles et supérieures à toute valeur non-NaN. Cependant, Hologres suit les règles de comparaison standard C++, où les valeurs NaN ne sont pas égales entre elles. Cette divergence entraîne des résultats incohérents par rapport à PostgreSQL.

Versions concernées :

V2.1.37 et versions antérieures.

Versions corrigées :

  • V2.1.38 et versions ultérieures.

  • V2.2.10 et versions ultérieures.

Mettez à jour vers la dernière version.

Mai 2024

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P2

L'utilisation de Fixed Plan pour une requête ponctuelle avec plusieurs conditions de clé primaire identiques, telles que select * from table_name where (pk=1) or (pk=1);, renvoie des résultats en double.

Fixed Plan n'a pas réussi à dédupliquer plusieurs conditions de filtre pour la même clé primaire.

Versions concernées :

V2.2.8 et versions antérieures.

Versions corrigées :

V2.2.9 et versions ultérieures.

  • N'incluez pas plusieurs conditions de filtre pour la même clé primaire (pk) dans la clause WHERE d'une seule instruction SQL.

  • Mettez à jour vers la dernière version.

P1

L'exécution d'une modification de schéma pendant un rééquilibrage peut empêcher l'instance de traiter les écritures et les requêtes.

Un rééquilibrage déclenche un basculement entre le leader et le follower d'un shard si le délai de réplication est inférieur à 10 secondes. Si un utilisateur effectue une modification de schéma pendant ce basculement, le moteur de stockage peut entrer dans un état anormal. Cela empêche l'instance de traiter les opérations d'écriture et de requête. Dans Hologres V2.1, ce problème est plus probable car le système déclenche automatiquement un rééquilibrage lorsqu'une instance possède un nœud de travail vide.

Versions concernées :

  • V2.1.16 à V2.1.23

  • V2.0.0 à V2.0.41

Versions corrigées :

  • V2.1.24 et versions ultérieures

  • V2.0.42 et versions ultérieures

Mettez à jour vers la dernière version.

P2

Après la mise à niveau d'une instance Hologres vers la version V2.1.25 ou ultérieure, le système ne parvient pas à nettoyer automatiquement les tables temporaires générées par une instruction insert overwrite pour les tables situées dans des schémas non publics.

Une omission de détection lors de l'exécution d'une instruction insert overwrite a empêché le nettoyage approprié des tables temporaires.

Versions concernées :

V2.1.25 à V2.1.32.

Versions corrigées :

V2.1.33 et versions ultérieures.

  • Utilisez la fonctionnalité de gestion des tables dans HoloWeb pour nettoyer les tables temporaires en un clic.

  • Mettez à jour vers la dernière version.

P2

Lorsque vous utilisez FixedFE (qui correspond au mode jdbc_fixed dans un connecteur) pour écrire des données dans Hologres, FixedFE signale une erreur permission denied for schema XXX même si le modèle SLPM est activé et que l'utilisateur dispose de l'autorisation de développeur pour le schéma spécifié.

FixedFE n'a pas actualisé son cache rapidement lors des modifications d'autorisations dans le modèle SLPM. Par conséquent, FixedFE a signalé l'erreur alors que l'utilisateur disposait déjà des autorisations requises.

Versions concernées :

V2.0.31 et versions antérieures

Versions corrigées :

V2.0.32 et versions ultérieures.

Mettez à jour vers la dernière version.

Avril 2024

Niveau

Description

Cause

Versions

Solution de contournement

P2

Lorsque vous utilisez la fonction datediff pour calculer la différence entre deux valeurs temporelles dans une unité spécifiée, le résultat renvoyé présente parfois un écart d'une unité.

La fonction contient un bogue logique.

Version concernée :

V2.0.31.

Versions corrigées :

V2.1.27 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

Après la mise à niveau d'une instance Hologres vers la version V2.1.26, la métrique d'utilisation de la mémoire des requêtes affiche une augmentation lente et continue.

Suite à la mise à niveau vers la version V2.1.26, lorsqu'une requête rencontre une erreur OOM (Out Of Memory), son utilisation de la mémoire est comptabilisée plusieurs fois. Cela gonfle artificiellement la métrique de surveillance correspondante.

Remarque

L'utilisation réelle de la mémoire de l'instance n'augmente pas. Le problème est dû à une erreur de calcul dans les statistiques de surveillance.

Version concernée :

V2.1.26.

Versions corrigées :

V2.1.27 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P1

Après la mise à niveau d'une instance Hologres vers la version V2.1, l'interrogation d'une table étrangère MaxCompute peut entraîner une augmentation progressive de l'utilisation de la mémoire, des fluctuations des performances des requêtes ou une hausse des erreurs OOM.

Lorsque vous interrogez une table étrangère MaxCompute sur une instance V2.1, le système ne ferme pas rapidement les fichiers ouverts. Cela provoque une augmentation graduelle de l'utilisation de la mémoire, ce qui affecte les performances des requêtes et la stabilité de l'instance.

Versions concernées :

De V2.1.1 à V2.1.25.

Versions corrigées :

V2.1.26 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

Dans la version V2.1, l'utilisation du stockage des instances primaire-secondaire et des entrepôts virtuels augmente, de sorte que l'utilisation totale indiquée par les métriques de surveillance dépasse la valeur calculée par la fonction pg_relation_size.

Le système ne récupère pas rapidement les anciens fichiers des instances primaire-secondaire ou des entrepôts virtuels V2.1. Cela entraîne une croissance du stockage et fausse à la hausse le montant de stockage surveillé.

Versions concernées :

De V2.1.1 à V2.1.25.

Versions corrigées :

V2.1.26 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P1

Lorsqu'un job Flink consomme le journal binaire Hologres en mode JDBC, le taux de consommation est élevé au démarrage, puis diminue continuellement avec le temps.

Une fuite de mémoire se produit lorsqu'un job Flink consomme le journal binaire Hologres en mode JDBC.

Versions concernées :

Versions VVR antérieures à V6.0.7.

Versions corrigées :

VVR V6.0.7 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

Mars 2024

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P0

Les ressources de requête ne sont pas libérées, ce qui entraîne les problèmes suivants :

  • Augmentation continue de la mémoire.

  • Grand nombre de verrous maintenus.

  • De nombreuses requêtes restent bloquées car elles ne peuvent pas allouer de ressources. Même après le redémarrage de l'instance, le problème persiste et les requêtes se bloquent rapidement à nouveau.

Lorsqu'une requête implique uniquement des données de shard et utilise PQE ou SQE pour interroger une table étrangère MaxCompute ou une table étrangère de lac de données, le système ne libère pas automatiquement les ressources une fois la requête terminée. Seul le mécanisme de garbage collection du Query Master peut récupérer ces ressources. Lorsque le Query Master est fortement sollicité, les retards de fermeture entraînent une rétention excessive des ressources par les opérations de requête, bloquant ainsi les requêtes suivantes.

Versions concernées :

De V2.1.23 à V2.1.24.

Versions corrigées :

V2.1.25 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P1

L'ajout d'un bitmap à une colonne encodée par dictionnaire et non nullable renvoie des résultats incorrects, incluant des valeurs nulles.

Lors de la construction d'un bitmap pour une colonne encodée par dictionnaire, le backend n'applique pas le bitmap à toutes les données, ce qui génère des résultats erronés.

Versions concernées :

V2.1.21 et versions antérieures.

Versions corrigées :

V2.1.22 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P1

L'utilisation de Fixed Plan pour les écritures de données en temps réel ou les requêtes ponctuelles entraîne une augmentation progressive de l'utilisation de la mémoire de l'instance.

Dans Hologres V2.1, le moteur d'exécution Fixed Plan a été refondu. Les opérateurs qu'il crée pour les tables en lecture-écriture ne sont pas nettoyés rapidement, ce qui provoque une fuite de mémoire.

Versions concernées :

De V2.1.1 à V2.1.9.

Versions corrigées :

V2.1.10 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P1

L'annulation d'une requête s'exécutant sur PQE peut déclencher un interblocage de processus sur le nœud PQE correspondant, l'empêchant de traiter de nouvelles requêtes PQE.

La réception d'un signal d'annulation peut déclencher un défaut dans la fonctionnalité de contrôle de concurrence des E/S PQE. Ce problème affecte tous les processus PQE.

Versions concernées :

  • De V2.1.2 à V2.1.8.

  • De V2.0.23 à V2.0.30.

Versions corrigées :

  • V2.1.9 et versions ultérieures.

  • V2.0.31 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

La fonction INTERSECT ou EXCEPT renvoie des résultats incorrects lorsque l'élagage de shards (shard pruning) est actif. Par exemple, lorsque l'élagage de shards est actif, l'exécution de l'instruction SQL suivante peut renvoyer un résultat incorrect.

SELECT * FROM (
	SELECT user_id FROM dc_ads_public_label_r where label_id = 1 and user_id = 1) 
a INTERSECT (
	SELECT user_id FROM dc_ads_public_label_r where label_id = 1 and user_id = 1);
  
--Incorrect result
user_id   
-------
 2
 
--Correct result
user_id   
-------
 1

Les fonctions INTERSECT ou EXCEPT sont actuellement implémentées à l'aide de JOIN. Lors de l'élagage de shards, la gestion de ces fonctions peut générer un plan d'exécution incorrect, entraînant des résultats de requête erronés.

Versions concernées :

V2.1.21 et versions antérieures.

Versions corrigées :

V2.1.22 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

Lorsqu'un processus PQE se termine, il peut se bloquer. Cela peut s'accumuler avec le temps et empêcher PQE de traiter de nouvelles requêtes.

Lorsqu'un processus PQE se termine, un problème de concurrence entre le thread de sortie RPC et le thread principal empêche le thread de sortie RPC de se terminer. Cela empêche à son tour le processus PQE de se fermer proprement.

Versions concernées :

De V2.1.0 à V2.1.14.

Versions corrigées :

V2.1.15 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

Lorsque des requêtes concurrentes sont exécutées sur PQE, l'instance peut redémarrer brièvement.

Dans Hologres V2.0 et les versions antérieures, PQE présente un problème de concurrence multithread qui peut provoquer un vidage sur incident (core dump) de l'instance.

Versions concernées :

V2.0 et versions antérieures.

Versions corrigées :

V2.1.0 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

Lorsqu'une instruction SQL contenant in ($1....) est exécutée en mode d'instruction préparée et traitée par le sélecteur de shards, l'instance peut redémarrer brièvement.

L'optimiseur génère un plan d'exécution incorrect, ce qui peut provoquer un vidage sur incident (core dump) de l'instance.

Versions concernées :

V2.0 et versions antérieures.

Versions corrigées :

V2.1.0 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

Février 2024

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P2

La conversion d'un type TEXT en type BIT, puis en type BIGINT, échoue avec l'erreur : Cast FROM STRING to BINARY is not supported.. Exemple d'instruction SQL :

CREATE TABLE ttttt (a text);
    INSERT INTO ttttt VALUES ('x165a7b4a00001');

    SELECT * FROM ttttt;
    SELECT a::bit(52)::bigint FROM ttttt; 

    --text to bit conversion fails with: Cast FROM STRING to BINARY is not supported.
    --text to bit, then to bigint fails with: ERROR: syntax error at or near ")"

La prise en charge incomplète de la conversion du type TEXT en type BIT provoque l'erreur : Cast FROM STRING to BINARY is not supported.. Ensuite, lors de la conversion vers le type BIGINT, le système identifie incorrectement le type BIT, ce qui entraîne l'erreur : syntax error at or near ")".

Versions concernées :

V2.1.20 et versions antérieures

Versions corrigées :

V2.1.21 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P2

La définition de la clé de clustering d'une table orientée ligne avec une clé primaire sur une chaîne vide provoque une incohérence des métadonnées et bloque les requêtes. Exemple d'instruction SQL de création de table :

BEGIN;
DROP TABLE IF EXISTS public.t01;
CREATE TABLE public.t01 (
  agree_time timestamp without time zone,
  seller_id int NOT NULL,
  seller_nick text NOT NULL,
  ref_id bigint NOT NULL,
  scope text NOT NULL,
  status integer NOT NULL,
  PRIMARY KEY (seller_id)
);
CALL set_table_property('public.t01', 'orientation', 'row');
CALL set_table_property('public.t01',  'clustering_key', '');
END;

Si la clé de clustering d'une table orientée ligne est une chaîne vide et diffère de sa clé primaire, le nœud FE ne répond plus aux requêtes. Cela entraîne une incohérence des métadonnées et bloque les requêtes.

Versions concernées :

V2.1.20 et versions antérieures

Versions corrigées :

V2.1.21 et versions ultérieures

  • Recréez la table et spécifiez explicitement la clé de clustering. Pour des performances optimales, nous vous recommandons de faire correspondre la clé de clustering et la clé primaire d'une table orientée ligne.

  • Effectuez une mise à niveau vers la dernière version.

P2

Une requête renvoie un résultat incorrect si sa condition de filtre (clause WHERE) contient la clé de clustering et si ORDER BY est également utilisé pour trier selon cette clé. Un exemple est une requête telle que WHERE a >= xxx LIMIT x ORDER BY a, où la colonne a est la clé de clustering. Exemple d'instruction SQL :

BEGIN;
    CREATE TABLE test3(a int NOT NULL);

    CALL set_table_property('test3', 'clustering_key', 'a');
    CALL set_table_property('test3', 'segment_key', 'a');
    CALL set_table_property('test3', 'distribution_key', 'a');
    END;
    INSERT INTO test3 SELECT i FROM generate_series(0, 100000)i;
    INSERT INTO test3 SELECT 500 FROM generate_series(0, 100000)i;

    SELECT count(1) FROM (SELECT * FROM test3 WHERE a>=500  AND a <= 500 ORDER BY a ASC LIMIT 20 OFFSET 11440)a;
    --An unexpected result is returned. The `LIMIT` is 20, but the query might return 30 rows.

Lorsqu'une condition de filtre contient une clé de clustering et que ORDER BY est utilisé pour trier selon cette clé de clustering, l'algorithme de la clause ORDER BY est associé incorrectement, ce qui entraîne des résultats renvoyés et des résultats LIMIT erronés.

Versions concernées :

V2.1.19 et versions antérieures

Versions corrigées :

V2.1.20 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P1

Dans Hologres V2.1, l'utilisation de la mémoire de l'instance augmente lentement et les requêtes sur les tables étrangères MaxCompute échouent occasionnellement avec une erreur ERPC_ERROR_CONNECTION_CLOSED.

Après la mise à niveau d'une instance vers la version V2.1, celle-ci ne ferme pas rapidement les fichiers de données sous-jacents des tables étrangères. Cela provoque une fuite de mémoire et déclenche occasionnellement un redémarrage de l'instance.

Versions concernées :

De V2.1.10 à V2.1.18

Versions corrigées :

V2.1.19 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P2

La multiplication de valeurs de type DECIMAL produit un résultat avec une précision incorrecte. Exemple d'instruction SQL :

CREATE TABLE t (a decimal(30,10), b decimal(30,10));
INSERT INTO t VALUES (1.1111111111, 1.0000000000),(1.1111111112, 1.0000000000),(1.1111111111, 2.0000000000),(1.1111111112, 2.0000000000);
SELECT a*b FROM t;

--Hologres result, incorrect
2.222222222000000000
1.111111111000000000
1.111111111000000000
2.222222222000000000

--PostgreSQL result, correct
1.111111111100000000
1.111111111200000000
2.222222222200000000
2.222222222400000000

La précision décimale par défaut pour la multiplication de types DECIMAL est de 18. Si la multiplication de deux types DECIMAL produit un résultat comportant plus de 18 décimales, le système tronque les données avant le calcul, ce qui conduit à un résultat incorrect.

Versions concernées :

V2.1.18 et versions antérieures

Versions corrigées :

V2.1.19 et versions ultérieures

  • Convertissez (CAST) les valeurs de type DECIMAL en type TEXT.

  • Effectuez une mise à niveau vers la dernière version.

Janvier 2024

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P2

Après la mise à niveau vers Hologres V2.1, l'exécution d'une opération INSERT suite à une opération truncate génère parfois une erreur Invalid table id in schema.

Dans Hologres V2.1, le composant FrontEnd définissait incorrectement un temps de cache de relecture excessivement long. Cela ralentissait la relecture DDL pour les opérations DML suivant une opération DDL.

Versions concernées :

V2.1.1 à V2.1.14.

Versions corrigées :

V2.1.15 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

La fonction jsonb_to_textarray ne prend pas en charge le pliage de constantes (constant folding), ce qui entraîne l'échec des instructions SQL impliquant des calculs constants avec une erreur ERROR: internal error: The left deepest leaf node of columnar access ref. Exemple :

CREATE TABLE t2 (f1 text[]);
    INSERT INTO t2 VALUES (ARRAY['1']);
    SELECT f1 && jsonb_to_textarray('["1","2"]') FROM t2;

    --Error
    ERROR:  internal error: The left deepest leaf node of columnar access ref

Une propagation (pushdown) incorrecte se produit lorsque la fonction jsonb_to_textarray est utilisée avec une constante dans une instruction SQL, ce qui provoque une erreur.

Versions concernées :

  • V2.1.1 à V2.1.14.

  • V2.0.34 et versions antérieures.

Versions corrigées :

  • V2.1.15 et versions ultérieures.

  • V2.0.35 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

L'utilisation de la fonction regexp_split_to_array provoque parfois une erreur ERROR: Illegal udf8 string in xxxx.

La fonction regexp_split_to_array effectue des lectures au-delà des limites de sa mémoire, ce qui entraîne l'échec de la requête.

Versions concernées :

V2.1.1 à V2.1.12.

Versions corrigées :

V2.1.13 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

Les requêtes utilisant SELECT * FROM <table_name> LIMIT xxx; peuvent parfois se bloquer.

Hologres utilise le chargement différé (lazy loading) pour une analyse complète de table avec une clause LIMIT. La requête se bloque car l'analyse lit trop de données en une seule fois.

Versions concernées :

  • V2.1.1 à V2.1.11.

  • V2.0.33 et versions antérieures.

Versions corrigées :

  • V2.1.12 et versions ultérieures.

  • V2.0.34 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

Après le redémarrage, la mise à niveau ou le changement d'échelle d'une instance, les tâches MaxCompute qui lisent directement depuis les tables externes Hologres peuvent parfois se bloquer.

Après le redémarrage d'une instance, le système actualise les métadonnées de la table. La tâche se bloque car MaxCompute ne parvient pas à récupérer l'état mis à jour des métadonnées à temps lors d'une lecture directe.

Versions concernées :

  • V2.1.0 à V2.1.2.

  • V2.0.5 et versions antérieures.

Versions corrigées :

  • V2.1.3 et versions ultérieures.

  • V2.0.26 et versions ultérieures.

Mettez à jour vers la dernière version.

Défauts de 2023

Décembre 2023

Niveau

Description

Cause

Versions concernées/corrigées

Solution de contournement

P1

Après avoir modifié le nombre de réplicas de shard pour une instance, celle-ci redémarre brièvement. Exemple SQL :

--The instance briefly restarts.
CALL HG_CREATE_TABLE_GROUP ('tg', 1);
CALL HG_UPDATE_DATABASE_PROPERTY ('default_table_group', 'tg');
CALL hg_set_table_group_property ('tg', 'replica_count', '2'); 

Lorsque vous modifiez le nombre de réplicas de shard, les métadonnées ne se mettent pas à jour correctement, ce qui provoque le redémarrage de l'instance.

Versions concernées :

  • V2.1.1 à V2.1.10

  • V2.0.33 et versions antérieures

Versions corrigées :

  • V2.1.11 et versions ultérieures

  • V2.0.34

Mettez à jour vers la dernière version.

P2

Si une importation de données utilisant la procédure stockée hg_insert_overwrite échoue, la procédure ne nettoie pas la table temporaire qu'elle a créée.

La procédure stockée hg_insert_overwrite crée une table temporaire lors de son exécution mais manque d'un mécanisme de nettoyage, ce qui laisse la table en place si la tâche échoue.

Versions concernées :

V2.0.19 et versions antérieures

Versions corrigées :

V2.0.30 et versions ultérieures

  • Supprimez manuellement la table temporaire.

  • Mettez à jour vers la dernière version.

P2

L'utilisation d'un plan fixe pour écrire des données dans une colonne DECIMAL dans Hologres peut entraîner des données incorrectes. Ce problème survient si la valeur d'entrée est un nombre négatif et que la différence entre sa décimale la moins significative et l'échelle de la colonne de destination est de 19 ou plus. Exemple SQL :

CREATE TABLE fixed_plan_decimal (col decimal(38,19));

-- A write error is triggered because the input value is negative and the difference between its least significant decimal place and the destination column's scale is 19.
INSERT INTO fixed_plan_decimal VALUES (-1.000000000);

-- The written result is 7922816250.4264337593543950336.
SELECT * FROM fixed_plan_decimal;
 

Ce problème survient car le chemin du plan fixe gère incorrectement la précision du type DECIMAL, ce qui entraîne des erreurs de données.

Versions concernées :

V2.1.11 et versions antérieures

Versions corrigées :

V2.1.12 et versions ultérieures

Remarque

Après la correction, le comportement du chemin du plan fixe correspond à celui du chemin sans plan fixe.

  • Lors de l'écriture des données, convertissez explicitement la valeur d'entrée vers le type DECIMAL correct, par exemple : -1.000000000::decimal(38,19).

  • Mettez à jour vers la dernière version.

P1

Pour les instances avec binlog activé, l'utilisation du CPU augmente considérablement après une mise à niveau vers la V2.1.9.

Après la mise à niveau d'une instance avec binlog activé vers la V2.1.9, le binlog peut ne pas détecter correctement les erreurs dans certains scénarios. Cet échec empêche le processus de se terminer normalement après une erreur, ce qui entraîne une journalisation excessive et une augmentation de l'utilisation du CPU.

Versions concernées :

V2.1.1 à V2.1.9

Versions corrigées :

V2.1.10 et versions ultérieures

Mettez à jour vers la dernière version.

Novembre 2023

Niveau

Description

Cause

Versions

Recommandations

P1

La fonction var_samp renvoie une variance incorrecte lorsque le type de données d'entrée est DECIMAL. Exemple SQL :

CREATE TABLE t1(f1 decimal(38,18));
    INSERT INTO t1 VALUES (123),(234),(456);

    -- The result for the DECIMAL type is incorrect.
    SELECT var_samp(f1) FROM t1;
    -- The following result is returned:
    var_samp   
    --------------
     0.2382402695

    -- The result is correct after the type is converted to INT.
    SELECT var_samp(f1::int) FROM t1;
    -- The following result is returned:
    var_samp     
    ------------------
     28749.0000000000
     

Une erreur de conversion de type se produit dans la fonction var_samp lors du traitement des données DECIMAL.

Concernées :

V2.0.27 et versions antérieures.

Corrigées :

V2.0.28 et versions ultérieures.

Mettez à jour vers la dernière version.

Octobre 2023

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P2

L'utilisation de la fonction date_part avec un champ en majuscules provoque l'erreur error: unsupport extract type xxx.

SELECT date_part('HOUR',ts) FROM tt;
    --error:unsupport extract type [HOUR]

L'échec de la requête est dû au fait que l'optimiseur n'a pas correctement reconnu le champ en majuscules dans la fonction date_part.

Versions concernées :

V2.0.1 à V2.0.25

Version corrigée :

V2.0.26 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P2

L'utilisation de l'opérateur && pour concaténer des tableaux renvoie l'erreur suivante : Unexpected expr type in array expr:145.

CREATE TABLE test (
      channel_info text
    );
    SELECT regexp_split_to_array(LOWER('TMK'),',') && array[(regexp_split_to_array(LOWER(channel_info),'-'))[2]]  FROM test;

    --error:Unexpected expr type in array expr:145

Le moteur d'exécution de l'opérateur && est Hologres Query Engine (HQE). Lorsque l'opérateur && est utilisé avec un tableau, l'optimiseur traite incorrectement ce dernier. Cela génère un plan d'exécution erroné et entraîne l'échec de la requête.

Versions concernées :

V2.0.25 et versions antérieures

Version corrigée :

V2.0.26 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P2

Pour une table partitionnée, une instruction with qui ne sélectionne aucune partition renvoie des alias de colonne incorrects.

CREATE TABLE t0_parent(ds text, v1 bigint, v2 bigint, v3 bigint) PARTITION BY list (ds);
    CREATE TABLE t0_child1 PARTITION OF t0_parent FOR VALUES IN ('20230915');
    CREATE TABLE t0_child2 PARTITION OF t0_parent FOR VALUES IN ('20230916');

    --Query statement that selects 0 partitions
    WITH cte1 AS (
      SELECT v1, v2, v3 FROM t0_parent
    ),
        cte2 AS (
          SELECT v1, v2 FROM cte1 WHERE v3 = 1 AND v3 = 2
        )
        SELECT v2 AS vb, v1 AS va FROM cte2 limit 1;

    --Incorrect result with the wrong alias 
     v2 | v1 
    ----+----

    --Correct result with the right alias
    vb | va 
    ----+----

Pour une requête comportant une clause with cte sur une table partitionnée, si la requête ne sélectionne aucune partition, l'optimiseur de requêtes (QO) supprime incorrectement les nœuds de partition lors de la génération du plan d'exécution. Cette erreur entraîne la perte des alias de colonne dans l'ensemble de résultats.

Versions concernées :

V2.0.25 et versions antérieures

Version corrigée :

V2.0.26 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P2

Si une instruction case when utilise le type DECIMAL et contient également une fonction traitée par PQE, une erreur se produit :

error: column with id 0 has type decimal(38, 10) but ReadColumn returns array Array(type=decimal(20, 4) length=1 null_count=0 [1.0000]).

Lorsqu'une instruction case when contient à la fois un type DECIMAL et une fonction exécutée par Parallel Query Engine (PQE), le système ne parvient pas à convertir correctement la précision du type DECIMAL. L'incompatibilité résultante provoque l'échec de la requête.

Versions concernées :

V2.0.23 et versions antérieures

Version corrigée :

V2.0.24 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P2

L'insertion de données dans une table enfant échoue avec l'erreur Can't find parent table for table name si sa table parente se trouve dans un schéma différent.

CREATE schema haha;
    CREATE TABLE haha.p(
      a text not null, 
      b int not null
    ) PARTITION BY LIST(a);
    CREATE TABLE public.c1 PARTITION OF haha.p FOR VALUES IN('v1');

    insert into public.c1 SELECT 'v1', generate_series(0 100);
    --error:Can't find parent table for table name

Bien que Hologres prenne en charge les tables parentes et enfants situées dans des schémas différents, le système n'a pas réussi à identifier cette relation lors d'une opération INSERT, ce qui a entraîné l'échec de l'insertion.

Versions concernées :

V2.0.23 et versions antérieures

Version corrigée :

V2.0.24 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P2

Une importation en masse utilisant insert on conflict do update pouvait créer des clés primaires en double sur une table orientée ligne. Ce problème survenait lorsque la clé de clustering et la clé primaire (PK) de la table étaient différentes et qu'aucune durée de vie (TTL) n'était explicitement définie.

--Create table statement
    BEGIN ;
    CREATE TABLE test (
      id integer,
      phone_number text,
      create_time text
      ,PRIMARY KEY (id)
    );
    CALL set_table_property('test', 'orientation', 'row');
    CALL set_table_property('test', 'storage_format', 'sst');
    CALL set_table_property('test', 'clustering_key', 'create_time:asc');
    CALL set_table_property('test', 'distribution_key', 'id');
    CALL set_table_property('test', 'time_to_live_in_seconds', '3153600000');
    COMMIT ;

    --Duplicate primary keys appear during query
    SELECT * FROM test;
    id | phone_number |create_time
    ---|--------------|-----------
    1  | 134xxxx      | 2023-11-06 19:25:42.483287+08
    1  | 134xxxx      | 2023-11-06 19:25:42.483287+08

Sur une table orientée ligne, insert on conflict do update marque un enregistrement pour suppression avant d'en insérer un nouveau. Si la clé primaire (PK) et la clé de clustering étaient différentes, la compaction ne traitait pas correctement le fichier marqué pour suppression, ce qui entraînait la duplication des clés primaires.

Versions concernées :

V2.0.22 et versions antérieures

Version corrigée :

V2.0.23 et versions ultérieures

  • Définissez la même valeur pour la clé primaire (PK) et la clé de clustering de la table orientée ligne, ou convertissez la table en une table orientée colonne.

  • Effectuez une mise à niveau vers la dernière version.

P2

Une requête effectuant un group by sur une colonne issue d'une expression array_to_string(array_sort(...)) et incluant plusieurs agrégations count(distinct ...) échoue avec l'erreur suivante : ORCA failed to produce a plan : No plan has been computed for required properties.

create table t1 (f1 int , f2 int , f3 int , f4 text[]);

    SELECT 
    f1,f5,
    count(distinct f2),
    count(distinct f3)
    FROM 
    (
      SELECT f1,f2,f3,array_to_string(array_sort(f4),',')as f5 FROM t1
    )tt
    group by f1,f5;

count(distinct ...) génère une expression de table commune (CTE), mais la fonction array_sort ne prend pas en charge l'intégration des CTE. Cette incompatibilité empêche l'optimiseur de créer un plan d'exécution valide, ce qui provoque l'échec de la requête.

Versions concernées :

V2.0.22 et versions antérieures

Version corrigée :

V2.0.23 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P2

Certaines requêtes se bloquent après l'exécution de la commande drop server.

L'exécution de la commande drop server a provoqué l'échec de l'opération de relecture entre les nœuds FE. Les décalages de version résultants entre les nœuds ont entraîné le blocage des requêtes.

Versions concernées :

V1.3.40 à V1.3.51

Version corrigée :

V1.3.52 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

Septembre 2023

Niveau

Description

Cause

Versions

Solution de contournement

P2

Lors de l'utilisation d'un index vectoriel Proxima, l'insertion d'un vecteur nul sans utiliser de plan fixe entraîne une erreur d'écriture : internal error: check condition "and_handle_null" assert failed. Voici un exemple de requête SQL :

BEGIN;
    CREATE TABLE t (
      vector float4[] CHECK (array_ndims(vector) = 1 AND array_length(vector, 1) = 3)
    );
    CALL SET_TABLE_PROPERTY ('t', 'proxima_vectors', '{"vector":{"algorithm":"Graph","distance_method":"SquaredEuclidean"}}');
    END;

    set hg_experimental_enable_fixed_dispatcher = off;

    -- Insert a null vector
    INSERT INTO t values (null);
    -- ERROR:  internal error: check condition "and_handle_null" assert failed.

En mode sans plan fixe, l'écriture d'une valeur de vecteur nul provoque un échec d'assertion lors de l'opération CHECK (array_ndims(vector).

Versions concernées :

V2.0.21 et antérieures

Versions corrigées :

V2.0.22 et ultérieures

Effectuez la mise à niveau vers la dernière version.

P1

Après avoir activé le chiffrement du stockage pour un projet MaxCompute, l'interrogation des données MaxCompute depuis une table étrangère Hologres échoue de manière intermittente avec l'une des erreurs suivantes : query next FROM foreign table executor failed, Channel is empty ou internal error: Connect timeout.

Dans Hologres V2.0.15, une correction apportée à un problème lié aux transferts de clés lors du déchiffrement des données MaxCompute a introduit un bogue de corruption de mémoire multithread. Lorsqu'une table étrangère MaxCompute subit une évolution de schéma, ce bogue peut provoquer un plantage (coredump) et un redémarrage du composant SQE, entraînant des erreurs intermittentes lorsque l'application accède à la table étrangère.

Versions concernées :

V2.0.15 à V2.0.20

V1.3.61 à V1.3.62

Versions corrigées :

V2.0.21 et ultérieures

Effectuez la mise à niveau vers la dernière version.

P2

L'utilisation de la fonction string_agg sur un champ avec une contrainte not null provoque une erreur : Column column0 should be non-nullable but the values contain 1 nulls. Voici un exemple de requête SQL :

create table test(id int not null, msg text not null);    insert into test values (1, 'b');SELECT count(distinct id), string_agg(distinct id::text) FROM test where msg = 'a';

La sortie de string_agg peut être null, mais l'optimiseur de requêtes (QO) déduit si le résultat est null en fonction des propriétés des champs qu'il traite. Lorsqu'un champ est not null, le QO déduit que le résultat de string_agg ne peut pas être nul, ce qui conduit à un résultat incorrect et génère un message d'erreur.

Versions concernées :

V2.0.20 et antérieures

Versions corrigées :

V2.0.21 et ultérieures

Effectuez la mise à niveau vers la dernière version.

P2

Pour les instances comportant un grand nombre de groupes de tables et un nombre élevé de shards (supérieur à 100), les shards peuvent devenir inégalement répartis après une défaillance d'un worker. La distribution reste inégale même après l'exécution de la commande rebalance.

Lorsqu'une instance possède de nombreux groupes de tables et un nombre élevé de shards (supérieur à 100), la commande de rééquilibrage redistribue les shards de manière imprécise, sans parvenir à corriger la distribution inégale.

Versions concernées :

V2.0.20 et antérieures

Versions corrigées :

V2.0.21 et ultérieures

Effectuez la mise à niveau vers la dernière version.

P2

L'utilisation de la fonction substring sur un champ de table contenant des données UTF-8 sur 4 octets produit un résultat incorrect. Toutefois, l'application de la fonction substring aux mêmes données UTF-8 sur 4 octets de manière indépendante fonctionne correctement. Voici un exemple de requête SQL :

-- Returns 3, which is correct.
    SELECT length(substring (E'\U0001F345' || '23456789', 1, 3));

    -- Using substring on table data returns an incorrect result.
    create table t (emoji text);
    insert into t values (E'\U0001F345' || '23456789');

    -- Returns 1, which is incorrect. The expected result is 3.
    SELECT length(substring(emoji, 1, 3)) FROM t;

L'implémentation actuelle de la fonction substring prend uniquement en charge les caractères UTF-8 d'une longueur maximale de 3 octets. Par conséquent, l'utilisation de substring sur des données de table contenant des caractères sur 4 octets renvoie un résultat incorrect.

Versions concernées :

V2.0.19 et antérieures

Versions corrigées :

V2.0.20 et ultérieures

Effectuez la mise à niveau vers la dernière version.

P2

La consommation CPU augmente considérablement après l'activation de la consommation Binlog.

Des paramètres système par défaut mal configurés provoquent une journalisation système à haute fréquence lors de la consommation Binlog, augmentant ainsi l'utilisation du processeur.

Versions concernées :

V2.0.17 à V2.0.19

Versions corrigées :

V2.0.20 et ultérieures

Effectuez la mise à niveau vers la dernière version.

P2

La fonction string_agg ou array_agg renvoie un résultat incorrect lorsqu'un filtre d'agrégation est utilisé. Voici un exemple de requête SQL :

  • DDL et importation des données :

    create table test(x text, y int);insert into test values(null, 1), (null, 2),(null, 1), (null, 2);
  • Requête 1 :

    SELECT array_agg(x) filter (where x is not null) FROM test group by y;
    -- Expected result: [null],[null]
    -- Actual (incorrect) result: {null},{null}
  • Requête 2 :

    SELECT array_agg(x) filter (where x is  null) FROM test group by y;
    -- Expected result: {null,null},{null,null}
    -- Actual (incorrect) result: {null,null},{null}

Lorsqu'un filtre d'agrégation était utilisé avec string_agg ou array_agg, le filtre n'était pas traité correctement, ce qui entraînait des résultats incorrects ou instables.

Versions concernées :

V2.0.18 et antérieures

Versions corrigées :

V2.0.19 et ultérieures

Effectuez la mise à niveau vers la dernière version.

P2

Lorsqu'une opération array_agg filter sur un champ avec la propriété not null produit un résultat contenant null, l'instance redémarre brièvement. Voici un exemple de requête SQL :

create table bbb(x int not null, y int);insert into bbb values (1, 1);SELECT array_agg(x) filter (where x > 1) FROM bbb group by y;

Lors de l'utilisation de array_agg filter sur un champ not null, l'optimiseur de requêtes (QO) a déduit à tort que le résultat devait également être not null. Si le résultat réel contenait une valeur null, ce conflit provoquait un plantage (coredump) de l'instance.

Versions concernées :

V2.0.18 et antérieures

Versions corrigées :

V2.0.19 et ultérieures

Effectuez la mise à niveau vers la dernière version.

P1

Lors de l'utilisation de Proxima, la définition du paramètre min_flush_proxima_row_count sur 0 provoque le redémarrage de l'instance.

Pour le moteur de stockage (SE) Hologres, la valeur du paramètre min_flush_proxima_row_count doit être supérieure à 0. Si vous définissez min_flush_proxima_row_count sur 0, la vérification SE échoue, ce qui entraîne le redémarrage de l'instance.

Versions concernées :

V2.0.18 et antérieures

Versions corrigées :

V2.0.19 et ultérieures

Effectuez la mise à niveau vers la dernière version.

P2

Après avoir activé la création automatique de partitions, si vous déplacez une table vers un autre schéma puis créez une nouvelle table portant le même nom dans le schéma d'origine, une erreur se produit : ERROR: auto_partitioning.time_unit could only be specified once. Voici un exemple de requête SQL :

-- Enable automatic partitioning
    begin;
    CREATE TABLE ads.test (
      olap_date integer NOT NULL default 0,
      pk text NOT NULL default ''::text,
      sid text  ,
    PRIMARY KEY (olap_date, pk))
      PARTITION BY LIST (olap_date);
    CALL set_table_property('ads.test', 'auto_partitioning.enable', 'true');
    CALL set_table_property('ads.test', 'auto_partitioning.time_unit', 'day');
    CALL set_table_property('ads.test', 'auto_partitioning.time_zone', 'PRC');
    CALL set_table_property('ads.test', 'auto_partitioning.num_precreate', '4');
    CALL set_table_property('ads.test', 'auto_partitioning.num_retention', '33');
    CALL set_table_property('ads.test', 'auto_partitioning.num_hot', '15');
    commit;

    -- Change the schema of the table
    alter table test set schema to public;

    -- Recreate the table with the same name
    begin;
    CREATE TABLE ads.test (
      olap_date integer NOT NULL default 0,
      pk text NOT NULL default ''::text,
      sid text  ,
    PRIMARY KEY (olap_date, pk))
      PARTITION BY LIST (olap_date);
    CALL set_table_property('ads.test', 'auto_partitioning.enable', 'true');
    CALL set_table_property('ads.test', 'auto_partitioning.time_unit', 'day');
    CALL set_table_property('ads.test', 'auto_partitioning.time_zone', 'PRC');
    CALL set_table_property('ads.test', 'auto_partitioning.num_precreate', '4');
    CALL set_table_property('ads.test', 'auto_partitioning.num_retention', '33');
    CALL set_table_property('ads.test', 'auto_partitioning.num_hot', '15');
    commit;

    ERROR: auto_partitioning.time_unit could only be specified once

Après avoir activé la création automatique de partitions, lorsque le schéma d'une table est modifié, sa configuration de partitionnement automatique ne suit pas le déplacement. Cela provoque un conflit de configuration et une erreur si une nouvelle table portant le même nom est créée dans le schéma d'origine.

Versions concernées :

V2.0.18 et antérieures

Versions corrigées :

V2.0.19 et ultérieures

Effectuez la mise à niveau vers la dernière version.

Août 2023

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P2

L'utilisation de la fonction Concat avec un argument de colonne unique provoque une erreur : Function concat node must have at least 2 arguments but it only has 1. Exemple :

create table aaa(x text);insert into aaa values ('11111111');SELECT concat(x) FROM aaa;HGERR_msge internal error: Function concat node must have at least 2 arguments but it only has 1

Les versions antérieures ne prennent pas en charge l'utilisation de la fonction Concat avec un argument de colonne unique.

Versions concernées :

V2.0.17 et antérieures.

Versions corrigées :

V2.0.18 et ultérieures.

Effectuez la mise à niveau vers la dernière version.

P1

Après l'activation du stockage froid pour une table partitionnée, l'exécution d'une opération alter schema, telle que add column, sur la table de partition parente peut entraîner un comportement inattendu lors de la conversion des tables de partition enfant vers le stockage froid. Les problèmes spécifiques peuvent inclure les éléments suivants :

  • Le statut du transfert de certaines tables de partition enfant vers le stockage froid reste transferring.

  • Les tables enfant censées être converties en stockage froid ne le sont pas. Par exemple, si vous définissez une politique pour convertir les tables enfant âgées de plus de 10 jours en stockage froid, certaines de ces tables peuvent rester en stockage chaud.

  • Les tables enfant déjà en stockage froid sont signalées à tort comme étant en stockage chaud.

Pour les tables partitionnées avec le stockage froid activé, si vous exécutez la commande alter schema sur la table parente, l'opération s'applique également aux tables enfant. Cela rend les propriétés de stockage des tables de partition enfant incohérentes entre le nœud FE et le gestionnaire de métadonnées (SM). Les tables enfant sont marquées pour le stockage froid dans le nœud FE, mais possèdent un mode de stockage différent dans le SM. Par conséquent, les actions de stockage froid pour les tables enfant ne fonctionnent pas comme prévu. Vous pouvez utiliser l'instruction SQL suivante pour récupérer les tables de stockage froid qui ne se comportent pas comme attendu :

SELECT db_name, schema_name, table_name FROM hologres.hg_table_info where collect_time::date = date '20230901' and table_meta::json#>>'{table_storage_mode}' = 'cold' and hot_storage_size > 0 order by table_name;

Versions concernées :

V2.0.17 et antérieures.

Versions corrigées :

V2.0.18 et ultérieures.

  • Modifiez la propriété de stockage des tables enfant concernées au sein d'une seule transaction. Par exemple :

    begin;call set_table_property('schema.<cold_child_table_name>', 'storage_mode', 'hot');call set_table_property('schema.<cold_child_table_name>', 'storage_mode', 'cold');commit;
  • Effectuez la mise à niveau vers la dernière version.

    Remarque

    Après la mise à niveau, vous devez corriger manuellement les propriétés de stockage des tables enfant affectées avant la mise à niveau.

P2

Une instance secondaire en lecture seule ne peut pas consommer le Binlog Hologres.

Une modification d'une propriété par défaut de l'instance secondaire en lecture seule est à l'origine de ce problème.

Versions concernées :

Premières versions de V1.3 et V2.0.

Versions corrigées :

V1.3.61 et ultérieures ; V2.0.17 et ultérieures.

Utilisez l'instance principale pour consommer le Binlog Hologres, ou effectuez la mise à niveau vers une version corrigée.

P2

Lorsqu'une colonne est comparée à des constantes de types différents à l'aide de or, par exemple col::type = const1::type1 or col::type = const2::type2, la requête peut renvoyer un ensemble de résultats vide ou des résultats inattendus. L'exemple SQL est le suivant :

create table t (a date, b timestamp, c text, d int);-- Column 'a' is a DATE type, but is implicitly cast to a TIMESTAMP type after the OR, leading to unexpected results.SELECT * FROM t where a in (timestamp '2023-06-12', timestamp '2023-06-13') or a = timestamp '2023-06-14';-- The data types on either side of the OR operator are inconsistent.SELECT * FROM t where a in (timestamp '2023-06-12', timestamp '2023-06-13') or a = '2023-06-14';

Si les types de données des champs connectés par or sont incohérents, l'optimiseur de requêtes (QO) n'aligne pas les types lors de la génération d'un plan d'exécution, ce qui fait que la sortie finale diffère du résultat attendu.

Versions concernées :

V1.3.59 et antérieures ;

V2.0.14 et antérieures.

Versions corrigées :

V1.3.60 et ultérieures ; V2.0.15 et ultérieures.

Effectuez la mise à niveau vers la dernière version.

P2

Dans une instance primaire-secondaire, l'exécution de HG_MOVE_TABLE_TO_TABLE_GROUP ou la définition d'une table en readonly peut rendre l'instance secondaire indisponible.

Étant donné que le mécanisme Lazy Open est activé sur l'instance secondaire, après avoir effectué un resharding sur l'instance principale ou défini manuellement readonly sur true puis écrit à nouveau des données, le statut des shards des instances primaire et secondaire devient incohérent, ce qui rend l'instance secondaire indisponible.

Versions concernées :

V1.3.42 à V2.0.16.

Versions corrigées :

V2.0.17 et ultérieures.

  • Pour effectuer une opération de resharding ou définir une table en lecture seule, désactivez d'abord le mécanisme Lazy Open sur l'instance secondaire en exécutant ces commandes :

    SELECT hg_admin_command('set_global_flag', 'enable_dynamic_close_tablet=false');    SELECT hg_admin_command('set_global_flag', 'enable_lazy_open_tablet=false');

    Après avoir appliqué ces paramètres, redémarrez l'instance. Cette nouvelle configuration peut légèrement augmenter l'utilisation de la mémoire.

Juillet 2023

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P1

Les requêtes utilisant le moteur PQE échouent avec l'erreur suivante :

ERROR: status { code: SERVER_INTERNAL_ERROR message: "query next FROM pg executor failed FROM xxx: ERPC_ERROR_CONNECTION_CLOSED, reason: Drain packet failed, peer address:xxx" }

Un bogue intermittent dans le processus PQE provoquait des fuites de processus lors du traitement des requêtes SQL. Lorsque le nombre de processus en fuite atteignait la limite de 512, l'instance ne pouvait plus traiter les nouvelles requêtes.

Versions concernées :

V2.0.1 à V2.0.11.

Versions corrigées :

V2.0.12 et ultérieures.

Mettez à niveau vers la dernière version.

P2

Un cluster partagé échoue à lire les données chiffrées depuis ODPS et signale l'erreur suivante :

error query next FROM foreign table executor failed, pangu://xxxx validate userinfo fail xxxx.

Les clusters partagés ne prennent pas en charge les données chiffrées.

Versions concernées :

V2.0.15 et antérieures.

Versions corrigées :

V2.0.16 et ultérieures.

Mettez à niveau vers la dernière version.

P2

Une opération de sauvegarde et de restauration échoue si l'instance source contient une table de stockage à froid faisant l'objet d'écritures fréquentes.

Les écritures fréquentes dans une table de stockage à froid déclenchent une compaction continue des données. Étant donné que la méthode de sauvegarde sans interruption nécessite un alignement des versions des shards, cette compaction continue empêche le processus de sauvegarde de capturer le dernier état des shards et provoque l'échec de la sauvegarde.

Versions concernées :

V2.0.15 et antérieures.

Versions corrigées :

V2.0.16 et ultérieures.

  • Convertissez la table de stockage à froid soumise à des écritures fréquentes en table de stockage à chaud avant la sauvegarde. Pour plus d'informations, consultez stockage hiérarchisé des données.

  • Mettez à niveau vers la dernière version.

P2

Une instance redémarre brièvement après l'annulation manuelle ou l'expiration du délai d'une requête SQL PQE.

Les requêtes SQL PQE sont gourmandes en ressources. Une requête annulée manuellement ou ayant expiré peut ne pas se terminer correctement, ce qui entraîne une erreur de pointeur nul et un vidage mémoire (coredump) de l'instance.

Versions concernées :

V2.0.12 à V2.0.14.

Versions corrigées :

V2.0.15 et ultérieures.

Mettez à niveau vers la dernière version.

P2

Une requête case when contenant un type array[] renvoie le message d'erreur suivant :

Filter has x rows but length of columns is y.

Lorsque l'instruction case when traite un champ de type array[], certaines données au sein du tableau array[] sont perdues, ce qui provoque une erreur de requête.

Versions concernées :

V2.0.10 et antérieures.

Versions corrigées :

V2.0.11 et ultérieures.

Mettez à niveau vers la dernière version.

P2

Après avoir exécuté une opération DROP sur une table avec la journalisation binaire activée et redémarré l'instance, le stockage de l'instance ne diminue pas et l'utilisation du stockage signalée par la surveillance est supérieure au résultat de la requête pg_database_size.

Après la suppression (DROP) d'une table avec binlog activé, le redémarrage de l'instance empêche la suppression correcte du répertoire du binlog de la table, ce qui empêche la diminution de l'utilisation du stockage.

Versions concernées :

V2.0.12 et antérieures.

Versions corrigées :

V2.0.13 et ultérieures.

Mettez à niveau vers la dernière version.

P2

La spécification d'un ordre asc ou desc pour une clé de distribution lors de la création d'une table provoque des erreurs de requête ou des redémarrages brefs de l'instance. Exemple :

BEGIN ;CREATE TABLE test(a int);CALL set_table_property('test', 'distribution_key', 'a:asc');COMMIT ;

La clé de distribution ne prend pas en charge la spécification d'un ordre asc ou desc. Cela a entraîné l'échec de la relecture de l'instruction DDL sur le FE, provoquant un vidage mémoire (coredump) ou des erreurs lors de l'interrogation ou de l'écriture dans la table.

Versions concernées :

V1.3.55 et antérieures.

Versions corrigées :

V1.3.56 et ultérieures.

  • Ne spécifiez pas d'ordre asc ou desc lors de la création d'une clé de distribution.

  • Mettez à niveau vers la dernière version pour résoudre le problème de vidage mémoire. Après la mise à niveau, une erreur invalid distribution column: xx:asc est signalée si vous spécifiez asc/desc pour la clé de distribution lors de la création d'une table.

Juin 2023

Niveau

Description

Cause

Versions concernées et corrigées

Solutions de contournement

P2

En mode SLPM, lorsque vous utilisez la fonction slpm_alter_view_owner pour créer deux vues portant le même nom dans des schémas différents, la fonction signale une erreur : ERROR: more than one row returned by a subquery used as an expression.

call slpm_enable();call slpm_enable_multi_schema_view();create schema test_schema;create table tb1(id int);create view public.v1 as SELECT * FROM public.tb1;create view test_schema.v1 as SELECT * FROM public.tb1;

En mode SLPM, la création d'une vue entre plusieurs schémas fait référence à la table système pg_class. Si des vues portant le même nom existent dans différents schémas, la colonne relname de pg_class contient des valeurs en double. Cela amène la sous-requête à renvoyer plusieurs lignes, ce qui déclenche une erreur.

Versions concernées :

V2.0.3 à V2.0.9.

Versions corrigées :

V2.0.10 et ultérieures.

Mettez à niveau vers la dernière version.

P2

Après l'activation du stockage à froid, une instance secondaire en lecture seule redémarre brièvement lorsqu'elle accède à une table de stockage à froid.

L'instance secondaire en lecture seule ne dispose pas des variables d'environnement requises pour le stockage à froid, ce qui provoque une erreur lors de la tentative d'accès à une table de stockage à froid.

Versions concernées :

V1.3.54 et antérieures.

Versions corrigées :

V1.3.55 et ultérieures.

  • Convertissez la table de stockage à froid en table de stockage standard.

  • Mettez à niveau vers la dernière version.

P2

Après la mise à niveau d'une instance Hologres vers la version V1.3, si vous créez une table étrangère Hologres dans MaxCompute et utilisez la double signature pour accéder aux instances Hologres dans les régions Chine (Shanghai) et États-Unis (Virginie), les requêtes échouent avec l'erreur suivante :

ERROR: pooler: xxxx: authentication failed.

Après la mise à niveau, une erreur de configuration de l'environnement dans les régions Chine (Shanghai) et États-Unis (Virginie) empêche MaxCompute de s'authentifier auprès de Hologres à l'aide de la double signature.

Versions concernées :

V1.3.54 et antérieures.

Versions corrigées :

V1.3.55 et ultérieures.

Mettez à niveau vers la dernière version.

P2

Après la mise à niveau d'une instance Hologres vers la version V1.3, l'exécution de la commande suivante dans les régions Chine (Shanghai) et États-Unis (Virginie) indique que le nombre maximal de connexions pour un seul nœud n'est pas de 128.

show max_connections;

Après la mise à niveau, une erreur de configuration de l'environnement dans les régions Chine (Shanghai) et États-Unis (Virginie) a entraîné une divergence du nombre maximal de connexions pour un seul nœud par rapport à la valeur par défaut de 128.

Versions concernées :

V1.3.54 et antérieures.

Versions corrigées :

V1.3.55 et ultérieures.

Mettez à niveau vers la dernière version.

P2

Après l'activation du masquage des données, une requête utilisant une expression de table commune (CTE) et UNION sur un champ masqué échoue avec l'erreur suivante :

ERROR: pooler: xxxx: remote server read/write error yy. Voici un exemple :

set hg_anon_enable = on;create table if not exists test_anon_cte(id text);security label for hg_anon on column test_anon_cte.id is 'hash';with tt2 as (SELECT * FROM test_anon_cte) SELECT count(1) FROM tt2 where id != 'a' group by id union all SELECT count(1) FROM tt2 where id != 'b' group by id;

Après l'activation du masquage des données, UNION ALL n'est pas pris en charge pour les champs masqués. Lors de l'utilisation d'une CTE et de UNION, la requête externe rencontre un pointeur nul. Cela provoque un vidage mémoire (coredump) de l'instance et l'échec de la requête.

Versions concernées :

V1.3.51 et antérieures.

Versions corrigées :

V1.3.52 et ultérieures.

Mettez à niveau vers la dernière version pour résoudre le vidage mémoire de l'instance. Toutefois, UNION reste non pris en charge pour les champs masqués et la requête échouera avec l'erreur UNION is not supported on security item.

P2

Après la mise à niveau de Hologres de la version V1.1 à la version V1.3, le résultat de cast array to text contient un caractère d'échappement (\), comme illustré dans l'exemple suivant :

create table arrary_to_text (  a text, b text, c text);insert into arrary_to_text values ('7416461', 'czzzzz', '2023-04-16 23:13:34');SELECT CAST(ARRAY_AGG(CONCAT('[','"', a,'"',',','"', b,'"',',','"', c,'"',']')) AS TEXT) AS list_vin FROM arrary_to_text limit 1;--Result in the latest V1.3 version"{"[\"7416461\",\"czzzzz\",\"2023-04-16 23:13:34\"]"}"--Result in V1.1"{"["7416461","czzzzz","2023-04-16 23:13:34"]"}"

Dans les versions de Hologres antérieures à la V1.3.51, la prise en charge de la conversion cast array to text était incomplète et n'ajoutait pas le caractère d'échappement (\). À partir de la version V1.3.51, Hologres a amélioré la prise en charge de cast array to text afin d'aligner son comportement sur le protocole PostgreSQL standard. Les résultats des requêtes contiennent désormais le caractère d'échappement (\), qui n'était pas présent dans les anciennes versions. Par conséquent, cette différence de résultats est attendue.

Versions concernées :

V1.3.50 et antérieures.

Versions corrigées :

V1.3.51 et ultérieures.

Il est normal que le résultat contienne un caractère d'échappement supplémentaire (\).

Mai 2023

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P2

L'exécution d'une instruction SQL contenant une jointure par boucle imbriquée (Nested Loop Join) renvoie une erreur : Schema has 1 fields but 2 are expected. Voici un exemple d'instruction SQL :

SELECT "_"."table_name"    FROM "public"."test" "_"    where "_"."table_name" = 'hello'     and (case when lower("_"."user_id") is not null        then lower("_"."user_id")        else ''        end) = 'ssss';

L'optimiseur de la version actuelle de Hologres supprime le projet supplémentaire, ce qui entraîne une inadéquation des colonnes dans la table et l'échec de la requête.

Versions concernées :

V1.3.45 et antérieures.

Versions corrigées :

V1.3.49 et ultérieures.

Mettez à niveau vers la dernière version.

P2

Lors de la conversion de données du type TEXT vers le type JSON, les données qui ne sont pas dans un format JSON valide sont également converties de manière incorrecte. Voici un exemple d'instruction SQL :

create table test1(data text);insert into test1 values('{"a","b"}');SELECT data::json FROM test1;--Incorrect result: {"a","b"}

Le résultat correct devrait être une erreur : invalid input syntax for type json" detail: "Expected \":\", but found \",\".".

Lors d'une conversion de type text::json, le système traite ::json comme un cast. Cela amène le moteur d'exécution (QE) à ignorer la validation du format des données JSON et à convertir incorrectement les données au type JSON.

Versions concernées :

V1.3.20 à V1.3.46.

Versions corrigées :

V1.3.47 et ultérieures.

Mettez à niveau vers la dernière version.

P2

Lorsque le résultat de la fonction to_number (qui renvoie un DECIMAL) est converti en STRING pour des calculs ultérieurs, le résultat final est incorrect. Voici un exemple d'instruction SQL :

create table test(x text);insert into test values ('0');SELECT (to_number(x, '9') || ' days')::interval FROM test;Result:-------0.E-10 days

Dans Hologres, la fonction to_number convertit 0.0000000000 en type TEXT, puis en notation scientifique, ce qui donne des résultats de requête incorrects car le moteur de calcul (QE) ne gère pas correctement la notation scientifique actuellement.

Versions concernées :

V1.3.44 et antérieures.

Versions corrigées :

V1.3.46 et ultérieures.

Mettez à niveau vers la dernière version.

P2

Les requêtes sur des types de tables spéciaux, tels que les tables MaxCompute Cluster et les tables Cfile, sont plus lentes que les requêtes sur les tables MaxCompute standard.

Dans la version actuelle, lors de la lecture des données depuis les tables MaxCompute Cluster ou Cfile, le moteur d'exécution de Hologres divise les petits fichiers de la table étrangère en fichiers encore plus petits. Cela augmente le nombre de fichiers traités dans une seule requête et ralentit les performances des requêtes.

Versions concernées :

V1.3.20 à V1.3.40.

Versions corrigées :

V1.3.45 et ultérieures.

Mettez à niveau vers la dernière version.

Avril 2023

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P0

Une instance redémarre lorsque vous modifiez les propriétés du schéma d'une table, telles que TTL, Bitmap ou Dictionary. L'exemple suivant modifie le TTL d'une table :

call set_table_property('tablename', 'time_to_live_in_seconds', '946080');

Si une instance est mise à niveau depuis une version antérieure, telle que la V1.1, les métadonnées historiques du schéma de certaines tables peuvent être manquantes. Le système peut tenter d'accéder à ces informations manquantes après une opération de vidage (flush) ou de compactage sur la table. La version actuelle ne gère pas correctement l'absence d'informations de schéma, ce qui déclenche un vidage mémoire (core dump).

Versions concernées :

V1.3.20 à V1.3.44

Versions corrigées :

V1.3.45 et versions ultérieures

Effectuez la mise à niveau vers la dernière version.

P2

La fonction to_char(to_timestamp(hour)) renvoie un résultat incorrect — une heure plus tôt que l'heure réelle — lorsqu'elle est utilisée avec des données timestamptz antérieures au 1er janvier 1970. Voici un exemple d'instruction SQL :

create table t (a int);insert into t values (2);SELECT to_char(to_timestamp(a || '', 'HH24'), 'HH24:00:00') FROM t;

Le résultat obtenu est 01:00:00, alors que le résultat attendu est 02:00:00.

Le moteur d'exécution convertit incorrectement la précision temporelle lors du traitement des horodatages.

Versions concernées :

V1.3.20 à V1.3.43

Versions corrigées :

V1.3.44 et versions ultérieures

Effectuez la mise à niveau vers la dernière version.

P2

La conversion d'un type JSONB en type NUMERIC sans spécifier de précision entraîne l'échec de la requête avec l'erreur suivante : HGERR_msge numeric field overflow HGERR_detl A field with precision 0, scale 0 must round to an absolute value less than 1. HGERR_ctxt func_name:jsonb_numeric HGERR_end. Voici un exemple d'instruction SQL :

create table t1(f1 jsonb);insert into t1 values('1,1');SELECT f1::numeric FROM t1;

Lors de la conversion d'un type JSONB en type NUMERIC sans précision spécifiée, le plan d'exécution généré par l'optimiseur ne fournit pas de précision par défaut. Lorsque le moteur d'exécution convertit NUMERIC en DECIMAL dans ce scénario, il attribue par défaut une précision de 0,0, ce qui provoque l'échec de la requête.

Versions concernées :

V1.3.20 à V1.3.41

Versions corrigées :

V1.3.42 et versions ultérieures

  • Spécifiez une précision lors de la conversion du type JSONB en type NUMERIC.

  • Effectuez la mise à niveau vers la dernière version.

P2

L'interrogation des données d'un lac de données OSS échoue avec l'erreur suivante : query next FROM foreign table executor failed, Failed to call iterateForeignScan: ArrayIndexOutOfBoundsException.

Une fuite de mémoire dans le moteur de requête du lac de données Hologres lors de la lecture des données depuis OSS provoque l'échec de la requête.

Versions concernées :

V1.3.20 à V1.3.41

Versions corrigées :

V1.3.42 et versions ultérieures

Effectuez la mise à niveau vers la dernière version.

Mars 2023

Niveau

Description

Cause

Versions concernées

Solution de contournement

P2

Lorsque vous utilisez union all sur deux champs décimaux dont la précision est incohérente, la requête échoue avec l'erreur : NUMERIC precision 65535 must be between 1 and 1000. Voici un exemple d'instruction SQL :

create table t1(a int ,b numeric(38,0), c bigint);create table t2(a int ,b numeric(38,0), c numeric(30,0));SELECT b / power(10, 18),c FROM t1UNION allSELECT a / power(10, a), c FROM t2

L'optimiseur de requêtes (QO) n'aligne pas la précision des champs décimaux dans une opération union all. Par conséquent, le moteur de requête (QE) détecte cette incohérence lors de l'exécution et renvoie une erreur.

Versions concernées :

V1.3.20 à V1.3.40.

Corrigé dans :

V1.3.41 et versions ultérieures.

Effectuez la mise à niveau vers la dernière version.

P2

L'exécution de la commande call set_table_property sur une table parent partitionnée existante au sein de la même transaction renvoie l'erreur : SET_TABLE_PROPERTY and CREATE TABLE statement are not in the same transaction for table . Voici un exemple d'instruction SQL :

--If the sample partitioned parent table exists, run the following SQL statement:
    BEGIN;
    CREATE TABLE IF NOT EXISTS "public".test ( "parent_node_id" text, "parent_node_name" text, "is_leaf" text, "node_flag" text, "ds" text) PARTITION BY LIST(ds);
    CALL SET_TABLE_PROPERTY('"public".test', 'orientation', 'row');
    COMMIT;

Dans les versions antérieures à Hologres V1.3.38, si une table parent partitionnée existe, l'utilisation de la commande set_table_property pour définir une propriété sur sa valeur existante amène le système à ignorer l'instruction SQL. Dans Hologres V1.3.38, la validation de set_table_property a été améliorée. En règle générale, vous ne pouvez pas modifier des propriétés telles que l'orientation, distribution_key et clustering_key pour les tables existantes. Toute tentative de modification de ces propriétés génère une erreur.

Versions concernées :

V1.3.38 à V1.3.40.

Corrigé dans :

V1.3.41 et versions ultérieures.

Effectuez la mise à niveau vers la dernière version.

Remarque

Après la mise à niveau, le comportement est cohérent avec celui des versions antérieures à la V1.3.38. Si la table existe et que vous définissez une propriété de table sur sa valeur existante, le système ignore l'instruction SQL.

P2

Les fonctions to_date, to_char et to_timestamp échouent lors du traitement de données comportant des espaces de tête, renvoyant l'erreur : HGERR_detl Field requires 4 characters, but only 0 could be parsed. Voici un exemple d'instruction SQL :

CREATE TABLE test2 (x text);
    INSERT INTO test2 VALUES (' 2022 03');
    SELECT to_date(x, 'YYYYMM')
    FROM test2;

Lorsque les données comportent des espaces de tête, les fonctions to_date, to_char et to_timestamp gèrent incorrectement ces espaces. Cela entraîne l'échec de la conversion des données et le renvoi d'une erreur par la requête.

Versions concernées :

V1.3.20 à V1.3.40.

Corrigé dans :

V1.3.42 et versions ultérieures.

  • Modifiez l'instruction SQL pour gérer les espaces de tête. Par exemple : to_char(year, 'FM9999') .

  • Effectuez la mise à niveau vers la dernière version.

Février 2023

Niveau

Description

Cause

Versions

Recommandation

P2

L'utilisation de la fonction rb_build avec un nom de table entraîne un échec et l'erreur suivante : Not support calling pg udf for type (23, LIST).

CREATE TABLE rb_build_test(a int[]);INSERT INTO rb_build_test VALUES ('{1,2,3}');SELECT rb_build(a) FROM rb_build_test;--Error: HGERR_code XX000 HGERR_msge internal error: Not support calling pg udf for type (23, LIST)

L'exécution directe de la fonction rb_build sans spécifier de nom de table aboutit à un résultat positif. Voici un exemple d'instruction SQL :

SELECT rb_build('{1,2,3}');--Result:rb_build\x3a300000010000000000020010000000010002000300                                

Lorsque la fonction rb_build est exécutée avec un nom de table, elle effectue d'abord les calculs, puis écrit les résultats dans la table. Cette fonction s'exécute dans HQE. L'échec survient car la version actuelle de HQE ne prend pas en charge la conversion bidirectionnelle entre les tableaux et les tableaux PQE.

Versions concernées :

V1.3.37 et versions antérieures.

Versions corrigées :

V1.3.38 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

Une requête SQL contenant une clause LIMIT x OFFSET y où y > x renvoie un nombre incorrect de lignes. Par exemple, la requête suivante devrait retourner deux lignes, mais elle n'en retourne aucune :

CREATE TABLE test (id int, msg text);INSERT INTO test VALUES (1, 'a'), (2, 'b'), (3, 'c'), (4, 'd');SELECT * FROM (SELECT * FROM test ORDER BY id LIMIT 2) x LIMIT 4 OFFSET 3;

Lors de la génération du plan d'exécution, si la valeur OFFSET dépasse la valeur LIMIT, le système propage la clause LIMIT vers l'opérateur, mais pas la clause OFFSET. Ce comportement entraîne un résultat de requête incorrect.

Versions concernées :

V1.3.20 à V1.3.36.

Versions corrigées :

V1.3.37 et versions ultérieures.

  • Modifiez l'instruction SQL pour garantir que la valeur OFFSET soit inférieure à la valeur LIMIT.

  • Effectuez une mise à niveau vers la dernière version.

P2

L'opération ANALYZE échoue avec l'erreur suivante : ERROR: store statistic results for table public.table_name failed: basic_string::_M_create.

L'opération ne parvient pas à analyser correctement les champs de la table.

Versions concernées :

V1.3.36.

Versions corrigées :

V1.3.37 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

La commande CREATE TABLE AS échoue avec l'erreur relation "xxx" does not exist lorsqu'elle est utilisée pour un schéma autre que public.

CREATE SCHEMA test_schema;SET search_path TO test_schema;CREATE TABLE test_src (a int);INSERT INTO test_src VALUES (1);CREATE TABLE AS test_src_1 SELECT * FROM test_src;--Error: relation "xxx" does not exist;

Après avoir utilisé la commande set search_path to pour spécifier un schéma, si le nom de la table dans la syntaxe create table as ne comporte pas de préfixe de schéma, le système recherche toujours la table source et insère les données dans le schéma public par défaut. Toutefois, un message d'erreur s'affiche car cette table n'existe pas dans le schéma public.

Versions concernées :

V1.3.20 à V1.3.36.

Versions corrigées :

V1.3.37 et versions ultérieures.

  • Dans l'instruction CREATE TABLE AS, faites précéder le nom de la table par le schéma. Exemple :

    CREATE TABLE AS test_schema.test_src_1 SELECT * FROM test_src;
  • Effectuez une mise à niveau vers la dernière version.

P2

Si vous définissez la valeur de départ d'un champ bigserial en dehors de la plage int4 (–2147483648 à 2147483647), les valeurs générées ultérieurement pour ce champ sont incorrectes.

CREATE TABLE IF NOT EXISTS test_tb(  id bigserial NOT NULL,  f1 text,  PRIMARY KEY (id,f1));--Insert data into the f1 field.INSERT INTO test_tb(f1) VALUES('1'),('2'),('3');-- Change the auto-increment starting value to 100 000 000 000.ALTER SEQUENCE public.test_tb_id_seq RESTART WITH 100000000000;-- Insert two more rows for testing.INSERT INTO test_tb(f1) VALUES('6'),('7');SELECT * FROM test_tb ORDER BY id ASC;--Result:id| f1------------+----1 | 12 | 23 | 31128270048 | 61128270049 | 7

La plage prise en charge pour la valeur de départ d'un type bigserial correspond à la plage int4 (–2147483648 à 2147483647). Si la valeur de départ spécifiée dépasse cette plage, un dépassement de précision se produit, ce qui entraîne des résultats incorrects.

Versions concernées :

V1.3.20 à V1.3.35.

Versions corrigées :

V1.3.36 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

Après la mise à niveau d'une instance Hologres de la version V1.1 vers la version V1.3, l'interrogation ou l'écriture de données Array dans une table partitionnée échoue avec l'erreur : internal error: Datasets has different schema Schema. Ce problème survient lorsqu'une requête accède à des partitions créées avant et après la mise à niveau.

Si un champ de type Array dans la table parente d'une table partitionnée ne possède pas l'attribut not null, la version actuelle gère incorrectement l'attribut nullable. Avant la mise à niveau, le champ est par défaut nullable, mais dans les nouvelles tables de partition enfant créées après la mise à niveau, il est par défaut not null. Lorsqu'une requête touche plusieurs partitions créées avant et après la mise à niveau, une erreur d'exécution se produit en raison de l'incohérence des métadonnées des tables de partition enfant.

Versions concernées :

V1.3.20 à V1.3.35.

Versions corrigées :

V1.3.36 et versions ultérieures.

  • Modifiez une propriété de la table partitionnée parente. Exemple :

    CALL set_table_property('table_name', 'time_to_live_in_seconds', 'xx');
  • Effectuez une mise à niveau vers la dernière version.

Janvier 2023

Niveau

Description

Cause

Versions concernées et corrigées

Solutions de contournement

P2

Lorsque le stockage en colonnes JSONB est activé pour une table partitionnée, les requêtes sur la table parente sont lentes, tandis que celles sur ses tables enfants sont rapides.

CREATE TABLE public.hologres_parent(a text, b jsonb) PARTITION BY LIST(a);CREATE TABLE public.hologres_child1 PARTITION OF public.hologres_parent FOR VALUES IN('v1');SELECT b->>'xxx' FROM hologres_parent;

Lorsque le stockage en colonnes JSONB est activé et qu'une table parente est interrogée, l'optimiseur ne parvient pas à propager la requête vers les tables enfants. Cela impose une analyse complète de la colonne JSONB, ce qui dégrade les performances.

Concernées :

Versions 1.3.20 à 1.3.34.

Corrigées :

Version 1.3.35 et versions ultérieures.

  • Interrogez directement les tables enfants.

  • Effectuez une mise à niveau vers la dernière version.

P2

Lors de l'utilisation du stockage en colonnes JSONB, une requête avec une clause LIMIT est lente car l'optimisation du stockage en colonnes n'est pas appliquée.

create table jsonb_test(inputvalues JSONB );SELECT inputvalues ->> 'price' pos_id FROM jsonb_test where inputvalues ->> 'price' = 'aaa' limit 100;

La présence d'une clause LIMIT empêche la propagation du stockage en colonnes dans le plan d'exécution. Cela impose une analyse complète de la colonne JSONB lors du calcul, ce qui dégrade les performances.

Concernées :

Versions 1.3.20 à 1.3.34.

Corrigées :

Version 1.3.35 et versions ultérieures.

  • Évitez d'utiliser une clause LIMIT lorsque le stockage en colonnes JSONB est activé.

  • Effectuez une mise à niveau vers la dernière version.

P0

Si une instance avec la lecture directe MC activée redémarre (par exemple, en raison d'un scale-out des nœuds de calcul ou d'une erreur OOM), elle ne parvient pas à démarrer.

Un bug a provoqué une incohérence entre les métadonnées et l'état des données lorsque la lecture directe MC était activée. Cela a empêché le moteur de stockage de charger correctement les données, entraînant l'échec du démarrage. Notez que la correction de ce problème peut entraîner la perte des statuts de suppression.

Concernées :

Versions 1.3.14 à 1.3.33.

Corrigées :

Version 1.3.34 et versions ultérieures.

  • N'activez pas la lecture directe MC dans les versions concernées.

  • Effectuez une mise à niveau vers la dernière version.

P2

Lors de l'interrogation du Binlog d'une table orientée colonne avec une clé de segment définie, une condition de filtre dans la clause WHERE qui utilise la clé de segment est ignorée.

BEGIN;CREATE TABLE test (  id int PRIMARY KEY,  title text NOT NULL,  c_time timestamptz);CALL set_table_property ('test', 'orientation', 'column');call set_table_property('test', 'event_time_column', 'c_time');call set_table_property('test', 'binlog.level', 'replica');call set_table_property('test', 'binlog.ttl', '86400');COMMIT;SELECT hg_binlog_lsn,hg_binlog_event_type,hg_binlog_timestamp_us,* FROM test where c_time = 1;

Dans cet exemple, la requête renvoie des lignes dont les valeurs c_time sont différentes de 1.

Pour une table orientée colonne configurée avec Binlog et une clé de segment, l'utilisation de la clé de segment dans une clause WHERE générait un plan d'exécution incorrect, rendant le filtre inefficace.

Concernées :

Version 1.3.33 et versions antérieures.

Corrigées :

Version 1.3.34 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

L'utilisation de l'opérateur #> pour analyser JSONB renvoie l'erreur suivante : Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. Exemple d'instruction SQL de création de table :

create table t1 (f1 json);insert into t1 values ('{"a":"Hello\u00F7"}');SELECT f1 #> ARRAY['a'] FROM t1;

L'opérateur #> est implémenté avec la fonction json_extract_path, qui utilise par défaut l'encodage ASCII PostgreSQL lors de l'analyse de JSONB. Ce comportement provoque l'erreur.

Concernées :

Version 1.3.33 et versions antérieures.

Corrigées :

Version 1.3.34 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

Historique des défauts 2022

Décembre 2022

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P2

Lorsque vous créez une nouvelle base de données avec le modèle d'autorisation SPM, la première consommation d'un Hologres Binlog via JDBC échoue avec l'erreur suivante : ERROR: internal error: create table hologres.hg_replication_progress failed.

Pour consommer un Hologres Binlog via JDBC, le système exécute la commande GRANT SELECT ON TABLE hologres.hg_replication_progress TO PUBLIC; afin d'accorder à tous les utilisateurs l'autorisation de consulter la table hg_replication_progress. Toutefois, le modèle d'autorisation SPM désactive la commande GRANT, ce qui empêche la création de la table et entraîne l'échec de la consommation du Binlog.

Versions concernées :

V1.3.20 à V1.3.32.

Versions corrigées :

V1.3.33 et versions ultérieures.

  • Basculez vers le modèle d'autorisation PostgreSQL standard pour accorder les autorisations, puis revenez au modèle d'autorisation SPM pour consommer le Binlog. Vous pouvez également consommer le Binlog directement en utilisant le modèle d'autorisation PostgreSQL standard.

  • Effectuez une mise à niveau vers une version corrigée.

P1

Après une mise à niveau vers Hologres V1.3.30, l'utilisation de la mémoire de l'instance augmente de manière inattendue, bien que le QPS et le volume de données restent inchangés.

Hologres dispose par défaut d'un cache de résultats. Si une opération d'insertion dans ce cache échoue, Hologres ne libère pas rapidement les ressources associées, ce qui entraîne une augmentation de l'utilisation de la mémoire.

Versions concernées :

V1.3.30 à V1.3.31.

Versions corrigées :

V1.3.32 et versions ultérieures.

Effectuez une mise à niveau vers une version corrigée.

P2

L'imbrication de la fonction jsonb_array_element au sein de la fonction jsonb_object_field provoque l'erreur suivante : internal error: Only jsonb_object_field and jsonb_object_field_text supported. L'instruction SQL suivante permet de reproduire l'erreur.

create table t1(f1 jsonb);insert into t1 values ('[{"a":1},{"b":2}]');SELECT  f1->0->'a' FROM t1;

Une erreur logique lors de l'imbrication des fonctions entraîne une incompatibilité des valeurs.

Versions concernées :

V1.3.20 à V1.3.29.

Versions corrigées :

V1.3.30 et versions ultérieures.

Effectuez une mise à niveau vers une version corrigée.

P2

Les requêtes exécutées sur une instance secondaire en lecture seule peuvent renvoyer des clés primaires en double, contrairement aux requêtes exécutées sur l'instance principale.

Si des données sont supprimées immédiatement après leur importation, un basculement ultérieur sur l'instance secondaire en lecture seule (déclenché par une mise à niveau ou une mise à l'échelle horizontale) peut empêcher le nettoyage des données comportant des clés primaires en double. Cela conduit les requêtes à renvoyer des clés dupliquées.

Versions concernées :

V1.3.27 à V1.3.28.

Versions corrigées :

V1.3.29 et versions ultérieures.

  • Exécutez les requêtes sur l'instance principale.

  • Effectuez une mise à niveau vers une version corrigée.

Novembre 2022

Niveau

Description

Cause

Versions concernées/corrigées

Solution de contournement

P2

Lorsque vous créez une table et définissez un champ nullable comme clé de clustering ou clé de segment, les résultats des requêtes sont parfois incohérents.

Pour les tables dotées d'une clé de clustering ou d'une clé de segment nullable, le cache de résultats stocke incorrectement les résultats des requêtes, ce qui entraîne des incohérences.

Versions concernées :

V1.1.30 à V1.3.27.

Versions corrigées :

V1.3.28 et versions ultérieures.

  • Recréez la table et assurez-vous que le champ défini comme clé de clustering ou clé de segment n'est pas nullable.

  • Effectuez une mise à niveau vers une version corrigée.

P2

L'utilisation de la fonction ST_Collect(col) provoque l'erreur ERPC_CONNECTION _CLOSED.

Cette erreur survient car Hologres vérifie incorrectement la valeur native PostgreSQL node tag, utilisée pour garantir la compatibilité avec PostGIS.

Versions concernées :

V1.3.27 et versions antérieures.

Versions corrigées :

V1.3.28 et versions ultérieures.

Effectuez une mise à niveau vers une version corrigée.

P2

L'appel de la fonction string_agg(text) provoque l'erreur An I/O error occurred while sending to the backend.

La fonction string_agg est traitée par PQE dans Hologres. Lorsque string_agg(text) est utilisée sans séparateur spécifié, PQE rencontre un pointeur nul, ce qui entraîne une erreur de requête.

Versions concernées :

V1.3.20 à V1.3.27.

Versions corrigées :

V1.3.28 et versions ultérieures.

  • Modifiez l'instruction SQL pour spécifier explicitement un séparateur, par exemple string_agg(text, ',').

  • Effectuez une mise à niveau vers une version corrigée.

P2

Lors de la lecture des données depuis une table externe MaxCompute, le résultat d'une requête contenant une instruction WITH est incohérent par rapport au résultat d'une requête sans instruction WITH.

Lors de la lecture d'une table étrangère MaxCompute dans un format tel que CFile ou RANGE TABLE, si la requête contient une clause WITH et que l'ordre des colonnes de la sortie de la clause WITH ne correspond pas à l'ordre des colonnes de la table, l'interface de table étrangère Hologres produit les résultats dans le mauvais ordre, ce qui entraîne des incohérences.

Versions concernées :

V1.3.24 à V1.3.26.

Versions corrigées :

V1.3.27 et versions ultérieures.

  • N'utilisez pas d'instruction WITH dans la requête.

  • Effectuez une mise à niveau vers une version corrigée.

P2

L'interrogation d'un champ de type ARRAY dans une table étrangère MaxCompute provoque l'erreur Array length did not match record batch length.

Lors de l'accès à une table MaxCompute au format ORC, l'interface de table étrangère Hologres gère de manière incohérente la longueur des champs de type ARRAY. Cela peut entraîner un dépassement de la limite de longueur des données, provoquant ainsi une erreur.

Versions concernées :

V1.3.20 à V1.3.26.

Versions corrigées :

V1.3.27 et versions ultérieures.

Effectuez une mise à niveau vers une version corrigée.

Octobre 2022

Niveau

Description

Cause

Versions concernées/corrigées

Solution de contournement

P2

Si vous définissez la clé de distribution sur une chaîne vide, l'exécution d'une requête échoue avec l'erreur suivante : Failed to get bh reader: internal error CONTEXT. Voici un exemple d'instruction DDL :

call set_table_property('<table_name>', 'distribution_key', ' ');

Lorsque la clé de distribution est une chaîne vide, les données ne peuvent pas être acheminées vers le shard approprié, ce qui provoque une erreur de requête.

Versions concernées :

V1.3.24 et versions antérieures.

Versions corrigées :

V1.3.26 et versions ultérieures.

  • Recréez la table et définissez une clé de distribution valide.

  • Mettez à jour vers la dernière version.

    Remarque

    Après la mise à jour, la définition d'une clé de distribution sur une chaîne vide n'est toujours pas prise en charge et déclenche une erreur lors de la création de la table.

P2

Lorsque vous interrogez une table externe MaxCompute, l'erreur suivante s'affiche : column with id 0 has type date64[ms] but ReadColumn returns array Array(type=timestamp[ms, tz=UTC].

Hologres convertit incorrectment le type DATETIME lors de la lecture d'une table externe MaxCompute, ce qui entraîne une erreur de requête.

Versions concernées :

De V1.3.20 à V1.3.24.

Versions corrigées :

V1.3.25 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

Après la mise à niveau d'une instance Hologres vers la version V1.3.20, une erreur se produit lors de l'interrogation d'une table externe MaxCompute contenant un champ de type tableau : internal error: IOError: Invalid flatbuffers message.

Une erreur de requête survient car le système utilise une interface de lecture obsolète qui ne reconnaît pas le type tableau.

Versions concernées :

De V1.3.20 à V1.3.24.

Versions corrigées :

V1.3.25 et versions ultérieures.

  • Évitez temporairement d'interroger les champs de type tableau.

  • Mettez à jour vers la dernière version.

P2

Lorsque vous importez des données depuis une table système PostgreSQL vers une table interne Hologres, les résultats dans la table Hologres sont instables et changent de manière aléatoire. Par exemple :

-- Query result is 22505
SELECTcount(1)FROMpg_class c inner join pg_attribute a on c.oid = a.attrelid
-- Create an internal table
CREATE TABLE public. tables11 (schemaname name NULL);
truncate public. tables11
-- Inserted data changes randomly
insert into public.tables11
SELECT'tmp'FROMpg_class c inner join pg_attribute a on c.oid = a.attrelid
SELECT count(1) FROM public.tables11

Les tables système PostgreSQL sont des objets natifs PostgreSQL. Hologres étant un système distribué, des opérations DDL continues peuvent entraîner des décalages de version entre les nœuds FE (Frontend). L'interrogation des tables système PostgreSQL peut récupérer des données provenant de différents nœuds FE, ce qui conduit à des résultats instables.

Versions concernées :

De V1.3.22 à V1.3.24.

Versions corrigées :

V1.3.25 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

Après la mise à niveau d'une instance Hologres vers la version V1.3.20 ou ultérieure, les requêtes contenant des champs DECIMAL dans une instruction case when peuvent échouer avec l'erreur suivante : internal error: column with id 0 has type decimal(38, 3) but ReadColumn returns array Array(type=decimal(38, 10) length=3 null_count=0.

Dans une instruction case when, la précision du type DECIMAL n'est pas explicitement convertie. L'optimiseur déduit incorrectement la précision lors de la génération du plan d'exécution, ce qui entraîne l'échec de la requête.

Versions concernées :

De V1.3.20 à V1.3.24.

Versions corrigées :

V1.3.24 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

Lorsque vous importez des données depuis une vue système PostgreSQL vers une table Hologres créée par l'utilisateur, aucune donnée n'est insérée. Exemple SQL :

CREATE table holo_pg_tables (schemaname text,tablename text,tableowner text,tablespace text,hasindexes text,hasrules text,hastriggers text,rowsecurity text);
insert into holo_pg_tables SELECT * FROM pg_catalog.pg_tables;

La vue système PostgreSQL pg_catalog.pg_tables inclut la condition de filtre c.relkind = ANY (ARRAY['r'::"char", 'p'::"char"]). Lors de la génération du plan d'exécution, ce type est incorrectement converti en une valeur sans signification, de sorte qu'aucune ligne ne correspond au filtre.

Versions concernées :

De V1.3.22 à V1.3.24.

Versions corrigées :

V1.3.25 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

La configuration de deux index vectoriels Proxima sur une table peut dégrader les performances des requêtes vectorielles Proxima par rapport à la configuration d'un seul index. Exemple DDL :

call set_table_property('t1', 'proxima_vectors', '{"f2":{"algorithm":"Graph","distance_method":"InnerProduct"}},{"f3":{"algorithm":"Graph","distance_method":"InnerProduct"}}');

Lorsque vous définissez deux index, la syntaxe du bloc {} dans l'instruction DDL est incorrecte. Chaque index doit posséder son propre bloc {}. Le nœud FE n'a pas rejeté l'instruction DDL avec ce format. Par conséquent, le premier index a été créé avec succès, mais le second a été ignoré, ce qui a entraîné une baisse des performances des requêtes. Le format correct est le suivant :

call set_table_property('t1', 'proxima_vectors', '{"f2":{"algorithm":"Graph","distance_method":"InnerProduct"},"f3":{"algorithm":"Graph","distance_method":"InnerProduct"}}');

Versions concernées :

V1.3.24 et versions antérieures.

Versions corrigées :

V1.3.25 et versions ultérieures.

  • Recréez la table et utilisez la syntaxe DDL correcte pour définir les index.

  • Mettez à jour vers la dernière version.

    Remarque

    Après la mise à jour, cette syntaxe incorrecte n'est toujours pas prise en charge, mais elle déclenchera une erreur lors de la création de la table.

P2

Lorsqu'un utilisateur non superutilisateur exécute la commande SELECT hg_dump_script('xxxx'), l'erreur suivante s'affiche : ERROR: permission denied for table pg_subscription.

La fonction hg_dump_script appelle indirectement pg_subscription pour la réplication logique. L'erreur survient car la vérification des autorisations pour pg_subscription échoue.

Versions concernées :

De V1.3.20 à V1.3.24.

Versions corrigées :

V1.3.25 et versions ultérieures.

  • Utilisez un compte superutilisateur pour accorder les autorisations. Exemple de commande :

    GRANT SELECT ON pg_subscription TO "xx";
  • Mettez à jour vers la dernière version.

P2

Un utilisateur RAM reçoit l'erreur NoSuchProject lorsqu'il utilise Flink pour consommer un journal binlog Hologres ou DataHub pour écrire des données dans Hologres.

L'erreur survient car le frontend analyse incorrectement l'utilisateur RAM.

Versions concernées :

V1.3.23 et versions antérieures.

Versions corrigées :

V1.3.24 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

Après la mise à niveau d'une instance Hologres de la version V1.1 vers la version V1.3, les requêtes adressées aux tables externes MaxCompute peuvent prendre plus de temps. Lorsque vous consultez le plan d'exécution en exécutant EXPLAIN, le champ row_count dans les statistiques de la table affiche 1000. Cela indique que les statistiques de la table ne sont pas automatiquement mises à jour.

Après la mise à niveau d'une instance Hologres vers la version V1.3, Auto Analyze ne détecte pas le schéma de la table externe. Par conséquent, les statistiques de la table externe ne sont pas collectées rapidement.

Versions concernées :

De V1.3.14 à V1.3.23.

Versions corrigées :

V1.3.24 et versions ultérieures.

  • Exécutez manuellement la commande ANALYZE <tablename>.

  • Mettez à jour vers la dernière version.

P2

Les requêtes utilisant UNION ALL avec des champs DECIMAL peuvent échouer avec l'erreur suivante : Schema fields[4] has type decimal(14, 4) but decimal(11, 2) is expected.

Exemple :

CREATE TABLE t1(n decimal(6,4));
CREATE TABLE t2(n decimal(5,3));
SELECT * FROM (SELECT 1 as type, n FROM t1 UNION ALL SELECT 2 as type, n FROM t2)t where t.type=2;

Lors de la génération du plan d'exécution pour une opération UNION ALL, la précision du type DECIMAL est incorrectement tronquée, ce qui entraîne une incompatibilité de précision.

Versions concernées :

De V1.3.20 à V1.3.23.

Versions corrigées :

V1.3.24 et versions ultérieures.

Mettez à jour vers la dernière version.

Septembre 2022

Niveau

Description

Cause

Versions concernées/corrigées

Solutions de contournement

P2

Le schéma spécifié dans une chaîne de connexion JDBC n'est pas appliqué et la valeur par défaut est le schéma public. Voici un exemple de chaîne de connexion :

String jdbcUrl = "jdbc:postgresql://hostname: port /dbname?currentSchema=demo;

Le nœud FE ignore la chaîne située après le point d'interrogation (?) dans la chaîne de connexion, ce qui entraîne l'ignorance du paramètre currentSchema.

Versions concernées :

V1.3.14 à V1.3.22.

Versions corrigées :

V1.3.23 et versions ultérieures.

Effectuez une mise à niveau vers une version corrigée.

P1

Une instance redémarre brièvement lorsqu'une requête SQL est automatiquement réécrite pour utiliser une vue matérialisée.

Lors de la génération d'un plan d'exécution pour une requête réécrite afin d'utiliser une vue matérialisée, l'optimiseur ne parvient pas à récupérer les métadonnées de la table, ce qui provoque une défaillance de l'instance.

Versions concernées :

V1.3.14 à V1.3.22.

Versions corrigées :

V1.3.23 et versions ultérieures.

Effectuez une mise à niveau vers une version corrigée.

P2

Si vous configurez des politiques de liste d'autorisation IP différentes pour différents utilisateurs au sein d'une instance, les utilisateurs ne peuvent pas accéder à l'instance Hologres, même depuis des adresses IP figurant dans la liste d'autorisation. L'erreur reject ip xxx est alors renvoyée.

La passerelle bloque incorrectement l'utilisateur après la configuration d'une liste d'autorisation IP. Cela empêche l'utilisateur d'accéder à l'instance, bien qu'il figure sur la liste d'autorisation.

Versions concernées :

V1.3.21 et versions antérieures.

Versions corrigées :

V1.3.22 et versions ultérieures.

  • Ne configurez pas de liste d'autorisation IP ou modifiez la politique utilisateur pour la liste d'autorisation en définissant le paramètre Accessible Databases sur ALL.

  • Effectuez une mise à niveau vers une version corrigée.

P2

Dans un scénario de requête ponctuelle utilisant un Fixed Plan, l'interrogation de données Decimal renvoie le message d'erreur suivant : get result failed:scale should between xxxx. Voici un exemple :

begin;create table t (k1 int, k2 decimal(18, 2), primary key(k1, k2));call set_table_property ('t', 'distribution_key', 'k1');end;insert into t (1, 12,11);set hg_experimental_enable_fixed_dispatcher_for_scan = on;SELECT * FROM t where k1=1 and k2>10,1 and k2 < 12,3;

Dans un scénario Fixed Plan, l'optimiseur déduit incorrectement la précision du type Decimal, ce qui provoque l'erreur.

Versions concernées :

V1.3.20 et versions antérieures.

Versions corrigées :

V1.3.21 et versions ultérieures.

Effectuez une mise à niveau vers une version corrigée.

P2

Après l'activation d'une liste d'autorisation IP, un job Flink consommant le Binlog Hologres échoue avec l'erreur suivante : reject ip 1.xxx.

Flink consomme le Binlog Hologres via l'interface d'importation de données en temps réel Hologres (mode non JDBC), qui ne prend pas en charge la fonctionnalité de liste d'autorisation IP.

Versions concernées :

V1.3.20 et versions antérieures.

Versions corrigées :

V1.3.21 et versions ultérieures.

  • Ne configurez pas de liste d'autorisation IP.

  • Effectuez une mise à niveau vers une version corrigée.

P2

Lorsque vous convertissez explicitement un type tableau en type chaîne, l'erreur suivante se produit : ERROR: Cast FROM LIST to STRING is not supported.. Par exemple :

create table aaa1(a text[],b int[]);insert into aaa1 values (ARRAY['1','aaa'], ARRAY[1,2,3]);d=# SELECT a::text, b::text FROM aaa1;

Hologres ne prend pas en charge la conversion explicite d'un type tableau en type chaîne.

Versions concernées :

V1.3.20 et versions antérieures.

Versions corrigées :

V1.3.21 et versions ultérieures.

Effectuez une mise à niveau vers une version corrigée.

P1

Lorsque vous interrogez une table externe MaxCompute, la requête se bloque. Le redémarrage de l'instance résout le problème.

Lors de la lecture des métadonnées pendant un basculement primaire/secondaire dans le service de métadonnées MaxCompute, Hologres ne parvient pas à gérer l'exception. Cela entraîne l'échec des tentatives et le blocage de la requête.

Versions concernées :

V1.3.20 et versions antérieures.

Versions corrigées :

V1.3.21 et versions ultérieures.

Effectuez une mise à niveau vers une version corrigée.

Août 2022

Niveau

Description

Cause

Versions

Solutions de contournement

P2

L'exécution d'une requête SQL en mode JDBC Prepare Statement échoue avec l'erreur suivante : cannot push query id when transaction is not start.

En mode JDBC Prepare Statement, aucune transaction n'est démarrée lors de l'exécution SQL. Cela empêche la génération de l'ID de requête et déclenche l'erreur.

Concernées :

V1.1.80 à V1.1.86.

Corrigées :

V1.3.20 et versions ultérieures.

  • Modifiez la chaîne de connexion JDBC pour utiliser le mode Simple : jdbc:postgresql://<host>:<port>/<dbname>?preferQueryMode=simple.

  • Effectuez une mise à niveau vers la dernière version.

P2

La définition d'une valeur TTL contenant une virgule, par exemple CALL set_table_property('wdt_qyb.wdt_qyb_trade', 'time_to_live_in_seconds', '315 360 000');, entraîne une suppression prématurée des données.

Une valeur TTL contenant une virgule, telle que 315,360,000, est analysée incorrectement. L'analyseur SQL ignore la valeur après la virgule, définit le TTL sur 315 s et provoque une expiration prématurée des données.

Concernées :

V1.1.85 et versions antérieures.

Corrigées :

V1.3.20 et versions ultérieures.

  • Lors de la définition du TTL, utilisez une valeur entière sans virgules.

  • Effectuez une mise à niveau vers la dernière version.

    Remarque

    Après la mise à niveau, la définition d'une valeur TTL non valide contenant une virgule déclenche une erreur lors de la création de la table ou de la modification du TTL.

P2

Si la clé de clustering et la clé primaire (PK) d'une table orientée ligne sont incohérentes, les requêtes échouent avec l'erreur : internal error: Cannot build column col1.

Par exemple :

CREATE TABLE test(col1 text,col2 text,col3 text,PRIMARY KEY (col1, col2)); CALL set_table_property('public.test', 'distribution_key', 'col1'); CALL set_table_property('public.test', 'clustering_key', 'col1:asc');SELECT * FROM public.test;

Si la clé de clustering et la PK d'une table orientée ligne sont incohérentes, le moteur de stockage génère incorrectement des enregistrements identiques, ce qui entraîne une erreur de requête.

Concernées :

V1.1.84 et versions antérieures.

Corrigées :

V1.3.20 et versions ultérieures.

  • Définissez la clé de clustering et la PK de manière identique pour la table orientée ligne.

  • Effectuez une mise à niveau vers la dernière version.

P2

Lorsqu'un compte non superutilisateur consomme le Binlog Hologres via JDBC, l'exécution de la commande call hg_create_logical_replication_slot('hg_replication_slot_1', 'hgoutput', 'hg_publication_test_1'); échoue avec l'erreur suivante : permission denied for table hg_replication_slot_properties.

La consommation des données Binlog Hologres via JDBC nécessite un compte superutilisateur, car les comptes non superutilisateurs ne disposent pas des autorisations nécessaires.

Concernées :

V1.1.83 et versions antérieures.

Corrigées :

V1.3.20 et versions ultérieures.

  • Utilisez un compte superutilisateur.

  • Effectuez une mise à niveau vers la dernière version et accordez les autorisations requises au compte non superutilisateur. Pour plus d'informations, consultez Consommer le Binlog Hologres via JDBC.

P2

Certaines entrées sont manquantes dans le journal des requêtes lentes, mais la surveillance affiche toujours la latence et les QPS.

Différentes requêtes au sein de la même transaction partagent le même ID de requête. L'entrepôt de métadonnées déduplique ces requêtes et ne conserve qu'une seule entrée, en supprimant les autres requêtes.

Concernées :

V1.1.80 et versions antérieures.

Corrigées :

V1.3.20 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

P2

Lors de la consommation du Binlog Hologres, vous recevez l'erreur suivante : com.alibaba.hologres.org.postgresql.util.PSQLException: ERROR: relation "hologres.hg_replication_slot_properties" does not exist.

Un nœud FE de l'instance a été redémarré. Après la récupération, le nœud n'a pas pu restaurer l'extension Binlog Hologres, ce qui a entraîné l'échec de la consommation.

Concernées :

Versions antérieures à V1.3.

Corrigées :

V1.3.20 et versions ultérieures.

Effectuez une mise à niveau vers la dernière version.

Juillet 2022

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P2

Après une mise à niveau à chaud, l'interrogation d'une table échoue avec l'erreur suivante : File(fn: xxx) real size != size in meta: 0 != yyyy.

Une écriture BulkLoad hors ligne dans une table lors d'une mise à niveau à chaud a déclenché une opération de compactage, créant un problème de compatibilité des métadonnées à l'origine de l'erreur.

Versions concernées :

V1.1.80 et versions antérieures.

Versions corrigées :

V1.1.81 et versions ultérieures.

  • Suspendez les écritures hors ligne vers la table lors d'une mise à niveau à chaud ou effectuez plutôt une mise à niveau à froid.

  • Effectuez une mise à niveau vers une version corrigée.

P2

L'écriture simultanée dans différentes partitions d'une même table MaxCompute échoue avec l'erreur suivante : ERROR:commit uploder failedErrorMessage=Operation failed due to concurrent upload/insert operationson the same table.

Bien que les écritures simultanées ciblent différentes partitions, elles appartiennent toutes à la même table MaxCompute. L'interface d'écriture acquiert un verrou de table unique pour toutes les partitions lors d'une commit upload session, ce qui provoque un conflit de verrouillage.

Versions concernées :

V1.1.78 et versions antérieures.

Versions corrigées :

V1.1.79 et versions ultérieures.

Effectuez une mise à niveau vers une version corrigée.

Juin 2022

Gravité

Description

Cause

Versions concernées/corrigées

Solution de contournement

P2

Une erreur OOM (Out Of Memory) se produit lors de l'analyse d'une table externe OSS.

Lorsque vous exécutez ANALYZE sur une table externe OSS, le processus de récupération du nombre de lignes échantillonne par défaut un grand nombre de lignes (plus de 30 000), ce qui provoque une erreur OOM.

Versions concernées :

V1.1.76 et antérieures

Versions corrigées :

V1.1.77 et ultérieures

Effectuez une mise à niveau vers une version plus récente.

P2

Une requête SQL contenant une clause in échoue si le type de constante dans la clause in ne correspond pas au type de colonne, renvoyant l'erreur suivante : internal error: Invalid filter value type int32 for column type int16.

Voici un exemple d'instruction SQL :

create table test(pid smallint);insert into test values (1);SELECT pid FROM test where pid not in (4, 5);

Lorsque le type de constante dans la clause in diffère du type de colonne, l'optimiseur ne parvient pas à cast la constante vers le type correct. Cela entraîne une erreur dans le moteur d'exécution.

Versions concernées :

V1.1.73 et antérieures

Versions corrigées :

V1.1.74 et ultérieures

  • Assurez-vous que le type de constante dans la clause in correspond au type de colonne.

  • Effectuez une mise à niveau vers une version plus récente.

P2

La création d'une table externe OSS avec un sous-ensemble des colonnes source échoue avec l'erreur suivante : Open ORC file failed for schema mismatch.

Lorsque vous créez une table externe en sélectionnant uniquement un sous-ensemble des colonnes OSS, le moteur ne prend pas entièrement en charge cette opération et exige que toutes les colonnes source soient incluses.

Versions concernées :

V1.1.73 et antérieures

Versions corrigées :

V1.1.74 et ultérieures

  • Sélectionnez toutes les colonnes lors de la création de la table externe.

  • Effectuez une mise à niveau vers une version plus récente.

P2

Les performances d'écriture des opérations insert ralentissent si des données ont été récemment supprimées d'une plage (par exemple, une partition) dans la même table.

Après la suppression d'une plage ou d'une séquence de valeurs consécutives, si la compaction n'est pas encore terminée, une commande insert interroge d'abord les enregistrements en double dans cette plage jusqu'à trouver le premier enregistrement non supprimé. Si un grand nombre d'enregistrements supprimés consécutivement existent près de la clé interrogée, le parcours de ces enregistrements consomme beaucoup de temps et ralentit la vitesse d'écriture de la commande insert.

Versions concernées :

V1.1.70 et antérieures

Versions corrigées :

V1.1.71 et ultérieures

Effectuez une mise à niveau vers une version plus récente.

Mai 2022

Niveau

Description

Cause

Versions

Solution de contournement

P2

Lorsque vous interrogez une table MaxCompute, l'erreur suivante est signalée : Timestamp overflow detected while converting timestampFROM orc VectorBatch to arrow.

Cette erreur se produit car Hologres ne prend pas en charge la précision à la nanoseconde que Tunnel applique aux données TIMESTAMP.

Versions concernées :

V1.1.69 et antérieures

Versions corrigées :

V1.1.70 et ultérieures

  • Modifiez le type de données TIMESTAMP de la table MaxCompute en DATETIME.

  • Effectuez une mise à niveau vers la dernière version.

P2

Lors de l'interrogation des données Parquet OSS, les instructions count renvoient des résultats incohérents, bien que les données OSS n'aient pas changé.

Hologres utilise une interface obsolète pour lire les fichiers Parquet OSS. Cela l'amène à interpréter aléatoirement les données non nulles comme des valeurs nulles, ce qui entraîne des résultats de requête incorrects.

Versions concernées :

V1.1.67 et antérieures

Versions corrigées :

V1.1.68 et ultérieures

Effectuez une mise à niveau vers la dernière version.

P2

L'erreur suivante peut se produire lorsque vous écrivez des données depuis Hologres vers MaxCompute à l'aide de SQL : Blocks not match, server:xx client yy.

L'erreur peut se produire si l'opération d'écriture vers MaxCompute expire, générant ainsi un bloc vide. Le délai d'expiration par défaut est de 300 secondes.

Versions concernées :

V1.1.64 et antérieures

Versions corrigées :

V1.1.65 et ultérieures

  • Utilisez la commande suivante pour modifier le délai d'expiration :

    alter server odps_server options (add socket_timeout '600');

    L'augmentation du délai d'expiration à 600s réduit la probabilité de générer un bloc vide.

  • Effectuez une mise à niveau vers la dernière version.

P2

Dans Hologres V1.1, lorsque vous ajoutez plusieurs colonnes à une table externe MaxCompute en une seule instruction, l'erreur suivante est signalée : not support alter table with multi commands. Exemple SQL :

ALTER FOREIGN TABLE bank ADD COLUMN cons_conf_idx float8, ADD COLUMN euribor3m float8;

Hologres V1.1 ajoute une vérification d'état pour l'opération add column sur les tables externes. Cette vérification est défectueuse lorsque vous ajoutez plusieurs colonnes à la fois, ce qui entraîne l'échec de l'opération.

Versions concernées :

V1.1.1 à V1.1.58

Versions corrigées :

V1.1.59 et ultérieures

  • Ajoutez une colonne à la fois, ou utilisez la syntaxe IMPORT FOREIGN SCHEMA pour actualiser la table externe.

  • Effectuez une mise à niveau vers la dernière version.

P1

Lorsque vous utilisez la fonction to_date avec une clause WHERE, l'erreur suivante est signalée : invalid value \"\" for \"YYYY\" HGERR_detl Field requires 4 characters, but only 0 could be parsed. Exemple de requête :

SELECT *  FROM public.test where to_date(content, 'YYYYMMDD' ) BETWEEN  '2021-10-22' AND '2021-10-23' limit 10;

L'optimiseur de requête applique incorrectement la fonction to_date aux lignes avant qu'elles ne soient filtrées par la clause WHERE. Par conséquent, la fonction traite des données invalides, ce qui provoque une erreur de conversion.

Versions concernées :

V1.1.58 et antérieures

Versions corrigées :

V1.1.59 et ultérieures

Effectuez une mise à niveau vers la dernière version.

P2

Lors d'une lecture simultanée d'une table MaxCompute chiffrée, l'erreur suivante est signalée : failed to load row group data FROM file pangu.

Une erreur de déchiffrement peut se produire lorsque plusieurs lecteurs tentent d'analyser en parallèle une table MaxCompute chiffrée.

Versions concernées :

V1.1.57 et antérieures

Versions corrigées :

V1.1.58 et ultérieures

Effectuez une mise à niveau vers la dernière version.

P2

Lorsque HQE traite un calcul modulo (%) sur un champ NUMERIC ou DECIMAL, il renvoie un résultat incorrect.

HQE ne prend pas en charge les calculs modulo pour les types NUMERIC et DECIMAL, mais ne valide pas le type de données, ce qui conduit à un résultat incorrect.

Versions concernées :

V1.1.55 et antérieures

Versions corrigées :

V1.1.56 et ultérieures

  • N'effectuez pas de calculs modulo sur les champs NUMERIC et DECIMAL.

  • Effectuez une mise à niveau vers la dernière version.

    Remarque

    Après la mise à niveau, l'exécution d'un calcul modulo sur un champ NUMERIC ou DECIMAL renvoie correctement une erreur, car l'opération reste non prise en charge.

Avril 2022

Niveau

Description

Cause

Versions concernées/corrigées

Recommandations

P2

Lorsque vous vous abonnez au binlog Hologres via JDBC, l'instance redémarre brièvement si vous démarrez un travail JDBC pour consommer le binlog en utilisant pgreplicationstream.start() et exécutez simultanément drop table xx; pour supprimer la table correspondante côté base de données.

La suppression d'une table pendant l'abonnement au binlog provoque une exception de pointeur null. Cela se produit car le processus d'abonnement tente de récupérer les table_properties de la table supprimée, ce qui entraîne le redémarrage de l'instance.

Versions concernées :

V1.1.54 et antérieures.

Versions corrigées :

V1.1.55 et ultérieures.

  • Ne supprimez pas une table pendant son abonnement au binlog.

  • Effectuez une mise à niveau vers une version corrigée.

    Remarque

    Après la mise à niveau, la suppression d'une table pendant l'abonnement au binlog signale correctement une erreur indiquant que la table n'existe pas.

P2

Après qu'une table enfant partitionnée a été detached d'une table parente, vous ne pouvez pas l'attach à nouveau à la même table parente car l'opération attach n'est pas autorisée.

Une table enfant partitionnée créée à l'aide de la commande CREATE TABLE <table_name> PARTITION OF <parent_table> n'hérite pas de la propriété Table Group de la table parente. Lorsque vous detach puis attach la table enfant partitionnée, l'opération attach échoue car une vérification détecte que les propriétés Table Group de la table enfant et de la table parente ne correspondent pas.

Versions concernées :

V1.1.52 et antérieures.

Versions corrigées :

V1.1.53 et ultérieures.

Effectuez une mise à niveau vers une version corrigée.

P2

Une requête utilisant grouping sets avec plusieurs agrégations count distinct sur une table partitionnée renvoie des résultats incorrects.

Lorsqu'une requête sur une table partitionnée utilise grouping sets avec plusieurs agrégations count distinct, l'optimiseur ne parvient pas à appliquer l'élagage des partitions. Par conséquent, l'optimiseur ignore les conditions de filtre de partition et renvoie des résultats incorrects.

Versions concernées :

V1.1.52 et antérieures.

Versions corrigées :

V1.1.53 et ultérieures.

Effectuez une mise à niveau vers une version corrigée.

Mars 2022

Niveau

Description

Cause

Versions concernées/corrigées

Solution de contournement

P2

Lorsqu'un mappage d'utilisateur (user-mapping) n'est pas configuré, l'interrogation d'une table externe OSS via Data Lake Formation (DLF) échoue avec l'erreur failed to import foreign schema.

En l'absence de configuration d'un mappage d'utilisateur (user-mapping), l'interface d'autorisation transmet des permissions incorrectes, ce qui provoque l'échec de la requête.

Versions concernées :

V1.1.50 et versions antérieures.

Versions corrigées :

V1.1.51 et versions ultérieures.

  • Configurez explicitement un mappage d'utilisateur (user-mapping). Pour plus d'informations, consultez la rubrique Accélérez l'accès aux lacs de données OSS avec DLF.

  • Effectuez une mise à niveau vers une version ultérieure.

    Remarque

    Après la mise à niveau, vous pouvez accéder aux données sans créer explicitement de mappage d'utilisateur (user-mapping).

P2

En mode PrepareStatement, une requête SQL peut échouer avec l'erreur unrecognized node type: 0, ou l'instance Hologres peut redémarrer brièvement.

Le mode PrepareStatement génère un cache de plan pour les instructions SQL fréquemment exécutées afin de réduire la charge côté client. Dans les versions concernées, le cache de plan des instructions SQL n'est pas récupéré rapidement, ce qui entraîne l'échec des requêtes.

Versions concernées :

De V1.1.47 à V1.1.50.

Versions corrigées :

V1.1.51 et versions ultérieures.

  • Modifiez la chaîne de connexion JDBC pour utiliser le mode Simple en appliquant le paramètre jdbc:postgresql://<host>:<port>/<dbname>?preferQueryMode=simple.

  • Effectuez une mise à niveau vers une version ultérieure.

P1

Une erreur se produit lors de l'écriture dans Hologres en mode Blink ou Flink RPC : failed to create channel into server xxx, connection refused to rpc proxy endpoint.

Lors de l'écriture dans Hologres via Blink ou en mode Flink RPC, l'API ne renvoie pas le port du proxy RPC, ce qui fait échouer l'opération d'écriture.

Versions concernées :

V1.1.50 et versions antérieures.

Versions corrigées :

V1.1.51 et versions ultérieures.

  • Basculez la tâche Flink vers le mode d'écriture JDBC. Pour plus d'informations, consultez la rubrique Flink entièrement géré.

  • Effectuez une mise à niveau vers une version ultérieure.

P2

L'exécution d'une instruction JOIN contenant union all génère l'erreur internal error: 0 shard end shard value: xxx doesn\'t.

L'optimiseur génère un plan d'exécution incorrect pour les instructions JOIN contenant union all, ce qui entraîne l'échec de l'exécution.

Versions concernées :

V1.1.49 et versions antérieures.

Versions corrigées :

V1.1.50 et versions ultérieures.

Effectuez une mise à niveau vers une version ultérieure.

P2

Lorsque vous utilisez la fonction json_array_elements dans une instruction SQL contenant une clause JOIN, la requête échoue avec l'erreur Duplicate keys detected when building hash table.

Le moteur d'exécution (QE) construit une table de hachage lors de l'exécution de l'opérateur de jointure. Toutefois, pendant la phase de lecture des données, le moteur d'exécution (QE) ne filtre pas correctement les données traitées par json_array_elements. Cela entraîne la lecture de données en double, provoquant ainsi l'erreur.

Versions concernées :

V1.1.49 et versions antérieures.

Versions corrigées :

V1.1.50 et versions ultérieures.

Effectuez une mise à niveau vers une version ultérieure.

P2

Lors de l'exécution d'une instruction JOIN, la requête peut échouer avec l'erreur Explicit remote seek FROM a source is not supported.

Si l'optimiseur génère un plan d'exécution utilisant une jointure en boucle imbriquée (Nested Loop Join), que vous pouvez vérifier avec EXPLAIN <SQL>, le moteur d'exécution peut ne pas exécuter correctement le plan, entraînant une erreur d'exécution.

Versions concernées :

V1.1.49 et versions antérieures.

Versions corrigées :

V1.1.50 et versions ultérieures.

Effectuez une mise à niveau vers une version ultérieure.

P2

Lorsqu'une condition de filtre SQL contient not in, le résultat de la requête inclut toujours des données qui auraient dû être filtrées par la condition not in. Voici un exemple.

create table if not exists test(id bigint,  value int);SELECT id FROM test where id in (238024008,276941010) and id not in (238024008) and value in (1, 2, 3);

L'optimiseur a traité incorrectement not in lors de la génération du plan d'exécution, ce qui a abouti à un plan incorrect, à la perte de la condition de filtre not in et à un résultat erroné.

Versions concernées :

V1.1.48 et versions antérieures.

Versions corrigées :

V1.1.49 et versions ultérieures.

Effectuez une mise à niveau vers une version ultérieure.

P2

Dans le modèle d'autorisations SLPM, la tentative de renommage d'un schéma avec la commande CALL slpm_rename_schema ( old_name, new_name ) génère l'erreur UPDATE is not supported.

Dans le modèle d'autorisations SLPM, le système effectue une vérification incorrecte des autorisations lors du renommage d'un schéma, ce qui fait échouer la commande.

Versions concernées :

V1.1.47 et versions antérieures.

Versions corrigées :

V1.1.48 et versions ultérieures.

Effectuez une mise à niveau vers une version ultérieure.

Février 2022

Niveau

Description

Cause

Versions concernées/corrigées

Solution de contournement

P2

En mode SPM ou SLPM, les opérations Auto Analyze ou Analyze échouent après l'activation du masquage des données.

Le backend utilise le propriétaire de la table pour exécuter Auto Analyze. Toutefois, en mode SPM ou SLPM, le propriétaire de la table est un développeur sans autorisations de connexion. Lors de l'échantillonnage des colonnes masquées, la requête est acheminée via le moteur de requêtes parallèles (PQE), ce qui entraîne l'échec de l'opération Auto Analyze ou Analyze.

Versions concernées :

V1.1.1 à V1.1.46.

Versions corrigées :

V1.1.47 et versions ultérieures.

  • Désactivez le masquage des données.

  • Effectuez une mise à niveau vers une version ultérieure.

P1

Lorsque vous analysez une table externe comportant un nombre excessif de partitions (généralement dans un scénario de partitionnement multiniveau), l'opération échoue avec une erreur indiquant que la limite de partitions (512 partitions) est dépassée.

L'échec survient car l'analyse n'élimine pas les partitions de la table externe.

Versions concernées :

V1.1.1 à V1.1.46.

Versions corrigées :

V1.1.47 et versions ultérieures.

  • Si la table externe comporte moins de 1 024 partitions, augmentez la limite de partitions pour les tables externes avant d'exécuter l'opération Analyze.

  • Effectuez une mise à niveau vers une version ultérieure.

    Remarque

    Après la mise à niveau, l'opération Analyze traite par défaut un maximum de 512 partitions de table externe. Pour traiter davantage de partitions, augmentez la limite de partitions pour l'opération Analyze. Pour plus d'informations, consultez Optimiser les performances des requêtes des tables externes MaxCompute.

P1

Lorsque vous exécutez la commande SQL explain analyze, le résultat pour partitions SELECTed est 0, ce qui ne correspond pas au nombre réel de partitions accessibles.

La vérification effectuée par l'optimiseur pour partitions SELECTed était incorrecte, ce qui a entraîné une valeur de 0.

Versions concernées :

V1.1.1 à V1.1.46.

Versions corrigées :

V1.1.47 et versions ultérieures.

Effectuez une mise à niveau vers une version ultérieure.

P2

Lorsque vous consultez les journaux des requêtes lentes, des informations telles que le nombre de lignes lues (read_rows) et le nombre de lignes renvoyées (result_rows) ne s'affichent pas.

Les informations collectées par l'entrepôt de métadonnées étaient incomplètes.

Versions concernées :

V1.1.1 à V1.1.46.

Versions corrigées :

V1.1.47 et versions ultérieures.

Nous vous recommandons d'effectuer une mise à niveau vers la nouvelle version.

Remarque

À partir de Hologres V1.1.36, vous pouvez consulter ces informations en définissant des paramètres GUC. Dans les versions V1.1.47 et ultérieures, il n'est pas nécessaire de définir les paramètres GUC.

P2

En mode JDBC PrepareStatement, lorsque vous insert ou SELECT plusieurs valeurs et exécutez l'instruction plus de trois fois, les résultats contiennent des lignes et des colonnes mal placées. Toutefois, les résultats sont corrects si vous insert ou SELECT une seule valeur dans plusieurs instructions distinctes. Par exemple, une seule instruction SQL contenant 32 valeurs est exécutée quatre fois, et l'ordre des 32 lignes dans la clause values est aléatoire pour chaque exécution. En revanche, si une instruction SQL contenant une seule valeur est exécutée 32 fois, le résultat est correct.

En mode PrepareStatement, lorsque vous avez effectué plusieurs opérations insert ou SELECT sur plusieurs valeurs, l'optimiseur a généré un plan d'exécution incorrect.

Versions concernées :

V1.1.46 et versions antérieures.

Versions corrigées :

V1.1.47 et versions ultérieures.

P2

Lorsque vous exécutez une instruction SQL non JOIN, telle qu'une instruction contenant count distinct, l'erreur suivante est signalée : error: Hash32 shard function does not support decimal or fixed binary type.

Les instructions SQL non JOIN peuvent également utiliser une fonction de fragmentation pour générer un plan d'exécution. Toutefois, la fonction de fragmentation ne prend pas en charge les types de données tels que NUMERIC. Cela provoque une erreur lors de l'utilisation de certains types de données inexacts.

Versions concernées :

V1.1.46 et versions antérieures.

Versions corrigées :

V1.1.47 et versions ultérieures.

Effectuez une mise à niveau vers une version ultérieure.

P1

Une requête utilisant la condition key = max(key) renvoie de manière inattendue une seule ligne. Une requête utilisant la condition key in max(key) renvoie le résultat attendu.

Lorsque l'optimiseur a généré le plan d'exécution, il a converti key = max(key) en order by id asc limit 1. Ce type de requête renvoie toujours une seule ligne, ce qui a entraîné le résultat inattendu.

Versions concernées :

V1.1.46 et versions antérieures.

Versions corrigées :

V1.1.47 et versions ultérieures.

  • Utilisez la condition key in max(key).

  • Effectuez une mise à niveau vers une version ultérieure.

P2

Si une instruction DDL provenant d'une source non PostgreSQL, telle que JDBC, contient un commentaire de code à la fin, les opérations d'écriture ou de requête se bloquent après l'exécution réussie de l'instruction. Exemple : create table ttxwsx1(i int); -- comments -- xxxxx.

Un commentaire à la fin d'une commande DDL empêche le point-virgule final de fonctionner comme séparateur de commande. Par conséquent, la commande suivante est ajoutée au commentaire, ce qui invalide l'instruction SQL. Cela entraîne un échec de relecture entre les nœuds et provoque le blocage des opérations d'écriture ou de requête.

Versions concernées :

V1.1.45 et versions antérieures.

Versions corrigées :

V1.1.46 et versions ultérieures.

  • Supprimez le commentaire à la fin de l'instruction DDL.

  • Effectuez une mise à niveau vers une version ultérieure.

P1

Lorsque vous interrogez une table orientée ligne par clé primaire, certaines données peuvent ne pas être renvoyées.

Un bogue dans la gestion de la compaction concurrente des fichiers en arrière-plan pour la table orientée ligne a localisé incorrectement certains fichiers manifestes. Par conséquent, les requêtes ne pouvaient pas trouver certaines données.

Versions concernées :

V1.1.44 et versions antérieures.

Versions corrigées :

V1.1.45 et versions ultérieures.

Effectuez une mise à niveau vers une version ultérieure.

P2

Après la mise à niveau d'une instance Hologres vers la version V1.1, les requêtes sur les tables externes MaxCompute avec des partitions multiniveaux ralentissent ou provoquent une erreur de mémoire insuffisante (OOM) si la condition de filtre SQL contient un opérateur or. Dans la version V0.10, ces requêtes ne prenaient que quelques secondes.

Dans Hologres V1.1, l'optimiseur ne parvient pas à reconnaître l'opérateur généré par une condition or dans le filtrage des partitions multiniveaux. Cela entraîne un filtre vide, ce qui provoque l'analyse de toutes les partitions et conduit à des requêtes lentes ou à des erreurs de mémoire insuffisante (OOM).

Versions concernées :

V1.1.44 et versions antérieures.

Versions corrigées :

V1.1.45 et versions ultérieures.

Effectuez une mise à niveau vers une version ultérieure.

P1

L'utilisation de la mémoire reste élevée pendant une période prolongée, même lorsque l'utilisation du processeur est faible. La surveillance montre un QPS élevé (des centaines de requêtes par seconde ou plus) sur seulement quelques dizaines de connexions, ce qui indique qu'une seule connexion exécute du SQL à un rythme très élevé.

Lorsqu'une instruction SQL est exécutée, l'optimiseur récupère les statistiques de la table. Si une seule connexion exécute du SQL à un rythme élevé pendant une longue période sans être fermée, une fuite de mémoire se produit lors de la récupération des statistiques, ce qui entraîne une utilisation élevée de la mémoire.

Versions concernées :

V1.1.44 et versions antérieures.

Versions corrigées :

V1.1.45 et versions ultérieures.

  • Définissez le paramètre suivant : set hg_experimental_always_show_execution_statistics=off;.

  • Effectuez une mise à niveau vers une version ultérieure.

P2

L'instruction SQL contient une condition not like xxx%, mais les résultats de la requête incluent toujours des données qui auraient dû être filtrées par la condition not like.

Lorsque l'optimiseur a généré le plan d'exécution, une règle de prétraitement pour les fonctions liées à like était incorrecte. Cela a conduit à une réécriture incorrecte de la requête et à un résultat erroné.

Versions concernées :

V1.1.44 et versions antérieures.

Versions corrigées :

V1.1.45 et versions ultérieures.

  • Si une requête SQL avec une condition like provoque une erreur, définissez le paramètre suivant : hg_experimental_remove_redundant_cmp=off;.

  • Effectuez une mise à niveau vers une version ultérieure.

P1

La connexion avec un compte STS échoue avec l'erreur Cloud authentication failed, bien que les identifiants du compte soient corrects.

L'interface d'authentification a traité incorrectement le statut du compte STS.

Versions concernées :

V1.1.43 à V1.1.44.

Versions corrigées :

V1.1.45 et versions ultérieures.

Effectuez une mise à niveau vers une version ultérieure.

P0

Une perte de données peut survenir si le processus d'écriture des données côté moteur plante après la fin de l'opération d'écriture côté application. Par conséquent, les utilisateurs peuvent constater l'absence de données lors des requêtes.

Normalement, une réponse de succès est renvoyée au client uniquement après que le journal des transactions préalables à l'écriture (WAL) a été vidé sur le disque. Cela garantit la persistance et la cohérence des données. Toutefois, si un vidage sur disque expirait et déclenchait une nouvelle tentative, le système écrivait d'abord les données dans le cache mémoire et renvoyait une réponse de succès. Si l'instance plantait avant que ces données ne soient persistantes, l'application aurait reçu une confirmation de succès, mais les données seraient perdues depuis la couche de stockage des données.

Versions concernées :

V0.8 et versions antérieures.

Versions corrigées :

V0.9 et versions ultérieures.

Effectuez une mise à niveau vers une version ultérieure.

P1

Les opérations d'écriture et de requête de l'instance échouent avec l'erreur ERROR: Invoke StoreMasterClient failed:ERPC_ERROR_CONNECTION_CLOSED.

Après l'occurrence de l'erreur, les nouvelles tentatives de requête côté client combinées aux nouvelles tentatives du nœud frontal backend ont entraîné un volume de requêtes excessivement élevé. Le Store Master, qui gère les métadonnées, n'a pas pu traiter les requêtes à temps et a signalé une erreur.

Versions concernées :

V1.1.43 et versions antérieures.

Versions corrigées :

V1.1.44 et versions ultérieures.

  • Utilisez la commande set optimizer_join_order=query.

  • Effectuez une mise à niveau vers une version ultérieure.

P2

Vous ajoutez une colonne DECIMAL sans spécifier sa précision en exécutant une instruction telle que alter table add column c0 decimal;. L'instruction aboutit, mais une requête sur la nouvelle colonne échoue avec l'erreur Schema fields[] has type decimal(x,y) but decimal(x1, y1) is expected..

L'ajout d'une colonne DECIMAL sans précision spécifiée n'est pas pris en charge. Toutefois, la précision n'a pas été validée lors de l'ajout d'une colonne, ce qui a provoqué l'échec de la requête. Après la correction, la précision est validée lors de l'ajout d'une colonne et une erreur est signalée si aucune précision n'est spécifiée.

Versions concernées :

V1.1.42 et versions antérieures.

Versions corrigées :

V1.1.43 et versions ultérieures.

  • Spécifiez la précision lors de l'ajout d'une colonne DECIMAL.

  • Effectuez une mise à niveau vers une version ultérieure.

P0

Une AccessKey désactivée peut toujours être utilisée pour accéder à une instance Hologres.

L'interface d'authentification AccessKey a traité incorrectement le statut d'une AccessKey désactivée, en la considérant comme valide.

Versions concernées :

V1.1.42 et versions antérieures.

Versions corrigées :

V1.1.43 et versions ultérieures.

  • Révoquez les autorisations d'accès du compte.

  • Effectuez une mise à niveau vers une version ultérieure.

P2

L'utilisation de la commande copy sur une table avec un champ Default provoque le redémarrage de l'instance.

La fonction copy ne prend pas en charge la création de tables avec des valeurs par défaut, ce qui provoque le redémarrage de l'instance en raison d'une erreur de mémoire insuffisante (OOM).

Versions concernées :

V1.1.42 et versions antérieures.

Versions corrigées :

V1.1.43 et versions ultérieures.

Effectuez une mise à niveau vers une version ultérieure.

P2

Une requête INNER JOIN impliquant une table externe signale une erreur indiquant qu'une colonne n'existe pas, telle que ERROR: column "id" does not exist, bien que la colonne ne soit pas référencée dans l'instruction SQL.

Lors de la génération du plan d'exécution, l'optimiseur a dérivé incorrectement des expressions équivalentes. Il a inclus des colonnes qui n'étaient pas dans la sortie dans la dérivation, ce qui a provoqué l'erreur.

Versions concernées :

V1.1.42 et versions antérieures.

Versions corrigées :

V1.1.43 et versions ultérieures.

Effectuez une mise à niveau vers une version ultérieure.

P1

L'exécution d'un Nested Loop Join complexe sur une table hybride ligne-colonne provoque le redémarrage de l'instance, puis sa récupération rapide.

Lorsque l'optimiseur a détecté une table hybride ligne-colonne, il n'a pas réussi à générer un plan d'exécution correct. Cela a provoqué une erreur et déclenché un redémarrage de l'instance.

Versions concernées :

V1.1.42 et versions antérieures.

Versions corrigées :

V1.1.43 et versions ultérieures.

  • N'utilisez pas de tables hybrides ligne-colonne.

  • Effectuez une mise à niveau vers une version ultérieure.

P1

Après l'annulation manuelle d'une tâche d'importation complexe impliquant une jointure multi-table (par exemple, une jointure entre six tables), l'utilisation du processeur reste à 100 % pendant plusieurs heures et le processus ne se termine pas. Une opération drop table ultérieure reste également bloquée.

Pour une requête complexe, le plan d'exécution incluait un opérateur Hash Join traitant un volume de données important. Le backend a rencontré un interblocage (deadlock), ce qui a maintenu l'exécution de la tâche même après son annulation.

Versions concernées :

V1.1.42 et versions antérieures.

Versions corrigées :

V1.1.43 et versions ultérieures.

  • Redémarrez l'instance.

  • Effectuez une mise à niveau vers une version ultérieure.

Janvier 2022

Niveau

Description

Cause

Versions

Solution de contournement

P2

Lors de l'écriture de données depuis DataHub vers une table partitionnée Hologres, l'instance Hologres redémarre si la table enfant correspondante n'a pas été créée.

Lors de l'écriture de données depuis DataHub vers une table partitionnée Hologres, l'interface d'écriture n'effectue pas de vérification des partitions, ce qui provoque un plantage (coredump) de l'instance.

Versions concernées :

V1.1.41 et versions antérieures

Corrigé dans :

V1.1.42 et versions ultérieures

  • Créez la table enfant dans Hologres avant d'écrire les données.

  • Effectuez une mise à niveau vers une version plus récente.

    Remarque

    Même après la mise à niveau, vous devez créer les tables enfants avant d'écrire des données dans les tables partitionnées.

P2

Après avoir attaché une table enfant à une table parent à l'aide de attach, l'interrogation de la table partitionnée renvoie une erreur partition_table_missing.

Les propriétés de la table enfant (telles que les contraintes NOT NULL, la clé primaire et les paramètres de clé de clustering) sont incohérentes avec celles de la table parent. L'opération attach n'a pas validé ces propriétés, ce qui a entraîné l'échec de la requête.

Versions concernées :

V1.1.41 et versions antérieures

Corrigé dans :

V1.1.42 et versions ultérieures

  • Lors de la création d'une table enfant, le schéma et les propriétés de la table enfant doivent être cohérents avec ceux de la table parent spécifiée dans la commande attach.

  • Effectuez une mise à niveau vers une version plus récente.

P1

En mode JDBC PreparedStatement, l'exécution d'une instruction SQL contenant un filtre « < » ou « > » dans la clause where provoque le redémarrage de l'instance.

En mode JDBC PreparedStatement, une condition de filtre « < » ou « > » dans la clause where est convertie en INTERVAL lors de la génération du plan d'exécution. Ce processus de conversion rencontre un pointeur nul, ce qui entraîne l'échec de l'instruction SQL et le redémarrage de l'instance.

Versions concernées :

V1.1.0 à V1.1.40

Corrigé dans :

V1.1.41 et versions ultérieures

Effectuez une mise à niveau vers une version plus récente.

P1

En mode JDBC PreparedStatement, si une condition IN contient plus de 100 éléments, la requête peut renvoyer des résultats incorrects ou inattendus.

En mode JDBC PreparedStatement, si une condition IN contient plus de 100 éléments, le générateur de plan d'exécution supprime incorrectement la condition IN, ce qui entraîne le renvoi de résultats incorrects par la requête.

Versions concernées :

V1.1.0 à V1.1.40

Corrigé dans :

V1.1.41 et versions ultérieures

Effectuez une mise à niveau vers une version plus récente.

P2

Lorsque vous interrogez une table disposant à la fois de stockages ligne et colonne en utilisant une condition IN, la requête échoue avec l'erreur suivante : An I/O error occurred while sending to the backend.. Les requêtes sur les tables orientées ligne ne sont pas affectées.

Pour une table disposant à la fois de stockages ligne et colonne, si le champ utilisé dans la condition IN est de type TEXT avec un index bitmap, l'optimiseur génère un plan d'exécution incorrect, ce qui provoque l'erreur.

Versions concernées :

V1.1.0 à V1.1.40

Corrigé dans :

V1.1.41 et versions ultérieures

  • Utilisez une table orientée ligne.

  • Effectuez une mise à niveau vers une version plus récente.

P2

L'exécution d'une instruction SQL échoue avec l'erreur ERROR: serialized_error_msg is null si la clause where utilise and pour connecter des conditions in et =. Par exemple :

SELECT * FROM public.conflict_1 where a in (1,31) and a=1;

Le backend compare incorrectement les types de données des conditions de part et d'autre de l'opérateur and. Par exemple, il ne parvient pas à reconcilier le fait que a = 1 est de type entier tandis que a in (1,2,3) est de type tableau, ce qui entraîne l'échec de l'exécution.

Versions concernées :

V1.1.0 à V1.1.40

Corrigé dans :

V1.1.41 et versions ultérieures

Effectuez une mise à niveau vers une version plus récente.

P2

La modification du cycle de vie (TTL) d'une table enfant provoque l'erreur suivante : Invoke StoreMasterClient failed:ERPC_ERROR_CONNECTION_CLOSED.

Lors de la modification du TTL d'une table enfant, le gestionnaire de métadonnées (Store Manager ou SM) ne parvient pas à valider la modification du schéma, ce qui entraîne une erreur SQL.

Versions concernées :

V1.1.0 à V1.1.40

Corrigé dans :

V1.1.41 et versions ultérieures

  • Ne modifiez pas le TTL de la table enfant.

  • Effectuez une mise à niveau vers une version plus récente.

P2

L'exécution d'une instruction drop table échoue avec une erreur invalid table id. La nouvelle tentative d'exécution de l'opération échoue ensuite avec une erreur SE object lock failed.

Une instance peut comporter plusieurs nœuds frontend. Une instruction SQL est d'abord exécutée sur un nœud, puis rejouée sur les autres. Si un nœud ne peut pas maintenir la cohérence des métadonnées avec les autres nœuds pour des raisons telles que des incompatibilités de version, une nouvelle tentative est déclenchée. Lorsque des commandes drop table sont exécutées simultanément, cela peut déclencher une nouvelle tentative initiée par le nœud. L'erreur survient car le verrou de la table n'est pas libéré pendant le processus de nouvelle tentative.

Versions concernées :

V1.1.39 et versions antérieures

Corrigé dans :

V1.1.40 et versions ultérieures

  • Exécutez les instructions DDL telles que drop table de manière séquentielle.

  • Effectuez une mise à niveau vers une version plus récente.

P1

Après l'activation d'Auto Analyze, l'instance signale l'erreur suivante sans augmentation significative du QPS : database is not accepting commands to avoid wraparound data loss in database.

Après l'activation d'Auto Analyze, le processus auto vacuum sur la table système du nœud frontend s'exécute trop rarement. Cela provoque une accumulation de transactions, entraînant la panne de l'instance décrite dans le message d'erreur.

Versions concernées :

V1.1.38 et versions antérieures

Corrigé dans :

V1.1.39 et versions ultérieures

Effectuez une mise à niveau vers une version plus récente.

P2

La création d'une vue basée sur une table partitionnée et l'application d'un cast à la colonne de clé de partition empêchent l'élimination statique des partitions (static partition pruning). Cela dégrade les performances car toutes les partitions sont analysées. Voici un exemple d'instruction SQL :

--Create a viewcreate view test_partition_table_view asSELECTtest_partition_table.ds::text as dsFROMtest_partition_table;--Query sqlSELECT * FROM test_partition_table_view where ds='20211116';

Lorsque la logique est encapsulée dans une vue, l'optimiseur applique les conditions de filtre à la colonne après l'opération cast, et non à la colonne de clé de partition d'origine. Étant donné que l'élimination statique des partitions ne fonctionne que sur la colonne de clé de partition, les performances sont dégradées.

Versions concernées :

V1.1.38 et versions antérieures

Corrigé dans :

V1.1.39 et versions ultérieures

  • N'utilisez pas cast sur la colonne de clé de partition au sein de la vue.

  • Effectuez une mise à niveau vers une version plus récente.

P2

  • Lorsque la date d'entrée est un dimanche, l'exécution de la fonction to_char(xxx, 'Day') provoque le redémarrage de l'instance.

  • Lorsque la date d'entrée est un dimanche, l'exécution de la fonction to_char(xxx, 'D') renvoie un résultat incorrect.

Lorsque la date d'entrée est un dimanche, la fonction sous-jacente to_char() appelle toDayOfWeek(), qui renvoie une valeur de 7. Cela provoque un accès hors limites au tableau, entraînant un redémarrage de l'instance ou un résultat incorrect.

Versions concernées :

V1.1.36 et versions antérieures

Corrigé dans :

V1.1.37 et versions ultérieures

Effectuez une mise à niveau vers une version plus récente.

P1

Après l'activation du masquage des données sur une instance, une sous-requête contenant une fonction CTE peut amener l'instance à signaler une erreur de connexion temporaire ou d'E/S.

L'instance Hologres redémarre car l'appel récursif qui traite la fonction CTE ne gère pas correctement le masquage des données.

Versions concernées :

V1.1.36 et versions antérieures

Corrigé dans :

V1.1.37 et versions ultérieures

  • Désactivez le masquage des données.

  • Effectuez une mise à niveau vers une version plus récente.

Historique des défauts 2021

Décembre 2021

Niveau

Description

Cause

Versions

Solution de contournement

P0

La définition de l'encodage par dictionnaire pour une colonne TEXT provoque un redémarrage bref de l'instance. Par exemple :

call set_table_property('tbl', 'dictionary_encoding_columns', 'a');

, où a est une colonne TEXT.

La configuration manuelle de l'encodage par dictionnaire modifie sa propriété, qui passe de la valeur par défaut auto à on. Cette incohérence d'état empêche la compaction et entraîne un plantage (coredump).

Versions concernées :

V1.1 à V1.1.35

Versions corrigées :

V1.1.36 et versions ultérieures

  • Lorsque vous définissez manuellement l'encodage par dictionnaire, spécifiez explicitement la propriété sur auto, par exemple : call set_table_property('tbl', 'dictionary_encoding_columns', 'a:auto');.

  • Effectuez la mise à niveau vers une version corrigée.

P2

Lorsque vous consultez le journal des requêtes lentes, certaines informations, telles que le nombre de lignes lues (read_rows) et le nombre de lignes renvoyées (result_rows), ne s'affichent pas.

Ce problème survient car l'entrepôt de métadonnées collecte des informations incomplètes.

Versions concernées :

V1.1 à V1.1.35

Versions corrigées :

V1.1.36 et versions ultérieures

Effectuez la mise à niveau vers une version corrigée. De plus, avant d'exécuter l'instruction SQL pour consulter le journal des requêtes lentes, exécutez l'une des commandes suivantes.

  • set hg_experimental_force_sync_collect_execution_statistics = on;
  • alter database <dbname> set hg_experimental_force_sync_collect_execution_statistics = on;

P1

Une requête renvoie un résultat incorrect si la clause WHERE contient une expression case when xx in ('').

Hologres crée par défaut un index bitmap pour les colonnes TEXT. Si la colonne accepte également les valeurs NULL, le backend génère un plan d'exécution incorrect pour l'expression case when xx in (''), ce qui renvoie un résultat erroné.

Versions concernées :

V1.1.35 et versions antérieures

Versions corrigées :

V1.1.36 et versions ultérieures

Effectuez la mise à niveau vers une version corrigée.

P1

Les requêtes échouent avec l'erreur suivante : Cannot reserve capacity larger than 2^31 - 1 for binary.

Hologres applique par défaut l'encodage par dictionnaire aux colonnes TEXT. L'insertion d'une seule valeur supérieure à 2 Go peut rendre le dictionnaire trop volumineux, entraînant l'échec des requêtes.

Versions concernées :

V1.1.35 et versions antérieures

Versions corrigées :

V1.1.36 et versions ultérieures

Effectuez la mise à niveau vers une version corrigée.

P1

Lors de l'interrogation du journal binaire, une requête qui sélectionne des champs de journal binaire et filtre par clé primaire ne renvoie aucune donnée. Une requête similaire qui ne sélectionne pas les champs de journal binaire renvoie les données correctes. Dans les exemples de requêtes suivants, a est la clé primaire de la table de test.

--SQL with binary log fields
SELECT hg_binlog_lsn, hg_binlog_event_type, hg_binlog_timestamp_us FROM test WHERE a = '723295948321120659';
--SQL without binary log fields
SELECT * FROM test WHERE a = '723295948321120659';

L'optimiseur du backend génère un plan d'exécution incorrect pour les requêtes avec un filtre sur la clé primaire, ce qui renvoie un résultat erroné.

Versions concernées :

V1.1.35 et versions antérieures

Versions corrigées :

V1.1.36 et versions ultérieures

Effectuez la mise à niveau vers une version corrigée.

P2

Lorsque le processeur d'une instance est entièrement sollicité, il est impossible de consulter dans HoloWeb des informations telles que les requêtes actives et les connexions actives.

Lorsque le processeur est entièrement sollicité, les requêtes sur les tables système telles que pg_stat_activity échouent en raison des limites de ressources.

Versions concernées :

V1.1.35 et versions antérieures

Versions corrigées :

V1.1.36 et versions ultérieures

Effectuez la mise à niveau vers une version corrigée.

P1

L'utilisation d'un tableau ANY vide dans une requête provoque le redémarrage de l'instance Hologres.

Le backend gère incorrectement les tableaux ANY vides, ce qui entraîne un plantage (coredump) de l'instance.

Versions concernées :

V1.1.35 et versions antérieures

Versions corrigées :

V1.1.36 et versions ultérieures

Effectuez la mise à niveau vers une version corrigée.

P1

Une requête contenant une fonction lead ou lag dont le troisième argument est omis échoue avec l'erreur : Column column5 should be non-nullable but the values contain 1 nulls.

L'exécuteur déduit incorrectement la possibilité de valeurs NULL de la sortie des fonctions lead et lag, ce qui entraîne l'échec de la requête.

Versions concernées :

V1.1.34 et versions antérieures

Versions corrigées :

V1.1.35 et versions ultérieures

Effectuez la mise à niveau vers une version corrigée.

P2

L'écriture de données depuis Flink vers une table Hologres comportant une colonne Roaring Bitmap est lente.

Le chemin d'écriture du backend pour les données Roaring Bitmap n'est pas optimisé, ce qui entraîne de mauvaises performances.

Versions concernées :

V1.1.35 et versions antérieures

Versions corrigées :

V1.1.36 et versions ultérieures

  • Évitez d'utiliser Roaring Bitmap.

  • Effectuez la mise à niveau vers une version corrigée.

P1

L'utilisation de Roaring Bitmap peut provoquer l'erreur suivante : An I/O error occurred while sending to the backend. L'utilisation de la mémoire est élevée même lorsque l'utilisation du processeur est faible.

La fonctionnalité Roaring Bitmap présente une fuite de mémoire.

Versions concernées :

V1.1.34 et versions antérieures

Versions corrigées :

V1.1.35 et versions ultérieures

  • Évitez d'utiliser Roaring Bitmap.

  • Effectuez la mise à niveau vers une version corrigée.

P1

Une requête SQL contenant une clause order by échoue avec l'erreur : PlStmt Translation: Attribute number 4 not found in project list.

La clause order by génère un opérateur de tri. Lors de la création du plan d'exécution, l'optimiseur prend une décision de poussée (pushdown) incorrecte pour cet opérateur. Par conséquent, la génération du plan échoue et une erreur est signalée.

Versions concernées :

V1.1.33 et versions antérieures

Versions corrigées :

V1.1.34 et versions ultérieures

Effectuez la mise à niveau vers une version corrigée.

P1

Une requête Proxima échoue avec l'erreur : HGERR_code XX000 HGERR_msge internal error: record batches is empty.

Cette erreur se produit car le backend lit incorrectement l'état du fichier Proxima.

Versions concernées :

V1.1.33 et versions antérieures

Versions corrigées :

V1.1.34 et versions ultérieures

Effectuez la mise à niveau vers une version corrigée.

P2

Après la mise à niveau d'une instance vers la version V1.1 ou son redémarrage pour une mise à niveau/rétrogradation en V1.1, la première requête est anormalement lente. Le plan d'exécution affiche des statistiques inexactes. La réexécution de la requête corrige les statistiques et rétablit les performances.

Après la mise à niveau et le redémarrage de l'instance, la première requête ne parvient pas à récupérer la version correcte des statistiques, ce qui entraîne des statistiques inexactes et de mauvaises performances.

Versions concernées :

V1.1 à V1.1.32

Versions corrigées :

V1.1.33 et versions ultérieures

  • Réexécutez la requête pour corriger les statistiques et rétablir les performances.

  • Effectuez la mise à niveau vers une version corrigée.

P0

L'interrogation d'une table pendant l'exécution d'une commande drop ou truncate sur celle-ci provoque le redémarrage de l'instance.

Si une opération drop ou truncate se produit sur une table après la fin d'une requête sur cette table, mais avant la libération de ses ressources, l'instance plante (coredump) et redémarre.

Versions concernées :

V1.1.32 et versions antérieures

Versions corrigées :

V1.1.33 et versions ultérieures

Effectuez la mise à niveau vers une version corrigée.

P1

Après une mise à niveau vers la version V1.1, une jointure impliquant plus de dix tables déclenche une erreur de dépassement de mémoire (OOM). La même opération s'exécutait normalement sur les versions antérieures.

L'optimiseur surestime le nombre de lignes dans les tables. Par conséquent, l'exécuteur manque de mémoire lors de l'initialisation, empêchant le calcul de se poursuivre.

Versions concernées :

V1.1 à V1.1.31

Versions corrigées :

V1.1.32 et versions ultérieures

Effectuez la mise à niveau vers une version corrigée.

P2

Le regroupement côté client augmente la latence dans les scénarios de requêtes ponctuelles.

Chaque nœud de travail ne dispose que d'un seul nœud d'écriture pour les requêtes ponctuelles. Lorsque les requêtes sont concentrées sur un seul nœud d'écriture, un regroupement est susceptible de se produire. La limite de taille du lot est trop élevée, ce qui entraîne de longs temps d'attente et une latence élevée pour les requêtes ponctuelles.

Versions concernées :

V1.1 à V1.1.31

Versions corrigées :

V1.1.32 et versions ultérieures

Effectuez la mise à niveau vers une version corrigée.

P1

Pour une table avec chiffrement du stockage, une requête avec LIMIT ... OFFSET ... renvoie un résultat, mais la même requête ne renvoie aucun résultat si une clause order by est également incluse.

Pour les tables avec chiffrement du stockage, une configuration qui s'écarte de la documentation entraîne une génération incorrecte de la version. Cela provoque une perte de données dans la MemTable, de sorte que la requête ne renvoie aucun résultat.

Versions concernées :

V1.1 à V1.1.31

Versions corrigées :

V1.1.32 et versions ultérieures

Effectuez la mise à niveau vers une version corrigée.

P1

La commande truncate échoue si le nom de la table contient des lettres majuscules, avec une erreur « table introuvable ». Par exemple, l'exécution de TRUNCATE "Abc"; signale l'erreur : ERROR: relation "abc" does not exist.

La logique de sensibilité à la casse pour la commande truncate est incorrecte.

Versions concernées :

V1.1.30 et versions antérieures

Versions corrigées :

V1.1.31 et versions ultérieures

Effectuez la mise à niveau vers une version corrigée.

P1

L'utilisation de la fonction to_char, to_date ou to_timestamp échoue avec l'erreur : time after 2282 not supported.

Les fonctions to_char, to_date et to_timestamp prennent en charge la plage horaire de 1925 à 2282. Une erreur est signalée si l'heure se situe en dehors de cette plage.

Versions concernées :

V1.1.30 et versions antérieures

Versions corrigées :

V1.1.31 et versions ultérieures

Effectuez la mise à niveau vers une version corrigée. Après la mise à niveau, vous pouvez utiliser un paramètre Grand Unified Configuration (GUC) pour étendre la plage horaire prise en charge, comme illustré dans les exemples suivants.

  • set hg_experimental_functions_use_pg_implementation = 'to_char';

  • set hg_experimental_functions_use_pg_implementation = 'to_date';

  • set hg_experimental_functions_use_pg_implementation = 'to_timestamp';

P1

Une requête de jointure interne renvoie moins de résultats que prévu.

L'opérateur de jointure exige que les données ayant la même join key soient distribuées au même nœud de travail. Cependant, l'optimiseur déduit incorrectement la distribution des données, en distribuant les données ayant la même clé vers différents nœuds. Cela entraîne une join incorrecte et un nombre de lignes renvoyées inférieur aux attentes.

Versions concernées :

V1.1.30 et versions antérieures

Versions corrigées :

V1.1.31 et versions ultérieures

Effectuez la mise à niveau vers une version corrigée.

P1

Une requête SQL échoue avec l'erreur : Query could not generate plan by Hologres : PlStmt Translation: Attribute number 4 not found in project list.

L'exécution d'une jointure de table sans join key entraîne l'échec de la génération du plan d'exécution.

Versions concernées :

V1.1 à V1.1.27

Versions corrigées :

V1.1.28 et versions ultérieures

  • Recréez la table, puis exécutez la commande analyze table.

  • Effectuez la mise à niveau vers une version corrigée.

P1

L'utilisation de la fonction get_json_object échoue avec l'erreur : Column column0 should be non-nullable but the values contain 1 nulls.

Les deux paramètres de la fonction get_json_object sont définis comme ne pouvant pas être NULL, mais la fonction définie par l'utilisateur (UDF) sous-jacente peut renvoyer un résultat NULL. Cette incompatibilité entraîne l'échec de la vérification de non-nullabilité lors de la génération du plan d'exécution.

Versions concernées :

V1.1.27 et versions antérieures

Versions corrigées :

V1.1.28 et versions ultérieures

Effectuez une mise à jour vers une version corrigée.

P1

Une requête échoue avec l'erreur suivante : ERROR: Build query failed: Table group [] FROM table must equals table group [] FROM QO..

Lors de la génération du plan d'exécution, un nœud DML nécessite des informations spécifiques sur le groupe de tables provenant des nœuds en aval. Toutefois, un nœud en aval déduit une propriété NULL pour le groupe de tables, ce qui ne satisfait pas les exigences du nœud DML et provoque une erreur.

Versions concernées :

V1.1.27 et versions antérieures

Versions corrigées :

V1.1.28 et versions ultérieures

Effectuez une mise à jour vers une version corrigée.

P1

L'exécution de la commande drop table se bloque et toute tentative de réexécution entraîne une augmentation soudaine de l'utilisation du CPU.

Si la fonctionnalité Auto Analyze est activée pour une instance, celle-ci acquiert un verrou share_update_exclusive. Parallèlement, Auto Analyze utilise une connexion et une nouvelle connexion charge les statistiques tout en acquérant un verrou access_shared_lock. Si un utilisateur exécute la commande DROP TABLE pendant ces deux étapes, l'opération se bloque.

Versions concernées :

V1.1.27 et versions antérieures

Versions corrigées :

V1.1.28 et versions ultérieures

  • Activez la fonctionnalité Auto Analyze uniquement pendant les heures creuses.

  • Effectuez une mise à jour vers une version corrigée.

Novembre 2021

Niveau

Description

Cause

Versions concernées

Solutions de contournement

P2 (Optimisation)

Après le redémarrage d'une instance, les requêtes portant sur certaines données renvoient des résultats incohérents.

Lorsqu'un nœud backend redémarre, il doit synchroniser sa version avec les autres nœuds. Durant ce processus, le nœud, disposant d'une version antérieure, interroge les données d'origine, ce qui entraîne des incohérences dans les résultats. Le correctif empêche un nœud redémarré de traiter les requêtes tant qu'il n'est pas synchronisé, garantissant ainsi la cohérence des données.

Versions concernées :

1.1.24 et versions antérieures.

Correction apportée :

1.1.26 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

Lors de l'importation de données depuis MaxCompute, l'exécution deset hg_experimental_foreign_table_split_size = 64; INSERT INTO public.lineitem SELECT * FROM public.odps_lineitem_1t ; provoque une utilisation élevée de la mémoire ou une erreur OOM (Out Of Memory). Le problème ne se produit pas si le paramètre est défini sur 128.

Le système charge l'intégralité des StripesMeta depuis les métadonnées, ce qui entraîne une consommation mémoire importante.

Versions concernées :

1.1.24 et versions antérieures.

Correction apportée :

1.1.26 et versions ultérieures.

  • Évitez d'utiliser la commandeset hg_experimental_foreign_table_split_size = 64;.

  • Mettez à jour vers la dernière version.

P1

Lorsque vous utilisez l'opérateur IN sur une clé de distribution ou une clé primaire, si la liste IN contient plus de 100 éléments, le résultat final est incorrect.

Lorsque la listeIN comporte plus de 100 éléments, le nombre de shards après l'élagage des shards (shard pruning) devient imprévisible. Cela génère un plan d'exécution erroné, conduisant à un résultat incorrect.

Versions concernées :

1.1.24 et versions antérieures.

Correction apportée :

1.1.26 et versions ultérieures.

  • Réduisez le nombre d'éléments dans la listeIN à 100 ou moins.

  • Mettez à jour vers la dernière version.

P1

Lors de l'importation de données d'une table étrangère vers une table interne, si vous exécutez d'abord une opération d'insert suivie d'une opération dedelete sur les données historiques, l'instructioninsert peut récupérer une partition obsolète, ce qui entraîne l'insertion de zéro ligne.

Une exception de stockage survenant durant le processus d'importation empêche la récupération des données les plus récentes.

Versions concernées :

1.1.24 et versions antérieures.

Correction apportée :

1.1.26 et versions ultérieures.

Mettez à jour vers la dernière version.

P1

Lorsqu'une ligne est très large et que la taille des données dépasse plusieurs centaines de Mo, un seul enregistrement peut excéder la limite supérieure d'un RECORDBATCH. Cela génère un RECORDBATCH contenant zéro ligne, ce qui déclenche un bug et provoque le redémarrage de l'instance.

Le backend gère incorrectement le nombre de lignes pour les lignes très larges, ce qui entraîne le redémarrage de l'instance.

Versions concernées :

1.1.24 et versions antérieures.

Correction apportée :

1.1.26 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

L'erreur suivante est signalée : internal error: string decimal literal can not be tentative.

L'instruction SQL contient une expression in, par exemple : SELECT * FROM tbl where col in (1,11, 1,2, 1 333); Si la précision des valeurs DECIMAL dans l'expression in est incohérente, le moteur de calcul backend traite les résultats de manière incohérente, ce qui provoque une erreur.

Versions concernées :

1.1.24 et versions antérieures.

Correction apportée :

1.1.26 et versions ultérieures.

  • N'utilisez qu'une seule valeur de données dans l'expression in.

  • Mettez à jour vers la dernière version.

P2 (Optimisation)

L'erreur suivante est signalée : org.postgresql.util.PSQLException: ERROR: Total memory used by all existing queries exceeded memory limitation 20132659200: xxxxx bytes used..

La mémoire de calcul d'un nœud unique dépasse la limite de 20 Go. Un nœud unique dispose d'une limite totale de mémoire de 64 Go, répartie comme suit : un tiers pour le calcul, un tiers pour le cache et un tiers pour les métadonnées.

Versions concernées :

1.1.23 et versions antérieures.

Correction apportée :

1.1.24 et versions ultérieures.

La version 1.1.24 introduit un ajustement élastique de la mémoire. Le backend détecte l'utilisation de la mémoire d'un nœud et ajuste la taille de la mémoire de calcul pour atténuer la limite de 20 Go. Si l'erreur persiste, optimisez l'instruction SQL ou augmentez la capacité de l'instance (scale out).

P1

L'erreur suivante est signalée : ERROR: Query could not generate plan by Hologres : Query Translation: No attribute entry found due to incorrect normalization of query.

Dans l'instruction SQL exécutée, la colonne sélectionnée ne figure pas dans la clauseGROUP BY, mais la clé primaire est un sous-ensemble de la clauseGROUP BY. La requête échoue à générer un plan, ce qui entraîne une erreur.

Versions concernées :

1.1.23 et versions antérieures.

Correction apportée :

1.1.24 et versions ultérieures.

Mettez à jour vers la dernière version.

P1

L'écriture de plusieurs entrées de données dupliquées dans une table de journal binaire en une seule opération via Flink ou Holo Client entraîne la perte des journaux binaires pour les entrées intermédiaires.

Lors de l'écriture de données dupliquées dans une table de journal binaire, l'exécuteur backend génère un journal binaire uniquement pour la dernière entrée de données, en ignorant les autres.

Versions concernées :

1.1.23 et versions antérieures.

Correction apportée :

1.1.24 et versions ultérieures.

Mettez à jour vers la dernière version.

P0

Lorsque vous interrogez une table étrangère MaxCompute possédant un type de données DECIMAL, les valeurs des deux dernières lignes changent de manière aléatoire entre les requêtes.

Lors de la lecture directe des données au format ORC depuis MaxCompute, si le fichier contient un type DECIMAL, les statistiques DECIMAL lues par Hologres sont aléatoires lors de l'optimisation du stockage.

Versions concernées :

1.1.23 et versions antérieures.

Correction apportée :

1.1.24 et versions ultérieures.

Mettez à jour vers la dernière version.

P1

L'erreur suivante est signalée : Remote seek with parameters is not supported.

L'opérateur sort possède par défaut la propriété rewindable, mais la couche sous-jacente ne la prend pas en charge. Une erreur est signalée lorsque la requête génère un plan.

Versions concernées :

1.1.23 et versions antérieures.

Correction apportée :

1.1.24 et versions ultérieures.

Mettez à jour vers la dernière version.

P1

Dans Hologres V1.1, un groupe de ressources est configuré, mais une erreur OOM se produit lors de l'exécution d'une requête. Le message d'erreur est le suivant : used by all existing queries exceeded memory limitation. Même en l'absence de requêtes actives, l'interrogation des vues système pour les requêtes lentes ou actives déclenche également une erreur OOM.

Une fuite de mémoire, potentiellement causée par une exception, peut entraîner un dépassement du seuil d'utilisation de la mémoire par le moteur de requête (QE). Par conséquent, les nouvelles requêtes sont bloquées car elles dépassent le quota du groupe de ressources.

Versions concernées :

1.1 à 1.1.23.

Correction apportée :

1.1.24 et versions ultérieures.

  • Recréez le groupe de ressources.

  • Mettez à jour vers la dernière version.

P2

L'erreur suivante est signalée de manière intermittente : fail to setremoteost invalid remon ip.

Un processus backend vérifie la variable de liste d'autorisation IP avant qu'elle ne soit initialisée, ce qui provoque une erreur de manière intermittente.

Versions concernées :

1.1.23 et versions antérieures.

Correction apportée :

1.1.24 et versions ultérieures.

  • Réessayez l'opération.

  • Mettez à jour vers la dernière version.

P1

Lorsque vous exécutezAnalyze ouauto analyze sur une table, si celle-ci contient des noms de colonnes identiques mais avec des casses différentes, l'erreur suivante est signalée : CheckSchema failed.

Le nœud frontend identifie incorrectement le numéro ordinal de la colonne lors de la transformation de la structure arborescente optimisée vers PowerBuilderTree, ce qui provoque une erreur.

Versions concernées :

1.1.22 et versions antérieures.

Correction apportée :

1.1.23 et versions ultérieures.

Mettez à jour vers la dernière version.

P1

Lorsque vous exécutez une instruction SQL comportant une jointure externe droite multi-tables (RightOuterJoin), la requête renvoie une seule ligne sans clauselimit. Après l'ajout d'une clauselimit, plusieurs lignes dupliquées apparaissent.

Lors de l'implémentation d'une jointureRightOuterJoin, l'optimiseur génère un plan incorrect, entraînant la présence de données dupliquées dans l'ensemble de résultats.

Versions concernées :

1.1.22 et versions antérieures.

Correction apportée :

1.1.23 et versions ultérieures.

Mettez à jour vers la dernière version.

P1

Dans une instruction case when, lorsqu'un champ TEXT est utilisé comme paramètre à la fois pour group by et agg, aucun plan ne peut être généré et l'erreur suivante se produit : ERROR: Query could not generate plan by Hologres : PlStmt Translation: Attribute number 46046320 not found in project list.

Dans l'instruction case when, le colref du champ de paramètre agg est introuvable, ce qui empêche la génération du plan.

Versions concernées :

1.1.22 et versions antérieures.

Correction apportée :

1.1.23 et versions ultérieures.

Mettez à jour vers la dernière version.

P1

L'erreur suivante est signalée : ERROR: internal error: Writing column: item_emb with array size: 682790219 violates fixed size list (32) constraint declared in schema.

Le moteur de stockage (SE) ne parvient pas à gérer correctement l'optimisation du tableau const, ce qui provoque une erreur d'exécution.

Versions concernées :

1.1 à 1.1.21.

Correction apportée :

1.1.22 et versions ultérieures.

Mettez à jour vers la dernière version.

P0

Lorsque vous utilisez l'instructioninsert on conflict do update set, si la sous-requête de l'instruction attribue les valeurs de plusieurs lignes à une seule ligne, par exemple, SET(mes1, mes2) = (SELECT mes1, mes2 FROM insert_on_conflict_do_update_negative_source), l'instance redémarre.

La syntaxe d'attribution des valeurs de plusieurs lignes à une seule ligne dans une sous-requête génère un paramètre multi-expression. Le processus de transformation omet d'ajouter les informations requises sur l'ID de colonne à ce paramètre, ce qui provoque le redémarrage de l'instance.

Versions concernées :

1.1.21 et versions antérieures.

Correction apportée :

1.1.22 et versions ultérieures.

Mettez à jour vers la dernière version.

P2

La multiplication de données DECIMAL entraîne l'erreur suivante : code: kActorInvokeError msg: "HGERR_code 22003 HGERR_msge numeric field overflow HGERR_detl A field with precision 38, scale 36 must round to an absolute value less than 10^2. HGERR_ctxt HGERR_erno 2 HGERR_end" err_data { filename: "FunctionsCast.cc" lineno: 323 funcname: "DecimalOverflowCheck" sqlerrcode: 50331778 message: "numeric field overflow" detail: "A field with precision 38, scale 36 must round to an absolute value less than 10^2." context: ".

La multiplication de champs de type DECIMAL, par exemple, numeric(38, 18) par numeric(38, 18), donne numeric(38, 36). L'augmentation du nombre de décimales peut provoquer un dépassement de capacité, déclenchant ainsi une erreur.

Versions concernées :

1.1.21 et versions antérieures.

Correction apportée :

1.1.22 et versions ultérieures.

  • Utilisez la fonctionround.

  • Mettez à jour vers la dernière version.

Septembre-octobre 2021

Priorité

Description

Cause

Versions concernées/corrigées

Solution de contournement

P0

L'erreur suivante se produit : "database is not accepting commands to avoid wraparound data loss in database ""template0"".

Le backend attribue un ID de transaction auto-incrémenté à chaque requête. Sur une instance présentant un débit élevé (QPS), l'ID peut dépasser la limite des entiers, ce qui déclenche l'erreur.

Versions concernées :

V0.10.19 à V0.10.42

Versions corrigées :

V1.1 et versions ultérieures

Effectuez une mise à niveau vers une version plus récente.

P1

Des mises à jour partielles de colonnes dans une table provoquent par intermittence l'erreur suivante : internal error: Record batch has 519 rows but length of columns is 7407.

Un champ contient un tableau TEXT[]. L'implémentation n'applique pas correctement l'opération slice() au tableau interne, ce qui entraîne une longueur incorrecte. Par conséquent, lors de l'exécution de la commande reverse(), le système tente d'accéder à un index invalide (-1), provoquant une erreur.

Versions concernées :

V0.10.41

Versions corrigées :

V0.10.42 et versions ultérieures

  • À titre de solution temporaire, exécutez la commande set hg_experimental_skip_mem_table=on.

  • Effectuez une mise à niveau vers une version plus récente.

P1

Lors de l'utilisation de hg_create_table_like pour créer une table orientée ligne, l'insertion de données dans la table provoque l'erreur suivante : ERROR: internal error: Cannot find index full ID: 51539607554 (table id: 12, index id: 2) in storages or it is deleting!.

Ce problème survient lorsqu'une table orientée ligne possède une clé primaire composite (clé primaire constituée de plusieurs colonnes). Pour récupérer ces colonnes de clé, hg_create_table_like est exécuté plusieurs fois. Les colonnes sont ensuite ajoutées à un ensemble (Set), qui ne conserve pas leur ordre d'origine.

Versions concernées :

V0.10.42

Versions corrigées :

V0.10.45 et versions ultérieures

  • Exécutez manuellement l'instruction CREATE TABLE pour créer la table orientée ligne.

  • Effectuez une mise à niveau vers une version plus récente.

P2

La suppression d'une partition provoque l'erreur suivante : FAILED: ERROR: query id[27xxxxxxxxxxxxxx37] SE object lock failed.

Lors de la suppression d'une partition, le backend termine la requête de manière inattendue, ce qui provoque cette erreur.

Versions concernées :

V0.10.41 et versions antérieures

Versions corrigées :

V0.10.42 et versions ultérieures

  • N'effectuez aucune opération sur la table.

  • Contactez le support pour redémarrer l'instance.

  • Effectuez une mise à niveau vers une version plus récente.

P2

L'interrogation ou l'écriture de données provoque l'erreur suivante : ERROR: internal error: Invalid table id : 641 MDTableGroup.

Cette erreur se produit généralement après la fin d'une opération de définition de données (DDL), alors que les nœuds backend sont encore en cours de redémarrage. L'exécution d'une opération de manipulation de données (DML) pendant cette période peut entraîner des incompatibilités de version entre les nœuds, déclenchant ainsi l'erreur.

Versions concernées :

V1.1.18 et versions antérieures

Versions corrigées :

V1.1.19 et versions ultérieures

  • Réessayez l'opération après un court délai.

  • Effectuez une mise à niveau vers une version plus récente.

Août 2021

Niveau

Description

Cause

Versions concernées et corrigées

Solution de contournement

P1

Si vous activez le journal binlog Hologres pour une table et définissez une durée de vie (TTL) courte pour le binlog lors de la création, les données stockées de la table augmentent continuellement, même si le volume de données métier n'augmente pas.

La durée de vie (TTL) du binlog spécifiée lors de la création de la table ne prend pas effet. Le système utilise plutôt la valeur par défaut de 100 ans.

Version concernée :

V0.10

Version corrigée :

V1.1

  • Modifiez manuellement la durée de vie (TTL) du binlog de la table pour la réduire en exécutant call set_table_property('schema.table', 'binlog.ttl', '86400');.

  • Effectuez une mise à niveau vers la version V1.1 ou une version ultérieure.

P1

Des opérations UPDATE, DELETE et INSERT ON CONFLICT fréquentes sur une table orientée colonne entraînent une augmentation continue de l'espace de stockage.

Pour améliorer l'efficacité, Hologres utilise un algorithme de suppression logique (mark-delete). Lorsque le ratio d'enregistrements marqués dans un fichier atteint un certain seuil, Hologres déclenche un processus de compactage en arrière-plan pour libérer de l'espace. Un défaut dans Hologres empêche ce processus de démarrer dans certains cas.

Versions concernées :

Versions antérieures à V0.10.25

Versions corrigées :

V0.10.25 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P1

Lors de l'écriture de données en temps réel dans une table à l'aide de Flink ou de Data Integration, une requête concurrente sur la table renvoie l'erreur suivante : ERROR: internal error: Record batch has 742 rows but length of columns is 749. columns=[ColumnHandle(type=string)(table_column_id=3), ColumnHandle(type=string)(table_column_id=4), ColumnHandle(type=string)(table_column_id=5)].

Lors des écritures en temps réel, les données sont d'abord écrites dans une MemTable, puis vidées sur le disque. Si une requête s'exécute pendant ce processus, la longueur du marqueur de colonne et la longueur réelle des données ne sont pas alignées, ce qui fait échouer la requête.

Version concernée :

V0.10.41

Versions corrigées :

V0.10.42 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P1

L'utilisation de la mémoire augmente soudainement, bien que la charge de travail métier n'augmente pas.

Si votre instruction SQL inclut une ou plusieurs des fonctions suivantes, une fuite de mémoire peut se produire et entraîner une augmentation soudaine de l'utilisation de la mémoire :

  • extract(xxx FROM time)

  • extract(xxx FROM interval)

  • date_part(xx, interval)

Versions concernées :

Versions antérieures à V0.10.31

Versions corrigées :

V0.10.32 et versions ultérieures

  • N'utilisez pas les fonctions répertoriées.

  • Effectuez une mise à niveau vers la dernière version.

P2

L'erreur suivante est signalée : time before epoch time not supported.

Ce problème survient si une instruction SQL utilise une ou plusieurs des fonctions to_char, to_date et to_timestamp et que les données incluent des dates antérieures à 1970. Les versions concernées de Hologres ne prenaient pas en charge les dates antérieures à 1970.

Versions concernées :

V0.10 et versions antérieures

Version corrigée :

V1.1

  • Filtrez les données antérieures à 1970.

  • Effectuez une mise à niveau vers la dernière version, qui prend en charge les données de 1925 à 2282.

P2

Lorsqu'un utilisateur non superutilisateur exécute la fonction SELECT hg_dump_script('xxxx'), l'erreur suivante est signalée : ERROR: permission denied for table pg_subscription .

hg_dump_script appelle indirectement la relation pg_subscription, mais pg_subscription peut contenir des informations sensibles. Par défaut, seul un superutilisateur peut accéder à cette table.

Version concernée :

V0.10

Version corrigée :

V1.1

  • La relation pg_subscription ne stocke pas d'informations utiles pour hg_dump_script. Ce problème est résolu dans la version V1.1 en modifiant le comportement par défaut.

  • Si vous rencontrez un problème d'autorisation, accordez à l'utilisateur actuel l'accès à la table pg_subscription.

P2

Une instruction SQL contenant une jointure left join renvoie une seule ligne. Toutefois, si vous ajoutez une clause limit à l'instruction, elle renvoie plusieurs lignes dupliquées.

Une jointure left join est convertie en une jointure externe droite (right outer join) au niveau inférieur. Lorsque le moteur implémente la jointure right outer join, il génère un plan d'exécution incorrect où le côté droit utilise la diffusion (broadcast). Cela provoque la duplication des lignes dans le résultat. Vous pouvez exécuter explain sql pour vérifier si le plan d'exécution utilise la diffusion.

Versions concernées :

V0.10.40 et versions antérieures

Version corrigée :

V1.1

Effectuez une mise à niveau vers la dernière version.

P2

Lorsque plusieurs enregistrements dupliqués sont écrits dans une table activée pour le binlog en un seul lot, le système perd les enregistrements binlog pour les données intermédiaires et ne conserve pas tous les changements d'état intermédiaires.

Le moteur déduplique les enregistrements et, par défaut, ne conserve que le dernier, ce qui entraîne la perte des changements d'état intermédiaires.

Versions concernées :

V0.10.30 et versions antérieures

Versions corrigées :

V0.10.39 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P2

L'erreur suivante est signalée : ERROR: status { code: SERVER_INTERNAL_ERROR message: " HGERR_code 00000 HGERR_msge OptimizedRegularExpression: cannot compile re2: \\c, error: invalid escape sequence: \\c4 HGERR_end[query_id:xx" err_data { message: "OptimizedRegularExpression: cannot compile re2: \\c, error: invalid escape sequence: \\c4" context: "[query_id:xxx]" } }CONTEXT: [query_id:xx].

Ce problème survient si le motif d'un opérateur LIKE dans une instruction SQL contient une barre oblique inverse suivie d'une lettre ou d'un chiffre. Exemples :

SELECT * FROM test_tb where a like '%\c%';SELECT * FROM test_tb where a like '%F\G%';

Le moteur ne prend pas entièrement en charge ce motif, ce qui provoque l'erreur.

Versions concernées :

V0.10.38 et versions antérieures

Versions corrigées :

V0.10.39 et versions ultérieures

Effectuez une mise à niveau vers la dernière version.

P2

Lorsque vous interrogez une table orientée ligne par sa clé primaire, les résultats sont incohérents ou l'erreur suivante est signalée : Duplicate keys detected when building hash table.

Ce problème survient si l'ordre des colonnes de la clé primaire et de la clé de clustering est incohérent lors de la création de la table orientée ligne. Exemple :

create table k ( a int, b int, primary key(a, b));call set_table_property('k', 'orientation', 'row');call set_table_property('k', 'clustering_key', 'b,a');

Versions concernées :

V0.10.37 et versions antérieures

Versions corrigées :

V0.10.38 et versions ultérieures

  • Recréez la table et assurez-vous que la clé primaire et la clé de clustering ont le même ordre de colonnes.

  • Effectuez une mise à niveau vers la dernière version.

P2

Si vous utilisez le masquage des données dans un schéma nouvellement créé, l'interrogation des données masquées renvoie l'erreur suivante : hg_anon_mask_name(text) doesnt exist.

Hologres crée la fonction de masquage des données dans le schéma public, ce qui la rend indisponible dans les autres schémas nouvellement créés.

Versions concernées :

V0.10.35 et versions antérieures

Versions corrigées :

V0.10.36 et versions ultérieures

  • Utilisez la fonction de masquage des données uniquement dans le schéma public.

  • Effectuez une mise à niveau vers la dernière version.

P2

L'erreur suivante est signalée : internal error:string decimal literal can not be tentative.

La clause IN de l'instruction SQL contient des valeurs décimales avec des précisions différentes. Exemple :

SELECT * FROM table where sval in(170344.964,1339107.84);

Versions concernées :

V0.10.34 et versions antérieures

Versions corrigées :

V0.10.35 et versions ultérieures

  • Modifiez l'instruction SQL pour vous assurer que les valeurs décimales de la clause IN ont la même précision.

  • Effectuez une mise à niveau vers la dernière version.

Juillet 2021

Niveau

Description

Cause

Versions

Solution de contournement

P0

Lorsqu'un champ RoaringBitmap est configuré avec l'encodage par dictionnaire, les opérations d'écriture échouent et l'instance ne peut plus être interrogée.

Le type RoaringBitmap ne prend pas en charge l'encodage par dictionnaire. Forcer ce paramètre rompt la logique d'encodage, ce qui entraîne des échecs d'écriture persistants.

Versions concernées :

V0.10.24 et antérieures.

Correction :

V0.10.25 et ultérieures.

  • Désactivez l'encodage par dictionnaire pour le champ RoaringBitmap.

  • Mettez à jour vers une version ultérieure.

P0

L'exécution de add comment on tablename is "is comment" dans un schéma autre que le public schema bloque les opérations d'écriture ou d'interrogation.

L'exécution d'une opération add comment, telle que add comment on tablename is "comment", dans un schéma autre que le public schema sans spécifier le nom du schéma dans l'instruction SQL provoque l'échec d'un nœud unique, ce qui bloque à son tour les opérations d'écriture et d'interrogation.

Versions concernées :

V0.10.20 et antérieures.

Correction :

V0.10.21 et ultérieures.

  • Incluez le nom du schéma lors de l'utilisation de l'instruction add comment : add comment on schema.tablename is "comment".

  • Mettez à jour vers une version ultérieure.

P0

Les opérations échouent avec l'erreur cannot acquire lock in time.

Dans les versions antérieures, les instructions DDL étaient verrouillées. Des opérations d'interrogation et de suppression à forte concurrence sur la même table pouvaient provoquer un interblocage sur un nœud backend, bloquant ainsi toutes les opérations sur cette table.

Versions concernées :

V0.9.22 et antérieures.

Correction :

V0.9.23 et ultérieures.

Mettez à jour vers une version ultérieure.

P1

L'espace de stockage augmente linéairement même lorsqu'aucune nouvelle donnée n'est écrite.

L'utilisation de l'instruction insert on conflict do update set pk =pk pour importer des données, ce qui n'entraîne aucune modification réelle des données, déclenche un bogue d'optimisation provoquant une croissance linéaire de l'espace de stockage.

Versions concernées :

V0.10.23 et antérieures.

Correction :

V0.10.24 et ultérieures.

  • Exécutez une instruction insert into values pour déclencher une mise à jour des données. Les données excédentaires seront supprimées.

  • Mettez à jour vers une version ultérieure.

P1

L'exécution de extract XXX FROM timestamptz/timestamp renvoie l'erreur suivante : time before epoch time not supported.

La fonction EXTRACT gère incorrectement les valeurs NULL dans les données.

Versions concernées :

V0.10.20 et antérieures.

Correction :

V0.10.21 et ultérieures.

  • Utilisez une condition de filtre dans l'instruction SQL pour exclure les valeurs NULL.

  • Mettez à jour vers une version ultérieure.

P1

Les opérations échouent avec l'erreur cant determine shard id of shard value.

L'instruction SQL contient une clause union all et la clause GROUP BY contient la distribution key, ce qui conduit à un plan d'exécution incorrect et à l'impossibilité de trouver le Shard correspondant.

Versions concernées :

V0.10.20 et antérieures.

Correction :

V0.10.21 et ultérieures.

Mettez à jour vers une version ultérieure.

P1

ERROR: Query could not generate plan by gporca : Group by key is type of unsupported type. not supported

L'utilisation d'un champ dont le type de données n'est pas exact dans la clause GROUP BY provoque cette erreur.

Versions concernées :

V0.9 et antérieures.

Correction :

Une restriction a été ajoutée dans la V0.10.

  • Évitez d'utiliser des types de données non exacts dans la clause GROUP BY.

  • Mettez à jour vers une version ultérieure.

P1

L'interrogation d'une table externe renvoie l'erreur suivante : unsupported column type:list.

Cette erreur se produit si vous ajoutez une array column à une table MaxCompute sans la remplir. Les interrogations ultérieures de cette table depuis une table externe échoueront alors.

Versions concernées :

V0.9.22 et antérieures.

Correction :

V0.9.23 et ultérieures.

  • Après avoir ajouté une array column à une table MaxCompute, écrivez immédiatement des données dans cette colonne.

  • Mettez à jour vers une version ultérieure.

P1

Les opérations échouent avec l'erreur suivante : ERROR: internal error: The left child should be column ref, num_children: 1.

L'utilisation du type varchar comme clé de clustering dans une requête déclenche cette erreur.

Versions concernées :

V0.9.24 et antérieures.

Correction :

V0.9.25 et ultérieures.

  • Remplacez la colonne varchar par une colonne TEXT.

  • Mettez à jour vers une version ultérieure.

P2

Erreur lors de l'interrogation d'une table externe : code: SERVER_INTERNAL_ERROR message: "query next FROM foreign table executor failed, Unknown file type: xxx

Ce problème survient lorsqu'une mise à jour de configuration dans le cluster MaxCompute n'est pas synchronisée avec les métadonnées de la table externe utilisées par Hologres.

Versions concernées :

V0.10.20 et antérieures.

Correction :

V0.10.21 et ultérieures.

Il n'existe aucune solution de contournement. Vous devez redémarrer l'instance ou mettre à niveau vers une version ultérieure.