Network Address Data Types

PostgreSQL 7.2 Documentation
Prev | Chapter 3. Data Types | Next

# 3.8. Network Address Data Types

PostgreSQL offers data types to store IP and MAC addresses. 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 3-19. 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

IP v6 is not supported, yet.

## 3.8.1. `inet`

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.

## 3.8.2. `cidr`

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.

Here are some examples:

Table 3-20. `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

## 3.8.3. `inet` vs `cidr`

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.

## 3.8.4. `macaddr`

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.

Prev | Home | Next
Geometric Types | Up | Bit String Types