insert into tab1 (id, name) (select nextval('seq'), name from tab2) ругается на pk

svazeeland
Дата: 25.04.2015 04:30:22
Коллеги, подскажите по постгресу пожалуйста.
Копирую строки из таблицы в таблицу, хочу брать id из сиквенса.
Запрос из сабжа ругается на нарушение уникальности.
вообще
select nextval('seq'),name from tab2
дает
1,name1
1,name2
...
не понятно почему не увеличивается счетчик последовательности, оракл работает по другому, подскажите что с постгресом делать в такой ситуации. Спасибо!
Maxim Boguk
Дата: 25.04.2015 04:51:21
svazeeland
Коллеги, подскажите по постгресу пожалуйста.
Копирую строки из таблицы в таблицу, хочу брать id из сиквенса.
Запрос из сабжа ругается на нарушение уникальности.
вообще
select nextval('seq'),name from tab2
дает
1,name1
1,name2
...
не понятно почему не увеличивается счетчик последовательности, оракл работает по другому, подскажите что с постгресом делать в такой ситуации. Спасибо!


Не воспроизводится у меня.
Приведите полный тестовый пример и использованную версию PostgreSQL.

--
Maxim Boguk
www.postgresql-consulting.ru
svazeeland
Дата: 25.04.2015 16:13:51
Maxim Boguk, спасибо, поутру разобрался, может пригодится:
create table tab1 (id INTEGER, name VARCHAR(10) );
CREATE SEQUENCE seq_test INCREMENT 1 START 1;
create table tab2 (id INTEGER, name VARCHAR(10) );
insert into tab1 ( id, name ) (select nextval('seq_test'), 'name1');
insert into tab1 ( id, name ) (select nextval('seq_test'), 'name2');
insert into tab1 ( id, name ) (select nextval('seq_test'), 'name3');
select * from tab1;

сначала так (работает правильно)
insert into tab2 ( id, name ) (select nextval('seq_test'), name from tab1 );

потом так (работает не правильно)
insert into tab2 ( id, name ) (select (select nextval('seq_test')), name from tab1 );

итого
select * from tab2;

id name
4 name1
5 name2
6 name3
7 name1
7 name2
7 name3