PostgreSQL — инструкция INSERT INTO

Я пытаюсь выбрать различные строки из определенной таблицы и вставить их обратно в ту же таблицу. Моя проблема в том, что я продолжаю сталкиваться со всей ошибкой «дублировать PK» - есть ли способ пропустить поле PK при выполнении оператора INSERT INTO в PostgreSQL?

Например:

INSERT INTO reviews SELECT * FROM reviews WHERE rev_id=14;

rev_id в предыдущем SQL — это ключ PK, который мне каким-то образом нужно пропустить. (Для уточнения: я использую * в операторе SELECT, потому что количество столбцов таблицы может динамически увеличиваться).

Итак, наконец, есть ли способ пропустить поле PK?

Заранее спасибо.


person user1023242    schedule 03.06.2013    source источник
comment
Вы пытаетесь продублировать строку с назначенным ей новым идентификатором? Это кажется действительно странным желанием сделать это.   -  person Craig Ringer    schedule 03.06.2013


Ответы (2)


Вы можете вставить только те значения, которые хотите, чтобы ваш PK автоматически увеличивался.

insert into reviews (col1, col2, col3) select col1, col2, col3 from reviews where rev_id=14

Пожалуйста, не извлекайте/вставляйте столбец id

person Jonathan Kortleven    schedule 03.06.2013

person    schedule
comment
Это нормально, но столбцы отзывов динамически увеличиваются в определенное время, поэтому я не могу точно сказать название столбца. - person user1023242; 03.06.2013
comment
@user1023242 user1023242 Имена динамических столбцов? Это все больше и больше похоже на проблему проектирования модели данных, а не на проблему запросов. - person Craig Ringer; 03.06.2013