Thread: Some problem with inet type on PostgreSQL-7.0

Some problem with inet type on PostgreSQL-7.0

From
Vadim Passynkov
Date:
Hi All,

I have some problem with inet type on PostgreSQL-7.0 (FreeBSD
3.4-STABLE)
                Table "ipaddresses" Attribute   |  Type   |          Modifier          
--------------+---------+----------------------------sysname      | text    | not nullindex        | integer | not
nullip_addr     | inet    | not null
 

Indices: ipaddresses_ip_addr,        ipaddresses_pkey

(sysname, ip_addr) - PRIMARY KEY
     View "ipaddresses_view" Attribute   |  Type   | Modifier 
--------------+---------+----------sysname      | text    | index        | integer | ip_addr      | inet    |
ip_netmask  | inet    | 
 

View definition: SELECT ipaddresses.sysname, ipaddresses."index",
ipv4_host(ipaddresses.ip_addr) AS ip_addr,
ipv4_netmask(ipaddresses.ip_addr) AS ip_netmask FROM ipaddresses;


ipv4_host and ipv4_netmask like original host and netmask but return
inet type ( need for ORDER )

CREATE FUNCTION ipv4_host(inet) RETURNS inet AS '
BEGIN
RETURN host($1);
END;
' LANGUAGE 'plpgsql';

CREATE FUNCTION ipv4_netmask(inet) RETURNS inet AS '
BEGIN
RETURN netmask($1);
END;
' LANGUAGE 'plpgsql';


**************************** Problem ************************

select * from ipaddresses where sysname = 'switch01.tor';  sysname    | index |     ip_addr       
--------------+-------+------------------switch01.tor |     1 | 127.0/8  switch01.tor |     2 | 127.0/8
   switch01.tor |     3 | 209.250.155.8/27           
 
(2 rows)

but (sysname, ip_addr) - PRIMARY KEY

127.0/8 - it's not correct output ( real 127.0.0.2/8 and 127.0.0.3/8) 

select * from ipaddresses_view where sysname = 'switch01.tor';  sysname    | index |    ip_addr    |   ip_netmask    
--------------+-------+---------------+-----------------switch01.tor |     1 | 127.0.0.2     | 255.0.0.0switch01.tor |
  2 | 127.0.0.3     | 255.0.0.0           switch01.tor |     3 | 209.250.155.8 | 255.255.255.224              
 
(2 rows)


127.0.0.2 | 255.0.0.0  and 127.0.0.3 | 255.0.0.0 - it's correct output

And of course after pg_dump and restore correct value 127.0.0.2/8 and
127.0.0.3/8 will lose
and will have problem with PRIMARY KEY - (sysname, ip_addr).

-- 
Passynkov Vadim, Axxent Inc.


Re: [BUGS] Some problem with inet type on PostgreSQL-7.0

From
Peter Eisentraut
Date:
I can confirm your problem but there's no known fix. The truth is that the
inet/cidr types have quite a number of bogosities but no one understands
them well enough to undertake fixing them.


Vadim Passynkov writes:

> Hi All,
> 
> I have some problem with inet type on PostgreSQL-7.0 (FreeBSD
> 3.4-STABLE)
> 
>                  Table "ipaddresses"
>   Attribute   |  Type   |          Modifier          
> --------------+---------+----------------------------
>  sysname      | text    | not null
>  index        | integer | not null
>  ip_addr      | inet    | not null
> 
> Indices: ipaddresses_ip_addr,
>          ipaddresses_pkey
> 
> (sysname, ip_addr) - PRIMARY KEY
> 
>       View "ipaddresses_view"
>   Attribute   |  Type   | Modifier 
> --------------+---------+----------
>  sysname      | text    | 
>  index        | integer | 
>  ip_addr      | inet    | 
>  ip_netmask   | inet    | 
> 
> View definition: SELECT ipaddresses.sysname, ipaddresses."index",
> ipv4_host(ipaddresses.ip_addr) AS ip_addr,
> ipv4_netmask(ipaddresses.ip_addr) AS ip_netmask FROM ipaddresses;
> 
> 
> ipv4_host and ipv4_netmask like original host and netmask but return
> inet type ( need for ORDER )
> 
> CREATE FUNCTION ipv4_host(inet) RETURNS inet AS '
> BEGIN
> RETURN host($1);
> END;
> ' LANGUAGE 'plpgsql';
> 
> CREATE FUNCTION ipv4_netmask(inet) RETURNS inet AS '
> BEGIN
> RETURN netmask($1);
> END;
> ' LANGUAGE 'plpgsql';
> 
> 
> **************************** Problem ************************
> 
> select * from ipaddresses where sysname = 'switch01.tor';
>    sysname    | index |     ip_addr       
> --------------+-------+------------------
>  switch01.tor |     1 | 127.0/8  
>  switch01.tor |     2 | 127.0/8                     
>  switch01.tor |     3 | 209.250.155.8/27           
> (2 rows)
> 
> but (sysname, ip_addr) - PRIMARY KEY
> 
> 127.0/8 - it's not correct output ( real 127.0.0.2/8 and 127.0.0.3/8) 
> 
> select * from ipaddresses_view where sysname = 'switch01.tor';
>    sysname    | index |    ip_addr    |   ip_netmask    
> --------------+-------+---------------+-----------------
>  switch01.tor |     1 | 127.0.0.2     | 255.0.0.0
>  switch01.tor |     2 | 127.0.0.3     | 255.0.0.0           
>  switch01.tor |     3 | 209.250.155.8 | 255.255.255.224              
> (2 rows)
> 
> 
> 127.0.0.2 | 255.0.0.0  and 127.0.0.3 | 255.0.0.0 - it's correct output
> 
> And of course after pg_dump and restore correct value 127.0.0.2/8 and
> 127.0.0.3/8 will lose
> and will have problem with PRIMARY KEY - (sysname, ip_addr).
> 
> 

-- 
Peter Eisentraut                  Sernanders väg 10:115
peter_e@gmx.net                   75262 Uppsala
http://yi.org/peter-e/            Sweden