Insert aborted, but Sequence increased

Поиск
Список
Период
Сортировка
От Hugo Jonker
Тема Insert aborted, but Sequence increased
Дата
Msg-id 20020708172914.Q19515@gewis.win.tue.nl
обсуждение исходный текст
Ответы Re: Insert aborted, but Sequence increased  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: Insert aborted, but Sequence increased  (Stephan Szabo <sszabo@megazone23.bigpanda.com>)
Re: Insert aborted, but Sequence increased  (Bruce Momjian <pgman@candle.pha.pa.us>)
Список pgsql-bugs
Hi,

While using Postgres, I encountered some unexpected behaviour.

In short:
---------
Upon doing a faulty INSERT which left a column with default value
nextval('sequence') unspecified, the INSERT aborted due to an error.
However, a call had been placed to nextval('sequence'), thus
increasing the sequence, while this value never got used.

I certainly didn't expect this.



Detailed report:
----------------
Table projectlist looks like:

wwf-projects=# \d projectlist
                                     Table "projectlist"
   Column    |         Type          |                       Modifiers
-------------+-----------------------+--------------------------------------------------------
 id          | integer               | not null default nextval('"projectlist_id_seq"'::text)
 dbms_host   | character varying(30) | not null
 dbms_port   | numeric(5,0)          | not null
 dbms_type   | character varying(10) | not null
 db_name     | character varying(20) | not null
 admin_login | character varying(20) | not null
 admin_pwd   | character varying(20) | not null
Unique keys: projectlist_id_key

We have a SEQUENCE for id:

wwf-projects=# select currval('"projectlist_id_seq"'::text);
 currval
---------
       6
(1 row)

Now if we try to perform a faulty INSERT, the INSERT aborts. However,
the SEQUENCE is increased!:

wwf-projects=# insert into projectlist (dbms_host, dbms_port, dbms_type,
db_name, admin_login, admin_pwd) values ('webadmict.tue.nl','5432',
'hugotest-2', 'test', 'test');
ERROR:  ExecAppend: Fail to add null value in not null attribute admin_pwd

wwf-projects=# select currval('"projectlist_id_seq"'::text);
 currval
---------
       7
(1 row)


So 'currval' increased due to an INSERT that was aborted.
(Yes, the insert is definately not in the table).

I'm not sure if one can call this a bug, but it is unexpected behaviour
-- to me, at least.


Regards,


Hugo Jonker.
PS: My apologies about not being on the list, but it was taking longer than
expected to get on.

В списке pgsql-bugs по дате отправления:

Предыдущее
От: "Tomis³aw Kityñski"
Дата:
Сообщение: SERIAL type, NOT NULL constraint and rule
Следующее
От: eric
Дата:
Сообщение: segfault which isn't supposed to happen (including example code)