I have patchless postgres 8.x working to the extent that it's not
segfaulting on AIX 5.3 here, ML3 and built with gcc 4.0.1. There are
two different ways that I've done it, adding "-lc" to the LDFLAGS passed
to configure, and passing "--without-readline" to configure. All 98
regression tests pass with "--without-readline", but the inet test fails
when LDFLAGS is set to "-lc".
What is happening with postgres certainly appears to be related to the
linker; in dynahash.c, the keycopy functions that work with no new
linker flags (strncpy, memmove worked as a memcpy replacement) are all
exported by libreadline.a, while the segfaulting/infinite-looping memcpy
is not. When all the keycopy functions are from libc.a, by not linking
against libreadline or by telling the linker to first check libc, all
the keycopy functions, including memcpy, work.
LDFLAGS configuration
$ LDFLAGS="-lc" ./configure \
--prefix=/opt/dbs/pgsql810-afilias-AIX53-2005-11-16 \
--with-includes=/opt/freeware/include --enable-debug \
--enable-thread-safety --with-libraries=/opt/freeware/lib \
--enable-casert
no readline configuration
$ ./configure --prefix=/opt/dbs/pgsql810-afilias-AIX53-2005-11-16 \
--with-includes=/opt/freeware/include --enable-debug \
--enable-thread-safety --with-libraries=/opt/freeware/lib \
--enable-casert --without-readline
--
Seneca Cunningham
scunning@ca.afilias.info
*** ./expected/inet.out Fri Oct 8 01:45:37 2004
--- ./results/inet.out Wed Nov 16 22:04:27 2005
***************
*** 20,27 ****
--- 20,30 ----
INSERT INTO INET_TBL (c, i) VALUES ('10', '11.1.2.3/8');
INSERT INTO INET_TBL (c, i) VALUES ('10', '9.1.2.3/8');
INSERT INTO INET_TBL (c, i) VALUES ('10:23::f1', '10:23::f1/64');
+ ERROR: invalid input syntax for type cidr: "10:23::f1"
INSERT INTO INET_TBL (c, i) VALUES ('10:23::8000/113', '10:23::ffff');
+ ERROR: invalid input syntax for type cidr: "10:23::8000/113"
INSERT INTO INET_TBL (c, i) VALUES ('::ffff:1.2.3.4', '::4.3.2.1/24');
+ ERROR: invalid input syntax for type cidr: "::ffff:1.2.3.4"
-- check that CIDR rejects invalid input:
INSERT INTO INET_TBL (c, i) VALUES ('192.168.1.2/30', '192.168.1.226');
ERROR: invalid cidr value: "192.168.1.2/30"
***************
*** 33,171 ****
ERROR: invalid cidr value: "192.168.1.2/30"
DETAIL: Value has bits set to right of mask.
INSERT INTO INET_TBL (c, i) VALUES (cidr('ffff:ffff:ffff:ffff::/24'), '::192.168.1.226');
! ERROR: invalid cidr value: "ffff:ffff:ffff:ffff::/24"
! DETAIL: Value has bits set to right of mask.
SELECT '' AS ten, c AS cidr, i AS inet FROM INET_TBL;
ten | cidr | inet
! -----+--------------------+------------------
! | 192.168.1.0/24 | 192.168.1.226/24
! | 192.168.1.0/26 | 192.168.1.226
! | 192.168.1.0/24 | 192.168.1.0/24
! | 192.168.1.0/24 | 192.168.1.0/25
! | 192.168.1.0/24 | 192.168.1.255/24
! | 192.168.1.0/24 | 192.168.1.255/25
! | 10.0.0.0/8 | 10.1.2.3/8
! | 10.0.0.0/32 | 10.1.2.3/8
! | 10.1.2.3/32 | 10.1.2.3
! | 10.1.2.0/24 | 10.1.2.3/24
! | 10.1.0.0/16 | 10.1.2.3/16
! | 10.0.0.0/8 | 10.1.2.3/8
! | 10.0.0.0/8 | 11.1.2.3/8
! | 10.0.0.0/8 | 9.1.2.3/8
! | 10:23::f1/128 | 10:23::f1/64
! | 10:23::8000/113 | 10:23::ffff
! | ::ffff:1.2.3.4/128 | ::4.3.2.1/24
! (17 rows)
-- now test some support functions
SELECT '' AS ten, i AS inet, host(i), text(i), family(i) FROM INET_TBL;
ten | inet | host | text | family
-----+------------------+---------------+------------------+--------
! | 192.168.1.226/24 | 192.168.1.226 | 192.168.1.226/24 | 4
! | 192.168.1.226 | 192.168.1.226 | 192.168.1.226/32 | 4
! | 192.168.1.0/24 | 192.168.1.0 | 192.168.1.0/24 | 4
! | 192.168.1.0/25 | 192.168.1.0 | 192.168.1.0/25 | 4
! | 192.168.1.255/24 | 192.168.1.255 | 192.168.1.255/24 | 4
! | 192.168.1.255/25 | 192.168.1.255 | 192.168.1.255/25 | 4
! | 10.1.2.3/8 | 10.1.2.3 | 10.1.2.3/8 | 4
! | 10.1.2.3/8 | 10.1.2.3 | 10.1.2.3/8 | 4
! | 10.1.2.3 | 10.1.2.3 | 10.1.2.3/32 | 4
! | 10.1.2.3/24 | 10.1.2.3 | 10.1.2.3/24 | 4
! | 10.1.2.3/16 | 10.1.2.3 | 10.1.2.3/16 | 4
! | 10.1.2.3/8 | 10.1.2.3 | 10.1.2.3/8 | 4
! | 11.1.2.3/8 | 11.1.2.3 | 11.1.2.3/8 | 4
! | 9.1.2.3/8 | 9.1.2.3 | 9.1.2.3/8 | 4
! | 10:23::f1/64 | 10:23::f1 | 10:23::f1/64 | 6
! | 10:23::ffff | 10:23::ffff | 10:23::ffff/128 | 6
! | ::4.3.2.1/24 | ::4.3.2.1 | ::4.3.2.1/24 | 6
! (17 rows)
SELECT '' AS ten, c AS cidr, broadcast(c),
i AS inet, broadcast(i) FROM INET_TBL;
ten | cidr | broadcast | inet | broadcast
! -----+--------------------+------------------+------------------+---------------------------------------
! | 192.168.1.0/24 | 192.168.1.255/24 | 192.168.1.226/24 | 192.168.1.255/24
! | 192.168.1.0/26 | 192.168.1.63/26 | 192.168.1.226 | 192.168.1.226
! | 192.168.1.0/24 | 192.168.1.255/24 | 192.168.1.0/24 | 192.168.1.255/24
! | 192.168.1.0/24 | 192.168.1.255/24 | 192.168.1.0/25 | 192.168.1.127/25
! | 192.168.1.0/24 | 192.168.1.255/24 | 192.168.1.255/24 | 192.168.1.255/24
! | 192.168.1.0/24 | 192.168.1.255/24 | 192.168.1.255/25 | 192.168.1.255/25
! | 10.0.0.0/8 | 10.255.255.255/8 | 10.1.2.3/8 | 10.255.255.255/8
! | 10.0.0.0/32 | 10.0.0.0 | 10.1.2.3/8 | 10.255.255.255/8
! | 10.1.2.3/32 | 10.1.2.3 | 10.1.2.3 | 10.1.2.3
! | 10.1.2.0/24 | 10.1.2.255/24 | 10.1.2.3/24 | 10.1.2.255/24
! | 10.1.0.0/16 | 10.1.255.255/16 | 10.1.2.3/16 | 10.1.255.255/16
! | 10.0.0.0/8 | 10.255.255.255/8 | 10.1.2.3/8 | 10.255.255.255/8
! | 10.0.0.0/8 | 10.255.255.255/8 | 11.1.2.3/8 | 11.255.255.255/8
! | 10.0.0.0/8 | 10.255.255.255/8 | 9.1.2.3/8 | 9.255.255.255/8
! | 10:23::f1/128 | 10:23::f1 | 10:23::f1/64 | 10:23::ffff:ffff:ffff:ffff/64
! | 10:23::8000/113 | 10:23::ffff/113 | 10:23::ffff | 10:23::ffff
! | ::ffff:1.2.3.4/128 | ::ffff:1.2.3.4 | ::4.3.2.1/24 | 0:ff:ffff:ffff:ffff:ffff:ffff:ffff/24
! (17 rows)
SELECT '' AS ten, c AS cidr, network(c) AS "network(cidr)",
i AS inet, network(i) AS "network(inet)" FROM INET_TBL;
ten | cidr | network(cidr) | inet | network(inet)
! -----+--------------------+--------------------+------------------+------------------
! | 192.168.1.0/24 | 192.168.1.0/24 | 192.168.1.226/24 | 192.168.1.0/24
! | 192.168.1.0/26 | 192.168.1.0/26 | 192.168.1.226 | 192.168.1.226/32
! | 192.168.1.0/24 | 192.168.1.0/24 | 192.168.1.0/24 | 192.168.1.0/24
! | 192.168.1.0/24 | 192.168.1.0/24 | 192.168.1.0/25 | 192.168.1.0/25
! | 192.168.1.0/24 | 192.168.1.0/24 | 192.168.1.255/24 | 192.168.1.0/24
! | 192.168.1.0/24 | 192.168.1.0/24 | 192.168.1.255/25 | 192.168.1.128/25
! | 10.0.0.0/8 | 10.0.0.0/8 | 10.1.2.3/8 | 10.0.0.0/8
! | 10.0.0.0/32 | 10.0.0.0/32 | 10.1.2.3/8 | 10.0.0.0/8
! | 10.1.2.3/32 | 10.1.2.3/32 | 10.1.2.3 | 10.1.2.3/32
! | 10.1.2.0/24 | 10.1.2.0/24 | 10.1.2.3/24 | 10.1.2.0/24
! | 10.1.0.0/16 | 10.1.0.0/16 | 10.1.2.3/16 | 10.1.0.0/16
! | 10.0.0.0/8 | 10.0.0.0/8 | 10.1.2.3/8 | 10.0.0.0/8
! | 10.0.0.0/8 | 10.0.0.0/8 | 11.1.2.3/8 | 11.0.0.0/8
! | 10.0.0.0/8 | 10.0.0.0/8 | 9.1.2.3/8 | 9.0.0.0/8
! | 10:23::f1/128 | 10:23::f1/128 | 10:23::f1/64 | 10:23::/64
! | 10:23::8000/113 | 10:23::8000/113 | 10:23::ffff | 10:23::ffff/128
! | ::ffff:1.2.3.4/128 | ::ffff:1.2.3.4/128 | ::4.3.2.1/24 | ::/24
! (17 rows)
SELECT '' AS ten, c AS cidr, masklen(c) AS "masklen(cidr)",
i AS inet, masklen(i) AS "masklen(inet)" FROM INET_TBL;
ten | cidr | masklen(cidr) | inet | masklen(inet)
! -----+--------------------+---------------+------------------+---------------
! | 192.168.1.0/24 | 24 | 192.168.1.226/24 | 24
! | 192.168.1.0/26 | 26 | 192.168.1.226 | 32
! | 192.168.1.0/24 | 24 | 192.168.1.0/24 | 24
! | 192.168.1.0/24 | 24 | 192.168.1.0/25 | 25
! | 192.168.1.0/24 | 24 | 192.168.1.255/24 | 24
! | 192.168.1.0/24 | 24 | 192.168.1.255/25 | 25
! | 10.0.0.0/8 | 8 | 10.1.2.3/8 | 8
! | 10.0.0.0/32 | 32 | 10.1.2.3/8 | 8
! | 10.1.2.3/32 | 32 | 10.1.2.3 | 32
! | 10.1.2.0/24 | 24 | 10.1.2.3/24 | 24
! | 10.1.0.0/16 | 16 | 10.1.2.3/16 | 16
! | 10.0.0.0/8 | 8 | 10.1.2.3/8 | 8
! | 10.0.0.0/8 | 8 | 11.1.2.3/8 | 8
! | 10.0.0.0/8 | 8 | 9.1.2.3/8 | 8
! | 10:23::f1/128 | 128 | 10:23::f1/64 | 64
! | 10:23::8000/113 | 113 | 10:23::ffff | 128
! | ::ffff:1.2.3.4/128 | 128 | ::4.3.2.1/24 | 24
! (17 rows)
SELECT '' AS four, c AS cidr, masklen(c) AS "masklen(cidr)",
i AS inet, masklen(i) AS "masklen(inet)" FROM INET_TBL
WHERE masklen(c) <= 8;
four | cidr | masklen(cidr) | inet | masklen(inet)
! ------+------------+---------------+------------+---------------
! | 10.0.0.0/8 | 8 | 10.1.2.3/8 | 8
! | 10.0.0.0/8 | 8 | 10.1.2.3/8 | 8
! | 10.0.0.0/8 | 8 | 11.1.2.3/8 | 8
! | 10.0.0.0/8 | 8 | 9.1.2.3/8 | 8
(4 rows)
SELECT '' AS six, c AS cidr, i AS inet FROM INET_TBL
WHERE c = i;
six | cidr | inet
! -----+----------------+----------------
! | 192.168.1.0/24 | 192.168.1.0/24
! | 10.1.2.3/32 | 10.1.2.3
(2 rows)
SELECT '' AS ten, i, c,
--- 36,158 ----
ERROR: invalid cidr value: "192.168.1.2/30"
DETAIL: Value has bits set to right of mask.
INSERT INTO INET_TBL (c, i) VALUES (cidr('ffff:ffff:ffff:ffff::/24'), '::192.168.1.226');
! ERROR: invalid input syntax for type cidr: "ffff:ffff:ffff:ffff::/24"
SELECT '' AS ten, c AS cidr, i AS inet FROM INET_TBL;
ten | cidr | inet
! -----+----------------+------------------
! | 192.168.1/24 | 192.168.1/24
! | 192.168.1.0/26 | 192.168.1.226/32
! | 192.168.1/24 | 192.168.1/24
! | 192.168.1/24 | 192.168.1.0/25
! | 192.168.1/24 | 192.168.1/24
! | 192.168.1/24 | 192.168.1.128/25
! | 10/8 | 10/8
! | 10.0.0.0/32 | 10/8
! | 10.1.2.3/32 | 10.1.2.3/32
! | 10.1.2/24 | 10.1.2/24
! | 10.1/16 | 10.1/16
! | 10/8 | 10/8
! | 10/8 | 11/8
! | 10/8 | 9/8
! (14 rows)
-- now test some support functions
SELECT '' AS ten, i AS inet, host(i), text(i), family(i) FROM INET_TBL;
ten | inet | host | text | family
-----+------------------+---------------+------------------+--------
! | 192.168.1/24 | 192.168.1.226 | 192.168.1.226/32 | 4
! | 192.168.1.226/32 | 192.168.1.226 | 192.168.1.226/32 | 4
! | 192.168.1/24 | 192.168.1.0 | 192.168.1.0/32 | 4
! | 192.168.1.0/25 | 192.168.1.0 | 192.168.1.0/32 | 4
! | 192.168.1/24 | 192.168.1.255 | 192.168.1.255/32 | 4
! | 192.168.1.128/25 | 192.168.1.255 | 192.168.1.255/32 | 4
! | 10/8 | 10.1.2.3 | 10.1.2.3/32 | 4
! | 10/8 | 10.1.2.3 | 10.1.2.3/32 | 4
! | 10.1.2.3/32 | 10.1.2.3 | 10.1.2.3/32 | 4
! | 10.1.2/24 | 10.1.2.3 | 10.1.2.3/32 | 4
! | 10.1/16 | 10.1.2.3 | 10.1.2.3/32 | 4
! | 10/8 | 10.1.2.3 | 10.1.2.3/32 | 4
! | 11/8 | 11.1.2.3 | 11.1.2.3/32 | 4
! | 9/8 | 9.1.2.3 | 9.1.2.3/32 | 4
! (14 rows)
SELECT '' AS ten, c AS cidr, broadcast(c),
i AS inet, broadcast(i) FROM INET_TBL;
ten | cidr | broadcast | inet | broadcast
! -----+----------------+----------------+------------------+------------------
! | 192.168.1/24 | 192.168.1/24 | 192.168.1/24 | 192.168.1/24
! | 192.168.1.0/26 | 192.168.1.0/26 | 192.168.1.226/32 | 192.168.1.226/32
! | 192.168.1/24 | 192.168.1/24 | 192.168.1/24 | 192.168.1/24
! | 192.168.1/24 | 192.168.1/24 | 192.168.1.0/25 | 192.168.1.0/25
! | 192.168.1/24 | 192.168.1/24 | 192.168.1/24 | 192.168.1/24
! | 192.168.1/24 | 192.168.1/24 | 192.168.1.128/25 | 192.168.1.128/25
! | 10/8 | 10/8 | 10/8 | 10/8
! | 10.0.0.0/32 | 10.0.0.0/32 | 10/8 | 10/8
! | 10.1.2.3/32 | 10.1.2.3/32 | 10.1.2.3/32 | 10.1.2.3/32
! | 10.1.2/24 | 10.1.2/24 | 10.1.2/24 | 10.1.2/24
! | 10.1/16 | 10.1/16 | 10.1/16 | 10.1/16
! | 10/8 | 10/8 | 10/8 | 10/8
! | 10/8 | 10/8 | 11/8 | 11/8
! | 10/8 | 10/8 | 9/8 | 9/8
! (14 rows)
SELECT '' AS ten, c AS cidr, network(c) AS "network(cidr)",
i AS inet, network(i) AS "network(inet)" FROM INET_TBL;
ten | cidr | network(cidr) | inet | network(inet)
! -----+----------------+----------------+------------------+------------------
! | 192.168.1/24 | 192.168.1/24 | 192.168.1/24 | 192.168.1/24
! | 192.168.1.0/26 | 192.168.1.0/26 | 192.168.1.226/32 | 192.168.1.226/32
! | 192.168.1/24 | 192.168.1/24 | 192.168.1/24 | 192.168.1/24
! | 192.168.1/24 | 192.168.1/24 | 192.168.1.0/25 | 192.168.1.0/25
! | 192.168.1/24 | 192.168.1/24 | 192.168.1/24 | 192.168.1/24
! | 192.168.1/24 | 192.168.1/24 | 192.168.1.128/25 | 192.168.1.128/25
! | 10/8 | 10/8 | 10/8 | 10/8
! | 10.0.0.0/32 | 10.0.0.0/32 | 10/8 | 10/8
! | 10.1.2.3/32 | 10.1.2.3/32 | 10.1.2.3/32 | 10.1.2.3/32
! | 10.1.2/24 | 10.1.2/24 | 10.1.2/24 | 10.1.2/24
! | 10.1/16 | 10.1/16 | 10.1/16 | 10.1/16
! | 10/8 | 10/8 | 10/8 | 10/8
! | 10/8 | 10/8 | 11/8 | 11/8
! | 10/8 | 10/8 | 9/8 | 9/8
! (14 rows)
SELECT '' AS ten, c AS cidr, masklen(c) AS "masklen(cidr)",
i AS inet, masklen(i) AS "masklen(inet)" FROM INET_TBL;
ten | cidr | masklen(cidr) | inet | masklen(inet)
! -----+----------------+---------------+------------------+---------------
! | 192.168.1/24 | 24 | 192.168.1/24 | 24
! | 192.168.1.0/26 | 26 | 192.168.1.226/32 | 32
! | 192.168.1/24 | 24 | 192.168.1/24 | 24
! | 192.168.1/24 | 24 | 192.168.1.0/25 | 25
! | 192.168.1/24 | 24 | 192.168.1/24 | 24
! | 192.168.1/24 | 24 | 192.168.1.128/25 | 25
! | 10/8 | 8 | 10/8 | 8
! | 10.0.0.0/32 | 32 | 10/8 | 8
! | 10.1.2.3/32 | 32 | 10.1.2.3/32 | 32
! | 10.1.2/24 | 24 | 10.1.2/24 | 24
! | 10.1/16 | 16 | 10.1/16 | 16
! | 10/8 | 8 | 10/8 | 8
! | 10/8 | 8 | 11/8 | 8
! | 10/8 | 8 | 9/8 | 8
! (14 rows)
SELECT '' AS four, c AS cidr, masklen(c) AS "masklen(cidr)",
i AS inet, masklen(i) AS "masklen(inet)" FROM INET_TBL
WHERE masklen(c) <= 8;
four | cidr | masklen(cidr) | inet | masklen(inet)
! ------+------+---------------+------+---------------
! | 10/8 | 8 | 10/8 | 8
! | 10/8 | 8 | 10/8 | 8
! | 10/8 | 8 | 11/8 | 8
! | 10/8 | 8 | 9/8 | 8
(4 rows)
SELECT '' AS six, c AS cidr, i AS inet FROM INET_TBL
WHERE c = i;
six | cidr | inet
! -----+--------------+--------------
! | 192.168.1/24 | 192.168.1/24
! | 10.1.2.3/32 | 10.1.2.3/32
(2 rows)
SELECT '' AS ten, i, c,
***************
*** 175,222 ****
i >> c AS sup, i >>= c AS spe
FROM INET_TBL;
ten | i | c | lt | le | eq | ge | gt | ne | sb | sbe | sup | spe
! -----+------------------+--------------------+----+----+----+----+----+----+----+-----+-----+-----
! | 192.168.1.226/24 | 192.168.1.0/24 | f | f | f | t | t | t | f | t | f | t
! | 192.168.1.226 | 192.168.1.0/26 | f | f | f | t | t | t | f | f | f | f
! | 192.168.1.0/24 | 192.168.1.0/24 | f | t | t | t | f | f | f | t | f | t
! | 192.168.1.0/25 | 192.168.1.0/24 | f | f | f | t | t | t | t | t | f | f
! | 192.168.1.255/24 | 192.168.1.0/24 | f | f | f | t | t | t | f | t | f | t
! | 192.168.1.255/25 | 192.168.1.0/24 | f | f | f | t | t | t | t | t | f | f
! | 10.1.2.3/8 | 10.0.0.0/8 | f | f | f | t | t | t | f | t | f | t
! | 10.1.2.3/8 | 10.0.0.0/32 | t | t | f | f | f | t | f | f | t | t
! | 10.1.2.3 | 10.1.2.3/32 | f | t | t | t | f | f | f | t | f | t
! | 10.1.2.3/24 | 10.1.2.0/24 | f | f | f | t | t | t | f | t | f | t
! | 10.1.2.3/16 | 10.1.0.0/16 | f | f | f | t | t | t | f | t | f | t
! | 10.1.2.3/8 | 10.0.0.0/8 | f | f | f | t | t | t | f | t | f | t
! | 11.1.2.3/8 | 10.0.0.0/8 | f | f | f | t | t | t | f | f | f | f
! | 9.1.2.3/8 | 10.0.0.0/8 | t | t | f | f | f | t | f | f | f | f
! | 10:23::f1/64 | 10:23::f1/128 | t | t | f | f | f | t | f | f | t | t
! | 10:23::ffff | 10:23::8000/113 | f | f | f | t | t | t | t | t | f | f
! | ::4.3.2.1/24 | ::ffff:1.2.3.4/128 | t | t | f | f | f | t | f | f | t | t
! (17 rows)
-- check the conversion to/from text and set_netmask
SELECT '' AS ten, set_masklen(inet(text(i)), 24) FROM INET_TBL;
ten | set_masklen
! -----+------------------
! | 192.168.1.226/24
! | 192.168.1.226/24
! | 192.168.1.0/24
! | 192.168.1.0/24
! | 192.168.1.255/24
! | 192.168.1.255/24
! | 10.1.2.3/24
! | 10.1.2.3/24
! | 10.1.2.3/24
! | 10.1.2.3/24
! | 10.1.2.3/24
! | 10.1.2.3/24
! | 11.1.2.3/24
! | 9.1.2.3/24
! | 10:23::f1/24
! | 10:23::ffff/24
! | ::4.3.2.1/24
! (17 rows)
-- check that index works correctly
CREATE INDEX inet_idx1 ON inet_tbl(i);
--- 162,203 ----
i >> c AS sup, i >>= c AS spe
FROM INET_TBL;
ten | i | c | lt | le | eq | ge | gt | ne | sb | sbe | sup | spe
! -----+------------------+----------------+----+----+----+----+----+----+----+-----+-----+-----
! | 192.168.1/24 | 192.168.1/24 | f | f | f | t | t | t | f | t | f | t
! | 192.168.1.226/32 | 192.168.1.0/26 | f | f | f | t | t | t | f | f | f | f
! | 192.168.1/24 | 192.168.1/24 | f | t | t | t | f | f | f | t | f | t
! | 192.168.1.0/25 | 192.168.1/24 | f | f | f | t | t | t | t | t | f | f
! | 192.168.1/24 | 192.168.1/24 | f | f | f | t | t | t | f | t | f | t
! | 192.168.1.128/25 | 192.168.1/24 | f | f | f | t | t | t | t | t | f | f
! | 10/8 | 10/8 | f | f | f | t | t | t | f | t | f | t
! | 10/8 | 10.0.0.0/32 | t | t | f | f | f | t | f | f | t | t
! | 10.1.2.3/32 | 10.1.2.3/32 | f | t | t | t | f | f | f | t | f | t
! | 10.1.2/24 | 10.1.2/24 | f | f | f | t | t | t | f | t | f | t
! | 10.1/16 | 10.1/16 | f | f | f | t | t | t | f | t | f | t
! | 10/8 | 10/8 | f | f | f | t | t | t | f | t | f | t
! | 11/8 | 10/8 | f | f | f | t | t | t | f | f | f | f
! | 9/8 | 10/8 | t | t | f | f | f | t | f | f | f | f
! (14 rows)
-- check the conversion to/from text and set_netmask
SELECT '' AS ten, set_masklen(inet(text(i)), 24) FROM INET_TBL;
ten | set_masklen
! -----+--------------
! | 192.168.1/24
! | 192.168.1/24
! | 192.168.1/24
! | 192.168.1/24
! | 192.168.1/24
! | 192.168.1/24
! | 10.1.2/24
! | 10.1.2/24
! | 10.1.2/24
! | 10.1.2/24
! | 10.1.2/24
! | 10.1.2/24
! | 11.1.2/24
! | 9.1.2/24
! (14 rows)
-- check that index works correctly
CREATE INDEX inet_idx1 ON inet_tbl(i);
***************
*** 224,243 ****
SELECT * FROM inet_tbl WHERE i<<'192.168.1.0/24'::cidr;
c | i
----------------+------------------
! 192.168.1.0/24 | 192.168.1.0/25
! 192.168.1.0/24 | 192.168.1.255/25
! 192.168.1.0/26 | 192.168.1.226
(3 rows)
SELECT * FROM inet_tbl WHERE i<<='192.168.1.0/24'::cidr;
c | i
----------------+------------------
! 192.168.1.0/24 | 192.168.1.0/24
! 192.168.1.0/24 | 192.168.1.226/24
! 192.168.1.0/24 | 192.168.1.255/24
! 192.168.1.0/24 | 192.168.1.0/25
! 192.168.1.0/24 | 192.168.1.255/25
! 192.168.1.0/26 | 192.168.1.226
(6 rows)
SET enable_seqscan TO on;
--- 205,224 ----
SELECT * FROM inet_tbl WHERE i<<'192.168.1.0/24'::cidr;
c | i
----------------+------------------
! 192.168.1/24 | 192.168.1.0/25
! 192.168.1/24 | 192.168.1.128/25
! 192.168.1.0/26 | 192.168.1.226/32
(3 rows)
SELECT * FROM inet_tbl WHERE i<<='192.168.1.0/24'::cidr;
c | i
----------------+------------------
! 192.168.1/24 | 192.168.1/24
! 192.168.1/24 | 192.168.1/24
! 192.168.1/24 | 192.168.1/24
! 192.168.1/24 | 192.168.1.0/25
! 192.168.1/24 | 192.168.1.128/25
! 192.168.1.0/26 | 192.168.1.226/32
(6 rows)
SET enable_seqscan TO on;
======================================================================