Использование 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 ответ
Есть два заблуждения / ошибки в коде, который вы показали:
nextval()
ожидает имя последовательности, а не имя столбца.- Если
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