У меня есть база данных 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;
Однако это не удается с ОШИБКА: отсутствует запись в предложении FROM для таблицы "old"
, и я могу понять, почему: Postgres должен сначала выполнить SELECT, а затем вставить его, а предложения RETURNING
имеют доступ только к вновь вставленной строке .