5.8. Tipos de dado para endereço de rede

O PostgreSQL disponibiliza tipos de dado para armazenar endereços de IP e de MAC, mostrado na Tabela 5-18. É preferível utilizar estes tipos em vez dos tipos de texto puro, porque estes tipos possuem verificação de erro na entrada, além de vários operadores e funções especializadas.

Tabela 5-18. Tipos de dado para endereço de rede

NomeArmazenamentoDescriçãoIntervalo
cidr12 bytesredes IPredes válidas IPv4
inet12 byteshospedeiros e redes IPhospedeiros e redes válidas IPv4
macaddr6 bytesendereço MACformatos personalizados

O IPv6 ainda não é suportado.

5.8.1. inet

O tipo de dado inet armazena um endereço de hospedeiro IP e, opcionalmente, a identificação da sub-rede onde se encontra, tudo em um único campo. A identificação da sub-rede é representada pelo número de bits na parte de rede do endereço (a "máscara de rede"). Se a máscara de rede for 32, então o valor não indica uma sub-rede, somente um único hospedeiro. Quando for desejado aceitar apenas redes, deve ser utilizado o tipo cidr em vez do tipo inet.

O formato de entrada para este tipo é x.x.x.x/y onde x.x.x.x é o endereço de IP e y é o número de bits da máscara de rede. Se a parte /y for deixada de fora, então a máscara de rede é 32, e o valor representa somente um único hospedeiro. Ao mostrar, o /y é deixado de fora se a máscara de rede for 32.

5.8.2. cidr

O tipo cidr armazena uma especificação de rede IP. Os formatos de entrada e de saída seguem as convenções do Classless Internet Domain Routing [1] . O formato para especificar redes sem classe é x.x.x.x/y onde x.x.x.x é a rede e y é o número de bits na máscara de rede. Se y for omitido será calculado pressupondo o sistema antigo de numeração com classes, exceto que será pelo menos suficientemente grande para incluir todos os octetos escritos na entrada.

A Tabela 5-19 mostra alguns exemplos.

Tabela 5-19. cidr Exemplos de entrada para este tipo

CIDR EntradaCIDR Mostradoabbrev(CIDR)
192.168.100.128/25192.168.100.128/25192.168.100.128/25
192.168/24192.168.0.0/24192.168.0/24
192.168/25192.168.0.0/25192.168.0.0/25
192.168.1192.168.1.0/24192.168.1/24
192.168192.168.0.0/24192.168.0/24
128.1128.1.0.0/16128.1/16
128128.0.0.0/16128.0/16
128.1.2128.1.2.0/24128.1.2/24
10.1.210.1.2.0/2410.1.2/24
10.110.1.0.0/1610.1/16
1010.0.0.0/810/8

5.8.3. inet vs cidr

A diferença essencial entre os tipos de dado inet e cidr é que inet aceita valores com bits diferentes de zero à direita da máscara de rede, enquanto cidr não.

Dica: Caso não goste do formato de saída para os valores de inet ou cidr, tente utilizar as funções host(), text() e abbrev().

5.8.4. macaddr

O tipo macaddr armazena endereços de MAC, ou seja, endereços de hardware da placa Ethernet (embora os endereços MAC sejam utilizados para outras finalidades também). A entrada é aceita em vários formatos personalizados incluindo

'08002b:010203'
'08002b-010203'
'0800.2b01.0203'
'08-00-2b-01-02-03'
'08:00:2b:01:02:03'

sendo que todos especificam o mesmo endereço. Letras maiúsculas e minúsculas são aceitas para os dígitos de a a f. A saída é sempre na última forma mostrada.

O diretório contrib/mac na distribuição do fonte do PostgreSQL contém ferramentas que podem ser utilizadas para mapear endereços MAC em nomes de fabricantes de hardware.

Notas

[1]

O CIDR, definido pela RFC1519, elimina o sistema de classes que originalmente determinou a parte de rede de um endereço IP. Como a sub-rede, da qual é uma extensão direta, ele conta com uma máscara de rede explícita para definir o limite entre as partes de rede e de host de um endereço. Manual de Administração do Sistema Unix - Evi Nemeth e outros - Bookman. (N.T.)