Использование nextval для вставки новых данных в таблицу из временной таблицы

У меня проблемы со следующим (в PostgreSQL).

Цель:

  • читать данные из временной таблицы tmp
  • обработать это к другой таблице y
  • использовать nextval из таблицы y в сочетании с данными из tmp,

Я думал, что это сделает работу:

INSERT INTO y (v1, v2) VALUES (nextval(y.v1), SELECT v2 FROM tmp)

также попробовал:

INSERT INTO y (v1, v2) VALUES (SELECT nextval(y.v1), v2 FROM tmp)

Кто-нибудь может объяснить, как это сделать?

1 ответ

Есть два заблуждения / ошибки в коде, который вы показали:

  1. nextval() ожидает имя последовательности, а не имя столбца.
  2. Если select заявление используется для предоставления данных для insert заявление, вы не можете использовать values()

Я думаю, что вы хотите что-то вроде:

insert into y (v1, v2) 
select nextval(...), v2 
from tmp;

Мне неясно, что вы имеете в виду под "использовать nextval из таблицы y". Как уже упоминалось, nextval() работает с последовательностями, а не с таблицами или столбцами. Если вы имеете в виду "взять следующее значение из последовательности, связанной с y.v1" и y.v1 определяется как serial В колонке вы можете сделать что-то вроде этого:

insert into y (v1, v2) 
select nextval(pg_get_serial_sequence('y','v1')), v2 
from tmp;

Но это требует v1 быть определенным как serial

Другие вопросы по тегам