Mirajv1.0
FR

28. Codes d'erreur

Chaque erreur que MIRAJ renvoie porte trois informations : un code numérique, un SQLSTATE à 5 caractères et un message dans la langue du serveur. Cette page liste les codes numériques que le moteur produit, avec leur SQLSTATE et le libellé français exact du message, ainsi qu'une explication de la cause typique et, quand c'est utile, une piste de correction.

1. Comment lire une erreur MIRAJ#

Une erreur renvoyée par le moteur ou par le serveur réseau se présente sous la forme :

ERREUR 1146 (42S02) : La table 'ventes.clients' n'existe pas

(C'est la présentation de la console miraj-cli en français ; d'autres clients écrivent ERROR 1146 (42S02): ….)

  • 1146 est le code numérique, propre à MIRAJ (repris d'une numérotation historique bien établie dans l'écosystème SQL, pour rester familier aux outils existants) ;
  • 42S02 est le SQLSTATE, une norme indépendante du moteur (voir §3) ;
  • le texte est le message, produit à partir d'un gabarit dans lequel les %s ont été remplacés par les valeurs de l'erreur (nom de table, de colonne, etc.).

Un avertissement (niveau Warning ou Note) porte lui aussi un code de cette page ; l'instruction réussit et SHOW WARNINGS le liste :

SELECT CAST('abc' AS SIGNED);
SHOW WARNINGS;
+-----------------------+
| CAST('abc' AS SIGNED) |
+-----------------------+
|                     0 |
+-----------------------+

+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1292 | Truncated incorrect INTEGER value: 'abc' |
+---------+------+------------------------------------------+

2. Table de référence des codes d'erreur#

Le message français est donné mot pour mot (%s = valeur substituée à l'exécution : nom de table, de colonne, etc.).

2.1 Erreurs de syntaxe et d'analyse#

CodeSQLSTATEMessageCause typiquePiste de correction
106442000Erreur de syntaxe SQL ; vérifiez le manuel de votre version de Miraj pour la syntaxe correcte près de '%s' à la ligne %sConstruction SQL invalide, mot-clé mal placé, syntaxe non prise en charge, ou profondeur d'imbrication de requête dépassée (au-delà de 1 000 niveaux)Relire l'instruction autour du texte cité par « near » ; vérifier les parenthèses et virgules
106542000La requête est videInstruction vide envoyée au serveurVérifier que le client n'envoie pas une chaîne vide
762054001Instruction trop complexe : plus de %s éléments de syntaxe dans un même script (découpez-le en plusieurs instructions)Texte envoyé d'un bloc de plus de 2 millions d'éléments de syntaxe ou de 8 millions de jetons : INSERT … VALUES ou liste IN de plusieurs millions de valeurs, gros script envoyé en une fois (chapitre 16, §16.4.5)Découper en plusieurs instructions, ou envoyer le script instruction par instruction (miraj-cli connecté à un serveur, miraj-dump restore)
113942000Erreur « %s » dans l'expression régulièreMotif invalide passé à REGEXP, REGEXP_REPLACE, etc.Corriger le motif ; le détail de l'erreur du moteur d'expressions régulières est repris dans %s
1210HY000Arguments incorrects pour %sArgument(s) d'une fonction ou instruction incompatibles avec sa signatureVérifier le nombre et le type des arguments
1221HY000Utilisation incorrecte de %s et %sCombinaison de deux constructions incompatibles dans la même instructionSéparer les deux constructions ou consulter la documentation de l'instruction concernée
123542000Cette version de Miraj ne prend pas encore en charge '%s'Construction syntaxiquement valide mais non implémentée dans cette versionUtiliser une construction équivalente prise en charge
130542000%s %s n'existe pasAppel d'une fonction inconnue (FUNCTION f n'existe pas) ; ROLLUP et CUBE ne sont pas des fonctions : ils ne s'écrivent que dans un GROUP BYCorriger le nom ; vérifier la liste des chapitres 10 et 7
158242000Nombre de paramètres incorrect dans l'appel de la fonction native '%s'Nombre d'arguments hors de l'arité de la fonction (GROUPING() sans argument, COLUMN_GET à deux arguments…)Vérifier la signature au chapitre 10
4009HY000La spécification de fenêtre nommée '%s' n'est pas définieOVER w ou OVER (w ...) sans fenêtre w dans la clause WINDOW du même bloc, ou définie après celle qui la reprendDéfinir la fenêtre dans la clause WINDOW du bloc, avant de la reprendre (chapitre 9, §9.18)
4010HY000Plusieurs spécifications de fenêtre portent le même nom '%s'Deux fenêtres de même nom dans une clause WINDOW (la casse ne compte pas)Donner un nom distinct à chaque fenêtre
4011HY000Une spécification de fenêtre qui en reprend une autre ('%s') ne peut pas contenir de liste de partitionOVER (w PARTITION BY ...)Écrire le PARTITION BY dans la fenêtre nommée
4012HY000La spécification de fenêtre reprise '%s' contient déjà une liste de triOVER (w ORDER BY ...) alors que w a déjà un ORDER BYRetirer l'un des deux ORDER BY
4013HY000La spécification de fenêtre reprise '%s' ne peut pas contenir de cadreOVER (w ...) alors que w a un cadre ROWS ou RANGEÉcrire OVER w, ou placer le cadre dans la fenêtre qui reprend w
4019HY000Un cadre de type RANGE demande une clause ORDER BY à une seule clé de triCadre RANGE à décalage (n PRECEDING, INTERVAL n unité FOLLOWING...) dans une fenêtre sans ORDER BY ou à plusieurs clés de triTrier la fenêtre sur une seule clé, ou employer ROWS
4021HY000Un cadre de type RANGE demande un type numériqueDécalage numérique d'un cadre RANGE sur une clé de tri qui n'est pas numériqueSur une date, écrire INTERVAL n unité PRECEDING ; sinon trier sur une clé numérique
4099HY000Le constructeur de table utilisé a un nombre de valeurs différent d'une ligne à l'autreVALUES (1, 2), (3) employé comme requête : toutes les lignes n'ont pas le même nombre de valeursDonner le même nombre de valeurs à chaque ligne
4100HY000La référence de colonne '%s' ne peut pas être utilisée dans un constructeur de tableColonne citée dans une ligne d'un VALUES (...) employé comme requête, même celle d'une requête englobanteÉcrire une sous-requête dans la ligne, ou un SELECT à la place du VALUES
4180HY000FETCH ... WITH TIES exige la présence d'une clause ORDER BYFETCH FIRST n ROWS WITH TIES dans un bloc sans ORDER BY : les ex æquo ne sont définis que par un triAjouter l'ORDER BY, ou écrire ONLY
1111HY000Utilisation invalide d'une fonction d'agrégationAgrégat, ou GROUPING(), dans un WHERE ou sans GROUP BYDéplacer la condition dans HAVING ; GROUPING() ne s'emploie qu'avec GROUP BY (§9.17)
122221000Les SELECT utilisés n'ont pas le même nombre de colonnesMembres d'une UNION, INTERSECT ou EXCEPT qui n'ont pas le même nombre de colonnes (SELECT 1 UNION SELECT 1, 2)Donner la même liste de colonnes à chaque membre
124121000L'opérande doit contenir %s colonne(s)Constructeur de ligne comparé à une valeur ou à une sous-requête d'une autre largeur ((1,2) = 1, (id, nom) = (SELECT id …))Comparer des listes de même largeur
117642000La clé '%s' n'existe pas dans la table '%s'USE INDEX, FORCE INDEX ou IGNORE INDEX d'un index inconnu de la tableVérifier le nom avec SHOW INDEX FROM table
1191HY000Aucun index FULLTEXT ne correspond à la liste de colonnesMATCH (…) AGAINST (…) sur des colonnes que ne couvre aucun index FULLTEXTCréer l'index FULLTEXT sur exactement ces colonnes
1243HY000Identifiant de requête préparée inconnu (%s) donné à %sEXECUTE ou DEALLOCATE PREPARE d'un nom qui n'a pas été préparé dans la sessionPREPARE nom FROM '…' d'abord
3636HY000Requête récursive interrompue après %s itérations. Augmentez @@cte_max_recursion_depthExpression de table récursive (WITH RECURSIVE) sans condition d'arrêt, ou plus profonde que cte_max_recursion_depth (1000 par défaut)Ajouter la condition d'arrêt, ou relever cte_max_recursion_depth
3580HY000L'argument n°%s de la fonction GROUPING ne figure pas dans GROUP BYGROUPING(p) alors que p n'est pas une expression du GROUP BYPasser à GROUPING les expressions du GROUP BY telles qu'écrites
4177HY000Toute fonction table doit avoir un alias.FROM JSON_TABLE(...) sans aliasAjouter [AS] alias
3668HY000Les références latérales de '%s' exigent une jointure INNER ou LEFTJSON_TABLE dont le document cite une table placée avant, jointe par RIGHT JOINUtiliser la virgule, JOIN ou LEFT JOIN
111542000Jeu de caractères inconnu : '%s'Jeu de caractères inconnu dans SET NAMES, SET CHARACTER SET ou SET character_set_client / _results / _connection / _server / _database (SET NAMES klingon)utf8mb4 (ou un jeu reconnu, ou DEFAULT)
125342000La collation '%s' n'est pas valide pour le jeu de caractères '%s'Interclassement d'un autre jeu (CHARACTER SET latin1 COLLATE utf8mb4_unicode_ci, 'a' COLLATE utf8_bin sur un texte utf8mb4 : La collation 'utf8mb3_bin' n'est pas valide pour le jeu de caractères 'utf8mb4')Prendre un interclassement utf8mb4_… (voir le chapitre Interclassements)
1267, 1270, 1271HY000Mélange illégal de collationsJamais levés par MIRAJ : un mélange sans vainqueur se compare sous l'interclassement le plus large (chapitre Interclassements, § 13.3)—
1273HY000Collation inconnue : '%s'Nom d'interclassement non pris en charge (utf8mb4_0900_ai_ci, *_as_cs, linguistiques) dans une définition de colonne, de table ou une expression ; dans SET NAMES … COLLATE et SET collation_connection, collation_server ou collation_database, seul un nom qui ne se rattache à aucun jeu reconnu (klingon_ci) est refusé, les autres étant acceptés sous l'interclassement général (avertissement 1273 pour SET collation_connection)utf8mb4_general_ci, utf8mb4_unicode_ci ou utf8mb4_bin
1302HY000Déclarations contradictoires : '%s' et '%s'Colonne déclarée BINARY avec un COLLATE autre que binaireGarder l'un des deux
140742000SQLSTATE incorrect : '%s'SIGNAL/RESIGNAL SQLSTATE '...' d'une routine avec une valeur qui n'est pas un code à 5 caractères valideUtiliser un SQLSTATE conforme (5 caractères, classe différente de 00, 01, XA)

2.2 Erreurs de schéma (bases, tables, colonnes, index)#

CodeSQLSTATEMessageCause typiquePiste de correction
29HY000Fichier '%s' introuvable (code : %s)Fichier attendu par le moteur absent du disque (table, journal...)Vérifier le chemin et les droits d'accès au dossier de données
1004HY000Impossible de créer le fichier '%s' (errno : %s)Écriture disque impossible (droits, disque plein, chemin invalide)Vérifier l'espace disque et les droits sur le dossier de données
1007HY000Impossible de créer la base '%s' ; elle existe déjàCREATE DATABASE sans IF NOT EXISTS sur une base existanteAjouter IF NOT EXISTS ou choisir un autre nom
1008HY000Impossible de supprimer la base '%s' ; elle n'existe pasDROP DATABASE sans IF EXISTS sur une base absenteAjouter IF EXISTS ou vérifier le nom
104442000Accès refusé pour l'utilisateur '%s'@'%s' à la base de données '%s'Compte sans privilège sur la base (contrôlé à chaque USE et à la poignée de main)Accorder un privilège de base avec GRANT
104528000Accès refusé pour l'utilisateur '%s'@'%s' (mot de passe utilisé : %s)Identifiants invalides à la connexionVérifier le compte et le mot de passe
10463D000Aucune base de données sélectionnéeInstruction nécessitant une base courante exécutée sans USEExécuter USE <base> avant l'instruction, ou qualifier les objets
104942000Base de données '%s' inconnueUSE ou référence à une base qui n'existe pasVérifier l'orthographe ou créer la base
105042S01La table '%s' existe déjàCREATE TABLE sans IF NOT EXISTS sur un nom déjà pris (table ou vue)Ajouter IF NOT EXISTS, ou DROP / CREATE OR REPLACE
105142S02Table '%s' inconnueDROP TABLE d'une table absente, sans IF EXISTS (Table 'ventes.nope' inconnue)Vérifier le nom et la base courante
105223000La colonne '%s' dans %s est ambiguëColonne présente dans plusieurs tables de la requête sans qualificationQualifier la colonne (table.colonne)
105442S22Colonne '%s' inconnue dans '%s'Nom de colonne mal orthographié ou colonne inexistante dans le contexte citéVérifier DESCRIBE <table> ou information_schema.COLUMNS
106042S21Nom de colonne '%s' en doubleDeux colonnes du même nom dans une même définition de table ou un CREATE TABLE … SELECTRenommer l'une des colonnes ou lui donner un alias
106142000Nom de clé '%s' en doubleDeux index/clés du même nom sur la tableChoisir un autre nom d'index
106642000Table ou alias non unique : '%s'Même nom de table ou d'alias utilisé deux fois dans une requêteDonner un alias distinct à chaque occurrence
110242000Nom de base de données incorrect : '%s'Nom hors des règles (longueur, caractères autorisés)Utiliser des caractères ASCII, chiffres, _, $ et espace (jamais en dernière position), 64 octets au plus
110342000Nom de table incorrect : '%s'Même règle que 1102, appliquée au nom de tableIdem
110942S02Table '%s' inconnue dans %sTable référencée absente dans le contexte précisé (%s : clause, jointure...)Vérifier le nom de la table dans cette clause
114642S02La table '%s.%s' n'existe pasTable absente de la base indiquéeVérifier le nom et la base, ou la créer
116642000Nom de colonne incorrect : '%s'Nom de colonne hors des règles d'identifiantRenommer selon les règles
117042000La colonne BLOB/TEXT '%s' est utilisée dans une clé sans longueur de cléColonne BLOB entière ou colonne géométrique (POINT…) en clé primaire, colonne géométrique dans un index ordinaireUtiliser une colonne de longueur bornée, une clé UNIQUE (qui admet un BLOB entier), ou un index SPATIAL pour une géométrie
128042000Nom d'index incorrect : '%s'Nom d'index invalide ou trop longRaccourcir ou corriger le nom
1031HY000Le moteur de stockage %s de la table %s n'a pas cette optionFonction non prise en charge par une table disque (ENGINE = Aria, MyISAM, DISK) : index vectoriel, partitionnementGarder la table en mémoire (ENGINE = InnoDB ou sans clause ENGINE)
1214HY000Le type de table utilisé ne prend pas en charge les index FULLTEXTIndex FULLTEXT ou de trigrammes sur une table disque (y compris un export en ENGINE=MyISAM avec index FULLTEXT)Retirer la clause ENGINE ou la remplacer par ENGINE = InnoDB
1266HY000Moteur de stockage %s utilisé pour la table '%s'Avertissement : ENGINE = Aria / MyISAM / DISK sur une table temporaire, qui reste en mémoireAucune action : la table temporaire est créée en mémoire
128642000Moteur de stockage '%s' inconnuSET default_storage_engine d'un nom de moteur inconnuUtiliser MIRAJ, InnoDB, MEMORY, Aria, MyISAM ou DISK
3162HY000Le compte %s n'existe pas.Avertissement de DROP USER IF EXISTS, ALTER USER IF EXISTS ou DROP ROLE IF EXISTS sur un compte ou un rôle absent (le texte de l'avertissement est Authorization ID 'zz'@'%' does not exist.)Aucune : le compte est passé, les autres sont traités
3163HY000Le compte %s existe déjà.Avertissement de CREATE USER IF NOT EXISTS ou CREATE ROLE IF NOT EXISTS sur un compte ou un rôle existantAucune ; sans IF NOT EXISTS, l'erreur est 1396 (§2.4)
106342000Spécification de colonne incorrecte pour la colonne '%s'Attribut incompatible avec le type de la colonne, par exemple colonnes d'une PERIOD FOR qui ne sont pas des dates (chapitre 12)Corriger le type ou l'attribut
106742000Valeur par défaut invalide pour '%s'DEFAULT impossible à convertir dans le type de la colonne (a INT DEFAULT 'abc')Donner une valeur par défaut du bon type
107242000La colonne de clé '%s' n'existe pas dans la tableIndex ou clé qui cite une colonne absente de la table (KEY (b))Corriger le nom de la colonne
107542000Définition de table incorrecte ; il ne peut y avoir qu'une seule colonne auto-incrémentée et elle doit être une cléDeux colonnes AUTO_INCREMENT, ou une colonne AUTO_INCREMENT qui n'est en tête d'aucun indexGarder une seule colonne AUTO_INCREMENT et l'indexer (PRIMARY KEY)
109142000Impossible de supprimer %s %s ; vérifiez qu'il existeALTER TABLE … DROP COLUMN, DROP INDEX, DROP CONSTRAINT ou DROP INDEX … ON t d'un élément absentVérifier le nom ; avec IF EXISTS, simple note 1091
111042000Colonne '%s' indiquée deux foisMême colonne pour le début et la fin d'une PERIOD FORDonner deux colonnes distinctes
1505HY000Gestion de partitions impossible sur une table non partitionnéeALTER TABLE … DROP / TRUNCATE / … PARTITION sur une table qui n'est pas partitionnéeVérifier la table visée
1526HY000Aucune partition de la table ne reçoit la valeur %sLigne d'une table PARTITION BY RANGE ou LIST qu'aucune partition ne couvreAjouter une partition (VALUES LESS THAN MAXVALUE, DEFAULT)
1826HY000Nom de contrainte %s en double '%s'Deux contraintes de même nom dans une table (CONSTRAINT k CHECK … deux fois)Renommer l'une des contraintes
1829HY000Impossible de supprimer la colonne '%s' : elle est nécessaire à la contrainte de clé étrangère '%s' de la table '%s'ALTER TABLE parent DROP COLUMN d'une colonne référencée par une clé étrangère d'une autre tableSupprimer d'abord la clé étrangère de la table enfant
3730HY000Impossible de supprimer la table '%s' référencée par la contrainte de clé étrangère '%s' de la table '%s'.DROP TABLE d'une table parente encore référencéeSupprimer d'abord la table enfant ou sa clé étrangère (ou SET foreign_key_checks = 0)
3821HY000La contrainte de vérification '%s' est introuvable dans la table.ALTER TABLE … DROP CHECK d'une contrainte absenteVérifier le nom dans SHOW CREATE TABLE
409242S02VIEW inconnue : '%s'DROP VIEW d'une vue absente, sans IF EXISTSDROP VIEW IF EXISTS

2.3 Erreurs de contraintes et de données#

CodeSQLSTATEMessageCause typiquePiste de correction
104823000La colonne '%s' ne peut pas être NULLINSERT/UPDATE fournissant NULL à une colonne NOT NULL sans valeur implicite disponibleFournir une valeur, ou revoir la contrainte NOT NULL
106223000Doublon '%s' pour la clé '%s'Violation d'une clé primaire ou UNIQUEUtiliser INSERT IGNORE, REPLACE ou ON DUPLICATE KEY UPDATE si le doublon est attendu
106842000Plusieurs clés primaires définiesDeux clauses PRIMARY KEY dans une même définition de tableN'en garder qu'une
1093HY000La table '%s' est indiquée deux fois, comme cible de '%s' et comme source séparée de donnéesSous-requête de la clause RETURNING d'un INSERT, REPLACE ou DELETE qui lit la table écrite (§8.9)Lire la table par une instruction séparée, après l'écriture
113621S01Le nombre de colonnes ne correspond pas au nombre de valeurs à la ligne %sINSERT ... VALUES (...) avec un nombre de valeurs différent du nombre de colonnesFaire correspondre les deux listes
113822004Utilisation incorrecte de la valeur NULLNULL utilisé là où il n'est pas permis (ex. valeur d'une contrainte)Retirer le NULL ou revoir l'expression
117242000Le résultat compte plus d'une ligneSous-requête scalaire ou SELECT ... INTO recevant plusieurs lignesAjouter une condition qui ramène le résultat à une ligne, ou utiliser LIMIT 1 en connaissance de cause
1215HY000Impossible d'ajouter la contrainte de clé étrangèreDéfinition de clé étrangère invalide (types incompatibles, index manquant côté parent...)Vérifier les types des colonnes et l'existence d'un index sur la colonne référencée
124221000La sous-requête renvoie plus d'une ligneSous-requête utilisée en contexte scalaire (=, SELECT ... INTO) qui rend plusieurs lignesRestreindre la sous-requête ou utiliser IN / EXISTS
126422003Valeur hors limites pour la colonne '%s' à la ligne %sValeur numérique hors de la plage du type déclaréUtiliser un type plus large ou corriger la valeur
129222007Valeur %s incorrecte tronquée : '%s'Conversion échouée avec troncature (ex. chaîne non numérique convertie en nombre) ; aussi Incorrect vector value : octets ou texte qui ne forment pas un vecteur de la colonne VECTOR(n) (chapitre 6)Corriger la valeur source ou son format
4078HY000Cannot cast '%s' as 'vector' in assignment of %sNombre ou date affecté à une colonne VECTOR(n) (INSERT … VALUES (1, 12), UPDATE … SET v = 12), refusé dès la préparation, même sans ligne écrite ; avertissement hors mode strictÉcrire le vecteur en texte '[…]', par VEC_FromText ou en octets
136522012Division par zéroDivision ou modulo par 0 dans une écriture (INSERT, UPDATE) quand sql_mode contient ERROR_FOR_DIVISION_BY_ZERO et un mode strict ; avec ERROR_FOR_DIVISION_BY_ZERO seul, ou dans un SELECT, avertissement et résultat NULL ; sans ce mode, NULL sans avertissementProtéger l'expression (CASE WHEN ... != 0) ou accepter le résultat NULL selon le mode SQL
136622007Valeur %s incorrecte : '%s' pour la colonne %s à la ligne %sValeur incompatible avec le type de la colonne à l'écriture, en mode strict ('z' dans une colonne INT)Corriger la valeur ou le type de colonne
140622001Données trop longues pour la colonne '%s' à la ligne %sChaîne plus longue que la longueur déclarée de la colonneAgrandir la colonne ou tronquer la valeur en amont
145123000Impossible de supprimer ou de modifier une ligne parente : une contrainte de clé étrangère échoue (%s)Suppression/modification d'une ligne encore référencée par une table enfantSupprimer/modifier d'abord les lignes enfants, ou revoir l'action ON DELETE/ON UPDATE
145223000Impossible d'ajouter ou de modifier une ligne enfant : une contrainte de clé étrangère échoue (%s)Insertion/modification référençant une ligne parente inexistanteInsérer d'abord la ligne parente, ou vérifier la valeur de la clé étrangère
4082HY000La variable de ligne '%s' n'a pas de champ '%s'champ ligne.colonne absent de la ligne d'une boucle FOR ligne IN …corriger le nom, ou donner un alias à la colonne dans la requête de la boucle
4084HY000La séquence '%s.%s' est épuiséeNEXTVAL au-delà de MAXVALUE (ou MINVALUE) d'une séquence sans CYCLEALTER SEQUENCE … RESTART, élargir les bornes ou ajouter CYCLE
4085HY000La séquence '%s.%s' a une valeur hors limites pour ses optionsMINVALUE ≥ MAXVALUE, START hors des bornes, CACHE négatif…Corriger les options
408942S02'%s.%s' n'est pas une SEQUENCESHOW CREATE SEQUENCE, ALTER SEQUENCE, NEXTVAL / LASTVAL / SETVAL ou DEFAULT NEXTVAL(…) sur une table ou une vue, contrôlés à l'ouverture de l'instruction même s'ils ne sont jamais évaluésViser une séquence
409042S02'%s.%s' n'est pas une SEQUENCEDROP SEQUENCE d'une table (note avec IF EXISTS)DROP TABLE
196542S02'%s.%s' est une vueDROP SEQUENCE d'une vue (note avec IF EXISTS)DROP VIEW
409142S02SEQUENCE inconnue : '%s'DROP SEQUENCE ou ALTER SEQUENCE d'une séquence absente (note avec IF EXISTS) ; appel de séquence inconnue qui précède toute table de l'instruction (SELECT NEXTVAL(s)) — après une table, ou dans une fonction ou un déclencheur : 1146DROP SEQUENCE IF EXISTS, vérifier le nom
4093HY000INSERT incorrect dans une SEQUENCE. Seul un INSERT sur une seule table est possible dans un objet séquence (…). Pour modifier la SEQUENCE, utilisez ALTER SEQUENCE.INSERT, UPDATE ou DELETE visant une séquenceALTER SEQUENCE ou SETVAL
1256HY000Taille des données décompressées trop grande ; la taille maximale est %s (la longueur des données décompressées est probablement corrompue)Avertissement d'UNCOMPRESS (résultat NULL) : la longueur annoncée par l'en-tête dépasse max_allowed_packetVérifier que la valeur vient bien de COMPRESS et n'a pas été tronquée ou convertie en texte
1258HY000ZLIB : pas assez de place dans le tampon de sortie (la longueur des données décompressées est probablement corrompue)Avertissement d'UNCOMPRESS (résultat NULL) : le flux rend plus d'octets que la longueur annoncéeIdem
1259HY000ZLIB : données d'entrée corrompuesAvertissement d'UNCOMPRESS ou d'UNCOMPRESSED_LENGTH (résultat NULL) : valeur de quatre octets au plus, flux zlib corrompu ou tronquéIdem ; ranger les valeurs compressées dans une colonne VARBINARY ou BLOB
1300HY000Chaîne de caractères %s invalide : '%s'Avertissement de CHR(code) (résultat NULL) : les octets de code ne forment pas un caractère du jeuDonner le code du caractère dans son encodage (CHR(50089) pour é), ou employer CHAR(code)
1298HY000Fuseau horaire inconnu ou incorrect : '%s'SET time_zone ou SET GLOBAL time_zone avec un nom absent de la base IANA, ou un décalage hors de -13:59 à +14:00 ; CONVERT_TZ rend NULL dans ce cas, sans erreurÉcrire SYSTEM, un décalage ±HH:MM ou un nom IANA (Europe/Paris)
4176HY000Impossible de donner une valeur à la colonne '%s' de JSON_TABLE '%s'.Colonne JSON_TABLE déclarée ERROR ON EMPTY dont le chemin ne désigne rienÉcrire NULL ON EMPTY ou DEFAULT '...' ON EMPTY
4178HY000Impossible de placer un tableau ou un objet dans la colonne scalaire '%s' de JSON_TABLE '%s'.Colonne scalaire JSON_TABLE ... ERROR ON ERROR dont le chemin désigne un tableau ou un objetViser une valeur scalaire, ou déclarer la colonne JSON
4179HY000Impossible de placer plusieurs valeurs désignées par le chemin dans la colonne '%s' de JSON_TABLE '%s'.Colonne JSON_TABLE ... ERROR ON ERROR dont le chemin (joker, plage) désigne plusieurs valeursDésigner une seule valeur, ou passer par NESTED PATH
4146HY000%s doit être de type %s pour la table versionnée %sColonne de période d'une table WITH SYSTEM VERSIONING qui n'est ni TIMESTAMP ni DATETIME (chapitre 12)Corriger le type
4119HY000Interdit sur la table versionnée %s.%s. Changez @@system_versioning_alter_history pour poursuivre l'ALTER.ALTER TABLE qui change les colonnes d'une table versionnéeSET system_versioning_alter_history = KEEP
4124HY000La table %s n'est pas versionnée par le systèmeFOR SYSTEM_TIME, DELETE HISTORY, PARTITION BY SYSTEM_TIME ou DROP SYSTEM VERSIONING sur une table ordinaireALTER TABLE ... ADD SYSTEM VERSIONING
4127HY000Paramètres invalides pour la table partitionnée %s : valeur incorrecte pour '%s'INTERVAL / LIMIT nul, STARTS qui n'est pas un instantCorriger la clause PARTITION BY SYSTEM_TIME
4128HY000Partitions incorrectes pour %s : au moins une partition HISTORY et exactement une dernière partition CURRENT sont requisespas de partition HISTORY, CURRENT absente, double ou pas en dernier ; retrait de CURRENT ou de la dernière HISTORYGarder au moins une HISTORY et une CURRENT en dernier
4131HY000Impossible de faire DROP SYSTEM VERSIONING sur la table %s partitionnée BY SYSTEM_TIMEDROP SYSTEM VERSIONINGALTER TABLE ... REMOVE PARTITIONING d'abord
4135HY000La table %s est déjà versionnée par le systèmeADD SYSTEM VERSIONING sur une table déjà versionnéeRien à faire
4152 à 4158HY000Périodes applicativestable temporaire, types différents, deux périodes, colonne générée ou système, période inconnue, colonne de période dans SET, DROP CONSTRAINT de la périodeVoir le chapitre 12, §12.6 et §12.7
4170, 4171HY000Clé WITHOUT OVERLAPScolonne de la période citée dans la clé, index non uniqueVoir le chapitre 12, §12.8
4037 / 4038HY000Fin inattendue du texte JSON dans l'argument %s de la fonction '%s' / Erreur de syntaxe dans le texte JSON de l'argument %s de la fonction '%s' à la position %sDocument passé à une fonction JSON qui n'est pas du JSON valide : avertissement et résultat NULL (erreur pour JSON_TABLE)Corriger le document ; JSON_VALID permet d'écarter les lignes invalides
4041 / 4042HY000Fin inattendue du chemin JSON dans l'argument %s de la fonction '%s' / Erreur de syntaxe dans le chemin JSON de l'argument %s de la fonction '%s' à la position %sChemin JSON mal écrit ('$.', 'a', '$[1'...) : avertissement et résultat NULL (erreur pour JSON_TABLE)Commencer par $ et suivre la syntaxe des chemins (chapitre 9.10)
4036HY000Caractère interdit en JSON dans l'argument %s de la fonction '%s' à la position %sCaractère de contrôle (tabulation, saut de ligne...) non échappé dans une chaîne d'un document : avertissement et résultat NULL (erreur pour JSON_TABLE)Échapper le caractère (\t, \n)
4044HY000Jokers et plages interdits dans le chemin JSON de l'argument %s de la fonction '%s'Joker ou plage dans le chemin d'une fonction de modification, JSON_KEYS, JSON_LENGTH ou JSON_CONTAINS : avertissement et résultat NULLDésigner une seule valeur
4051HY000Le chemin '$' est interdit dans l'argument %s de la fonction '%s'.JSON_REMOVE(doc, '$') : avertissement et résultat NULLDésigner un membre ou une case
4193HY000Valeur invalide pour le mot-clé %sJSON_SCHEMA_VALID dont le schéma donne à type une valeur inconnue (integer compris)Écrire number, string, object, array, boolean ou null
4046HY000L'argument %s de la fonction '%s' doit valoir "one" ou "all".Mode de JSON_CONTAINS_PATH / JSON_SEARCH mal écrit : avertissement et résultat NULLÉcrire 'one' ou 'all'
315622018Valeur JSON invalide pour une conversion en %s depuis la colonne %s à la ligne %sJSON_VALUE ... ERROR ON ERROR sur une valeur non convertible ou non scalaireRevoir le type de RETURNING, ou choisir NULL / DEFAULT ON ERROR
315722032Le document JSON dépasse la profondeur maximale.Plus de 100 niveaux d'imbricationAplatir le document
315822032Un document JSON ne peut pas avoir de membre dont le nom est NULL.Clé NULL dans JSON_OBJECT ou JSON_OBJECTAGGÉcarter les lignes dont la clé est NULL
316542000Le chemin ne désigne pas une case de tableau.Chemin de JSON_ARRAY_INSERT qui ne finit pas par [n]Terminer le chemin par une case
396622035Aucune valeur trouvée par '%s' au chemin indiqué.JSON_VALUE ... ERROR ON EMPTY sur un chemin qui ne désigne rienChoisir NULL / DEFAULT ON EMPTY, ou vérifier le chemin
402523000La CONTRAINTE %s a échoué pour %s.%sLigne refusée par une contrainte CHECKCorriger la valeur pour satisfaire la contrainte, ou revoir la contrainte
1364HY000Le champ '%s' n'a pas de valeur par défautINSERT qui ne donne pas de valeur à une colonne NOT NULL sans DEFAULT, en mode strictFournir la valeur, ou donner un DEFAULT à la colonne
136944000Échec de CHECK OPTION %s.%sINSERT ou UPDATE au travers d'une vue WITH CHECK OPTION d'une ligne que la vue ne montrerait pasÉcrire une ligne qui satisfait le WHERE de la vue
169022003La valeur %s est hors limites dans '%s'Calcul entier qui dépasse son type (9223372036854775807 + 1 : La valeur BIGINT est hors limites dans '9223372036854775807 + 1')Convertir en DECIMAL avant le calcul, ou réduire les valeurs
170142000Impossible de vider une table référencée par une contrainte de clé étrangère (%s)TRUNCATE TABLE d'une table parenteDELETE FROM, ou supprimer d'abord la clé étrangère
126501000Données tronquées pour la colonne '%s' à la ligne %sAvertissement hors mode strict : chaîne trop longue raccourcie, valeur ajustée à la colonne (en mode strict : 1406 ou 1366)Vérifier la donnée ; SHOW WARNINGS donne la colonne et la ligne
144122008Fonction de date : dépassement du champ %sAvertissement d'un calcul de date hors de l'intervalle admis (DATE_ADD('9999-12-31', INTERVAL 1 DAY)) : résultat NULLVérifier les bornes du calcul

2.4 Erreurs de privilèges#

CodeSQLSTATEMessageCause typiquePiste de correction
104442000Accès refusé pour l'utilisateur '%s'@'%s' à la base de données '%s'Contrôle de niveau base (voir §2.2)Accorder le privilège de base nécessaire
114242000Commande %s refusée à l'utilisateur '%s'@'%s' pour la table %s.%sContrôle de niveau table, avant même la résolution du nomAccorder le privilège de table nécessaire (SELECT, INSERT...)
114342000Commande %s refusée à l'utilisateur '%s'@'%s' pour la colonne '%s' de la table '%s'Le compte n'a le privilège que sur certaines colonnes de la table, pas sur celle que l'instruction lit ou écrit (chapitre 15, privilèges par colonne)Accorder le privilège sur la colonne (GRANT SELECT (col) ON base.table) ou sur la table
114442000Commande GRANT/REVOKE invalide ; consultez le manuel pour savoir quels privilèges s'appliquent à ce niveauGRANT/REVOKE d'un privilège à un niveau où il n'a pas de sens (ex. privilège de table au niveau global)Utiliser le niveau adapté au privilège
114142000Aucun droit de ce type n'est défini pour l'utilisateur '%s' sur l'hôte '%s'REVOKE au niveau global d'un privilège que le compte n'a pasVérifier SHOW GRANTS FOR compte
1396HY000L'opération %s a échoué pour %sCREATE USER ou CREATE ROLE d'un compte qui existe déjà, DROP USER, DROP ROLE ou ALTER USER d'un compte absent ; aucun compte de la liste n'est traitéIF NOT EXISTS / IF EXISTS (avertissements 3163 / 3162)
141042000Vous n'êtes pas autorisé à créer un compte avec GRANTGRANT … TO un compte qui n'existe pasCREATE USER d'abord
3118HY000Accès refusé pour l'utilisateur '%s'@'%s'. Le compte est verrouillé.Connexion à un compte ACCOUNT LOCKALTER USER … ACCOUNT UNLOCK
104008004Trop de connexionsmax_connections connexions déjà ouvertes : paquet d'erreur envoyé à la place de la poignée de mainFermer des connexions inutiles ou relever --max-connections / SET GLOBAL max_connections
1129HY000L'hôte '%s' est bloqué après de trop nombreux échecs de connexion ; débloquez-le par 'FLUSH HOSTS'max_connect_errors échecs d'authentification consécutifs depuis cette adresse (blocage de 15 minutes)Corriger le mot de passe du client fautif, puis FLUSH HOSTS depuis une connexion ouverte
104308S01le client exige TLS ; le serveur n'a pas de certificat, voir --tls-certClient réglé pour exiger le chiffrement (pilote en mode SSL obligatoire) face à un serveur démarré sans certificat ; la connexion est ensuite fermée et le journal du serveur porte le même messageFournir un certificat au serveur (--tls-cert, --tls-key, chapitre 16), ou se connecter sans exiger TLS
315908004Les connexions non chiffrées sont refusées : le serveur exige TLS (--require-tls).Client non chiffré face à un serveur doté d'un certificat (TLS exigé dès qu'un certificat est fourni, sauf --allow-plain-with-tls)Activer TLS dans le client
1135HY000Impossible de créer un nouveau fil pour la connexion (%s)Le système refuse un fil de plus (mémoire, limite de processus)Réduire max_connections ou la charge de la machine
122742000Accès refusé ; il faut le privilège %s pour cette opérationContrôle de niveau global (SUPER, RELOAD, SHUTDOWN...) ; SYSTEM_USER pour modifier un compte qui le détient (le root initial)Accorder le privilège global nommé dans le message
137042000Commande %s refusée à l'utilisateur '%s'@'%s' pour la routine '%s'Appel d'une procédure ou d'une fonction sans EXECUTE sur elle, sa base ou au niveau global ; GRANT sur une routine sans l'option GRANT sur elleGRANT EXECUTE ON PROCEDURE base.nom TO … (ou ON base.*)
140342000Aucun droit de ce type n'est défini pour l'utilisateur '%s' sur l'hôte '%s' pour la routine '%s'REVOKE … ON PROCEDURE | FUNCTION base.nom d'un droit que le compte n'a pas sur cette routineVérifier SHOW GRANTS FOR compte ; REVOKE IF EXISTS
1524HY000Le greffon '%s' n'est pas chargéIDENTIFIED WITH (ou VIA) un autre greffon que le greffon natif (caching_sha2_password, auth_socket…)Utiliser IDENTIFIED BY 'mot de passe' ou IDENTIFIED WITH miraj_password BY ...
3523HY000Compte ou rôle inconnu %s@%sSET ROLE ou GRANT/REVOKE sur un rôle qui n'existe pasCréer le rôle avec CREATE ROLE ou corriger le nom
3530HY000%s@%s n'est pas accordé à %s@%sSET ROLE sur un rôle non accordé au compte courantAccorder le rôle avec GRANT <rôle> TO <compte>
3619HY000Niveau de privilège invalide pour %sPrivilège dynamique demandé hors du niveau globalAccorder au niveau global (ON *.*)

2.5 Erreurs de transaction et de concurrence#

CodeSQLSTATEMessageCause typiquePiste de correction
1205HY000Délai d'attente du verrou dépassé ; réessayez la transactionLOCK TABLES, SELECT ... FOR UPDATE NOWAIT/WAIT n, verrou global de lecture d'une autre session (FLUSH TABLES WITH READ LOCK), ou attente d'un verrou de table au-delà de lock_wait_timeoutRéessayer la transaction ; envisager de réduire la durée des transactions concurrentes
121340001Interblocage détecté lors de la prise du verrou ; réessayez la transactionConcurrence entre transactions sur les mêmes lignes (MIRAJ n'attend jamais : ce code couvre aussi bien un vrai interblocage qu'un simple conflit de version MV-OCC après 3 tentatives internes). Rendu aussi par un COMMIT dont une mise à jour différée ne peut plus s'appliquer (ligne supprimée, condition du WHERE devenue fausse, ligne tenue par une autre transaction, ligne lue puis modifiée par une autre transaction)Réessayer la transaction côté client ; MIRAJ n'ayant pas d'attente bloquante, ce code apparaît plus souvent que sur un moteur à verrous classiques. Un COMMIT peut aussi rendre le code d'une erreur de calcul découverte en recalculant une mise à jour différée (1264, 1048, 4025…) : la transaction est alors annulée en entier (chapitre 14, §14.2)
1397XAE04XAER_NOTA : XID inconnuXA END / XA PREPARE avec un autre XID que celui de la branche de la session ; XA COMMIT / XA ROLLBACK d'un XID inconnu ou tenu par une autre session encore ouverteVérifier le XID ; une branche n'est reprise par une autre session qu'une fois préparée et sa session fermée
1398XAE05XAER_INVAL : arguments invalides (ou commande non prise en charge)XA START '', XA START … JOIN, XA END … SUSPEND, XA COMMIT … ONE PHASE d'une branche préparéeUtiliser un gtrid non vide ; valider une branche préparée sans ONE PHASE
1399XAE07XAER_RMFAIL : la commande ne peut pas être exécutée quand la transaction globale est dans l'état %sInstruction interdite dans l'état de la branche (chapitre 14, §14.5) : COMMIT ou DDL en ACTIVE, lecture d'une table en IDLE ou PREPARED, XA PREPARE hors IDLESuivre l'enchaînement XA START → XA END → XA PREPARE → XA COMMIT
1400XAE09XAER_OUTSIDE : du travail est fait hors de la transaction globaleXA START avec une transaction ordinaire ouverte (ou autocommit = 0 après une instruction) ou sous LOCK TABLES ; XA COMMIT / XA ROLLBACK d'une autre branche dans ces conditionsValider ou annuler la transaction ouverte, UNLOCK TABLES, ou SET autocommit = 1
1402XA100XA_RBROLLBACK : la branche de transaction a été annuléeReprise d'une branche préparée qui n'avait rien écrit : elle a été close avec sa sessionAucune action : la branche n'avait aucun effet
1440XAE08XAER_DUPID : le XID existe déjàXA START d'un XID tenu par une autre branche (encore ouverte, ou préparée et détachée)Choisir un autre XID, ou résoudre la branche existante (XA RECOVER)
1614XA102XA_RBDEADLOCK : la branche de transaction a été annulée : un interblocage a été détectéXA PREPARE dont la preuve des lectures échoue ; branche dont la transaction a été annulée par un conflit (XA END, XA COMMIT, instruction sur une table)XA ROLLBACK si la branche existe encore, puis rejouer la transaction
1791HY000Nom de format de XA RECOVER inconnu : '%s'XA RECOVER FORMAT = '…' autre que RAW ou SQLUtiliser RAW (défaut) ou SQL
179225006Impossible d'exécuter l'instruction dans une transaction en lecture seule (READ ONLY).Écriture tentée dans une transaction ouverte en READ ONLY, ou sur un secondaire de cluster (voir §2.6)Ouvrir une transaction en lecture-écriture, ou écrire sur le nœud primaire
156825001%s ne peut pas être fixé pendant une transaction en coursSET TRANSACTION ISOLATION LEVEL …, SET TRANSACTION READ ONLY ou SET @@transaction_read_only (sans portée) dans une transaction ouverteLe placer avant START TRANSACTION, ou écrire SET SESSION …
192770100La connexion a été arrêtéeConnexion terminée par KILL ou par le serveurSe reconnecter
196970100Requête interrompue : limite de durée de %s s dépasséemax_statement_time ou l'indication MAX_EXECUTION_TIME dépassésOptimiser la requête ou augmenter la limite si elle est légitime
1095HY000Vous n'êtes pas propriétaire de la connexion %sKILL d'une connexion qui n'appartient pas au compte courant, sans le privilège nécessaireUtiliser un compte disposant du privilège adéquat, ou cibler sa propre connexion
1094HY000Identifiant de connexion inconnu : %sKILL avec un identifiant de connexion qui n'existe plusVérifier l'identifiant avec SHOW PROCESSLIST
1099HY000La table '%s' est verrouillée en lecture (READ) et ne peut pas être modifiéeÉcriture tentée sur une table verrouillée en lecture par LOCK TABLESVerrouiller en écriture (WRITE) ou attendre la fin du verrou
1192HY000Impossible d'exécuter cette commande : la session tient des tables verrouillées ou une transaction activeFLUSH TABLES WITH READ LOCK (ou FLUSH TABLES t … WITH READ LOCK | FOR EXPORT) sous LOCK TABLESUNLOCK TABLES d'abord
1223HY000Impossible d'exécuter la requête : la session tient un verrou de lecture incompatibleÉcriture (DML, DDL, comptes, LOCK TABLES … WRITE, RESTORE) par la session qui tient le verrou global de lecture (FLUSH TABLES WITH READ LOCK)UNLOCK TABLES, puis écrire
1100HY000La table '%s' n'a pas été verrouillée par LOCK TABLESTable utilisée dans une session sous LOCK TABLES sans avoir été elle-même verrouilléeAjouter la table à la liste de LOCK TABLES

2.6 Erreurs de cluster et de réplication (édition Cluster)#

CodeSQLSTATEMessageCause typiquePiste de correction
1290HY000Le serveur fonctionne avec l'option %s et ne peut pas exécuter cette instructionTentative d'écriture sur un nœud secondaire en lecture seule, ou option serveur incompatible avec l'instructionÉcrire sur le nœud primaire du cluster ; consulter SHOW CLUSTER STATUS
9002HY000%s demande l'édition Miraj ClusterFonctionnalité de partitionnement effectif (segments, EXCHANGE PARTITION sur HASH/KEY...) utilisée hors édition ClusterPasser à l'édition Cluster, ou se limiter aux fonctions de partitionnement disponibles en édition Entreprise (définition acceptée, stockage non partitionné)
9003HY000Promotion refusée : %sSET GLOBAL cluster_role = 'primary' refusé après sonde des autres nœuds : primaire encore joignable, autre promotion en cours, pair qui voit encore le primaire, pair plus avancé qui ne garde plus la partie manquante du journal, bases différentes, écritures confirmées aux clients (réplication semi-synchrone) tenues par aucun nœud joignable, retard supérieur à max_promotion_lag_mb, base en attente de réamorçage après une table réécrite hors journal par le primaire (waiting to be copied again), nœud FENCED ou en cours d'amorçage ; en mode raft (élection automatique), refus d'un votant (node n2 refused: not up to date on database shop (epoch 4 < 5), candidate lacks database …, already voted for …), absence de majorité joignable (cluster has no quorum: 1 of 3 members reachable) ou élection déjà en cours (le motif précis suit les deux-points, en anglais)Selon le motif : rétrograder d'abord l'ancien primaire ('secondary'), promouvoir un autre secondaire, ou forcer en acceptant la perte (SET GLOBAL cluster_role = 'force_primary') ; voir le chapitre 17, §17.4
9004HY000Réplication synchrone : %sRéplication semi-synchrone (@@cluster_sync_commit à RECEIVED, APPLIED ou MAJORITY) : accusés des secondaires non reçus dans @@cluster_sync_timeout ou trop peu de secondaires connectés (avertissement avec la conduite FALLBACK, erreur avec ERROR), attente annulée par KILL QUERY (avertissement), nœud rétrogradé ou écarté pendant l'attente (erreur ; quorum lost quand un leader élu rend son rôle faute de majorité, mode raft). L'écriture est toujours validée sur le primaire (motif en anglais après les deux-points)Ne pas rejouer l'écriture sans relire (risque de doublon) ; vérifier les secondaires (SHOW CLUSTER STATUS, colonne SYNC) ; voir le chapitre 17, §17.8
9005HY000Limite de données de Miraj Express atteinte (%s) : supprimez des données ou utilisez l'édition EntrepriseÉdition Express : le total des tables atteint 20 Go et l'instruction ferait grossir les données (INSERT, REPLACE, LOAD DATA, UPDATE, CREATE TABLE, ALTER TABLE)Supprimer des données (DELETE, TRUNCATE, DROP, toujours permis) ou passer à l'édition Entreprise ou Cluster
1194HY000La table '%s' est marquée comme endommagée et doit être réparée (%s)Cas particulier : lecture d'une table partitionnée en segments par l'édition Cluster depuis une édition qui ne sait pas la lireOuvrir la table depuis un serveur en édition Cluster

2.6 bis Erreurs du journal binaire et de la réplication par journal binaire#

CodeSQLSTATEMessageCause typiquePiste de correction
1186HY000Journal binaire fermé, RESET MASTER impossibleRESET MASTER sans --log-binDémarrer le serveur avec --log-bin
1198HY000Cette opération est impossible tant que la réplication tourne ; exécuter d'abord STOP SLAVECHANGE MASTER, RESET SLAVE, SET GLOBAL gtid_slave_pos ou sql_slave_skip_counter pendant que les fils du réplica tournentSTOP SLAVE, puis recommencer
1200HY000Le serveur n'est pas configuré comme réplica ; corriger la configuration ou utiliser CHANGE MASTER TOSTART SLAVE, STOP SLAVE ou RESET SLAVE sans CHANGE MASTER TO préalable (ou moteur embarqué)CHANGE MASTER TO …
1220HY000Erreur à l'exécution de la commande %s : %sSHOW BINLOG EVENTS sur un fichier inconnu ou à une position qui n'est pas le début d'un événementLire les positions par SHOW BINLOG EVENTS sans FROM
1236HY000Erreur fatale %s de la source à la lecture du journal binaire : '%s'Côté source : journal désactivé, fichier inconnu, position GTID absente (fichiers purgés) ou au-delà du journal ; côté réplica : Last_IO_ErrorRéamorcer le réplica depuis une copie, puis SET GLOBAL gtid_slave_pos
1373HY000Fichier cible absent de l'index du journal binairePURGE BINARY LOGS TO d'un fichier inconnuChoisir un nom de SHOW BINARY LOGS
1381HY000Le journal binaire n'est pas activéSHOW BINARY LOGS, PURGE BINARY LOGS sans --log-binDémarrer avec --log-bin
1950HY000Tentative de journaliser le GTID %s, dont le numéro de séquence ne suit pas celui du GTID existant %s, alors que gtid_strict_mode est activégtid_strict_mode = ON et séquence imposée (gtid_seq_no) qui ne suit pas celle du domaine ; la transaction est annuléeCorriger gtid_seq_no ou couper gtid_strict_mode

2.7 Erreurs propres à MIRAJ (éditions, événements de changement et vecteurs)#

Ces codes n'existent dans aucun autre moteur SQL ; ils sont propres à MIRAJ.

CodeSQLSTATEMessageCause typiquePiste de correction
9001HY000%s n'est pas disponible dans l'édition Miraj ExpressFonctionnalité réservée à l'édition Entreprise ou Cluster utilisée en édition Express (ex. parallélisme intra-requête)Passer à l'édition Entreprise ou Cluster si la fonctionnalité est nécessaire
9002HY000%s demande l'édition Miraj ClusterVoir §2.6Voir §2.6
9003HY000Promotion refusée : %sVoir §2.6Voir §2.6
9004HY000Réplication synchrone : %sVoir §2.6Voir §2.6
9005HY000Limite de données de Miraj Express atteinte (%s) : supprimez des données ou utilisez l'édition EntrepriseVoir §2.6Voir §2.6
900625000WAIT FOR CHANGES n'est pas permis dans une transactionWAIT FOR CHANGES dans une transaction explicite, ou dans une transaction implicite (autocommit = 0) qui a écritValider ou annuler la transaction avant d'attendre ; attendre sur une connexion dédiée (chapitre 21)
9007HY000Cette session n'a aucun abonnement LISTEN actifWAIT FOR CHANGES sans LISTEN préalable sur la session, ou après UNLISTEN *S'abonner (LISTEN TABLE …, LISTEN canal) avant d'attendre
9008HY000Trop d'abonnements LISTEN (%s permis)Plus de change_events_max_listeners abonnements sur une même sessionRetirer des abonnements (UNLISTEN) ou relever change_events_max_listeners
9009HY000La table '%s' n'a pas de clé primaire : seuls les événements de table sont transmisAvertissement de LISTEN TABLE sur une table sans clé primaire : ses écritures ne donnent que des événements BULKAjouter une clé primaire pour recevoir un événement par ligne
901022001La charge de NOTIFY dépasse %s octetsCharge de NOTIFY ou de MIRAJ_NOTIFY() plus longue que change_events_max_payloadEnvoyer une charge plus courte (un identifiant plutôt que les données) ou relever change_events_max_payload
9011HY000Plafond de données de Miraj Developer atteint (%s) ; supprimez des données ou utilisez l'édition ClusterÉdition Developer : le total des tables atteint 20 Go et l'instruction ferait grossir les données (INSERT, REPLACE, LOAD DATA, UPDATE, CREATE TABLE, ALTER TABLE)Supprimer des données (DELETE, TRUNCATE, DROP, toujours permis) ou passer à l'édition Cluster
9033HY000Le compte '%s'@'%s' peut se connecter depuis d'autres machines et n'a pas de mot de passe : donnez-lui-en un (IDENTIFIED BY) ou réglez require_password = OFFCREATE USER d'un compte joignable à distance sans mot de passe, ou ALTER USER / SET PASSWORD qui lui retire le sien, sous require_password = ONDonner un mot de passe au compte, ou SET GLOBAL require_password = OFF
9012HY000L'édition Miraj Developer est limitée à 24 heures d'utilisation continue ; redémarrez le serveur pour continuerÉdition Developer : 24 heures se sont écoulées depuis le démarrage du processus ; toute instruction est refusée, les données restent intactesRedémarrer miraj-server (ou l'application qui embarque le moteur) ; le décompte repart de zéro
9034HY000%s n'est pas permis au niveau d'accès MCP %sSession ouverte par un jeton MCP : instruction au-dessus du niveau du jeton (INSERT avec un jeton READ, DDL avec un jeton WRITE…), y compris dans le corps d'une routine ou d'un déclencheur ; gestion des jetons depuis une session MCP, quel que soit le niveauUtiliser un jeton d'un niveau suffisant, ou gérer les jetons par le port principal (chapitre 20, §20.5)
9035HY000Le jeton '%s' existe déjàCREATE MCP TOKEN ou CREATE API TOKEN avec un nom déjà pris sur le serveur, par n'importe quel compte et pour l'une ou l'autre famille de jetons (comparaison sans égard à la casse)Choisir un autre nom, ou supprimer l'ancien jeton (DROP MCP TOKEN, DROP API TOKEN)
9036HY000Jeton inconnu '%s'DROP MCP TOKEN, DROP API TOKEN ou ALTER API TOKEN d'un jeton qui n'existe pas dans cette famille (avertissement avec IF EXISTS)Vérifier le nom avec SHOW MCP TOKENS ou SHOW API TOKENS
9037HY000La partition %s ne peut pas être placée sur le nœud '%s', qui n'est pas membre d'un cluster actifPARTITION … NODE 'id' hors cluster actif, nœud hors de members ou identifiant invalideVérifier cluster.toml et l'identifiant du nœud (§17.10)
9038HY000La partition %s de %s est tenue par le nœud %s, injoignable : %sLecture ou écriture d'une partition dédiée à un nœud arrêté, injoignable ou qui ne répond pas dans fragment_timeout_msRelancer le nœud ; élaguer la requête aux partitions disponibles
9039HY000%s écrirait dans des partitions tenues par plusieurs nœuds (%s) ; une instruction ou une transaction ne peut écrire que les partitions d'un seul nœudInstruction qui touche les partitions de plusieurs nœuds ; transaction qui écrit ici et chez un autre nœud, ou chez deux autres nœuds (l'instruction seule échoue)Découper l'instruction par nœud ; une transaction par nœud écrit
9040HY000La transaction qui écrit les partitions tenues par le nœud %s a été annulée par ce nœud : %sTransaction qui écrit chez un autre nœud restée inactive plus de fragment_timeout_ms (§17.10.5) : annulée ici aussiRejouer la transaction ; augmenter fragment_timeout_ms
9041HY000%s n'est pas pris en charge sur %s tant que la partition %s est tenue par le nœud %sOpération non prise en charge sur une table à partition dédiée (§17.10.9)Voir §17.10.10
9042HY000Le nœud %s a refusé la demande sur le fragment : %sDéfinition différente entre nœuds, partition non tenueAttendre la fin de la réplication du DDL, vérifier le placement
9043HY000Aucun nœud disponible pour les connexions %sEnvoyée par miraj-proxy à la place de la poignée de main : aucun primaire (élection en cours, nœuds injoignables) pour le port d'écriture (RW), aucun nœud sain pour le port de lecture (RO)Se reconnecter après quelques secondes ; consulter miraj-proxy status et le journal du proxy (chapitre 23)
9044HY000Le chemin %s %s est déjà utilisé par l'endpoint %sCREATE ENDPOINT dont la méthode et la forme du chemin (segments fixes égaux, paramètres aux mêmes places) sont déjà prises par un autre endpoint, toutes bases confonduesChoisir un autre chemin, ou remplacer l'endpoint existant (chapitre 24, §24.4.2)
9045HY000Chemin d'endpoint invalide '%s' : %sChemin sans / initial, segment vide ou avec un caractère interdit, paramètre {nom} mal écrit ou répété, chemin sous /api ou /mcp, plus de 255 caractèresCorriger le chemin (chapitre 24, §24.4.2)
9046HY000Paramètre d'endpoint '%s' : %sAppel d'un endpoint sans valeur pour un paramètre qui n'a pas de DEFAULT (missing value), ou avec un paramètre qu'il ne déclare pas (unknown parameter) ; rendue en statut HTTP 400Fournir la valeur (chemin, requête ou corps JSON), ou déclarer le paramètre dans PARAMS
9047HY000L'accès REST %s n'est pas permis pour %sRequête REST d'une famille (endpoints, tables, SQL) ou d'un endpoint que le jeton (CREATE API TOKEN … ACCESS) ou les connexions par mot de passe (rest_basic_access) ne permettent pas ; rendue en statut HTTP 403Élargir l'accès du jeton (ALTER API TOKEN … ACCESS) ou rest_basic_access (chapitre 24, §24.3)
9048HY000L'hôte '%s' ne peut pas se connecter tant que la base système est indisponible : seules les connexions locales sont acceptéesConnexion d'une adresse autre que la boucle locale (port principal, REST, MCP) à un serveur qui a démarré sans pouvoir ouvrir sa base système miraj ; rendue en statut HTTP 403 par REST et MCPSe connecter depuis la machine du serveur ; lire la ligne BASE SYSTÈME INDISPONIBLE du journal du serveur, corriger la cause (fichier tenu, disque, droits) et redémarrer (chapitre 16, §16.4.4)
9051HY000Option '%s' invalide pour l'index de texte : %sIndex FULLTEXT dont un poids de colonne (designation WEIGHT n) est nul, négatif ou non numérique (a weight must be a positive number) ; l'option citée est la colonne et son poids tels qu'écritsÉcrire un nombre réel strictement positif, ou retirer WEIGHT (poids 1) (chapitre 7)
9052HY000La distance floue %s est hors limites (0 à 2)Recherche floue en mode booléen dont le suffixe collé au mot dépasse 2 (MATCH … AGAINST ('sirop~3' IN BOOLEAN MODE))Écrire mot~1 ou mot~2 (~0 : mot exact) ; voir chapitre 9, §9.22
9054HY000Le nœud %s utilise le langage SQL %s mais le cluster utilise %s : tous les nœuds d'un cluster doivent avoir le même langage (sql_mode)Adhésion d'un nœud de cluster dont l'élément POSTGRESQL de sql_mode diffère de celui du primaire ; refus consigné par les deux nœuds (server.log)Donner le même sql_mode (langage) à tous les nœuds ; voir chapitre 17 et 27.12
905501000%sAvertissement (note) : RAISE NOTICE d'une routine écrite en PL/pgSQL ; un client PostgreSQL le reçoit en avis NOTICE (SQLSTATE 00000)— ; voir 30.13
905601000%sAvertissement : RAISE WARNING d'une routine écrite en PL/pgSQL (avis WARNING)— ; voir 30.13
905701000%sAvertissement (note) : RAISE INFO d'une routine écrite en PL/pgSQL (avis INFO)— ; voir 30.13
90582BP01impossible de supprimer la fonction %s car d'autres objets en dépendent : déclencheur %s (utiliser DROP ... CASCADE)DROP FUNCTION en langage PostgreSQL d'une fonction qu'appellent des déclencheursDROP FUNCTION … CASCADE (supprime aussi les déclencheurs), ou supprimer d'abord les déclencheurs ; voir 30.13
9059HY000%s demande une licence Miraj valide (état de la licence : %s) ; voir SHOW LICENSEFonction de l'édition Entreprise (événements de changement, MCP, journal binaire, archivage du journal) demandée à un serveur sans licence en règleSHOW LICENSE, puis installer ou renouveler la licence ; voir chapitre 31
9060HY000%s demande une licence Miraj Cluster valide (état de la licence : %s) ; voir SHOW LICENSEPARTITION … NODE, SET GLOBAL cluster_role ou cluster_sync_* avec une licence qui ne couvre pas l'édition ClusterInstaller une licence Cluster ; voir 31.7
9061HY000Plafond de données de %s atteint : ce serveur n'a pas de licence Miraj valide ; installez le fichier de licence (miraj.lic) ou supprimez des donnéesServeur Entreprise ou Cluster sans licence dont les données atteignent 20 Go ; une licence expirée ne plafonne pasInstaller la licence (--install-license), ou supprimer des données ; voir 31.4
9062HY000Licence refusée : %sFLUSH LICENSE sur un fichier illisible, modifié ou lié à une autre machine ; la licence en place continue de servirRéinstaller le fichier reçu ; voir 31.2
9063HY000Nœud %s refusé : la licence %s permet %s nœud(s) dans le clusterCluster qui compte plus de nœuds que sa licence ; refus consigné par le primaireLicence pour davantage de nœuds, ou retirer un nœud de members ; voir 31.7
9064HY000Nœud %s refusé : sa licence (%s) n'est pas celle du cluster (%s)Fichier miraj.lic différent sur ce nœud ; refus consigné par le primaireInstaller sur ce nœud la licence du cluster ; voir 31.7
9065HY000%s n'est pas disponible dans l'édition Miraj DeveloperChiffrement des données au repos demandé en édition Developer (data_encryption, ENCRYPTION='Y', dossier chiffré)Utiliser l'édition Entreprise ou Cluster (chapitre 25)
9066HY000%s exige le chiffrement des données, qui n'a pas été activé à l'initialisation de ce serveurENCRYPTION='Y' ou ALTER INSTANCE ROTATE MASTER KEY sur un dossier de données non chiffréLe chiffrement s'active à l'initialisation d'un dossier neuf (chapitre 25, §25.2)
9067HY001Mémoire du serveur insuffisante : les instructions en cours sur le serveur dépasseraient max_server_memory (%s) ; réessayez plus tardTris, regroupements, DISTINCT, fenêtres et jointures de toutes les instructions en cours dépasseraient ensemble max_server_memory (moitié de la mémoire physique par défaut) ; condition passagère, qui dépend des autres sessions (53200 en langage PostgreSQL)Réessayer plus tard ; relever max_server_memory (SET GLOBAL) ; voir 16.4.5
9085HY000Document XML mal formé à la ligne %s : %sFichier de LOAD XML mal formé (balise non fermée ou croisée, entité inconnue, attribut sans guillemets…) ; rien n'est chargéCorriger le document à la ligne indiquée ; voir 8.8
6138HY000Données impossibles à convertir en vecteur valide : '%s'Valeur non convertible en VECTOR(n)Corriger le format de la valeur (forme texte […] ou binaire)
760022000dimensions de vecteurs différentes %s et %sOpération entre deux vecteurs de dimensions différentesUtiliser des vecteurs de même dimension
760122000%s dimensions attendues, et non %sVecteur écrit dans une colonne VECTOR(n) avec une dimension différente de nAjuster le nombre de composantes
760222P02syntaxe incorrecte pour le type vector : "%s"Forme texte d'un vecteur invalideUtiliser la forme [v1, v2, ...]
760322000NaN interdit dans un vecteurComposante NaN dans un vecteurRetirer les valeurs NaN en amont
760422000valeur infinie interdite dans un vecteurComposante infinie dans un vecteurRetirer les valeurs infinies en amont
4206HY000Impossible de déterminer le type de distance de VEC_DISTANCE : aucun index trouvéVEC_DISTANCE appelée sans index vectoriel sur l'une de ses colonnesCréer un VECTOR INDEX sur la colonne (chapitre 11) ou écrire la métrique : VEC_DISTANCE_EUCLIDEAN, VEC_DISTANCE_COSINE

2.8 Erreurs internes et diverses#

CodeSQLSTATEMessageCause typiquePiste de correction
1024HY000Erreur de lecture du fichier '%s' (errno : %s)Erreur disque à la lecture d'un fichier du moteurVérifier le disque, restaurer depuis une sauvegarde si le fichier est endommagé
1021HY000Disque plein (%s) : l'écriture a été refusée, libérez de l'espace puis réessayezEspace libre du volume des données sous min_free_disk_space (512 Mio par défaut), ou volume réellement plein ; l'écriture refusée n'a aucun effet (53100 en langage PostgreSQL)Libérer de la place (DELETE, TRUNCATE, DROP restent permis) ; voir 16.4.5
1026HY000Erreur d'écriture du fichier '%s' (errno : %s)Erreur disque à l'écriture (droits...) ; en particulier, vidage sur disque du journal en échec : le journal de la base est arrêté, plus aucune écriture n'y est acceptée (58030 en langage PostgreSQL)Vérifier le disque et les droits ; pour un journal arrêté, corriger la cause puis redémarrer le serveur (11.4.2)
1038HY001Mémoire de tri insuffisante : l'instruction dépasse max_statement_memory (%s)Tri d'une instruction au-delà de max_statement_memory (2 Gio par défaut) ; la session reste utilisable (53200 en langage PostgreSQL)Restreindre la requête (WHERE, LIMIT), ou relever max_statement_memory pour la session ; voir 16.4.5
1114HY000La table '%s' est pleineRegroupement, DISTINCT, fenêtre, opération ensembliste, jointure par hachage ou résultat intermédiaire au-delà de max_statement_memory (la table citée est alors #sql_tmp (…)) ; ou disque plein pendant l'écriture d'une table (53100 en langage PostgreSQL dans les deux cas)Comme 1038, ou comme 1021 pour un disque plein
1028HY000Tri interrompu : %sORDER BY interrompu (ex. par KILL ou une limite de lignes examinées)Voir le message pour la cause précise ; relancer si l'interruption n'était pas voulue
1105HY000Erreur inconnue : %sErreur interne inattendue (bogue du moteur, fichier de définitions de routines/déclencheurs corrompu...)Signaler l'erreur avec le contexte complet ; vérifier l'intégrité des fichiers de la base concernée
114842000Cette commande n'est pas autorisée avec cette version du serveurCommande refusée par le protocole réseau (ex. LOCAL INFILE refusé par un client qui ne l'accepte pas)Vérifier la configuration du client
1193HY000Variable système inconnue : '%s'SET/SELECT @@variable sur un nom de variable qui n'existe pasVérifier le nom exact dans SHOW VARIABLES
123142000La variable '%s' ne peut pas recevoir la valeur '%s'Valeur hors du domaine attendu pour une variable système ; pour une variable booléenne (autocommit, read_only, local_infile, et aussi celles acceptées sans effet comme unique_checks, sql_notes, sql_safe_updates, big_tables), toute valeur autre que ON, OFF, 1, 0, TRUE, FALSE ou DEFAULT (SET autocommit = 2, = 'yes', = NULL) ; la variable garde sa valeurConsulter la documentation de la variable pour les valeurs admises
123542000Cette version de Miraj ne prend pas encore en charge '%s'Voir §2.1 : fonctionnalité non encore implémentéeUtiliser une construction équivalente prise en charge

2.9 Erreurs des programmes stockés (procédures, fonctions, déclencheurs, événements)#

CodeSQLSTATEMessageCause typiquePiste de correction
130442000%s %s existe déjàCREATE PROCEDURE ou CREATE FUNCTION d'un nom déjà pris dans la base (PROCEDURE pr existe déjà)CREATE OR REPLACE, IF NOT EXISTS, ou un autre nom
130542000%s %s n'existe pasCALL d'une procédure absente (PROCEDURE shop.nopr n'existe pas), GRANT sur une routine absente, ROLLBACK TO SAVEPOINT d'un point inconnu (SAVEPOINT nom n'existe pas)Vérifier le nom et la base
131842000Nombre d'arguments incorrect pour %s %s : %s attendus, %s reçusCALL ou appel de fonction avec trop ou trop peu d'argumentsVérifier la liste des paramètres (SHOW CREATE PROCEDURE)
132042000Aucun RETURN dans la FUNCTION %sCREATE FUNCTION dont le corps ne contient aucun RETURNAjouter le RETURN
13212F005La FUNCTION %s s'est terminée sans RETURNExécution d'une fonction qui atteint la fin de son corps sans passer par un RETURNAjouter un RETURN sur chaque chemin
132624000Le curseur n'est pas ouvertFETCH ou CLOSE d'un curseur avant son OPENOPEN d'abord
132902000Aucune donnée : aucune ligne lue, sélectionnée ou traitéeFETCH après la dernière ligne d'un curseur sans gestionnaire NOT FOUNDDECLARE CONTINUE HANDLER FOR NOT FOUND SET fini = 1
133920000Aucun cas ne correspond dans l'instruction CASEInstruction CASE d'une routine sans ELSE dont aucune branche ne s'appliqueAjouter une branche ELSE
1359HY000Le déclencheur '%s' existe déjàCREATE TRIGGER d'un nom déjà prisCREATE OR REPLACE TRIGGER, ou un autre nom
1360HY000Le déclencheur n'existe pasDROP TRIGGER d'un déclencheur absentDROP TRIGGER IF EXISTS
1422HY000Validation explicite ou implicite interdite dans une fonction stockée ou un déclencheurCOMMIT, ROLLBACK, DDL ou gestion des comptes dans le corps d'une fonction ou d'un déclencheurDéplacer l'instruction dans une procédure appelée hors déclencheur
1442HY000Impossible de modifier la table '%s' dans une fonction stockée ou un déclencheur : elle est déjà utilisée par l'instruction qui l'a appeléDéclencheur (ou fonction) qui écrit dans la table de l'instruction qui l'a déclenchéÉcrire dans une autre table, ou faire le calcul par SET NEW.col dans un déclencheur BEFORE
1537HY000L'événement '%s' existe déjàCREATE EVENT d'un nom déjà prisCREATE EVENT IF NOT EXISTS ou ALTER EVENT
1539HY000Événement inconnu '%s'DROP EVENT ou ALTER EVENT d'un événement absentDROP EVENT IF EXISTS
164445000 (celui du SIGNAL)texte de MESSAGE_TEXTSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Stock insuffisant' dans une routine : ERREUR 1644 (45000) : Stock insuffisantErreur applicative voulue ; la traiter par un gestionnaire (DECLARE … HANDLER FOR SQLSTATE '45000') ou côté client

3. Le SQLSTATE#

Le SQLSTATE est un code à exactement 5 caractères (chiffres et lettres majuscules), normalisé indépendamment de MIRAJ et partagé par la plupart des moteurs SQL. Une application peut s'y fier pour un traitement générique, sans connaître le libellé ni même le code numérique propre à MIRAJ — utile pour porter un code écrit contre un autre moteur SQL.

Quelques classes à connaître :

SQLSTATESignificationExemples de codes MIRAJ
42000 (et les 42Sxx)Erreur de syntaxe ou de règle d'accès (« syntax error or access rule violation »)1064, 1049, 1050, 1051, 1054
23000Violation de contrainte d'intégrité1048, 1062, 1451, 1452, 4025
3D000Base de données non sélectionnée1046
28000Autorisation invalide (authentification)1045
40001Transaction annulée en série (interblocage ou conflit de concurrence)1213
22000 et dérivés (22001, 22003, 22007, 22012...)Erreur de données (« data exception ») : troncature, dépassement, division par zéro1264, 1292, 1365, 1366, 1406
25006Instruction interdite en transaction en lecture seule1792
70100Instruction interrompue (SQLSTATE d'une convention répandue dans l'écosystème SQL, reprise par MIRAJ)1317, 1927, 1969
HY000Erreur générale, sans classe SQLSTATE plus précisela majorité des erreurs propres au moteur (1004, 1105, 1193, 9001, 9002, 9003, 9004, 9005...)

Usage recommandé côté application : un pilote (ODBC, JDBC, ADO.NET...) expose en général le SQLSTATE à côté du code natif. Pour un traitement portable entre moteurs (retenter une transaction en cas de 40001, distinguer une erreur de contrainte 23000 d'une erreur de syntaxe 42000), s'appuyer sur le SQLSTATE. Pour un diagnostic précis propre à MIRAJ (afficher un message adapté, distinguer deux causes qui partagent le même SQLSTATE), s'appuyer sur le code numérique de cette page.

Quand aucun SQLSTATE plus spécifique n'est défini pour un code, MIRAJ renvoie HY000 par défaut (y compris pour un code totalement inconnu du catalogue).

Un code déclenché par une routine stockée avec SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '...' porte le SQLSTATE choisi par la routine plutôt que celui associé au code numérique générique de SIGNAL — c'est le mécanisme normal pour lever une erreur applicative avec un SQLSTATE personnalisé (classe 45 réservée à cet usage).

3.1 Instance en langage PostgreSQL#

Sur une instance en langage PostgreSQL (§ 16.10, chapitre 30), le client ne reçoit que le SQLSTATE et le message : les codes que les pilotes PostgreSQL reconnaissent remplacent le SQLSTATE générique du code MIRAJ.

SQLSTATESignificationCodes MIRAJ ou cas
42601erreur de syntaxe1064 ; aussi la syntaxe propre à MIRAJ refusée (accents graves, LIMIT a, b, &&…), dont le message nomme la construction (« … is MIRAJ syntax, not accepted in the PostgreSQL language ») ; paramètre ? ou :nom dans une requête préparée
0A000fonctionnalité non prise en charge1235 ; construction PL/pgSQL hors du sous-ensemble pris en charge (le message la nomme), CREATE EVENT, colonne de type tableau, vue récursive…
22P02valeur écrite illisible'peut-être'::boolean, '\xZZ'::bytea, intervalle mal écrit
42P01, 42703, 23505, 23502, 23503, 23514table absente, colonne inconnue, doublon, NULL interdit, clé étrangère, CHECK1146, 1054, 1062, 1048, 1451/1452, 4025
42P06, 3F000base (schéma) déjà existante ; inconnue, absente à la suppression ou non choisie1007 ; 1049, 1008, 1046
3D000base inconnue nommée à la connexion (avis, la session s'ouvre sans base courante)paramètre database
22023options d'une séquence incohérentes4085
54000limite dépassée : profondeur d'une expression récursive, nombre de lignes de generate_series3636
54001instruction trop complexe7620
53100disque plein, table pleine1021, 1114 (aussi quand max_statement_memory la provoque)
53200mémoire insuffisante1038, 9067
58030erreur d'entrée-sortie : journal arrêté par un vidage sur disque en échec1026
42P07table déjà existante1050
42501droit insuffisant1044, 1142, 1143, 1227
55P03attente de verrou dépassée1205
57014requête annulée1317, 3024 (Ctrl-C, KILL QUERY, délai)
25P01DECLARE … CURSOR hors d'un bloc de transactioncurseur WITHOUT HOLD
25P02bloc de transaction en échecinstruction autre que la fin du bloc après une erreur
34000portail ou curseur inconnuFETCH, CLOSE, Execute
26000, 42P05, 42P03instruction préparée inconnue, nom déjà pris, curseur déjà ouvertprotocole étendu, DECLARE
42P11définition de curseur invalideDECLARE c CURSOR FOR INSERT … (instruction sans lignes), SCROLL et NO SCROLL ensemble
55000objet dans un état incorrectlastval() avant tout numéro servi à la session, currval avant nextval, recul d'un curseur NO SCROLL
428C9colonne non affectablevaleur écrite dans une colonne GENERATED ALWAYS AS IDENTITY (sans OVERRIDING SYSTEM VALUE) ou dans une colonne générée
42P10liste de colonnes incohérenteON CONFLICT sans contrainte d'unicité arbitre, trop d'alias de colonnes (AS x (a, b)), DISTINCT ON qui ne commence pas l'ORDER BY
42883fonction ou opérateur inexistantfonction inconnue, mauvais nombre ou type d'arguments (lower(1))
42804type incompatiblechaîne de bits écrite dans une colonne d'un autre type, résultat d'une fonction ensembliste d'une autre structure
22012division par zéro1 / 0, mod(x, 0)
55P02paramètre non modifiable dans la sessionSET shared_buffers, max_connections…
57P01, 57P05, 25P03connexion fermée par le serveur (FATAL)KILL, pg_terminate_backend, arrêt du serveur ; délai d'inactivité ; délai d'inactivité dans une transaction
42602, 58P02chemin relatif, fichier existantCOPY … TO 'fichier'
22021texte qui n'est pas en UTF-8client_encoding autre qu'UTF-8
28000, 28P01connexion refusée, mot de passe faux1045, TLS exigé
08P01violation du protocolemessage mal formé, paquet trop long (1153)
XX000erreur interne ou sans équivalentcodes de SQLSTATE HY000

4. Langue des messages#

Les messages d'erreur de MIRAJ existent en plusieurs langues : français, anglais, et huit langues supplémentaires (chinois, hindi, espagnol, arabe, portugais, russe, allemand, japonais). Cette page documente le libellé français, langue de référence de ce manuel.

Pour obtenir les messages en anglais (ou dans une autre langue disponible) :

  • l'option --lang de miraj-server (en, fr, zh, hi, es, ar, pt, ru, de, ja), ou de miraj-cli ouvert sur un dossier de données, choisit la langue des messages d'erreur et des avertissements (SHOW WARNINGS, langage MIRAJ : Données tronquées pour la colonne 'v' à la ligne 1 pour 1265 en français) ; en langage MIRAJ, les avertissements et notes listés par SHOW WARNINGS sont rédigés dans la même langue que les erreurs (par exemple, sous --lang fr, Warning | 1265 | Données tronquées pour la colonne 'v' à la ligne 1), leur code restant le même ;
  • chaque erreur peut aussi être reformulée dans une langue donnée sans changer la langue de la session, si l'API ou l'outil utilisé expose cette fonctionnalité (retraduction à la demande depuis le code et les arguments de l'erreur) ;
  • des fichiers <langue>.json déposés à côté de l'exécutable du serveur permettent de compléter ou de remplacer les traductions embarquées, y compris pour ajouter une langue non listée ci-dessus.

Le code numérique et le SQLSTATE d'une erreur ne changent jamais avec la langue : seul le texte du message est traduit. Une application qui teste le code ou le SQLSTATE (plutôt que le texte du message) fonctionne donc à l'identique quelle que soit la langue configurée sur le serveur.