pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: ktm@rice.edu <ktm@rice.edu>
To: Francisco Calderón <fjcalderon@gmail.com>
Cc: pgsql-sql@postgresql.org
Subject: Re: Problem with sequence increment
Date: Wed, 25 Jan 2012 08:31:49 -0600
Message-ID: <20120125143149.GF10228@aart.rice.edu> (raw)
In-Reply-To: <CAFVakMosc3T5WmhQqwDLQEkPRhChA9KoOUVQKGUR-3xwXBVOSg@mail.gmail.com>
References: <CAFVakMosc3T5WmhQqwDLQEkPRhChA9KoOUVQKGUR-3xwXBVOSg@mail.gmail.com>

On Wed, Jan 25, 2012 at 09:42:05AM -0430, Francisco Calderón wrote:
> Hello,
> 
> I am having a situation with postgresql 8.3, i have two tables, ta and tb,
> with a relation "one tb has many ta" and... well, i will let the SQL talk
> for me ;)
> 
> -----------SQL-----------
> CREATE TABLE tb
> (
>   id serial NOT NULL,
>   descripcion character varying(200) NOT NULL,
>   CONSTRAINT tb_pkey PRIMARY KEY (id)
> )
> WITH (OIDS=FALSE);
> INSERT INTO tb (descripcion) values ('desc 1');
> INSERT INTO tb (descripcion) values ('desc 2');
> CREATE TABLE ta
> (
>   id serial NOT NULL,
>   descripcion character varying(200),
>   tb_id integer default null,
>   CONSTRAINT ta_pkey PRIMARY KEY (id),
>   CONSTRAINT ta_tb_id FOREIGN KEY (tb_id)
>       REFERENCES tb (id) MATCH SIMPLE
>       ON UPDATE NO ACTION ON DELETE NO ACTION
> )
> WITH (OIDS=FALSE);
> 
> When i make an insert like this:
> 
> INSERT INTO ta (descripcion, tb_id) values ('prueba', 0);
> 
> we can expect this error:
> 
> ERROR:  insert or update on table "ta" violates foreign key constraint
> "ta_tb_id"
> DETAIL:  Key (tb_id)=(0) is not present in table "tb".
> 
> and that is what i am getting but the unusual situation is the sequence
> "ta_id_seq" is incrementing every time i get the "violates foreign key
> constraint" error and i think this is not a good behavior, what do you
> think?
> 

That is how sequences work. If you want different behavior, use another
process or method to produce a sequential count. Hint, it will involve
a lot of locking and be much slower than a sequence. It would be better
to have your application handle gaps in the sequence.

Regards,
Ken



view thread (3+ messages)

Message-ID: <20120125143149.GF10228@aart.rice.edu>
Permalink:  ../20120125143149.GF10228@aart.rice.edu/
Also on:    postgresql.org/message-id/20120125143149.GF10228@aart.rice.edu

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: ktm@rice.edu, fjcalderon@gmail.com
  Subject: Re: Problem with sequence increment
  In-Reply-To: <20120125143149.GF10228@aart.rice.edu>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox