PostgreSQLLa base de données la plus sophistiquée au monde.

Version anglaise

8.9. 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.21, « 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.12, « Fonctions et opérateurs sur les adresses réseau »).

Tableau 8.21. Types d'adresses réseau

Nom Taille de stockage Description
cidr 7 ou 19 octets réseaux IPv4 et IPv6
inet 7 ou 19 octets hôtes et réseaux IPv4 et IPv6
macaddr 6 octets adresses MAC
macaddr8 8 bytes adreses MAC (format EUI-64)

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.

8.9.1. inet

Le type inet stocke une adresse d'hôte IPv4 ou IPv6 et, optionnellement, son sous-réseau, le tout dans un seul champ. Le sous-réseau est représentée par le nombre 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/yadresse 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.

8.9.2. cidr

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/yaddress 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.22, « Exemples de saisie de types cidr » présente quelques exemples.

Tableau 8.22. 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

8.9.3. inet vs cidr

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]

Astuce

Les fonctions host, text et abbrev permettent de modifier le format d'affichage des valeurs inet et cidr.

8.9.4. macaddr

Le type macaddr stocke des adresses MAC, connues par exemple pour les adresses de cartes réseau Ethernet (mais les adresses MAC sont aussi utilisées dans d'autres cas). Les saisies sont acceptées dans les formats suivants :

'08:00:2b:01:02:03'
'08-00-2b-01-02-03'
'08002b:010203'
'08002b-010203'
'0800-2b01-0203'
'08002b010203'

Ces exemples 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 premier des formats ci-dessus.

Le standard IEEE 802-2001 spécifie la seconde forme affichée (avec les tirets) comme forme canonique pour les adresses MAC, et que la première forme (avec les :) est la notation à bits retournés, ce qui donne l'équivalence 08-00-2b-01-02-03 = 01:00:4D:08:04:0C. Cette convention est largement ignorée aujourd'hui, et n'a de sens que pour des protocoles réseaux obsolètes (comme Token Ring). PostgreSQL ne tient pas compte des bits retournés, et tous les formats acceptés utilisent l'ordre canonique LSB.

Les cinq derniers formats ne font partie d'aucun standard.

8.9.5. macaddr8

Le type macaddr8 stocke des adresses MAC au format EUI-64, connues par exemple pour les adresses de cartes réseau Ethernet (mais les adresses MAC sont aussi utilisées dans d'autres cas). Ce type accepte à la fois des adresses MAC d'une longueur de 6 et 8 octets. Les adresses MAC fournies dans un format de 6 octets seront stockées dans un format de 8 octets avec les 4ème et 5ème octets respectivement positionnées à FF et FE. Veuillez noter qu'IPv6 utilise un format modifié de EUI-64 où le 7ème bit devrait être positionné à un après la conversion depuis EUI-48. La fonction macaddr8_set7bit est fournie pour réaliser ce changement. De manière générale, n'importe quelle valeur en entrée constituée de paires de chiffres au format hexadécimal (dans les limites d'un octet), systématiquement séparées ou non d'un de des caractères ':', '-' or '.' est acceptée. Le nombre de chiffres hexadécimaux doit être soit 16 (8 octets) ou 12 (6 octets). Les espaces non significatifs présents avant ou après sont ignorés. Voici un ensemble d'exmples de formats acceptés en entrée :

'08:00:2b:01:02:03:04:05'
'08-00-2b-01-02-03-04-05'
'08002b:0102030405'
'08002b-0102030405'
'0800.2b01.0203.0405'
'0800-2b01-0203-0405'
'08002b01:02030405'
'08002b0102030405'

Ces exemples spécifient tous la même addresse. Les majuscules et les minuscules sont acceptées pour les caractères de a jusqu'à f. La sortie sera toujours au même format que le premier exemple. Les six derniers formats en entrée qui sont mentionnés au dessus ne font partie d'aucun standard. Pour convertir une adresse MAC traditionnelle de 48 bits au format EUI-48 vers le format modifié EUI-64 pour pouvoir être inclue dans la partie hôte d'une adresse IPv6, utilisez macaddr8_set7bit comme ceci :

SELECT macaddr8_set7bit('08:00:2b:01:02:03');

    macaddr8_set7bit     
-------------------------
 0a:00:2b:ff:fe:01:02:03
(1 row)