BEGIN; -- Открываем транзакцию, чтобы всё прошло атомарно
-- =========================================================================
-- STEP 1: Создаем структуру и копируем ВСЁ (комментарии, индексы, дефолты)
-- =========================================================================
-- 1.1 Создаем и наполняем ГЛАВНУЮ таблицу
CREATE TABLE parent_table_new (
LIKE parent_table
INCLUDING COMMENTS
INCLUDING INDEXES
INCLUDING DEFAULTS
INCLUDING IDENTITY
);
INSERT INTO parent_table_new SELECT * FROM parent_table;
-- 1.2 Создаем и наполняем ПОДЧИНЕННУЮ таблицу
CREATE TABLE child_table_new (
LIKE child_table
INCLUDING COMMENTS
INCLUDING INDEXES
INCLUDING DEFAULTS
INCLUDING IDENTITY
);
INSERT INTO child_table_new SELECT * FROM child_table;
-- =========================================================================
-- STEP 2: Переносим связи (Foreign Keys)
-- =========================================================================
-- 2.1 Переносим внешний ключ между НОВЫМИ таблицами.
-- ВАЖНО: Замените 'fk_field_id' на имя колонки, по которой они связаны!
ALTER TABLE child_table_new
ADD CONSTRAINT fk_child_parent_new
FOREIGN KEY (fk_field_id)
REFERENCES parent_table_new(id)
ON DELETE CASCADE; -- или ON DELETE RESTRICT (как у вас в оригинале)
-- 2.2 Если подчиненная таблица также ссылалась на какие-то внешние справочники БД,
-- их связи тоже нужно продублировать с помощью LIKE (но это делается вручную):
-- ALTER TABLE child_table_new ADD CONSTRAINT fk_other FOREIGN KEY (...) REFERENCES other_table(...);
COMMIT; -- Фиксируем изменения, если ошибок не возникло