Cette section décrit les fonctions et opérateurs pour examiner et
manipuler des chaînes binaires, c'est-à-dire des valeurs de type
bytea
. Beaucoup sont équivalentes, dans le but et dans la
syntaxe, aux fonctions de chaînes de caractères décrites dans la section
précédente.
Le standard SQL définit certaines fonctions de chaînes de caractères utilisant des mots-clés plutôt que des virgules, pour séparer des arguments. Les détails sont dans Tableau 9.11. PostgreSQL fournit aussi des versions de ces fonctions utilisant la syntaxe d'appel de fonctions standards (voir Tableau 9.12).
Tableau 9.11. Fonctions et opérateurs SQL pour des chaînes binaires
Des fonctions supplémentaires de manipulation de chaîne binaire sont disponibles et listées dans Tableau 9.12. Certaines d'entre elles sont utilisées en interne pour implémenter les fonctions de chaînes du standard SQL listées dans Tableau 9.11.
Tableau 9.12. Autres fonctions de chaînes binaires
Fonction Description Exemple(s) |
---|
Supprime la chaîne la plus longue contenant seulement des octets
apparaissant dans
|
Extrait le n-ième bit de la chaîne binaire.
|
Extrait le n-ième octet de la chaîne binaire.
|
Renvoie le nombre d'octets de la chaîne binaire.
|
Renvoie le nombre de caractères de la chaîne binaire, en supposant
qu'il s'agit de texte dans l'encodage indiqué par
|
Calcule le hachage MD5 dans la chaîne binaire, le résultat étant écrit en hexadécimal.
|
Initialise le n-ième
bit dans la chaîne binaire à la valeur
|
Initialise le n-ième
octet dans la chaîne binaire à la valeur
|
Calcule le hachage SHA-224 de la chaîne binaire.
|
Calcule le hachage SHA-256 de la chaîne binaire.
|
Calcule le hachage SHA-384 de la chaîne binaire.
|
Calcule le hachage SHA-512 de la chaîne binaire.
|
Extrait la sous-chaîne de
|
Les fonctions get_byte
et
set_byte
numérotent le premier octet d'une chaîne
binaire comme l'octet 0. Les fonctions get_bit
et
set_bit
numérotent les bits à partir de la droite dans
chaque octet. Par exemple, le bit 0 est le bit le moins significatif du
premier octet, et le bit 15 est le bit le plus significatif du deuxième
octet.
Pour des raisons historiques, la fonction md5
renvoie
une valeur encodée en hexadécimal de type text
alors que les
fonctions SHA-2 renvoient le type bytea
. Utilisez les
fonctions encode
et decode
pour convertir
entre les deux. Par exemple, écrivez encode(sha256('abc'),
'hex')
pour obtenir une représentation textuelle encodée en
hexadécimal ou decode(md5('abc'), 'hex')
pour obtenir
une valeur de type bytea
.
Les fonctions de conversion de chaîne entre des ensembles de caractères
différents (encodage), et pour représenter des données binaires arbitraires
dans leur forme textuelle, sont affichées dans Tableau 9.13. Pour ces fonctions, un
argument ou un résultat de type text
est exprimé dans
l'encodage par défaut de la base de données alors que les arguments ou
résultats de type bytea
sont dans un encodage nommé par un
autre argument.
Tableau 9.13. Fonctions de conversion texte/binaire
Fonction Description Exemple(s) |
---|
Convertit une chaîne binaire représentant du texte dans l'encodage
|
Convertit une chaîne binaire représentant du texte dans l'encodage
|
Convertit une chaîne de type
|
Encode les données binaires dans leur représentation textuelle ;
les valeurs
|
Décode les données binaires à partir d'une représentation
textuelle ; les valeurs supportées de
|
Les fonctions encode
et decode
supportent les formats textuels suivants :
Le format base64
est celui de la RFC 2045 Section
6.8. D'après la RFC, les lignes encodées sont réparties sur 76
caractères. Néanmoins, à la place du marqueur de fin de ligne CRLF
MIME, seul un caractère nouvelle ligne est utilisée pour une fin de
ligne. La fonction decode
ignore les caractères de
retour chariot, de nouvelle ligne, l'espace et la tabulation. Sinon une
erreur est levée quand decode
se voit fourni des
données base64 invalides -- ceci incluant quand le remplissage en
fin est incorrect.
Le format escape
convertit les octets zéro et les
octets avec le bit de poids fort configuré en séquences d'échappement
octales (\
nnn
), et il
double les antislashes. Les autres valeurs d'octet sont représentées
littéralement. La fonction decode
lèvera une erreur
si un antislash n'est pas suivi soit par un deuxième antislash ou par
trois chiffres octals. Il accepte les autres valeurs sans changement.
Le format hex
représente chacun 4 bits de données
sous la forme d'un chiffre hexadécimal, de 0
à
f
, en écrivant le chiffre de haut niveau de chaque
octet en premier. La fonction encode
affiche les
chiffres hexadécimaux a
-f
en
minuscule. Comme l'unité la plus petite des données est de 8 bits, un
nombre pair de caractères est renvoyé par encode
.
La fonction decode
accepte les caractères
a
-f
en minuscule comme en
majuscule. Une erreur est levée quand decode
se
voit fourni des données hexadécimales invalides -- ceci incluant
un nombre impair de caractères.
Voir aussi la fonction d'agrégat string_agg
dans Section 9.21 et les fonctions sur les Large Objects dans
Section 34.4.