PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 18 RC1 » 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 << inet → boolean

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 <<= inet → boolean

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 >> inet → boolean

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 >>= inet → boolean

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 && inet → boolean

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

~ inet → inet

Calcule un NOT bit Ă  bit.

~ inet '192.168.1.6' → 63.87.254.249

inet & inet → inet

Calcule un AND bit Ă  bit.

inet '192.168.1.6' & inet '0.0.0.255' → 0.0.0.6

inet | inet → inet

Calcule un OR bit Ă  bit.

inet '192.168.1.6' | inet '0.0.0.255' → 192.168.1.255

inet + bigint → inet

Ajoute un décalage à une adresse.

inet '192.168.1.6' + 25 → 192.168.1.31

bigint + inet → inet

Ajoute un décalage à une adresse.

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

inet - bigint → inet

Soustrait un décalage à une adresse.

inet '192.168.1.43' - 36 → 192.168.1.7

inet - inet → bigint

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