Lists: | pgsql-bugs |
---|
From: | Andreas Schmitz <andreas(dot)schmitz(at)as-dataservice(dot)de> |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | UPDATE has a bug to update tables with an index of 2 columns |
Date: | 2003-05-16 19:46:24 |
Message-ID: | 3EC54010.9020804@as-dataservice.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs |
============================================================================
POSTGRESQL BUG REPORT TEMPLATE
============================================================================
Your name : Andreas Schmitz
Your email address : andreas(dot)schmitz(at)as-dataservice(dot)de
System Configuration
---------------------
Architecture (example: Intel Pentium) : Intel Pentium III
Operating System (example: Linux 2.0.26 ELF) : Linux 2.4.19
PostgreSQL version (example: PostgreSQL-7.3.2): PostgreSQL-7.3.2
Compiler used (example: gcc 2.95.2) : gcc 2.95.3
Please enter a FULL description of your problem:
------------------------------------------------
Short: UPDATE has a bug to update tables with an index of 2 columns
Please describe a way to repeat the problem. Please try to provide a
concise reproducible example, if at all possible:
----------------------------------------------------------------------
First, you create a table test2 as this one:
create table test2
(
v1 int4,
v2 int4,
CONSTRAINT uq_test UNIQUE (v1,v2)
);
Now, you inserting some data:
insert into test2 values (0,0);
insert into test2 values (0,1);
insert into test2 values (0,2);
Now, you make the following update:
update test2 set v2=v2+2;
ERROR: Duplizierter Wert kann nicht in »Unique«-Index uq_test
eingefügt werden
This means, that the value is duplicated, but this is wrong, because
the statement add to every value 2 and should check the constraints
at last.
If I drop the unique index with:
alter table test2 drop constraint uq_test;
.. and do the same update:
update test2 set v2=v2+2;
and then recreate the unique constraint with:
alter table test2 add constraint uq_test UNIQUE (v1,v2);
it works fine!
If you know how this problem might be fixed, list the solution below:
---------------------------------------------------------------------
Best regards
--
Andreas Schmitz
AS-DataService <http://www.as-dataservice.de>
Kastanienallee 24
D-54662 Speicher
Tel.: (0 65 62) 93 05 17
Fax: (0 65 62) 93 05 18
Email: andreas(dot)schmitz(at)as-dataservice(dot)de
<mailto:andreas(dot)schmitz(at)as-dataservice(dot)de>
Ust-IdNr.: DE211466407
Handelsregister: HRA 1869 - Amtsgericht Bitburg
<http://www.as-dataservice.de>
From: | Ian Barwick <barwick(at)gmx(dot)net> |
---|---|
To: | Andreas Schmitz <andreas(dot)schmitz(at)as-dataservice(dot)de>, pgsql-bugs(at)postgresql(dot)org |
Subject: | Re: UPDATE has a bug to update tables with an index of 2 columns |
Date: | 2003-05-16 22:57:35 |
Message-ID: | 200305170057.35535.barwick@gmx.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs |
On Friday 16 May 2003 21:46, Andreas Schmitz wrote:
> Please enter a FULL description of your problem:
> ------------------------------------------------
>
> Short: UPDATE has a bug to update tables with an index of 2 columns
(...)
> update test2 set v2=v2+2;
> ERROR: Duplizierter Wert kann nicht in »Unique«-Index uq_test
> eingefügt werden
-> "Cannot insert a duplicate key into unique index uq_test"
I would contend this is not a bug but a feature (or at most
not-yet-implemented functionality, i.e. no ability to defer
constraints other than foreign keys).
A possible workaround would be to create a trigger which
enforces the constraint.
Ian Barwick
barwick(at)gmx(dot)net
From: | Andreas Schmitz <andreas(dot)schmitz(at)as-dataservice(dot)de> |
---|---|
To: | Ian Barwick <barwick(at)gmx(dot)net> |
Cc: | pgsql-bugs(at)postgresql(dot)org |
Subject: | Re: UPDATE has a bug to update tables with an index of 2 columns |
Date: | 2003-05-17 07:38:10 |
Message-ID: | 3EC5E6E2.8070802@as-dataservice.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs |
Ian Barwick wrote:
>I would contend this is not a bug but a feature (or at most
>not-yet-implemented functionality, i.e. no ability to defer
>constraints other than foreign keys).
>
>
Oh, I don't think so, because when I use some complex WHERE clause the
statements don't use the index uq_test (EXPLAIN...) and it works find.
This Statement works also fine:
update test2 set v1=0 where v1=0;
And therefor, I think this is a bug.
>A possible workaround would be to create a trigger which
>enforces the constraint.
>
>
What do you mean with enforces the constraint? Sorry, I can't follow
you. Can you describe, how I enforce the Constraint?
Thanx a lot.
Best regards
--
Andreas Schmitz
AS-DataService <http://www.as-dataservice.de>
Kastanienallee 24
D-54662 Speicher
Tel.: (0 65 62) 93 05 17
Fax: (0 65 62) 93 05 18
Email: andreas(dot)schmitz(at)as-dataservice(dot)de
<mailto:andreas(dot)schmitz(at)as-dataservice(dot)de>
Ust-IdNr.: DE211466407
Handelsregister: HRA 1869 - Amtsgericht Bitburg
<http://www.as-dataservice.de>
From: | Stephan Szabo <sszabo(at)megazone23(dot)bigpanda(dot)com> |
---|---|
To: | Ian Barwick <barwick(at)gmx(dot)net> |
Cc: | Andreas Schmitz <andreas(dot)schmitz(at)as-dataservice(dot)de>, <pgsql-bugs(at)postgresql(dot)org> |
Subject: | Re: UPDATE has a bug to update tables with an index of 2 |
Date: | 2003-05-17 16:15:09 |
Message-ID: | 20030517091355.S99020-100000@megazone23.bigpanda.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-bugs |
On Sat, 17 May 2003, Ian Barwick wrote:
> On Friday 16 May 2003 21:46, Andreas Schmitz wrote:
>
> > Please enter a FULL description of your problem:
> > ------------------------------------------------
> >
> > Short: UPDATE has a bug to update tables with an index of 2 columns
> (...)
> > update test2 set v2=v2+2;
> > ERROR: Duplizierter Wert kann nicht in Unique-Index uq_test
> > eingefgt werden
>
> -> "Cannot insert a duplicate key into unique index uq_test"
>
> I would contend this is not a bug but a feature (or at most
> not-yet-implemented functionality, i.e. no ability to defer
> constraints other than foreign keys).
IIRC, it's a known bug. The constraint is checked at the wrong time, even
for non-deferred unique constraints the check is supposed to happen after
all the rows have been changed not as the rows are being changed.