Thread: Some problem with inet type on PostgreSQL-7.0
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.
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