inet-Erweiterung
Die inet-Erweiterung definiert den Datentyp INET zum Speichern von IPv4- und IPv6-Internetadressen. Sie unterstützt die CIDR-Notation für Subnetzmasken (z. B. 198.51.100.0/22, 2001:db8:3c4d::/48).
Installation und Laden
Die inet-Erweiterung wird beim ersten Gebrauch transparent aus dem offiziellen Erweiterungs-Repository automatisch geladen.
Wenn Sie sie manuell installieren und laden möchten, führen Sie aus:
INSTALL inet;LOAD inet;Beispiele
SELECT '127.0.0.1'::INET AS ipv4, '2001:db8:3c4d::/48'::INET AS ipv6;| ipv4 | ipv6 |
|---|---|
| 127.0.0.1 | 2001:db8:3c4d::/48 |
CREATE TABLE tbl (id INTEGER, ip INET);INSERT INTO tbl VALUES (1, '192.168.0.0/16'), (2, '127.0.0.1'), (3, '8.8.8.8'), (4, 'fe80::/10'), (5, '2001:db8:3c4d:15::1a2f:1a2b');SELECT * FROM tbl;| id | ip |
|---|---|
| 1 | 192.168.0.0/16 |
| 2 | 127.0.0.1 |
| 3 | 8.8.8.8 |
| 4 | fe80::/10 |
| 5 | 2001:db8:3c4d:15::1a2f:1a2b |
Operationen auf INET-Werten
INET-Werte können natürlich verglichen werden, und IPv4 wird vor IPv6 sortiert. Zusätzlich können IP-Adressen durch Addition oder Subtraktion ganzer Zahlen verändert werden.
CREATE TABLE tbl (cidr INET);INSERT INTO tbl VALUES ('127.0.0.1'::INET + 10), ('fe80::10'::INET - 9), ('127.0.0.1'), ('2001:db8:3c4d:15::1a2f:1a2b');SELECT cidr FROM tbl ORDER BY cidr ASC;| cidr |
|---|
| 127.0.0.1 |
| 127.0.0.11 |
| 2001:db8:3c4d:15::1a2f:1a2b |
| fe80::7 |
host-Funktion
Die Host-Komponente eines INET-Werts kann mit der Funktion HOST() extrahiert werden.
CREATE TABLE tbl (cidr INET);INSERT INTO tbl VALUES ('192.168.0.0/16'), ('127.0.0.1'), ('2001:db8:3c4d:15::1a2f:1a2b/96');SELECT cidr, host(cidr) AS host FROM tbl;| cidr | host |
|---|---|
| 192.168.0.0/16 | 192.168.0.0 |
| 127.0.0.1 | 127.0.0.1 |
| 2001:db8:3c4d:15::1a2f:1a2b/96 | 2001:db8:3c4d:15::1a2f:1a2b |
netmask-Funktion
Berechnet die Netzmaske für das Netzwerk der Adresse.
CREATE TABLE tbl (cidr INET);INSERT INTO tbl VALUES ('192.168.1.5/24'), ('127.0.0.1'), ('2001:db8:3c4d:15::1a2f:1a2b/96');SELECT cidr, netmask(cidr) AS netmask FROM tbl;| cidr | netmask |
|---|---|
| 192.168.1.5/24 | 255.255.255.0/24 |
| 127.0.0.1 | 255.255.255.255 |
| 2001:db8:3c4d:15::1a2f:1a2b/96 | ffff:ffff:ffff:ffff:ffff:ffff::/96 |
network-Funktion
Gibt den Netzwerkteil der Adresse zurück und setzt alles rechts der Netzmaske auf null.
CREATE TABLE tbl (cidr INET);INSERT INTO tbl VALUES ('192.168.1.5/24'), ('127.0.0.1'), ('2001:db8:3c4d:15::1a2f:1a2b/96');SELECT cidr, network(cidr) AS network FROM tbl;| cidr | network |
|---|---|
| 192.168.1.5/24 | 192.168.1.0/24 |
| 127.0.0.1 | 127.0.0.1 |
| 2001:db8:3c4d:15::1a2f:1a2b/96 | 2001:db8:3c4d:15::/96 |
broadcast-Funktion
Berechnet die Broadcast-Adresse für das Netzwerk der Adresse.
CREATE TABLE tbl (cidr INET);INSERT INTO tbl VALUES ('192.168.1.5/24'), ('127.0.0.1'), ('2001:db8:3c4d:15::1a2f:1a2b/96');SELECT cidr, broadcast(cidr) AS broadcast FROM tbl;| cidr | broadcast |
|---|---|
| 192.168.1.5/24 | 192.168.1.255/24 |
| 127.0.0.1 | 127.0.0.1 |
| 2001:db8:3c4d:15::1a2f:1a2b/96 | 2001:db8:3c4d:15::ffff:ffff/96 |
Prädikat <<=
Ist das Subnetz im Subnetz enthalten oder gleich?
CREATE TABLE tbl (cidr INET);INSERT INTO tbl VALUES ('192.168.1.0/24'), ('127.0.0.1'), ('2001:db8:3c4d:15::1a2f:1a2b/96');SELECT cidr, INET '192.168.1.5/32' <<= cidr AS subnet_contained FROM tbl;| cidr | subnet_contained |
|---|---|
| 192.168.1.0/24 | true |
| 127.0.0.1 | false |
| 2001:db8:3c4d:15::1a2f:1a2b/96 | false |
Prädikat >>=
Enthält das Subnetz das Subnetz oder ist es gleich?
CREATE TABLE tbl (cidr INET);INSERT INTO tbl VALUES ('192.168.1.0/24'), ('127.0.0.1'), ('2001:db8:3c4d:15::1a2f:1a2b/96');SELECT cidr, INET '192.168.0.0/16' >>= cidr AS subnet_contains FROM tbl;| cidr | subnet_contains |
|---|---|
| 192.168.1.0/24 | true |
| 127.0.0.1 | false |
| 2001:db8:3c4d:15::1a2f:1a2b/96 | false |
HTML-Escape- und Unescape-Funktionen
SELECT html_escape('&');┌──────────────────┐│ html_escape('&') ││ varchar │├──────────────────┤│ & │└──────────────────┘SELECT html_unescape('&');┌────────────────────────┐│ html_unescape('&') ││ varchar │├────────────────────────┤│ & │└────────────────────────┘