

Cette section fournit une liste rapide des changements, au bénéfice des développeurs essayant de mettre à jour leur bibliothèque client existante avec le protocole 3.0.
   Le paquet de démarrage initial utilise un format flexible de liste de chaînes
   de caractères, au lieu d'un format fixé. Notez que les valeurs par défaut
   d'une session pour les paramètres d'exécution peuvent maintenant être
   spécifiées directement dans le paquet de démarrage. (En fait, vous pouvez le
   faire avant en utilisant le champ options mais, étant
   donné la largeur limité de ce champ et le manque de moyen pour mettre entre
   guillemets les espaces blancs dans les valeurs, ce n'était pas une technique
   très sûre.)
  
Tous les messages ont maintenant un compteur de longueur suivant immédiatement l'octet du type de message (sauf pour les paquets de démarrage qui n'ont pas d'octet de type). De plus, notez que le message PasswordMessage a maintenant un octet de type
   Les messages ErrorResponse et NoticeResponse ('E' et
   'N') contiennent maintenant plusieurs champs, à partir
   desquels le code du client peut assembler un message d'erreur avec le
   niveau de verbosité désiré. Notez que les champs individuels ne finiront
   habituellement pas avec un retour chariot, alors que la chaîne seule
   envoyée dans le protocole précédent le faisait toujours.
  
   Le message ReadyForQuery ('Z') inclut un indicateur de
   statut de transaction.
  
La distinction entre les types de message BinaryRow et DataRow n'existe plus ; le type de message DataRow sert à renvoyer des données dans tous les formats. Notez que la disposition de DataRow a changé pour faciliter l'analyse. De plus, la représentation des valeurs binaires a changé : elle n'est plus directement liée à la représentation interne du serveur.
Il existe un nouveau sous-protocole de « requête étendue », qui ajoute les types de message client Parse, Bind, Execute, Describe, Close, Flush et Sync, ainsi que les types de message backend ParseComplete, BindComplete, PortalSuspended, ParameterDescription, NoData et CloseComplete. Les clients existants n'ont pas besoin de s'occuper de ce sous-protocole, mais l'utiliser pourrait permettre des améliorations en performance et en fonctionnalité.
   Les données de COPY sont maintenant encapsulées dans des
   messages CopyData et CopyDone. Il existe une façon bien définie de reprendre
   après des erreurs survenues pendant un COPY. Le
   « \. » de la dernière ligne n'est plus
   nécessaire, et n'est plus envoyé lors d'un COPY OUT. (Il
   est toujours reconnu comme terminaison lors d'un COPY IN,
   mais son utilisation est abandonnée et finira par être supprimée.) Le
   COPY binaire est supporté. Les messages CopyInResponse et
   CopyOutResponse incluent des champs indiquant le nombre de colonnes et le
   format de chaque colonne.
  
La disposition des messages FunctionCall et FunctionCallResponse a changé. FunctionCall accepte maintenant de passer des arguments NULL aux fonctions. Il peut aussi gérer de passer des paramètres et de récupérer des résultats au format texte ou binaire. Il n'y a plus de raison de considérer FunctionCall comme une faille potentielle de sécurité car il n'offre pas d'accès direct aux représentations internes des données du serveur.
   Le backend envoie des messages ParameterStatus ('S')
   lors du démarrage de la connexion pour tous les paramètres qu'il considère
   intéressant pour la bibliothèque cliente. De plus, un message
   ParameterStatus est envoyé à chaque fois que la valeur active est modifiée
   pour chacun de ces paramètres.
  
   Le message RowDescription ('T') apporte de nouveaux champs
   pour l'OID de la table et le numéro de la colonne pour chaque colonne
   de la ligne décrite. Il affiche aussi le code format pour chaque colonne.
  
   Le message CursorResponse ('P') n'est plus généré par le
   backend.
  
   Le message NotificationResponse ('A') a un champ
   supplémentaire de type chaîne de caractères, qui peut porter une
   « charge » passé depuis l'événement NOTIFY.
  
   Le message EmptyQueryResponse ('I') incluait un paramètre
   de chaîne vide ; il a été supprimé.