У меня есть база данных PostgreSQL 9, которая использует автоинкрементные целые числа в качестве первичных ключей.Я хочу продублировать некоторые строки в таблице (основываясь на некоторых критериях фильтра), изменяя одно или два значения, т.е. копировать все значения столбцов, кроме идентификатора (который создается автоматически) и, возможно, другого столбца.
Однако я также хочу получить сопоставление от старых идентификаторов к новым.Есть ли лучший способ сделать это, затем просто запросить сначала строки для копирования, а затем вставить новые строки по одной за раз?
По сути, я хочу сделать что-то вроде этого:
INSERT INTO my_table (col1, col2, col3)
SELECT col1, 'new col2 value', col3
FROM my_table old
WHERE old.some_criteria = 'something'
RETURNING old.id, id;
Однако это не работает с ERROR: missing FROM-clause entry for table "old"
, и я понимаю, почему: Postgres должен сначала выполнить SELECT, а затем вставить его, а предложения RETURNING
имеют доступ только к вновь вставленной строке.