PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 17.1 » Langage SQL » Fonctions et opérateurs » Fonctions et opérateurs pour les adresses réseau

9.12. Fonctions et opérateurs pour les adresses réseau #

Les types pour les adresses réseau IP, cidr et inet, supportent les opérateurs de comparaison habituels indiqués dans Tableau 9.1 ainsi que les opérateurs et fonctions spécialisés indiqués dans Tableau 9.39 et Tableau 9.40.

Toute valeur cidr peut être convertie implicitement en inet ; de ce fait, les opérateurs et fonctions indiqués ici comme travaillant sur des valeurs inet fonctionnent aussi sur des valeurs cidr. (Quand il y a des fonctions séparées pour inet et cidr, c'est dû au comportement différent pour les deux cas.) De plus, il est permis de convertir une valeur inet en une valeur cidr. Quand cela se fait, tout bit à droite du masque réseau est mis à zéro silencieusement pour créer une valeur cidr valide.

Tableau 9.39. Opérateurs d'adresse IP

Opérateur

Description

Exemple(s)

inet << inetboolean

Le sous-réseau est-il strictement contenu dans l'autre sous-réseau ? Cet opérateur, et les quatre suivants, testent l'inclusion du sous-réseau. Ils considèrent seulement les parties réseau des deux adresses (ignorant tout bit à droite des masques réseau), et déterminent si un réseau est identique ou un sous-réseau de l'autre.

inet '192.168.1.5' << inet '192.168.1/24't

inet '192.168.0.5' << inet '192.168.1/24'f

inet '192.168.1/24' << inet '192.168.1/24'f

inet <<= inetboolean

Est-ce que le sous-réseau est contenu dans ou égal au sous-réseau ?

inet '192.168.1/24' <<= inet '192.168.1/24't

inet >> inetboolean

Est-ce que ce sous-réseau est contenu strictement dans le sous-réseau ?

inet '192.168.1/24' >> inet '192.168.1.5't

inet >>= inetboolean

Est-ce que le sous-réseau contient ou est égal au sous-réseau ?

inet '192.168.1/24' >>= inet '192.168.1/24't

inet && inetboolean

Est-ce qu'un des sous-réseaux contient ou est égale à l'autre ?

inet '192.168.1/24' && inet '192.168.1.80/28't

inet '192.168.1/24' && inet '192.168.2.0/28'f

~ inetinet

Calcule un NOT bit à bit.

~ inet '192.168.1.6'63.87.254.249

inet & inetinet

Calcule un AND bit à bit.

inet '192.168.1.6' & inet '0.0.0.255'0.0.0.6

inet | inetinet

Calcule un OR bit à bit.

inet '192.168.1.6' | inet '0.0.0.255'192.168.1.255

inet + bigintinet

Ajoute un décalage à une adresse.

inet '192.168.1.6' + 25192.168.1.31

bigint + inetinet

Ajoute un décalage à une adresse.

200 + inet '::ffff:fff0:1'::ffff:255.240.0.201

inet - bigintinet

Soustrait un décalage à une adresse.

inet '192.168.1.43' - 36192.168.1.7

inet - inetbigint

Calcule la différence de deux adresses.

inet '192.168.1.43' - inet '192.168.1.19'24

inet '::1' - inet '::ffff:1'-4294901760


Tableau 9.40. Fonctions des adresses IP

Fonction

Description

Exemple(s)

abbrev ( inet ) → text

Crée un format d'affichage abrévié sous la forme d'un texte. (Le résultat est le même que ce que produit la fonction de sortie du type inet ; c'est « abrévié » seulement en comparaison du résultat d'une conversion explicite vers du text qui, pour des raisons historiques, ne supprimera jamais la partie du masque réseau.)

abbrev(inet '10.1.0.0/32')10.1.0.0

abbrev ( cidr ) → text

Crée un format d'affichage abrévié sous la forme d'un texte. (L'abréviation consiste en la suppression des octets zéro à droite du masque réseau ; il y a plus d'exemples dans Tableau 8.22.)

abbrev(cidr '10.1.0.0/16')10.1/16

broadcast ( inet ) → inet

Calcule l'adresse de broadcast pour le réseau de l'adresse.

broadcast(inet '192.168.1.5/24')192.168.1.255/24

family ( inet ) → integer

Renvoie la famille de l'adresse : 4 pour IPv4, 6 pour IPv6.

family(inet '::1')6

host ( inet ) → text

Renvoie l'adresse IP sous forme de texte, en ignorant le masque réseau.

host(inet '192.168.1.0/24')192.168.1.0

hostmask ( inet ) → inet

Calcule le masque de l'hôte pour le réseau de l'adresse.

hostmask(inet '192.168.23.20/30')0.0.0.3

inet_merge ( inet, inet ) → cidr

Calcule le plus petit réseau qui inclut les deux réseaux donnés.

inet_merge(inet '192.168.1.5/24', inet '192.168.2.5/24')192.168.0.0/22

inet_same_family ( inet, inet ) → boolean

Teste si les adresses appartiennent à la même famille IP.

inet_same_family(inet '192.168.1.5/24', inet '::1')f

masklen ( inet ) → integer

Renvoie la longueur du masque réseau en bits.

masklen(inet '192.168.1.5/24')24

netmask ( inet ) → inet

Calcule le masque réseau pour le réseau de l'adresse.

netmask(inet '192.168.1.5/24')255.255.255.0

network ( inet ) → cidr

Renvoie la partie réseau de l'adresse, mettant à zéro tout ce qui se trouve à droit du masque réseau. (Ceci est équivalent à convertir la valeur en cidr.)

network(inet '192.168.1.5/24')192.168.1.0/24

set_masklen ( inet, integer ) → inet

Configure la longueur du masque réseau pour une valeur inet. La partie adresse ne change pas.

set_masklen(inet '192.168.1.5/24', 16)192.168.1.5/16

set_masklen ( cidr, integer ) → cidr

Configure la longueur du masque réseau pour une valeur cidr. Les bits d'adresse à droit du nouveau masque réseau sont configurés à zéro.

set_masklen(cidr '192.168.1.0/24', 16)192.168.0.0/16

text ( inet ) → text

Renvoie l'adresse IP non abrévié et la longueur du masque réseau en texte. (Ceci a le même résultat qu'une conversion explicite vers text.)

text(inet '192.168.1.5')192.168.1.5/32


Astuce

Les fonctions abbrev, host et text ont pour but principal d'offrir des formats d'affichage alternatifs pour les adresses IP.

Les types d'adresse MAC, macaddr et macaddr8, supportent les opérateurs de comparaison habituels indiqués dans Tableau 9.1 ainsi que les fonctions spécialisées indiquées dans Tableau 9.41. De plus, ils supportent les opérateurs logiques bit à bit ~, & et | (NOT, AND et OR), comme indiqué ci-dessus pour les adresses IP.

Tableau 9.41. Fonctions pour les adresses MAC

Fonction

Description

Exemple(s)

trunc ( macaddr ) → macaddr

Configure les trois derniers octets de l'adresse à zéro. Le préfixe restant peut être associé avec un manufacturier particulier (en utilisant les données non inclus dans PostgreSQL).

trunc(macaddr '12:34:56:78:90:ab')12:34:56:00:00:00

trunc ( macaddr8 ) → macaddr8

Configure les 5 derniers octets de l'adresse à zéro. Le préfixe restant peut être associé à un manufacturier particulier (en utilisant des données non inclus dans PostgreSQL).

trunc(macaddr8 '12:34:56:78:90:ab:cd:ef')12:34:56:00:00:00:00:00

macaddr8_set7bit ( macaddr8 ) → macaddr8

Configure le 7è bit de l'adresse à un, créant ce qui est connu comme un EUI-64 modifié, pour inclusion dans une adresse IPv6.

macaddr8_set7bit(macaddr8 '00:34:56:ab:cd:ef')02:34:56:ff:fe:ab:cd:ef