8.8. Tipos para endereço de rede

O PostgreSQL disponibiliza tipos de dado para armazenar endereços IPv4, IPv6 e MAC, conforme mostrado na Tabela 8-17. É 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 (consulte Seção 9.11).

Tabela 8-17. Tipos para endereço de rede

Nome Tamanho de Armazenamento Descrição
cidr 12 ou 24 bytes redes IPv4 e IPv6
inet 12 ou 24 bytes hospedeiros e redes IPv4 e IPv6
macaddr 6 bytes endereço MAC

Ao ordenar os tipos de dado inet e cidr, os endereços IPv4 vêm sempre na frente dos endereços IPv6, inclusive os endereços IPv4 encapsulados ou mapeados em endereços IPv6, tais como ::10.2.3.4 ou ::ffff::10.4.3.2.

8.8.1. inet

O tipo de dado inet armazena um endereço de hospedeiro IPv4 ou IPv6 e, opcionalmente, a identificação da sub-rede onde se encontra, tudo em um único campo. A identificação da sub-rede é representada declarando quantos bits do endereço do hospedeiro representam o endereço de rede (a "máscara de rede"). Se a máscara de rede for 32 e o endereço for IPv4, então o valor não indica uma sub-rede, e sim um único hospedeiro. No IPv6 o comprimento do endereço é de 128 bits e, portanto, 128 bits especificam o endereço de um único hospedeiro. Deve ser observado que se for desejado aceitar apenas endereços de rede, deve ser utilizado o tipo cidr em vez do tipo inet.

O formato de entrada para este tipo é endereço/y, onde endereço é um endereço IPv4 ou IPv6, 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 será 32 para IPv4 e 128 para IPv6, e o valor representa um único hospedeiro apenas. Ao ser mostrado, a porção /y é suprimida se a máscara de rede especificar apenas um único hospedeiro.

8.8.2. cidr

O tipo cidr armazena uma especificação de rede IPv4 ou IPv6. Os formatos de entrada e de saída seguem as convenções do Classless Internet Domain Routing [1] O formato para especificar redes é endereço/y, onde endereço é a rede representada por um endereço IPv4 ou IPv6, e y é o número de bits da máscara de rede. Se y for omitido, será calculado utilizando as premissas do sistema de numeração com classes antigo, exceto que será pelo menos suficientemente grande para incluir todos os octetos escritos na entrada. É errado especificar endereço de rede contendo bits definidos à direita da máscara de rede especificada.

A Tabela 8-18 mostra alguns exemplos.

Tabela 8-18. Exemplos de entrada para o tipo cidr

Entrada cidr Saída cidr 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
10.1.2.3/32 10.1.2.3/32 10.1.2.3/32
2001:4f8:3:ba::/64 2001:4f8:3:ba::/64 2001:4f8:3:ba::/64
2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 2001:4f8:3:ba:2e0:81ff:fe22:d1f1
::ffff:1.2.3.0/120 ::ffff:1.2.3.0/120 ::ffff:1.2.3/120
::ffff:1.2.3.0/128 ::ffff:1.2.3.0/128 ::ffff:1.2.3.0/128

8.8.3. inet versus cidr

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

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

8.8.4. macaddr

O tipo macaddr armazena endereços de MAC [2] , ou seja, endereços de hardware da placa Ethernet (embora os endereços de MAC sejam utilizados para outras finalidades também). A entrada é aceita em vários formatos habituais 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.

Na distribuição do código fonte do PostgreSQL, o diretório contrib/mac contém ferramentas que podem ser utilizadas para fazer a correspondência entre endereços de MAC e nomes de fabricantes de hardware.

Notas

[1]

O CIDR, definido pela RFC1519, elimina o sistema de classes que determinava originalmente 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 hospedeiro de um endereço. Linux Administration Handbook — Evi Nemeth e outros — Prentice Hall PTR. (N. do T.)

[2]

MAC — Forma abreviada de endereço de Controle de Acesso à Mídia (Media Access Control), um endereço de hardware que identifica unicamente cada nó da rede. Webopedia (N. do T.)

SourceForge.net Logo CSS válido!