Re: [HACKERS] Pretty bad bug in Postgres.

Started by Bruce Momjianover 26 years ago3 messages
#1Bruce Momjian
maillist@candle.pha.pa.us

Any comments on this?

Following is I believe evidence of a pretty bad bug in postgres. This is
the 990329 snapshot.

When doing an insert into a table where one of the fields comes from a
SELECT from another table, it seems that if the table has the "*" after
it, to indicate sub-classes it doesn't work.

The database is fresh and there are no indexes.

The table looks like this....

CREATE TABLE category (
name text,
image text,
url text,
parent oid
);

httpd=> select * from category;
name |image|url|parent
--------+-----+---+------
foo |foo | | 0
bar |bar | |158321
Products|.gif | |
(3 rows)

httpd=> select oid, * FROM category* where name = 'foo';
oid|name|image|url|parent
------+----+-----+---+------
158321|foo |foo | | 0
(1 row)

httpd=> insert into category(name, image, parent) SELECT 'boo', 'boo',
oid FROM category* where name = 'foo';
INSERT 158370 1
httpd=> select * from category;
name |image|url|parent
--------+-----+---+------
foo |foo | | 0
bar |bar | |158321
Products|.gif | |
(3 rows)

Ok, what's going on here. The 'boo' record did not appear!

httpd=> insert into category(name, image, parent) SELECT 'boo', 'boo',
oid FROM category where name = 'foo';
INSERT 158374 1
httpd=> select * from category;
name |image|url|parent
--------+-----+---+------
foo |foo | | 0
bar |bar | |158321
Products|.gif | |
boo |boo | |158321
(4 rows)

We dropped the "*" from the FROM clause and now the record does appear.

A bug?

--
Chris Bitmead
http://www.bigfoot.com/~chris.bitmead
mailto:chris.bitmead@bigfoot.com

-- 
  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
#2Bruce Momjian
maillist@candle.pha.pa.us
In reply to: Bruce Momjian (#1)

Here is Tom's comment on the issue.

Chris Bitmead <chris.bitmead@bigfoot.com> writes:

Following is I believe evidence of a pretty bad bug in postgres. This is
the 990329 snapshot.

httpd=> insert into category(name, image, parent) SELECT 'boo', 'boo',
oid FROM category* where name = 'foo';
INSERT 158370 1
httpd=> select * from category;
name |image|url|parent
--------+-----+---+------
foo |foo | | 0
bar |bar | |158321
Products|.gif | |
(3 rows)

Ok, what's going on here. The 'boo' record did not appear!

Interesting. You'll notice the INSERT response claims that a tuple was
inserted, and even gives you the OID for it. Wonder where it went?

Anyway, that sure suggests that the SELECT part worked, and the problem
is that the new tuple got dropped on the floor later. (Or could it have
been inserted into another table? Are there other tables that category*
includes?)

I'm guessing this has something to do with Vadim's recent work, but
I don't pretend to know what's wrong...

regards, tom lane

-- 
  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
#3Vadim Mikheev
vadim@krs.ru
In reply to: Bruce Momjian (#1)

Bruce Momjian wrote:

Any comments on this?

Following is I believe evidence of a pretty bad bug in postgres. This is
the 990329 snapshot.

^^^^^^
Snapshot's too old?

httpd=> insert into category(name, image, parent) SELECT 'boo', 'boo',
oid FROM category* where name = 'foo';
INSERT 158370 1
httpd=> select * from category;
name |image|url|parent
--------+-----+---+------
foo |foo | | 0
bar |bar | |158321
Products|.gif | |
(3 rows)

Ok, what's going on here. The 'boo' record did not appear!

I can't reproduce this in current...

Vadim