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.
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.
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 |
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().
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' |
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.
[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.) |