PostgreSQL offers data types to store IP and MAC
addresses, shown in Table 5-18. It
is preferable to use these types over plain text types, because
these types offer input error checking and several specialized
operators and functions.
Table 5-18. Network Address Data Types
Name | Storage | Description | Range |
---|
cidr | 12 bytes | IP networks | valid IPv4 networks |
inet | 12 bytes | IP hosts and networks | valid IPv4 hosts or networks |
macaddr | 6 bytes | MAC addresses | customary formats |
IPv6 is not yet supported.
The inet type holds an IP host address, and
optionally the identity of the subnet it is in, all in one field.
The subnet identity is represented by the number of bits in the
network part of the address (the "netmask"). If the
netmask is 32,
then the value does not indicate a subnet, only a single host.
Note that if you want to accept networks only, you should use the
cidr type rather than inet.
The input format for this type is x.x.x.x/y where x.x.x.x is an IP address and
y is the number of
bits in the netmask. If the /y part is left off, then the
netmask is 32, and the value represents just a single host.
On display, the /y
portion is suppressed if the netmask is 32.
The cidr type holds an IP network specification.
Input and output formats follow Classless Internet Domain Routing
conventions.
The format for
specifying classless networks is x.x.x.x/y where x.x.x.x is the network and y is the number of bits in the netmask. If
y is omitted, it is calculated
using assumptions from the older classful numbering system, except
that it will be at least large enough to include all of the octets
written in the input.
Table 5-19 shows some examples.
Table 5-19. cidr Type Input Examples
CIDR Input | CIDR Displayed | 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 |
The essential difference between inet and cidr
data types is that inet accepts values with nonzero bits to
the right of the netmask, whereas cidr does not.
Tip: If you do not like the output format for inet or
cidr values, try the host(),
text(), and abbrev() functions.
The macaddr type stores MAC addresses, i.e., Ethernet
card hardware addresses (although MAC addresses are used for
other purposes as well). Input is accepted in various customary
formats, including
'08002b:010203' |
'08002b-010203' |
'0800.2b01.0203' |
'08-00-2b-01-02-03' |
'08:00:2b:01:02:03' |
which would all specify the same
address. Upper and lower case is accepted for the digits
a through
f. Output is always in the
last of the shown forms.
The directory contrib/mac
in the PostgreSQL source distribution
contains tools that can be used to map MAC addresses to hardware
manufacturer names.