Documentation PostgreSQL 8.0.2 | ||||
---|---|---|---|---|
Précédent | Arrière rapide | Chapitre 42. Protocole d'interface et de moteur | Avance rapide | Suivant |
Cette section décrit le format détaille pour chaque message. Chaque message est marqué pour indiquer qu'il pourrait être envoyé par un client (F pour Frontend), un serveur (B pour Backend) ou les deux (F & B). Notez que bien que chaque message inclut un nombre d'octets au début, le format du message est défini de façon à ce que la fin du message peut se trouver sans référence au nombre d'octets. Ceci aide la vérification de la validité. (Le message CopyData est une exception car il forme une partie du flux de données ; le contenu de chaque message CopyData individuel pourrait ne pas être interprétable en eux-même.)
Identifie le message comme demande d'authentification.
Longueur du contenu du message en octets, incluant lui-même.
Spécifie que l'authentification a été réussie.
Identifie le message comme une demande d'authentification.
Longueur du contenu du message, incluant lui-même.
Spécifie que l'authentification Kerberos V4 est requise.
Identifie le message comme demande d'authentification.
Longueur du contenu du message en octets, incluant lui-même.
Spécifie que l'authentification Kerberos V5 est requise.
Identifie le message comme demande d'authentification.
Longueur du contenu des messages en octets, incluant lui-même.
Spécifie qu'un mot de passe en clair est requis.
Identifie le message comme une demande d'authentification.
Longueur du contenu du message en octets, incluant lui-même.
Spécifie que le mot de passe crypté via crypt() est requis.
Le composant (salt) pour utiliser lors du cryptage du mot de passe.
Identifie le message comme une demande d'authentification.
Longueur du contenu d'un message en octets, incluant lui-même.
Spécifie qu'un mot de passe crypté MD5 est requis.
Le composant (salt) à utiliser lors du cryptage du mot de passe.
Identifie le message comme demande d'authentification.
Longueur du contenu du message en octets, incluant lui-même.
Spécifie qu'un message crédentiel SCM est requis.
Identifie le message comme une donnée clé d'annulation. Le client doit sauvegarder ces valeurs si il souhaite être capable de lancer des messages CancelRequest plus tard.
Longueur du contenu du message en octets, incluant lui-même.
L'ID du processus de ce serveur.
La clé secrète de ce serveur.
Identifie le message comme une commande Bind.
Longueur du contenu du message en octets, incluant lui-même.
Le nom du portail de destination (une chaîne vide sélectionne le portail sans nom).
Le nom de l'instruction source préparée (une chaîne vide sélectionne l'instruction préparée sans nom).
Le nombre de codes de format de paramètres qui suivent (dénotés C ci-dessous). Ceci peut être un zéro pour indiquer qu'il n'y a aucun paramètre ou que tous les paramètres utilisent le format par défaut (texte) ; ou une, auquel cas le code de format spécifié est appliqué à tous les paramètres ; ou il peut être égal au nombre actuel des paramètres.
Les codes de format du paramètre. Tous doivent être exactement de zéro (texte) ou un (binaire).
Le nombre de valeurs en paramètre qui suivent (zéro à priori). Ceci doit correspondre au nombre de paramètres nécessaires par la requête.
Ensuite, la paire de champs suivante apparaît dans chaque paramètre :
La longueur de la valeur du paramètre, en octets (ce nombre ne s'inclut pas lui-même). Peut valoir zéro. Dans un cas spécial, -1 indique une valeur de paramètre NULL. Aucun octet représentant une valeur suit le cas NULL.
La valeur du paramètre dans le format indiqué par le code de format associé. n est la longueur ci-dessus.
Après le dernier paramètre, les champs suivants apparaissent :
Le nombre des codes de format des colonnes de résultat qui suivent (dénoté R ci-dessous). Ceci peut être zéro pour indiquer qu'il n'y a pas de colonnes de résultat ou que les colonnes de résultat devraient toujours utiliser le format par défaut (texte) ; ou une, auquel cas le code de format spécifié est appliqué à toutes les colonnes de résultat (si c'est le cas) ; ou il peut valoir le nombre actuel de colonnes de résultat de la requête.
Les codes de format des colonnes de résultat. Tous doivent être soit zéro (texte) soit un (binaire).
Identifie le message comme un indicateur Bind.
Longueur du contenu des message en octets, incluant lui-même.
Longueur du contenu du message en octets, incluant lui-même.
Le code d'annulation de requête. La valeur est choisie pour contenir 1234 dans les 16 bits les plus significatifs et 5678 dans les 16 bits les moins significatifs. (Pour éviter la confusion, ce code ne doit pas être le même qu'un numéro de version du protocole.)
L'ID du processus du serveur cible.
La clé secrète pour le serveur cible.
Identifie le message en tant que commande Close.
Longueur du contenu du message en octets, incluant lui-même.
'S' pour fermer une instruction préparée ; ou 'P' pour fermer un portail.
Le nom de l'instruction préparée ou du portail à fermer (une chaîne vide sélectionne l'instruction préparée sans nom ou le portail).
Identifie le message comme un indicateur de fin du Close.
Longueur du contenu du message en octets, incluant lui-même.
Identifie le message comme une réponse de fin de commande.
Longueur du contenu du message en octets, incluant lui-même.
La balise de la commande. Ceci est un simple mot qui identifie quelle commande SQL est terminée.
Pour une commande INSERT, la balise est INSERT oid lignes où les lignes est le nombre de lignes insérées. oid est l'ID de l'objet d'une ligne insérée si lignes est 1 et que la table cible a des OIDs ; sinon oid vaut 0.
Pour une commande DELETE, la balise est DELETE lignes où lignes est le nombre de lignes supprimées.
Pour une commande UPDATE, la balise est UPDATE lignes où lignes est le nombre de lignes mises à jour.
Pour une commande MOVE, la balise est MOVE lignes où lignes est le nombre de lignes où la position du curseur a été modifiée.
Pour une commande FETCH, la balise est FETCH lignes où lignes est le nombre de lignes qui a été récupéré à partir du curseur.
Identifie le message comme données du COPY.
Longueur du contenu du message en octets, incluant lui-même.
Les données qui forment une partie d'un flux de données COPY. Les messages envoyées à partir du serveur correspondront toujours aux lignes de données mais les messages envoyés par les clients pourraient diviser le flux de données de façon arbitraire.
Identifie le message comme un indicateur de fin de COPY.
Longueur du contenu du message en octets, incluant lui-même.
Identifie le message comme un indicateur en tant qu' échec de COPY.
Longueur du contenu du message en octets, incluant lui-même.
Un message d'erreur à rapporter comme cause d'un échec.
Identifie le message comme une réponse de Start Copy In. Le client doit maintenant envoyer des données de copie (si non préparé pour faire cela, envoyez un message CopyFail).
Longueur du contenu du message en octets, incluant lui-même.
0 indique que le format de COPY complet est textuel (les lignes séparées par des retours chariot, des colonnes séparées par des caractères de séparation, etc). 1 indique que le format de copie complet est binaire (similaire au format DataRow). Voir COPY pour plus d'informations.
Le nombre de colonnes dans les données à copier (dénotées N ci-dessous).
Les codes de format à utiliser pour chaque colonne. Chacun doit être réellement zéro (texte) ou un (binaire). Tous doivent être zéro si le format de copie complet est de type texte.
Identifie le message comme une réponse Start Copy Out. Ce message sera suivi par des données copy-out.
La longueur du contenu du message en octets, incluant lui-même.
0 indique le format de copie complet est textuel (lignes séparées par des retours chariots, colonnes séparées par des caractères séparateur, etc). 1 indique que le format de copie complet est binaire (similaire au format DataRow). Voir COPY pour plus d'informations.
Le nombre de colonnes de données à copier (dénotées N ci-dessous).
Les codes de format à utiliser pour chaque colonne. Chacun doit être soit zéro (texte) ou un (binaire). Tous doivent être zéro si le format de copie complet est de type texte.
Identifie le message comme une ligne de données.
Longueur du message en octets, incluant lui-même.
Le nombre de valeurs de colonnes qui suivent (peut valoir zéro).
Ensuite, la paire de champs suivante apparaît pour chaque colonne :
La longueur de la valeur de la colonne, en octets (ce nombre ne s'inclut pas lui-même). Peut valoir zéro. Comme cas spécial, -A indique une valeur NULL dans la colonne. Aucun octet de valeur ne suit dans la cas d'un NULL.
La valeur de la colonne dans le format indiqué par le code de format associé. n est la longueur ci-dessus.
Identifie le message comme une commande Describe.
Longueur du message en octets, incluant lui-même.
'S' pour décrire une instruction préparée ; ou 'P' pour décrire un portail.
Le nom de l'instruction préparée ou du portail à décrire (une chaîne vide sélectionne l'instruction préparée sans nom ou le portail).
Identifie le message commme une réponse à une chaîne de requête vide string. (Ceci est un substitue à CommandComplete.)
Longueur du message en octets, incluant lui-même.
Identifie le message comme une erreur.
Longueur du message en octets, incluant lui-même.
Le corps du message consiste de un ou plus de champs identifiés, suivis par un octet zéro comme terminateur. Les champs pourraient apparaître dans n'importe quel ordre. Pour chaque champ, il y a ce qui suit :
Un code identifiant le type de champ ; s'il vaut zéro, c'est la fin du message et aucune chaîne ne suit. Les types de champs définis sont listés dans Section 42.5. Comme des types de champs pourraient être ajoutés dans le futur, les clients devraient ignorer silencieusement de type non reconnus.
La valeur du champ.
Identifie le message comme une commande Execute.
Longueur du message en octets, incluant lui-même.
Le nom du portail à exécuter (une chaîne vide sélectionne le portail sans nom).
Nombre maximum de lignes à renvoyer, si le portail contient une requête qui renvoie des lignes (ignoré sinon). Zéro signifie << aucune limite >>.
Identifie le message comme une commande Flush.
Longueur du message en octets, incluant lui-même.
Identifie le message comme un appel de fonction.
Longueur du message en octets, incluant lui-même.
Spécifie l'ID de l'objet représentant la fonction à appeller.
Le nombre de codes de format de l'argument qui suivent (dénoté C ci-dessous). Cela peut être zéro pour indiquer qu'il n'y a pas d'arguments our que tous les arguments utilisent le format par défaut (texte) ; ou un, auquel cas le code de format est appliqué à tous les arguments ; ou il peut valoir le nombre réel d'arguments.
Les codes de format d'argument. Chacun doit être soit zéro (texte) soit un (binaire).
Spécifie le nombre d'arguments fournis à la fonction.
Ensuite, la paire de champs suivante apparaît pour chaque argument :
La longueur de la valeur de l'argument en octets (ce nombre ne s'inclut pas lui-même). Peut valoir zéro. Comme cas spécial, -1 indique une valeur NULL de l'argument. Aucun octet de valeur ne suit dans le cas NULL.
La valeur de l'argument dans le format indiqué par le code de format associé. n est la longueur ci-dessus.
Après le dernier argument, le champ suivant apparaît :
Le code du format pour le résultat de la fonction. Doit être soit zéro (texte) soit un (binaire).
Identifie le message comme le résultat d'un appel de fonction.
Longueur du message en octets, incluant lui-même.
La longueur de la valeur du résultat de la fonction, en octets (ce nombre ne s'inclut pas lui-même). Peut valoir zéro. Comme cas spécial, -1 indique NULL comme résultat d'une fonction. Aucun octet de valeur ne suit dans ce cas.
La valeur du résultat de la fonction, dans le format indiqué par le code de format associé. n est la longueur ci-dessus.
Identifie le message comme un indicateur d'absence de données.
Longueur du message en octets, incluant lui-même.
Identifie le message comme un avertissement.
Longueur du message en octets, incluant lui-même.
Le corps du message consiste en un ou plusieurs champs identifiés, suivis par un octet zéro comme terminateur. Les champs pourraient apparaître dans n'importe quel ordre. Pour chaque champ, il existe ce qui suit :
Un code identifiant le type de champ ; s'il vaut zéro, c'est la fin du message et aucune chaîne ne suit. Les types de champs déjà définis sont listés dans Section 42.5. Comme plus de types de champs pourraient être ajoutés dans le futur, les clients devraient ignorer silencieusement les champs de type non reconnus.
La valeur du champ.
Identifie le message comme une réponse de notification.
Longueur du message en octets, incluant lui-même.
L'ID du processus serveur ayant lancé la notification.
Le nom de la condition qui a lancé la notification.
Une information supplémentaire à partir du processus de notification. (Actuellement, cette fonctionnalité n'est pas implémentée donc le champ est toujours une chaîne vide.)
Identifie le message comme description du paramètre.
Longueur du message en octets, incluant lui-même.
Le nombre de paramètres utilisé par l'instruction (pourrait valoir zéro).
Ensuite, pour chaque paramètre, voici ce qui suit :
Spécifie l'ID de l'objet du type de données du paramètre.
Identifie le message comme un rapport de statut du paramètre en exécution.
Longueur du message en octets, incluant lui-même.
Le nom du paramètre en exécution en cours de rapport.
La valeur actuelle du paramètre.
Identifie le message comme une commande Parse.
Longueur du message en octets, incluant lui-même.
Le nom de l'instruction préparée de destination (une chaîne vide sélectionne l'instruction préparée sans nom).
La chaîne de requête à analyser.
Le nombre de types de données en paramètre spécifié (pourrait valoir zéro). Notez que ceci n'est pas une indication du nombre de paramètres qui pourrait apparaître dans la chaîne de requête, seulement le nombre que le client veut pour les types pré-spécifiés.
Ensuite, pour chaque paramètre, voici ce qui suit :
Spécifie l'ID de l'objet du type de données en paramètre. Placer un zéro ici est équivalent à laisser le type non spécifié.
Identifie le message comme un indicateur de fin de Parse.
Longueur du message en octets, incluant lui-même.
Identifie le message comme une réponse de mot de passe.
Longueur du message en octets, incluant lui-même.
Le mot de passe (crypté si nécessaire).
Identifie le message comme une indicateur de suspension du portail. Notez que ceci apparaît seulement si la limite du nombre de lignes d'un message Execute a été atteint.
Longueur du message en octets, incluant lui-même.
Identifie le message comme une simple requête.
Longueur du message en octets, incluant lui-même.
La chaîne de requête lui-même.
Identifie le type de message. ReadyForQuery est envoyé quand le serveur est prêt pour un nouveau cycle de requêtes.
Longueur du message en octets, incluant lui-même.
Indicateur de l'état actuel de la transaction du serveur. Les valeurs possibles sont 'I' si en pause (pas dans un bloc de transaction) ; 'T' si dans un bloc de transaction ; ou 'E' dans un bloc de transaction échouée (les requêtes seront réjetées une fois le bloc terminé).
Identifie le message comme une description de ligne.
Longueur du message en octets, incluant lui-même.
Spécifie le nombre de champs dans une ligne (pourrait valoir zéro).
Ensuite, pour chaque champ, voici ce qui suit :
Le nom du champ.
Si le champ peut être identifié comme une colone d'une table spécifique, l'ID de l'objet de la table ; sinon zéro.
Si le champ peut être identifié comme une colonne d'une table spécifique, le numéro d'attribut de la colonne ; sinon zéro.
L'ID de l'objet du type de données du champ.
La taille du type de données (voir pg_type.typlen). Notez que les valeurs négatives dénotent des types de largeur variable.
Le modifieur de type (voir pg_attribute.atttypmod). La signification du modifieur est spécifique au type.
Le code de format en cours d'utilisation pour le champ. Actuellement, sera zéro (texte) ou un (binaire). Dans un RowDescription renvoyé à partir de la variante de l'instruction de Describe, le code du format n'est pas encore connu et sera toujours zéro.
Longueur du message en octets, incluant lui-même.
Le code de requête SSL. La valeur est choisie pour contenir 1234 dans les 16 bits les plus significatifs, et 5679 dans les 16 bits les moins significatifs. (Pour éviter la confusion, ce code ne doit pas être le même que celui du numéro de version du protocole.)
Longueur du message en octets, incluant lui-même.
Le numéro de version du protocole. Les 16 bits les plus significatifs sont le numéro de version majeure (3 pour le protocole décrit ici). Les 16 bits les moins significatifs sont le numéro de version mineure (0 pour le protocole décrit ici).
Le numéro de version du protocole est suivi par une ou plusieurs paires de nom de paramètre ou de chaînes de valeur. Un octet zéro est requis comme un terminateur après la dernière paire nom/valeur. Les paramètres peuvent apparaître dans n'importe quel ordre. user est requis, les autres sont en option. Chaque paramètre est spécifié comme :
Le nom du paramètre. Les noms actuellement reconnus sont :
Le nom de l'utilisateur de la base de données pour se connecter. Requis ; il n'y a pas de valeur par défaut.
La base de données où se connecter. Par défaut le nom de l'utilisateur.
Arguments en ligne de commande pour le serveur. (Ceci est obsolète en faveur des paramètres individuels en exécution.)
En plus de ce qui est au-dessus, tout paramètre en exécution qui peut être initialisé au lancement du serveur pourrait être listé. Ces paramètres seront appliqués lors du lancement du serveur (après analyse des options en ligne de commande s'il y en a). Les valeurs agiront comme valeurs par défaut de la session.
La valeur du paramètre.
Identifie le message comme une commande Sync.
Longueur du message en octets, incluant lui-même.
Identifie le message comme une fin.
Longueur du message en octets, incluant lui-même.
Précédent | Sommaire | Suivant |
Types de données de message | Niveau supérieur | Champs des messages d'erreur et d'avertissement |