[PORTS] Patchless postgres 8.x on AIX

Seneca Cunningham <[email protected]>
Newsgroups gmane.comp.db.postgresql.ports
Message-ID <[email protected]>
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
[email protected]


---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster
regression.diffs (text/plain, 22 KB)
*** ./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;

======================================================================
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.