From: | zohn_ming wu <wu_zohn_ming(at)yahoo(dot)com> |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | data corruption? |
Date: | 2004-11-11 00:05:42 |
Message-ID: | 20041111000542.88325.qmail@web90103.mail.scd.yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
Hello All
Both server and psql are 7.4.5 and both running linux.
I have a table with a primary key as follow
--------
Column | Type |
Modifiers
--------+------------------------+-------------------------------------------------
email | character varying(256) |
pass | character varying(44) |
id | integer | not null default
nextval('"pass_id_seq"'::text)
stamp | abstime | default now()
alias | character varying(256) |
---
Indexes:
"pass_pkey" primary key, btree (id)
"pass_alias" unique, btree (alias)
"pass_email" unique, btree (email)
Triggers:
clean_up_tpass AFTER INSERT ON pass FOR EACH ROW
EXECUTE PROCEDURE clean_up_tpass()
pass_dbm AFTER INSERT OR DELETE OR UPDATE ON pass
FOR EACH ROW EXECUTE PROCEDURE recordchange()
sync_pass_epass BEFORE INSERT ON pass FOR EACH ROW
EXECUTE PROCEDURE sync_pass_epass()
-----------
I know for a fact that primary key 1598 exists because
------------
what=> select * from pass where
email='anonymous(at)innocent(dot)com';
email | pass
| id | stamp | alias
---------------------+------------------------------------+------+-------+-----------------
anonymous(at)innocent(dot)com |
$1$5127482d$LpSVZX.R/jgEo2PD5szL9/ | 1595 | |
abcd
---------------------
But when I actually do
-------------
what=>select * from pass where id=1595;
email | pass | id | stamp | alias
-------+------+----+-------+-------
(0 rows)
----
Ha? It works however if I do "where id=1595::int8"
Also watch the following
-----------
what=> select count(*) from pass where id<2000;
count
-------
1488
(1 row)
what=> select count(*) from pass where id<2000::int8;
count
-------
1918
(1 row)
--------
and the following
----------
what=>
what=> select count(*) from pass where
id<200000::int8;
count
-------
41712
(1 row)
what=> select count(*) from pass where id<200000;
count
-------
41712
---------
What exactly does that mean??? What is going on?
I started noticing this problem because there are
foreign keys on other tables referencing to this table
"pass" and when some values were inserted on one of
those tables I got an exception saying that foreign
key 1598 does not exist on this table "pass"
Is this me or pg?
I am thinking of fixing these problems by doing
something like
=> update pass set id=id::int4 where id<2000::int8;
but I really want to know why postgresql is behaving
in such a strange fashion. Can I trust postgresql to
be rational?
Thanks very much in advance.
Mr Wu Zohn Ming
__________________________________
Do you Yahoo!?
Check out the new Yahoo! Front Page.
www.yahoo.com
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2004-11-11 00:26:36 | Re: data corruption? |
Previous Message | Tom Lane | 2004-11-10 23:44:02 | Re: ALTER USER SET log_* not allowed... |