From: | "Dag Lem" <dag(at)nimrod(dot)no> |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | BUG #5876: Incorrectly reported column value |
Date: | 2011-02-10 10:18:23 |
Message-ID: | 201102101018.p1AAINGa001460@wwwmaster.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
The following bug has been logged online:
Bug reference: 5876
Logged by: Dag Lem
Email address: dag(at)nimrod(dot)no
PostgreSQL version: 9.0.3
Operating system: CentOS release 5.5, i686
Description: Incorrectly reported column value
Details:
The effect of this (pretty serious) bug is that I am able to insert a value
into an integer column and consistently get an entirely different value read
out later.
Unfortunately this happens on a large data set (3.6M rows), and I am not
able to either reproduce with a smaller data set nor provide the data set. I
realize that this is asking you to find a needle in the haystack. However at
least now you're made aware of the bug - please let me know if there's
anything I can do to help isolate it.
The table definition is attached to the end of this report.
I have used batch inserts of 10 000 rows each, commiting after each batch
insert (via DBD::Pg 2.17.1).
The incorrect row is row number 1601050 in the data set, i.e. the 1050th row
in a batch insert.
This is how the bug manifests itself (election_event_pk is always 2 on
insert):
evote=> select distinct election_event_pk from voter where election_event_pk
= 2;
election_event_pk
-------------------
2
(1 row)
evote=> select election_event_pk, count(*) from voter where
election_event_pk = 2 group by election_event_pk;
election_event_pk | count
-------------------+---------
2 | 3611505
(1 row)
evote=> select election_event_pk from voter where election_event_pk = 2 and
voter_id = '<11 digit ssn>';
election_event_pk
-------------------
262146
(1 row)
As you can see, the reported column value is different from what is inserted
(and indexed).
I should mention that I got another problem with the same data set on
PostgreSQL 9.0.2, IIRC "unrecognized rbtree node state: 87" (not 100% sure
about the state number since I immediately upgraded to 9.0.3 and got the
present bug instead).
Again, please let me know if there is anything I can do to help isolate the
bug - table definition below.
Best regards,
Dag Lem
Table "admin.voter"
Column | Type |
Modifiers
---------------------------+--------------------------+---------------------
-------------------------------------
voter_pk | bigint | not null default
nextval('voter_voter_pk_seq'::regclass)
audit_oplock | integer | not null default 0
audit_user | character varying(64) | not null
audit_operator | character varying(64) |
audit_operation | character(1) | not null
audit_timestamp | timestamp with time zone | not null
election_event_pk | integer | not null
voter_id | character varying(11) | not null
date_of_birth | date |
voter_number | integer |
import_batch_number | integer |
country_id | character(2) | not null
county_id | character(2) | not null
municipality_id | character(4) | not null
borough_id | character(6) | not null
polling_district_id | character(4) | not null
mv_area_pk | integer |
eligible | boolean | not null
name_line | character varying(152) | not null
first_name | character varying(50) | not null
middle_name | character varying(50) |
last_name | character varying(50) | not null
address_line1 | character varying(50) |
address_line2 | character varying(50) |
address_line3 | character varying(50) |
postal_code | character varying(4) |
post_town | character varying(50) |
email | character varying(129) |
telephone_number | character varying(35) |
mailing_address_specified | boolean |
mailing_address_line1 | character varying(50) |
mailing_address_line2 | character varying(50) |
mailing_address_line3 | character varying(50) |
mailing_country_code | character varying(50) |
approval_request | character varying(150) |
approved | boolean | not null default
false
date_time_submitted | timestamp with time zone | not null
aarsakskode | character(2) |
endringstype | character(1) |
statuskode | character(1) |
reg_dato | date |
spes_reg_type | character(1) |
electoral_roll_page | integer |
electoral_roll_line | integer |
Indexes:
"voter_pkey" PRIMARY KEY, btree (voter_pk)
"nk_voter" UNIQUE, btree (election_event_pk, voter_id)
"uk_voter_voter_number" UNIQUE, btree (mv_area_pk, voter_number)
"ix_voter_address" btree (election_event_pk, postal_code,
upper(address_line1::text) text_pattern_ops, upper(address_line2::text)
text_pattern_ops, upper(address_line3::text) text_pattern_ops) WITH
(fillfactor=70)
"ix_voter_date_of_birth" btree (election_event_pk, date_of_birth) WITH
(fillfactor=70)
"ix_voter_polling_district" btree (mv_area_pk) WITH (fillfactor=70)
"ix_voter_tsvector" gin (soundex_tsvector(election_event_pk,
name_line::text)) WITH (fastupdate=on)
Foreign-key constraints:
"fk_voter_x_election_event" FOREIGN KEY (election_event_pk) REFERENCES
election_event(election_event_pk) ON DELETE CASCADE
"fk_voter_x_mv_area" FOREIGN KEY (mv_area_pk) REFERENCES
mv_area(mv_area_pk) ON DELETE SET NULL
Referenced by:
TABLE "voting" CONSTRAINT "fk_voting_x_voter" FOREIGN KEY (voter_pk)
REFERENCES voter(voter_pk) ON DELETE CASCADE
Triggers:
voter_insert BEFORE INSERT ON voter FOR EACH ROW EXECUTE PROCEDURE
voter_insert()
voter_update BEFORE UPDATE ON voter FOR EACH ROW EXECUTE PROCEDURE
voter_update()
voter_z_audit BEFORE INSERT OR DELETE OR UPDATE ON voter FOR EACH ROW
EXECUTE PROCEDURE audit_voter()
From | Date | Subject | |
---|---|---|---|
Next Message | Savita | 2011-02-10 11:02:40 | BUG #5877: problem with wild char used in where clause |
Previous Message | Andres Freund | 2011-02-10 09:50:38 | Re: crash in 9.1's psql:describeOneTableDetails |