Cette rubrique répertorie les codes d'erreur SQL Hologres courants, ainsi que leurs causes et solutions.
HG_ERRCODE_FDW_ERROR
Erreur : failed to import foreign schema from odps: Can't find file system factory
Cause : Hologres ne peut pas accéder au système de fichiers de la table MaxCompute en raison d'une erreur de configuration.
Solution : Vérifiez les configurations de votre serveur étranger et de votre table externe. Vous pouvez également importer les données dans une table interne Hologres.
ERRCODE_FDW_ERROR
Erreur : Failed to import foreign schema from ODPS: Authorization Failed: xxx
Cause : Le compte actuel ne dispose pas des autorisations requises sur la table MaxCompute spécifiée.
Solution : Accordez les autorisations nécessaires au compte dans MaxCompute. Pour plus de détails, reportez-vous à Gérer les autorisations des utilisateurs à l'aide de commandes.
Erreur : failed to import foreign schema from odps:Table not found -xxx
Cause : La table spécifiée n'existe pas dans MaxCompute.
Solution : Vérifiez que le nom de la table et le projet sont corrects dans MaxCompute.
ERRCODE_UNIQUE_VIOLATION ou violation de clé primaire
Erreur : Update row with Key (id)=(xxxx) multiple times or duplicate key value violates unique constraint
Cause : Les données écrites contiennent des valeurs de clé primaire en double, ce qui viole la contrainte d'unicité.
-
Solution :
Si l'erreur survient lors d'une instruction INSERT, utilisez la syntaxe
INSERT INTO xx ON CONFLICTpour dédupliquer les clés primaires. Pour plus de détails, reportez-vous à INSERT ON CONFLICT(UPSERT).Si cette erreur se produit avec une instruction
INSERT...ON CONFLICT, cela signifie que les données source elles-mêmes contiennent des clés primaires en double. Pour plus d'informations, consultez la section Erreurs courantes.Cette erreur peut également se produire si une table a un TTL (Time To Live) expiré et que les données expirées n'ont pas encore été supprimées physiquement. Dans ce cas, utilisez la fonction hg_remove_duplicated_pk pour nettoyer les données en double. Pour plus de détails, consultez la section Erreurs courantes.
ERRCODE_CHECK_VIOLATION ou contrainte de partition
Erreur : ERROR: new row for relation violates partition constraint
-
Cause : Les données insérées dans une table de partition enfant ne correspondent pas à la définition de la valeur de partition. Par exemple, l'insertion d'une ligne avec une valeur de partition autre que '20240110' dans une partition définie pour '20240110' provoque cette erreur. Exemple :
CREATE TABLE public.tbl_20240110 PARTITION OF public.tbl FOR VALUES IN('20240110'); INSERT INTO public.tbl_20240110 SELECT * FROM odps_tbl where sale_date >'20240110'; error: new row for relation "tbl_20240110" violates partition constraint Solution : Assurez-vous que les données écrites dans une table de partition enfant respectent la contrainte de partition.
ERRCODE_NOT_NULL_VIOLATION ou contrainte NOT NULL ou UsageProblem
Erreur : null value in column "xxx" violates not-null constraint
Cause : Une valeur NULL a été écrite dans une colonne soumise à une contrainte NOT NULL.
Solution : Supprimez les lignes contenant des valeurs NULL dans cette colonne, puis relancez l'opération d'écriture.
ERRCODE_UNDEFINED_TABLE
Erreur : Dispatch query failed: Table not found
Cause : La table n'existe pas. Cela se produit généralement lorsque la table a été créée récemment et que ses métadonnées ne se sont pas encore propagées, ou lorsqu'une opération TRUNCATE ou DROP a été effectuée sur la table pendant l'exécution de la requête.
Solution : Utilisez Query Insight dans HoloWeb pour vérifier s'il existe des opérations DDL concurrentes telles que TRUNCATE ou DROP. Résolvez les conflits éventuels, puis relancez la requête. Évitez d'effectuer des opérations DDL sur des tables faisant l'objet de requêtes actives. Pour plus de détails, reportez-vous à Query Insight.
ERRCODE_QUERY_CANCELED ou requête annulée
Erreur : ERROR: canceling statement due to statement timeout
Cause : Le temps d'exécution de la requête a dépassé le délai d'expiration de l'instruction configuré sur le client.
Solution : Optimisez la requête pour réduire son temps d'exécution ou augmentez la durée du délai d'expiration. Pour plus de détails sur les paramètres de délai d'expiration, reportez-vous à Gérer les requêtes.
Erreur : ERROR: Query:[xxx] Get result failed: canceling statement due to user request
Cause : La requête a été annulée, généralement parce qu'une opération DROP ou TRUNCATE a été effectuée sur la table pendant l'exécution.
Solution : Utilisez Query Insight dans HoloWeb pour vérifier s'il existe des opérations DDL conflictuelles. Pour plus de détails, reportez-vous à Query Insight. Évitez d'exécuter des opérations DDL pendant l'exécution des requêtes.
Erreur : query is cancelled Cannot find index full ID:xxx (table id: x, index id: x) in storages or it is deleting
Cause : Une opération TRUNCATE ou DROP a été effectuée sur l'une des tables interrogées pendant l'exécution. Cela a modifié l'ID de la table, entraînant l'annulation de la requête.
Solution : Utilisez Query Insight pour vérifier si une opération TRUNCATE ou DROP a été exécutée simultanément à votre requête. Pour plus de détails, reportez-vous à Query Insight.
ERRCODE_FEATURE_NOT_SUPPORTED ou fonctionnalité non prise en charge
Erreur : Feature not supported: insert into parent table
Cause : Hologres ne prend pas en charge l'insertion directe de données dans une table de partition parente.
Solution : Insérez plutôt les données dans une table de partition enfant spécifique. Pour plus de détails, reportez-vous à CREATE PARTITION TABLE.
Erreur : SELECT INTO is not supported now.
Cause : Hologres ne prend pas en charge la syntaxe SELECT INTO.
Solution : Utilisez la syntaxe INSERT INTO SELECT pour insérer des données. Pour plus de détails, reportez-vous à INSERT.
Erreur : ALTER TABLE CHANGE OWNER is not supported in SLPM (Schema-Level Permission Mode)
Cause : Vous ne pouvez pas utiliser ALTER TABLE pour modifier le propriétaire de la table dans le modèle d'autorisations au niveau du schéma (SLPM).
Solution : Dans le modèle SLPM, les propriétaires de tables sont des groupes d'utilisateurs. Pour modifier les autorisations d'un utilisateur, retirez-le du groupe d'utilisateurs. Pour plus de détails, reportez-vous à la section Retirer un utilisateur d'un groupe d'utilisateurs.
Erreur : Feature not supported: INSERT ON CONFLICT RETURNING
Cause : Hologres ne prend pas en charge la syntaxe
INSERT ON CONFLICT RETURNING.Solution : Utilisez la syntaxe
INSERT ON CONFLICTsans la clause RETURNING. Pour plus de détails, reportez-vous à INSERT ON CONFLICT(UPSERT).
Erreur : ERROR: INSERT in ddl transaction is not supported now
-
Cause : Par défaut, Hologres ne prend pas en charge les instructions DML telles que INSERT dans un bloc de transaction
BEGIN...COMMIT. Exemple :BEGIN; INSERT xxx commit; ERROR: INSERT in ddl transaction is not supported now Solution : Exécutez l'instruction INSERT en dehors de la transaction ou activez les transactions DML. Pour plus de détails, reportez-vous à Capacités de transaction SQL.
Erreur : Creating publication with table that without binlog is not supported now
Cause : Une publication a été créée pour une table dont le journal binaire (binlog) n'est pas activé. Les publications nécessitent le journal binaire pour s'abonner aux modifications de données.
Solution : Activez le journal binaire sur la table avant de créer la publication. Vous ne pouvez créer des publications que pour les tables dont le journal binaire est activé. Pour plus de détails, reportez-vous à Utiliser JDBC pour consommer les journaux binaires Hologres.
Erreur : Feature not supported: INSERT on conflict contains un-unique column
Cause : La cible de conflit dans l'instruction INSERT ON CONFLICT fait référence à une colonne qui n'est pas une clé primaire.
Solution : La cible de conflit dans INSERT ON CONFLICT doit faire référence uniquement aux colonnes de clé primaire.
Erreur : Feature not supported: UPDATE with shard keys
Cause : Hologres ne prend pas en charge les opérations UPDATE sur les colonnes de clé primaire ou de clé de distribution.
Solution : Ne mettez pas à jour les colonnes de clé primaire ou de clé de distribution. Pour modifier ces valeurs, vous devez
DELETEl'ancienne ligne etINSERTune nouvelle.
Erreur : time before 1925 not supported
Cause : Les fonctions liées au temps prennent en charge par défaut la plage allant de 1925 à 2282. Les valeurs en dehors de cette plage provoquent une erreur.
Solution : Pour des fonctions telles que to_char, to_date ou to_timestamp, définissez le paramètre GUC
hg_experimental_functions_use_pg_implementationavant l'instruction SQL pour activer une plage temporelle plus large. Pour plus de détails, reportez-vous à Fonctions de date et d'heure.
Erreur : Group by key is type of imprecise not supported
Cause : La clause GROUP BY fait référence à une colonne ayant un type de données imprécis, tel que FLOAT.
Solution : Utilisez des types de données précis au lieu de FLOAT dans la clause GROUP BY.
Erreur : CREATE TABLE is not supported for current instance
Cause : L'instance actuelle est une instance Shared Cluster (le endpoint commence par
hgmc, par exemplehgmc-cn-xxwwwkkk) ou une instance secondaire. Vous pouvez consulter le endpoint dans la console Hologres. Les instances Shared Cluster prennent en charge uniquement les tables externes, et non les tables internes. Les instances secondaires sont en lecture seule.-
Solution :
Si vous utilisez une instance Shared Cluster, créez une table externe à l'aide de la syntaxe de table étrangère. Pour plus de détails, reportez-vous à CREATE FOREIGN TABLE. Vous pouvez également utiliser une instance exclusive pour créer des tables internes.
Si vous utilisez une instance secondaire, vous devez créer les tables sur l'instance principale.
Erreur : ALTER TABLE ALTER COLUMN SET TYPE is not supported now
Cause : Hologres ne prend pas en charge la modification du type de données d'une colonne avec
ALTER TABLE.Solution : Pour modifier le type d'une colonne, recréez la table avec le type de colonne souhaité.
Erreur : ERROR: Currently materialized view does not support aggregate on expressions, only support single column
Cause : Les vues matérialisées sur table unique ne prennent pas en charge les expressions d'agrégation sur les colonnes calculées.
Solution : Évitez d'utiliser des expressions dans les vues matérialisées sur table unique. Utilisez uniquement des agrégats sur colonne unique. Pour plus de détails, reportez-vous à Gérer les vues matérialisées à l'aide de SQL.
Erreur : ERROR: SELECT rule's target list has too few entries
Cause : Les vues matérialisées en temps réel ne prennent pas en charge les expressions d'agrégation sur les colonnes calculées.
Solution : Évitez d'utiliser des expressions dans les vues matérialisées en temps réel. Pour plus de détails, reportez-vous à Gérer les vues matérialisées à l'aide de SQL.
Erreur : TransactionRowStore::DumpFlushDelta Not implemented
Cause : La version actuelle de Hologres présente une limitation d'implémentation concernant la syntaxe
DELETE FROM table USING, ce qui provoque cette erreur.-
Solution : Réécrivez l'instruction SQL pour éviter d'utiliser la clause USING pour les suppressions par lot. Utilisez plutôt la syntaxe suivante :
DELETE FROM table WHERE (col1, col2) IN ((val1, val2), ...);
ERRCODE_UNDEFINED_OBJECT
Erreur : column xxx does not exist
Cause : La colonne spécifiée n'existe pas dans la table.
Solution : Vérifiez que le nom de la colonne dans l'instruction SQL est correct.
Erreur : Table group xxx does not exist
Cause : Le groupe de tables spécifié n'existe pas.
Solution : Spécifiez un groupe de tables existant lors de la création de la table ou créez d'abord le groupe de tables.
Erreur : The specified partition does not exist
Cause : Cette erreur se produit généralement lors d'écritures ou de mises à jour de données lorsque la table de partition enfant cible n'existe pas.
Solution : Créez la partition enfant requise avant d'écrire les données.
Erreur : create binlog reader failed: Fail to find any shards, please check if the table group is in current virtual warehouse
Cause : Le groupe de tables spécifié n'est pas chargé sur l'entrepôt virtuel actuel.
Solution : Vérifiez que le groupe de tables est chargé sur l'entrepôt virtuel. Si ce n'est pas le cas, configurez l'entrepôt virtuel pour le charger. Pour plus de détails, reportez-vous à Autoriser un entrepôt virtuel à accéder aux données.
ERRCODE_INSUFFICIENT_PRIVILEGE ou permission denied
Pour les erreurs liées aux autorisations, consultez les rubriques suivantes :
ERRCODE_OUT_OF_MEMORY ou OOM
Erreur : Total memory used by all existing queries exceeded memory limitation
Cause : La requête a dépassé la limite de mémoire et a déclenché une erreur d'épuisement de la mémoire (OOM).
Solution : Pour plus de détails, reportez-vous à Résoudre les erreurs OOM.
ERRCODE_DATATYPE_MISMATCH
Erreur : internal error: Datasets has different schema
Cause : Les schémas des jeux de données combinés (par exemple, dans une instruction UNION ou INSERT...SELECT) ne correspondent pas en termes de nombre de colonnes, d'ordre ou de type de données.
Solution : Assurez-vous que le nombre de colonnes, l'ordre et les types de données sont cohérents dans toutes les parties de l'instruction.
ERRCODE_DIVISION_BY_ZERO
Cause : L'instruction SQL contient une division par zéro.
-
Solution :
Évitez les diviseurs nuls ou utilisez une expression CASE WHEN pour gérer ce cas.
Créez une extension compatible MySQL et activez l'option qui autorise la division par zéro. Pour plus de détails, reportez-vous à Migrer des données de MySQL vers Hologres.
ERRCODE_STRING_DATA_RIGHT_TRUNCATION
Erreur : value too long for type character varying(xxx)
Cause : La valeur des données dépasse la limite de longueur character varying(n) définie pour la colonne.
Solution : Tronquez ou transformez les données, augmentez la limite de longueur VARCHAR ou modifiez le type de colonne en TEXT.
ERRCODE_PROGRAM_LIMIT_EXCEEDED ou dépassement de la limite de scan Odps
Erreur : Exceeds the partition limitation of 512, current match xxx partitions.
Cause : La requête analyse plus de 512 partitions dans la table externe MaxCompute, ce qui dépasse la limite par défaut.
-
Solution : Ajoutez davantage de conditions de filtre de partition ou augmentez la limite d'analyse des partitions à l'aide du paramètre GUC suivant. Pour plus de détails, reportez-vous à la section FAQ sur l'intégration MaxCompute.
set hg_foreign_table_max_partition_limit =xx;
Erreur : Build desc failed: Exceeds the scan limitation of 200 GB, current scan xxx GB.
Cause : La quantité de données analysées dans la table externe MaxCompute dépasse la limite de 200 Go.
-
Solution :
Ajoutez davantage de conditions de filtre pour réduire la quantité de données analysées.
Importez les données dans une table interne Hologres, qui n'a pas de limite de taille d'analyse.
ERRCODE_SYNTAX_ERROR
Erreur : syntax error at or near "xxxxx"
Cause : L'instruction SQL comporte une erreur de syntaxe.
Solution : Vérifiez et corrigez la syntaxe SQL.
ERRCODE_UNDEFINED_FUNCTION
Erreur : DISTINCT is not implemented for window functions
Cause : Hologres ne prend actuellement pas en charge le mot-clé DISTINCT dans les fonctions de fenêtrage.
Solution : Supprimez le mot-clé DISTINCT de la fonction de fenêtrage.
Erreur : ERROR:function xxx does not exist
Cause : L'extension requise n'est pas installée ou l'appel de fonction utilise une syntaxe invalide.
Solution : Installez l'extension requise ou corrigez la syntaxe de la fonction.
Erreur : ERROR: function jsonb_set(json, text[], jsonb, boolean) does not exist
Cause : Les types d'arguments ne correspondent pas à la signature de la fonction JSONB_SET.
Solution : Assurez-vous que le premier argument de JSONB_SET est de type JSONB et non JSON. Pour plus de détails, reportez-vous à Types de données JSON et JSONB.
ERRCODE_E_R_E_READING_SQL_DATA_NOT_PERMITTED
Erreur : You have NO privilege 'odps:Select' on xxx
Cause : Le compte actuel ne dispose pas des autorisations nécessaires pour interroger la table MaxCompute.
Solution : Accordez les autorisations requises au compte dans MaxCompute.
Erreur : The sensitive label of column 'xxx' is 2, but your effective label is 0
Cause : Le compte actuel a accès uniquement à certaines colonnes de la table MaxCompute.
Solution : Accordez des autorisations plus larges au niveau des colonnes dans MaxCompute ou interrogez uniquement les colonnes auxquelles vous avez accès. Pour plus de détails sur l'autorisation, reportez-vous à Gérer les autorisations des utilisateurs à l'aide de commandes.
ERRCODE_DUPLICATE_OBJECT
Erreur : extension "xxxxx" already exists
Cause : L'extension spécifiée existe déjà dans la base de données.
Solution : L'extension est déjà installée. Aucune action n'est nécessaire. Pour éviter cette erreur, utilisez
CREATE EXTENSION IF NOT EXISTS.
ERRCODE_INVALID_TEXT_REPRESENTATION ou entrée invalide
Erreur : invalid input syntax for type numeric: \"\"
Cause : La colonne NUMERIC contient des données invalides, telles que des chaînes vides, qui ne peuvent pas être analysées comme une valeur numérique.
Solution : Nettoyez les données source pour vous assurer qu'elles sont conformes au type NUMERIC. Par exemple, convertissez les chaînes vides en NULL ou en 0.
Erreur : invalid input syntax for integer: xxx
Cause : La colonne INT contient des données qui ne peuvent pas être analysées comme un entier.
Solution : Nettoyez les données invalides.
ERRCODE_BAD_COPY_FILE_FORMAT
Erreur : missing data for column "xxx". failed to query next
Cause : Le format du fichier de données est incorrect. Cela se produit souvent lorsque les données contiennent le délimiteur spécifié dans la commande COPY (tel qu'une virgule ou un espace), ce qui entraîne une incompatibilité du nombre de colonnes.
Solution : Nettoyez les données ou utilisez un autre délimiteur qui n'apparaît pas dans les valeurs des données.
ERRCODE_UNDEFINED_COLUMN
Erreur : ERROR: INSERT has more expressions than target columns
Cause : Le nombre de valeurs dans l'instruction INSERT dépasse le nombre de colonnes dans la table cible.
Solution : Assurez-vous que le nombre de valeurs dans l'instruction INSERT correspond au nombre de colonnes cibles.
ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE
Erreur : bigint out of range
Cause : La valeur dépasse la plage valide du type BIGINT.
Solution : Assurez-vous que les données se situent dans la plage BIGINT (-9223372036854775808 à 9223372036854775807) ou utilisez le type NUMERIC pour des valeurs plus grandes.
Erreur : numeric field overflow in function round
Cause : La valeur NUMERIC dépasse sa limite de précision définie.
Solution : Ajustez la précision de la colonne NUMERIC pour accommoder les données ou nettoyez les données pour qu'elles correspondent à la précision définie.
ERRCODE_DATETIME_FIELD_OVERFLOW
Erreur : InsertOverwrite insert select table data failed : column a.unsign_type does not exist
Cause : La colonne spécifiée n'existe pas dans la table ou le nom d'un paramètre est incorrect.
Solution : Vérifiez et corrigez la syntaxe SQL.
Erreur : mismatched properties: table orientation is "column" but storage format is "sst"
Cause : Propriétés de table incompatibles. Le stockage orienté colonne a été spécifié, mais le format de stockage a été défini sur SST, ce qui est incompatible.
Solution : Vérifiez et corrigez l'instruction SQL.
ERRCODE_INVALID_DATETIME_FORMAT
Erreur : invalid value "" for "yyyy". Value must be an integer.
Cause : Les données ne sont pas conformes au format datetime attendu.
Solution : Assurez-vous que les données contiennent des valeurs datetime valides avant l'écriture.
ERRCODE_CHARACTER_NOT_IN_REPERTOIRE
Erreur : invalid byte sequence for encoding "UTF8": 0xe9 0x80
Cause : Les données contiennent des caractères non valides dans l'encodage UTF-8.
Solution : Nettoyez les données invalides.
ERRCODE_DUPLICATE_TABLE
Erreur : relation "xxxx" already exists
Cause : La table spécifiée existe déjà dans la base de données.
Solution : Utilisez un autre nom de table ou utilisez
CREATE TABLE IF NOT EXISTSpour éviter l'erreur.
ERRCODE_UNTRANSLATABLE_CHARACTER
Erreur : character with byte sequence 0xe4 0x9e 0xab in encoding "UTF8" has no equivalent in encoding "GBK"
Cause : Un caractère UTF-8 n'a pas d'équivalent dans l'encodage GBK cible.
Solution : Nettoyez les données invalides.
ERRCODE_GROUPING_ERROR
Erreur : column "xxx" must appear in the GROUP BY clause or be used in an aggregate function
Cause : Une colonne non agrégée dans la liste SELECT n'est pas incluse dans la clause GROUP BY. Toutes les colonnes de la liste SELECT doivent soit figurer dans GROUP BY, soit être utilisées dans une fonction d'agrégation.
Solution : Ajoutez la colonne à la clause GROUP BY ou utilisez-la dans une fonction d'agrégation.
ERRCODE_INVALID_TRANSACTION_STATE
Erreur : SET_TABLE_PROPERTY and CREATE TABLE statement are not in the same transaction for table
Cause : Les instructions CREATE TABLE et
call set_table_propertyne se trouvent pas dans la même transaction.-
Solution : Regroupez les instructions CREATE TABLE et toutes les instructions
call set_table_propertydans le même bloc de transaction. Exemple :begin; CREATE TABLE tbl ( xxxx ); call set_table_property('tbl', 'orientation', 'xx'); call set_table_property('tbl', 'distribution_key', 'xxx'); commit;
ERRCODE_AMBIGUOUS_COLUMN
Erreur : column reference "xxx" is ambiguous
Cause : Le nom de la colonne dans une requête JOIN est ambigu car il existe dans plusieurs tables. Par exemple, dans
SELECT id FROM t1 INNER JOIN t2 ON t1.id=t2.id,iddans la clauseSELECTest ambigu car il peut faire référence àt1ou àt2.Solution : Qualifiez la colonne avec le nom de la table ou un alias (par exemple,
t1.id).
ERRCODE_DUPLICATE_COLUMN
Erreur : column "xxx" specified more than once
Cause : Un nom de colonne apparaît plusieurs fois dans une instruction CREATE TABLE.
Solution : Supprimez la colonne en double de l'instruction CREATE TABLE.
ERRCODE_AMBIGUOUS_FUNCTION
Cette erreur se produit lorsqu'un appel de fonction correspond à plusieurs surcharges et que la base de données ne peut pas déterminer laquelle utiliser. Pour résoudre ce problème, castiez explicitement les arguments vers les types de données souhaités.
ERRCODE_INVALID_COLUMN_DEFINITION
Erreur : invalid definition of a numeric type
Cause : Une colonne NUMERIC ou DECIMAL a été définie sans spécifier sa précision.
Solution : Spécifiez la précision pour la colonne NUMERIC ou DECIMAL, telle que
NUMERIC(38, 18).
ERRCODE_CANNOT_COERCE
Erreur : cannot cast type date to integer
Cause : Le type DATE ne peut pas être converti en type INTEGER.
Solution : Modifiez la syntaxe SQL pour utiliser une conversion de type valide.
ERRCODE_UNDEFINED_SCHEMA ou ERRCODE_INVALID_SCHEMA_NAME
Erreur : schema "xxxx" does not exist
Cause : Le schéma n'existe pas dans la base de données.
Solution : Vérifiez que le nom du schéma dans l'instruction SQL est correct ou créez d'abord le schéma.
ERRCODE_INTERNAL_ERROR
Indique une erreur interne inattendue.
Erreur : internal error: Connect timeout, err: std_exception: Connection refused
Cause : L'instance Hologres n'est pas disponible ou ne répond pas.
Solution : Ouvrez un ticket de support pour enquêter sur l'indisponibilité de l'instance Hologres.
Erreur : too many shards in this instance
Cause : Le nombre de shards spécifié dépasse la limite totale de shards de l'instance.
Solution : Vérifiez la limite de shards pour votre instance et réduisez le nombre de shards en conséquence. Pour plus de détails, reportez-vous à Gestion des instances.
Erreur : internal error: Write is not allowed in readonly mode
Cause : Les opérations d'écriture (INSERT, UPDATE, DELETE) ne sont pas prises en charge sur une instance secondaire (réplica en lecture).
Solution : Effectuez les opérations d'écriture sur l'instance principale. Les instances secondaires prennent en charge uniquement les requêtes SELECT.
Erreur : remaining connection slots are reserved for non-replication superuser connections
Cause : L'instance a atteint sa limite maximale de connexions. Seules les connexions superutilisateur sont autorisées.
Solution : Utilisez un compte superutilisateur pour libérer les connexions inactives. Pour plus de détails, reportez-vous à la section Gérer les connexions.
Erreur : Build desc failed: Column type: information_schema.sql_identifier can not translate into hologres type
Cause : La requête fait référence à des colonnes de tables système avec des types de données complexes que Hologres ne prend pas en charge.
Solution : Évitez de joindre des tables système avec des types de colonnes complexes dans les requêtes Hologres.
Erreur : ERROR: commit ddl phase1 failed: DDLWrite is not allowed on replica
Cause : Les opérations DDL, telles que la modification de la liste blanche d'adresses IP, ne peuvent pas être effectuées sur une instance secondaire.
Solution : Modifiez la liste blanche d'adresses IP sur l'instance principale.
Erreur : current transaction is aborted, commands ignored until end of transaction block
-
Cause : Une commande dans une transaction a échoué et des commandes ultérieures ont été émises avant de revenir en arrière ou de terminer la transaction. Exemple :
begin; create xxxx begin; Solution : Exécutez la commande
rollback;pour mettre fin à la transaction actuelle et annuler toutes les modifications non validées.
Erreur : query length xxxxx exceeded the maximum 102400
Cause : La longueur de la requête dépasse la limite de 102 400 octets.
Solution : Réécrivez la requête pour vous assurer que sa longueur reste dans la limite spécifiée.
Erreur : Modify record by primary key is not on this table
Cause : Cette erreur se produit lors de l'écriture de données avec Flink en mode de mise à jour dans une table qui ne possède pas de clé primaire.
Solution : Définissez une clé primaire appropriée pour la table de destination. Pour plus de détails, reportez-vous à Clé primaire.
Erreur : ERROR: xxx for fe, should not be evaluated
Cause : La fonction s'exécute dans le moteur Hologres, mais les requêtes de tables système contournent le moteur. La fonction ne peut pas être évaluée en dehors du contexte du moteur.
Solution : N'utilisez pas cette fonction dans les requêtes portant sur les tables système Hologres.
Gérer les noms de colonnes commençant par un chiffre
Étant donné que Hologres est compatible avec PostgreSQL, les noms de colonnes commençant par un chiffre doivent être entourés de guillemets doubles (" ).
Si un nom de colonne commence par un chiffre, vous devez l'entourer de guillemets doubles dans votre requête, comme indiqué dans l'exemple suivant :
select bizdate,"1_day_active_users","7_day_active_users" from t_active_users;
Erreur : cannot drop table because other objects depend on it
Cause : La table possède des objets dépendants, tels que des vues qui y font référence.
Solution : Supprimez d'abord les objets dépendants, puis supprimez la table.
Erreur : BinaryArray cannot contain more than 2147483646 bytes
-
Cause
Lorsque les statistiques de table sont obsolètes, l'optimiseur peut choisir un plan d'exécution sous-optimal pour une jointure multi-tables, ce qui fait que la taille totale d'une seule colonne au sein d'un lot dépasse 2 Go et déclenche cette erreur.
-
Solution
Exécutez la commande suivante sur les tables impliquées dans la jointure pour mettre à jour leurs statistiques :
analyze <tablename>;Si l'erreur persiste après la mise à jour des statistiques, les données peuvent contenir des valeurs de colonne très volumineuses. Ajoutez le paramètre GUC suivant avant l'instruction SQL :
set hg_experimental_query_batch_size = 1024;
Erreur : Cannot reserve capacity larger than 2^31 - 1 for binary
-
Cause et solution
-
Cause 1 : Lorsque les statistiques de table sont obsolètes, un plan d'exécution sous-optimal peut entraîner le dépassement de la taille totale d'une seule colonne au sein d'un lot au-delà de 2 Go, déclenchant ainsi cette erreur.
Solution : Exécutez la commande
analyzesur la table pour mettre à jour ses statistiques.analyze <tablename>; -
Cause 2 : La taille des données dans une colonne de table dépasse 2 Go.
Solution : Ajoutez le paramètre GUC suivant avant l'instruction SQL pour réduire la taille du lot lu par chaque requête :
set hg_experimental_query_batch_size = 1024;
-
Erreur : internal error: Sequence is used out
Cause : Une colonne de type serial a épuisé ses valeurs de séquence auto-incrémentielle.
-
Solution :
Si vous utilisez le type serial, recréez la table et modifiez le type de colonne en bigserial.
L'écriture dans une colonne serial acquiert un verrou de table et peut réduire la concurrence. Envisagez d'éviter le type serial si possible.
Ajouter des sauts de ligne dans les résultats de requête SQL
Dans Hologres, pour insérer des sauts de ligne dans les résultats de requête SQL, utilisez la syntaxe de chaîne d'échappement avec le préfixe E . Dans les chaînes régulières, \n ou \r\n sont traités comme des caractères littéraux et ne produisent pas de sauts de ligne.
-
Exemples
-- Incorrect: does not produce a line break. SELECT STRING_AGG(name, '\r\n') FROM t1; -- Correct: use an escape string constant with the E prefix. SELECT STRING_AGG(name, E'\r\n') FROM t1; -- You can also use \n only. SELECT STRING_AGG(name, E'\n') FROM t1; -
Description
Hologres est compatible avec la syntaxe PostgreSQL. Dans PostgreSQL, les chaînes préfixées par
E(telles queE'\n') prennent en charge les séquences d'échappement de style C. Dans ces séquences,\nreprésente un caractère de nouvelle ligne et\rreprésente un retour chariot.
Que faire si la fonction NOW() renvoie une heure retardée ?
Dans Hologres, la fonction NOW() renvoie l'heure de début de la transaction actuelle, et non l'horloge système en temps réel. Si la requête s'exécute au sein d'une transaction de longue durée ou si la connexion est réutilisée via un pool de connexions, l'heure renvoyée peut être en retard par rapport à l'heure système réelle.
Pour obtenir l'horloge système en temps réel actuel, utilisez plutôt la fonction CLOCK_TIMESTAMP() . Contrairement à NOW() , CLOCK_TIMESTAMP() renvoie l'heure précise au moment de chaque invocation et n'est pas affectée par l'heure de début de la transaction.
L'instruction DELETE prend-elle en charge les sous-requêtes comme sélecteurs de partition dynamiques ?
Non. Dans Hologres, l'élagage des partitions nécessite que les conditions de partition utilisent des valeurs statiques ou des valeurs liées paramétrées. Les sous-requêtes et les expressions dynamiques ne sont pas prises en charge comme sélecteurs de partition, tels que WHERE ds = (SELECT MAX(ds) FROM ...) .
L'utilisation d'une sous-requête comme condition de partition entraîne l'échec de l'élagage des partitions, ce qui peut provoquer une analyse complète de la table avec une dégradation significative des performances. Pour éviter ce problème, interrogez d'abord la valeur de partition et stockez-la dans une variable, puis utilisez la valeur statique dans l'instruction DELETE.
Comment éviter les erreurs de l'optimiseur ORCA sans modifier les paramètres GUC ?
Vous ne pouvez pas résoudre ce problème connu en réécrivant simplement les instructions SQL. Pour corriger les erreurs de l'optimiseur ORCA, mettez à niveau l'instance Hologres vers la version 4.0 ou ultérieure.
Pourquoi une nouvelle instance signale-t-elle des erreurs ou rencontre-t-elle des problèmes de performances alors que l'ancienne instance fonctionne normalement ?
Les nouvelles et anciennes instances Hologres peuvent se comporter différemment en raison des différences de version, de la capacité de calcul et des variations de charge de travail. Une nouvelle instance peut utiliser une version de moteur différente avec des règles de validation plus strictes ou des configurations par défaut modifiées. De plus, la capacité de calcul et le profil de charge de la nouvelle instance peuvent différer de ceux de l'ancienne instance.
Pour résoudre les problèmes de compatibilité et de performance sur les nouvelles instances, effectuez une mise à niveau vers la dernière version stable de Hologres.
Erreur : ERROR: tables can have at most 6400 columns
Cause : Hologres limite chaque table à un maximum de 6400 colonnes. Même après avoir supprimé une colonne avec
DROP COLUMN, le nombre de colonnes dans les métadonnées de la table continue de s'accumuler. Des opérations fréquentes deADD COLUMNet deDROP COLUMNpeuvent entraîner le dépassement du nombre total de colonnes de métadonnées au-delà de 6400, déclenchant ainsi cette erreur.-
Solution :
Correction à court terme : Recréez la table et migrez les données. La nouvelle table commence avec un nouveau compteur de colonnes.
Recommandation à long terme : Optimisez le schéma de la table en consolidant les colonnes fréquemment modifiées dans une seule colonne JSON pour éviter les opérations répétées ADD/DROP COLUMN.