Re: Re: [SQL] remove line type? - Mailing list pgsql-general

From mikeo
Subject Re: Re: [SQL] remove line type?
Date
Msg-id 3.0.1.32.20000530150759.00957360@pop.spectrumtelecorp.com
Whole thread Raw
In response to Re: Re: [SQL] remove line type?  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-general
thanks much.  that now works!  :)


At 01:41 PM 5/30/00 -0400, Tom Lane wrote:
>mikeo <mikeo@spectrumtelecorp.com> writes:
>>>> we've run into a problem after having deleted the line type.
>>>> when we attempt to query a table by column which is defined as float8
>>>> we get this error:
>>>>
>>>> select * from test1 where tfap_id = 49232;
>>>> ERROR:  Unable to locate type oid 628 in catalog
>
>Interesting.  I get:
>
>bust=# create table foo (f1 int, f2 float8);
>CREATE
>bust=# insert into foo values(1,2.5);
>INSERT 148298 1
>bust=# select * from foo;
> f1 | f2
>----+-----
>  1 | 2.5
>(1 row)
>
>bust=# drop type line;
>DROP
>bust=# select * from foo;
> f1 | f2
>----+-----
>  1 | 2.5
>(1 row)
>
>bust=# select * from foo where f2 = 2.5;
> f1 | f2
>----+-----
>  1 | 2.5
>(1 row)
>
>bust=# select * from foo where f2 < 3;
> f1 | f2
>----+-----
>  1 | 2.5
>(1 row)
>
>bust=# select * from foo where f2 = 3;
>ERROR:  Unable to locate type oid 628 in catalog
>
>It looks to me like the problem appears when the parser has to resolve
>an ambiguous operator.  (Since there isn't a "float8 = int" operator,
>this last case requires some smarts to figure out what to do.)
>Presumably there is a line = line operator still in the system, and
>it doesn't surprise me a whole lot that this error would pop up if the
>parser had occasion to scan through the '=' operators looking for a
>possible match and came across that one.  Let's see:
>
>bust=# select * from pg_operator where oprname = '=' and
>bust-# (oprleft = 628 or oprright = 628);
> oprname | oprowner | oprprec | oprkind | oprisleft | oprcanhash | oprleft
| oprright | oprresult | oprcom | oprnegate | oprlsortop | oprrsortop |
oprcode | oprrest |  oprjoin
>---------+----------+---------+---------+-----------+------------+---------
+----------+-----------+--------+-----------+------------+------------+-----
----+---------+-----------
> =       |      256 |       0 | b       | t         | f          |     628
|      628 |        16 |   1616 |         0 |          0 |          0 |
line_eq | eqsel   | eqjoinsel
>(1 row)
>
>bust=# delete from pg_operator where oprname = '=' and
>bust-# (oprleft = 628 or oprright = 628);
>DELETE 1
>bust=# select * from foo where f2 = 3;
> f1 | f2
>----+----
>(0 rows)
>
>Yup, looks like that's the problem.
>
>It's probably not good that DROP TYPE only zaps the pg_type entry and
>doesn't go hunting for stuff that depends on it.  In the meantime you
>might want to do
>
>delete from pg_operator where oprleft = 628 or oprright = 628;
>
>and perhaps something similar for pg_proc, although name collisions for
>functions are probably less of a problem there.
>
>            regards, tom lane
>

pgsql-general by date:

Previous
From: "G. Anthony Reina"
Date:
Subject: Re: Is there a way to drop a column?
Next
From: Joseph Shraibman
Date:
Subject: Re: Is there a way to drop a column?