BUG #4307: INSERT fails with primary key contraint

From: "Oskars Ozols" <oskars(dot)ozols(at)gmail(dot)com>
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #4307: INSERT fails with primary key contraint
Date: 2008-07-15 19:24:57
Message-ID: 200807151924.m6FJOvDY047756@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: 4307
Logged by: Oskars Ozols
Email address: oskars(dot)ozols(at)gmail(dot)com
PostgreSQL version: 8.3
Operating system: SuSE Linux Enterprise Server
Description: INSERT fails with primary key contraint
Details:

I have following table for event log:

CREATE TABLE event_log
(
id bigint NOT NULL DEFAULT
nextval(('public.event_log_id_seq'::text)::regclass),
user_id integer,
date_time timestamp(0) without time zone,
ip_address character varying(15) NOT NULL,
action_type character varying(500) NOT NULL,
severity integer NOT NULL,
parameters text,
web_address character varying(160),
server character(1),
CONSTRAINT event_log_pkey PRIMARY KEY (id)
)
WITH (OIDS=FALSE);

During high load (processor load ~95%) of different SELECT/INSERT requests
this table starts to give following errors in db log:

2008-07-15 12:32:03 EEST ERROR: duplicate key value violates unique
constraint "event_log_pkey"
2008-07-15 12:32:03 EEST STATEMENT: INSERT INTO public.event_log
(date_time, ip_address, action_type, severity, parameters, web_address,
server, user_id, id) VALUES ('2008-07-15 12:28:50.000000',
'123.123.123.123', 'WebServices.SomeService:LogError', 70000, 'error text',
'http://123.123.123.123/WebServices/SomeService.asmx', '4', 75, 156112)

You may notice the difference in time when message was written to db log
(12:32:04) and actual time of event (12:28:50).

Currently there are ~3 million rows in event_log. Old records are regulary
deleted (autovacuum is on, too). During high peak it's possible that 20
events are finished to be written to event_log in 1 sec.
Current Start value for sequence event_log_id_seq is 8536444.

I have noticed that during high load Postgre starts to use old free sequence
values (like 156112 in my sample). Sometimes it's ok, but sometimes it fails
with error above.

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message James Dietrich 2008-07-15 20:51:30 full-text search doesn't fall back on sequential scan when it could
Previous Message Tom Lane 2008-07-15 14:45:53 Re: Psql or test application hangs when interface is down for the DB server