Функция plpgsql, которые находит все уникальные идентификаторы id из таблицы change_request_id, далее с циклом по таблице change_date ищет записи по change_request_id, копирует строки из change_data, создает их копию и связывает новые и старые строки между собой(link_change_data_id)
CREATE OR REPLACE FUNCTION test_task_1() RETURNS void AS $$ DECLARE id integer; BEGIN FOR id IN (SELECT DISTINCT change_request_id FROM change_request_id) LOOP INSERT INTO change_request_id (change_request_id) SELECT nextval ('change_request_id_id_seq') AS id; INSERT INTO change_date (change_date, change_request_id) SELECT change_date, id FROM change_date WHERE change_request_id = id; INSERT INTO change_data (change_data_id, change_request_id, change_date_id, old_value, new_value) SELECT nextval ('change_data_id_seq'), id, link_change_data_id.id, old_value, new_value FROM change_data, change_date link_change_data_id WHERE change_request