8.8. Types adresses réseau
PostgreSQL™ propose des types
de données pour stocker des adresses IPv4, IPv6 et MAC. Ceux-ci sont
décrits dans le Tableau 8.17,
« Types d'adresses réseau ». Il est préférable
d'utiliser ces types plutôt que des types texte standard pour stocker
les adresses réseau car ils offrent un contrôle de syntaxe lors de la
saisie et plusieurs opérateurs et fonctions spécialisées (voir la
Section 9.11,
« Fonctions et opérateurs sur les adresses réseau »).
Tableau 8.17. Types d'adresses réseau
|
Nom
|
Taille de stockage
|
Description
|
|
cidr
|
12 ou 24 octets
|
réseaux IPv4 et IPv6
|
|
inet
|
12 ou 24 octets
|
hôtes et réseaux IPv4 et IPv6
|
|
macaddr
|
6 octets
|
adresses MAC
|
Lors du tri de données de types inet ou
cidr, les adresses IPv4 apparaissent
toujours avant les adresses IPv6, y compris les adresses IPv4
encapsulées, comme ::10.2.3.4 ou ::ffff::10.4.3.2.
Le type inet stocke une adresse d'hôte
IPv4 ou IPv6 et, optionnellement, l'identité de son sous-réseau, le
tout dans un seul champ. L'identité du sous-réseau est représentée
en indiquant combien de bits de l'adresse hôte constituent
l'adresse réseau (le « masque
réseau »). Si le masque réseau est 32 et l'adresse de
type IPv4, alors la valeur n'indique pas un sous-réseau, juste un
hôte. En IPv6, la longueur de l'adresse est de 128 bits, si bien
que 128 bits définissent une adresse réseau unique. Pour n'accepter
que des adresses réseau, il est préférable d'utiliser le type
cidr plutôt que le type inet.
Le format de saisie pour ce type est
adresse/y
où
adresse
est une adresse IPv4 ou IPv6 et
y
est le nombre de bits du
masque réseau. Si
y
est omis,
alors le masque vaut 32 pour IPv4 et 128 pour IPv6, et la valeur
représente un hôte unique. À l'affichage, la portion
/y
est supprimée si le masque réseau
indique un hôte unique.
Le type cidr stocke une définition de
réseau IPv4 ou IPv6. La saisie et l'affichage suivent les
conventions Classless Internet Domain Routing. Le format de saisie
d'un réseau est
address/y
où
address
est le réseau
représenté sous forme d'une adresse IPv4 ou IPv6 et
y
est le nombre de bits du masque
réseau. Si
y
est omis, il
calculé en utilisant les règles de l'ancien système de classes
d'adresses, à ceci près qu'il est au moins assez grand pour inclure
tous les octets saisis. Saisir une adresse réseau avec des bits
positionnés à droite du masque indiqué est une erreur.
Tableau 8.18,
« Exemples de saisie de types cidr » présente quelques exemples.
Tableau 8.18. Exemples de saisie de types
cidr
|
Saisie cidr
|
Affichage cidr
|
abbrev(cidr)
|
|
192.168.100.128/25
|
192.168.100.128/25
|
192.168.100.128/25
|
|
192.168/24
|
192.168.0.0/24
|
192.168.0/24
|
|
192.168/25
|
192.168.0.0/25
|
192.168.0.0/25
|
|
192.168.1
|
192.168.1.0/24
|
192.168.1/24
|
|
192.168
|
192.168.0.0/24
|
192.168.0/24
|
|
128.1
|
128.1.0.0/16
|
128.1/16
|
|
128
|
128.0.0.0/16
|
128.0/16
|
|
128.1.2
|
128.1.2.0/24
|
128.1.2/24
|
|
10.1.2
|
10.1.2.0/24
|
10.1.2/24
|
|
10.1
|
10.1.0.0/16
|
10.1/16
|
|
10
|
10.0.0.0/8
|
10/8
|
|
10.1.2.3/32
|
10.1.2.3/32
|
10.1.2.3/32
|
|
2001:4f8:3:ba::/64
|
2001:4f8:3:ba::/64
|
2001:4f8:3:ba::/64
|
|
2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128
|
2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128
|
2001:4f8:3:ba:2e0:81ff:fe22:d1f1
|
|
::ffff:1.2.3.0/120
|
::ffff:1.2.3.0/120
|
::ffff:1.2.3/120
|
|
::ffff:1.2.3.0/128
|
::ffff:1.2.3.0/128
|
::ffff:1.2.3.0/128
|
La différence principale entre les types de données inet et cidr réside dans le
fait que inet accepte des valeurs avec
des bits non nuls à droite du masque de réseau, alors que
cidr ne l'accepte pas.
Astuce
Les fonctions host, text et abbrev
permettent de modifier le format d'affichage des valeurs
inet et cidr.
Le type macaddr stocke des adresses MAC,
c'est-à-dire des adresses de cartes réseau Ethernet (mais les
adresses MAC sont aussi utilisées dans d'autres cas). Les saisies
sont acceptées dans de nombreux formats, dont :
|
'08002b:010203'
|
|
'08002b-010203'
|
|
'0800.2b01.0203'
|
|
'08-00-2b-01-02-03'
|
|
'08:00:2b:01:02:03'
|
qui indiquent tous la même adresse. Les majuscules et les
minuscules sont acceptées pour les chiffres a à f. L'affichage se fait
toujours selon le dernier format.