PostgreSQL offers data types
to store IPv4, IPv6, and MAC addresses, as shown in Table
8-17. It is preferable to use these types instead of plain
text types to store network addresses, because these types offer
input error checking and several specialized operators and
functions (see Section
9.12).

Table 8-17. Network Address Types

Name

Storage Size

Description

cidr

7 or 19 bytes

IPv4 and IPv6 networks

inet

7 or 19 bytes

IPv4 and IPv6 hosts and networks

macaddr

6 bytes

MAC addresses

When sorting inet or cidr data types, IPv4 addresses will always sort
before IPv6 addresses, including IPv4 addresses encapsulated or
mapped into IPv6 addresses, such as ::10.2.3.4 or
::ffff:10.4.3.2.

The inet type holds an IPv4 or IPv6
host address, and optionally the identity of the subnet it is
in, all in one field. The subnet identity is represented by
stating how many bits of the host address represent the network
address (the "netmask"). If the
netmask is 32 and the address is IPv4, then the value does not
indicate a subnet, only a single host. In IPv6, the address
length is 128 bits, so 128 bits specify a unique host address.
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 address/y where address is an IPv4 or IPv6 address and
y is the number of bits in the
netmask. If the /y part is left
off, then the netmask is 32 for IPv4 and 128 for IPv6, so the
value represents just a single host. On display, the /y portion is suppressed if the netmask
specifies a single host.

The cidr type holds an IPv4 or IPv6
network specification. Input and output formats follow
Classless Internet Domain Routing conventions. The format for
specifying networks is address/y where address is the network represented as an
IPv4 or IPv6 address, and y is
the number of bits in the netmask. If y is omitted, it is calculated using
assumptions from the older classful network numbering system,
except that it will be at least large enough to include all of
the octets written in the input. It is an error to specify a
network address that has bits set to the right of the specified
netmask.