Patchless postgres 8.x on AIX - Mailing list pgsql-ports

From Seneca Cunningham
Subject Patchless postgres 8.x on AIX
Date
Msg-id 437BB3C6.6050204@ca.afilias.info
Whole thread Raw
Responses Re: Patchless postgres 8.x on AIX  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-ports
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;

======================================================================


pgsql-ports by date:

Previous
From: "Merlin Moncure"
Date:
Subject: Re: intializing problem with postgresql-8.0.4-binaries-no-installer.zip
Next
From: Tom Lane
Date:
Subject: Re: Patchless postgres 8.x on AIX