Cette section fournit une liste rapide des modifications à l'attention des développeurs essayant d'adapter au protocole 3.0 des bibliothèques clientes existantes.
Le paquet de démarrage initial utilise un format flexible de liste de chaînes
au lieu d'un format fixe. Les valeurs de session par défaut des paramètres
d'exécution peuvent même être spécifiées directement dans le paquet de démarrage
(en fait, cela était déjà possible en utilisant le champ options
;
mais étant donné la largeur limitée d'options
et l'impossibilité de
mettre entre guillemets les espaces fines dans les valeurs, ce n'était pas une
technique très sûre).
Tous les messages possèdent désormais une indication de longueur qui suit immédiatement l'octet du type de message (sauf pour les paquets de démarrage qui n'ont pas d'octet de type). PasswordMessage possède à présent un octet de type.
Les messages ErrorResponse et NoticeResponse ('e
' et
'n
') contiennent maintenant plusieurs champs, à partir desquels le
code client peut assembler un message d'erreur fonction du niveau de verbiage
désiré. Des champs individuels ne se termineront plus par un retour chariot
alors que la chaîne seule envoyée dans l'ancien protocole le faisait
systématiquement.
Le message ReadyForQuery ('z
') inclut un indicateur d'état de
la transaction.
La distinction entre les types de messages BinaryRow et DataRow est supprimée ; le type de message DataRow seul sert à retourner les données dans tous les formats. La disposition de DataRow a changé pour faciliter son analyse. La représentation des valeurs binaires a également été modifiée : elle n'est plus liée directement à la représentation interne du serveur.
Il existe un nouveau sous-protocole « Extended Query » qui ajoute les types de messages client Parse, Bind, Execute, Describe, Close, Flush et Sync et les types de messages serveur ParseComplete, BindComplete, PortalSuspended, ParameterDescription, NoData et CloseComplete. Les clients existants ne sont pas directement concernés par ce sous-protocole, mais son utilisation apportera des améliorations en terme de performances et de fonctionnalités.
Les données de copy
sont désormais encapsulées dans des messages
CopyData et CopyDone. Il y a une façon bien définie de réparer les erreurs
lors du copy
. la dernière ligne spéciale « \.
»
n'est plus nécessaire et n'est pas envoyée lors de copy out
(elle
est toujours reconnue comme un indicateur de fin lors du copy in
mais son utilisation est obsolète. Elle sera éventuellement supprimée). Le
copy
binaire est supporté. les messages copyinresponse et
CopyOutResponse incluent les champs indiquant le nombre de colonnes et le
format de chaque colonne.
La disposition des messages FunctionCall et FunctionCallResponse a changé. FunctionCall supporte à présent le passage aux fonctions d'arguments NULL. Il peut aussi gérer le passage de paramètres et la récupération de résultats aux formats texte et binaire. Il n'y a plus aucune raison de considérer FunctionCall comme une faille potentielle de sécurité car il n'offre plus d'accès direct aux représentations internes des données du serveur.
Le serveur envoie des messages ParameterStatus ('s
') lors de
l'initialisation de la connexion pour tous les paramètres qu'il considère
intéressants pour la bibliothèque client. En conséquence, un message
ParameterStatus est envoyé à chaque fois que la valeur active d'un de ces
paramètres change.
Le message RowDescription ('t
') contient les nouveaux champs oid
de table et de numéro de colonne pour chaque colonne de la ligne décrite. Il
affiche aussi le code de format pour chaque colonne.
Le message CursorResponse ('p
') n'est plus engendré par le serveur.
Le message NotificationResponse ('a
') a un champ de type chaîne
supplémentaire qui peu « embarquer » une chaîne passée par
l'émetteur de l'événement notify
.
Le message EmptyQueryResponse ('i
') nécessitait un paramètre chaîne
vide ; ce n'est plus le cas.