Thread

  1. INET operators and NOT

    Tomas Cerha <t.cerha@sh.cvut.cz> — 1999-12-17T11:21:15Z

    
    Your name               :       Tomas Cerha
    Your email address      :       t.cerha@sh.cvut.cz
    
    System Configuration
    ---------------------
      Architecture (example: Intel Pentium)         : Intel Pentium MMX
    
      Operating System (example: Linux 2.0.26 ELF)  : Linux 2.2.5-15 ELF
    
      PostgreSQL version (example: PostgreSQL-6.5.3): PostgreSQL-6.5.3 
    
      Compiler used (example:  gcc 2.8.0)           : installed from RPMs
    
    	installed packages:
    		postgresql-6.5.3-1.i386.rpm
    		postgresql-perl-6.5.3-1.i386.rpm
    		postgresql-server-6.5.3-1.i386.rpm
    		postgresql-tcl-6.5.3-1.i386.rpm
    		postgresql-test-6.5.3-1.rpm
    ----------------------------------------------------------------------
    
    Please enter a FULL description of your problem:
    ------------------------------------------------
    
    Aplying the NOT operator with << INET operator results always in false.
    See the example below:
    
    This is the contents of table a:
    
    accounting=> SELECT * FROM a;
          ip
    --------
    10.1.1.1
    10.1.1.2
    10.2.1.2
    10.2.1.1
    (4 rows)
    
    Now, let's select only those hosts from subnet '10.1/16': (works fine)
    
    accounting=> SELECT * FROM a WHERE ip<<'10.1/16';
          ip
    --------
    10.1.1.1
    10.1.1.2
    (2 rows)
    
    And now, I only apply NOT to prewious statement ....
    
    accounting=> SELECT * FROM a WHERE NOT ip<<'10.1/16';
    ip
    --
    (0 rows)
    
    
    But that is not true! I tryed this also with other versions of postgress
    on other machines and the result was always the same. But this makes all
    about INET operators quite unusable, when I am not able to exclude some
    address space (I can only include them). Or is there another way to do
    It?
    
    
    
    Please describe a way to repeat the problem.   Please try to provide a
    concise reproducible example, if at all possible: 
    ----------------------------------------------------------------------
    
    CREATE TABLE a (ip inet);
    
    INSERT INTO a VALUES ('10.1.1.1');                                    
    INSERT INTO a VALUES ('10.1.1.2');
    INSERT INTO a VALUES ('10.2.1.2');
    INSERT INTO a VALUES ('10.2.1.1');
    
    SELECT * FROM a;
    SELECT * FROM a WHERE ip<<'10.1/16';
    SELECT * FROM a WHERE NOT ip<<'10.1/16';
    
    DROP TABLE a;
    
    ----------------------------------------------------------------------
    Thank you for any idea which could help me with this problem ...
    
    Tom Cerha, student, FEE CTU Prague Czech Republic