Re: failed insert into serial-type row

From: Bruno Wolff III <bruno(at)wolff(dot)to>
To: "Hortschitz, Stefan" <Stefan(dot)Hortschitz(at)lfrz(dot)at>
Cc: pgsql-admin(at)postgresql(dot)org
Subject: Re: failed insert into serial-type row
Date: 2005-06-18 14:06:10
Message-ID: 20050618140610.GA15547@wolff.to
Views: Raw Message | Whole Thread | Download mbox
Thread:
Lists: pgsql-admin

On Mon, Jun 13, 2005 at 21:58:37 +0200,
"Hortschitz, Stefan" <Stefan(dot)Hortschitz(at)lfrz(dot)at> wrote:
>
> CREATE TABLE session.preferences
> (
> id serial NOT NULL,
> name varchar(50),
> value varchar(255),
> CONSTRAINT session_preferences_pkey PRIMARY KEY (id)
> )
> WITHOUT OIDS;
> ALTER TABLE session.preferences OWNER TO web;
> --------------------------------
>
> and sometimes if i'm adding new rows to the table with statements like
> this:
> insert into (name,value) ('xy','xy');
> the database only returns an 'duplicate key on primary key', which
> should be prevented by the serial-datatype, or? how could it be, that
> two rows become the same id??
> if i execute the insert-statement again it works.
>
> the created serial-sequence looks like this:
> --------------------------------
> CREATE SEQUENCE session.preferences_id_seq
> INCREMENT 1
> MINVALUE 1
> MAXVALUE 9223372036854775807
> START 2487
> CACHE 1;
> ALTER TABLE session.preferences_id_seq OWNER TO web;
> --------------------------------
>
> what can I do against the duplicate-key problem? is it a configuration,
> sql or operating-system specific problem?

Most likely you recreated the table and reloaded it at some point without
restoring the sequence value.

What you want to do now is set the sequence to the highest value of id
in the table. Something like:
SELECT setval('preferences_id_seq',(SELECT max(id) FROM session.preferences);

In response to

Browse pgsql-admin by date

  From Date Subject
Next Message Bruno Wolff III 2005-06-18 14:14:55 Re: Remote Access
Previous Message Greg Sabino Mullane 2005-06-18 14:05:32 Re: failed insert into serial-type row