Re: Modifiable sequence column?

From: Bruno Wolff III <bruno(at)wolff(dot)to>
To: Leif K-Brooks <eurleif(at)gmail(dot)com>
Cc: pgsql-novice(at)postgresql(dot)org
Subject: Re: Modifiable sequence column?
Date: 2005-08-17 04:48:50
Message-ID: 20050817044850.GB32756@wolff.to
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice

On Tue, Aug 16, 2005 at 21:01:41 -0400,
Leif K-Brooks <eurleif(at)gmail(dot)com> wrote:
> I want a column which is like a SERIAL, except that values can be
> changed after insertion without anything breaking. In other words, I
> don't want an error like this one to occur:
>
> database=> CREATE TABLE foo (bar SERIAL UNIQUE);
> CREATE TABLE
> database=> INSERT INTO foo(bar) VALUES(DEFAULT);
> INSERT 25410 1
> database=> UPDATE foo SET bar=2 WHERE bar=1;
> UPDATE 1
> database=> INSERT INTO foo(bar) VALUES(DEFAULT);
> ERROR: duplicate key violates unique constraint "foo_bar_key"
>
> I've tried defining bar as (SELECT MAX(bar) + 1 FROM foo), but that
> breaks concurrency. Is there a solution to this problem that works?

If people can insert or change values to anything at all, I don't as
how you have any choice but use a query to find a value not present
in the database and use that. However you can't let two of these
queries run at the same time unless you are prepared to retry insert
failures.

In response to

Browse pgsql-novice by date

  From Date Subject
Next Message Oliver Kullmann 2005-08-17 16:36:13 Re: how to rename an unnamed uniqueness constraint?
Previous Message Leif K-Brooks 2005-08-17 01:01:41 Modifiable sequence column?