Thread: Operator <> for lseg,lseg bug

Operator <> for lseg,lseg bug

From
Guido Weber
Date:
Hi

I was testing some things with the geometric datatype in Postgres (6.3)
and got some results out of selects that I did not expect. Doing a \do
in psql gave me:

<--SNIP-->
<>   |bool     |float8    |float8    |not equal
<>   |bool     |int2      |int2      |not equal
<>   |bool     |int4      |int4      |not equal
<>   |bool     |lseg      |lseg      |equals
<>   |bool     |money     |money     |not equal
<>   |bool     |name      |name      |not equal
<>   |bool     |oid       |oid       |not equal
<--SNIP-->

This looks like a wrong entry in one of the system tables. Any ideas which
one it is, and how to correct this ?

Thanks
  Guido

-------------------------------------------------------------------------
| Guido Weber                      |  STN Atlas Elektronik GmbH, SLE3   |
| Tel.: +49/421/457-4076           |  Sebaldsbruecker Heerstr. 235      |
| Fax :            -3578           |  D-28305 Bremen                    |
| email: weber.guido@stn-atlas.de  |  Germany                           |
-------------------------------------------------------------------------


Re: [SQL] Operator <> for lseg,lseg bug

From
Bruce Momjian
Date:
> Hi
>
> I was testing some things with the geometric datatype in Postgres (6.3)
> and got some results out of selects that I did not expect. Doing a \do
> in psql gave me:
>
> <--SNIP-->
> <>   |bool     |float8    |float8    |not equal
> <>   |bool     |int2      |int2      |not equal
> <>   |bool     |int4      |int4      |not equal
> <>   |bool     |lseg      |lseg      |equals
> <>   |bool     |money     |money     |not equal
> <>   |bool     |name      |name      |not equal
> <>   |bool     |oid       |oid       |not equal
> <--SNIP-->
>
> This looks like a wrong entry in one of the system tables. Any ideas which
> one it is, and how to correct this ?

Good eye.  Yes, it was wrong.  To fix it, edit
/pgsql/src/include/catalog/pg_operator.h.

Search for the strings 'lseq_eq'.   The first instance is correct, but
the second instance should be 'lseg_neq'.  Then you must run initdb to
reload the system tables.

Another way to do this would be to do an update on 'pg_operator'.  I
believe the oid is 1586, and the field is oprcode, so you can try:

    update pg_operator
    set oprcode = 'lseg_neq'
    where oid = 1586

\do should then show the proper values.

--
  Bruce Momjian                        |  http://www.op.net/~candle
  maillist@candle.pha.pa.us            |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026