feat(table-copy): 新增整表复制与自动副本命名

- 在表概览及新旧侧栏右键菜单接入复制整表入口与确认、进度和刷新反馈
- 按 source_copyN 原子创建目标表并复制列、索引、默认值及全部数据
- 处理 PostgreSQL 生成列、identity/serial 序列校准与失败清理
- 限定安全数据源与连接保护策略,阻止分区表、RLS 及引用型存储引擎
- 加固 MySQL/PostgreSQL 元数据标识符处理并补齐六语种文案
- 增加后端、能力矩阵、菜单接线和国际化回归测试
This commit is contained in:
Syngnat
2026-07-21 13:27:24 +08:00
parent 49e566e01e
commit 446707698f
27 changed files with 2061 additions and 13 deletions

View File

@@ -3123,6 +3123,7 @@
"common.warning": "Предупреждение",
"connection.backend.action.apply_result_changes": "Применить изменения результата",
"connection.backend.action.clear_table": "Очистить данные таблицы",
"connection.backend.action.copy_table": "Копировать всю таблицу",
"connection.backend.action.create_database": "Создать базу данных",
"connection.backend.action.create_schema": "Создать схему",
"connection.backend.action.data_sync_structure": "Изменить структуру цели синхронизации",
@@ -4932,6 +4933,12 @@
"db.backend.error.sqlite_host_port_not_file_path": "SQLite требуется путь к локальному файлу базы данных; текущий ввод похож на адрес хоста: {{dsn}}",
"db.backend.error.table_columns_empty_for_ddl": "Полученные определения столбцов оказались пустыми, поэтому не удалось сформировать инструкцию CREATE TABLE",
"db.backend.error.table_columns_missing_for_ddl": "Не удалось получить определения столбцов, поэтому не удалось сформировать инструкцию CREATE TABLE",
"db.backend.error.table_copy_cleanup_failed": "Не удалось удалить целевую таблицу «{{target}}» после ошибки копирования: {{error}}",
"db.backend.error.table_copy_create_failed": "Не удалось создать целевую таблицу «{{target}}» из «{{source}}»: {{error}}",
"db.backend.error.table_copy_data_failed": "Не удалось скопировать данные из «{{source}}» в «{{target}}»: {{error}}",
"db.backend.error.table_copy_list_failed": "Не удалось подобрать свободное имя копии для таблицы «{{source}}»: {{error}}",
"db.backend.error.table_copy_unsupported": "Этот источник данных ({{dbType}}) не поддерживает копирование всей таблицы",
"db.backend.error.table_copy_unsafe_storage": "Таблицу «{{source}}» нельзя безопасно скопировать с текущим определением хранилища: {{detail}}",
"db.backend.error.table_drop_unsupported": "Текущий источник данных ({{dbType}}) не поддерживает удаление таблиц",
"db.backend.error.table_name_required": "Имя таблицы обязательно",
"db.backend.error.table_new_name_no_qualifier": "Новое имя таблицы не должно содержать префикс схемы или базы данных",
@@ -4971,6 +4978,7 @@
"db.backend.message.schema_created": "Схема создана",
"db.backend.message.schema_dropped": "Схема удалена",
"db.backend.message.schema_renamed": "Схема переименована",
"db.backend.message.table_copied": "Таблица «{{source}}» скопирована как «{{target}}»",
"db.backend.message.table_dropped": "Таблица удалена",
"db.backend.message.table_renamed": "Таблица переименована",
"db.backend.message.transaction_committed": "Транзакция зафиксирована",
@@ -8007,6 +8015,16 @@
"table_designer.placeholder.index_columns": "Выберите столбцы индекса; используется порядок выбора",
"table_designer.placeholder.index_name": "Имя индекса, например idx_user_name",
"table_designer.placeholder.local_columns": "Выберите локальные поля; порядок должен совпадать со ссылочными полями",
"table_copy.action.label": "Копировать всю таблицу",
"table_copy.message.backend_unavailable": "Эта версия не поддерживает копирование всей таблицы. Обновите приложение и повторите попытку.",
"table_copy.message.failed": "Не удалось скопировать всю таблицу: {{error}}",
"table_copy.message.loading": "Копирование всей таблицы «{{source}}»...",
"table_copy.message.refresh_failed": "Таблица скопирована как «{{target}}», но список таблиц не удалось обновить: {{error}}",
"table_copy.message.success": "Таблица успешно скопирована: {{target}}",
"table_copy.message.target_missing": "Серверная часть не вернула имя новой таблицы",
"table_copy.message.unsupported": "Это подключение не поддерживает копирование всей таблицы.",
"table_copy.modal.content": "Скопировать столбцы, индексы, значения по умолчанию и все данные из «{{source}}». Имена начинаются с «{{target}}» и увеличиваются при конфликте. Внешние ключи, триггеры и права не копируются. Продолжить?",
"table_copy.modal.title": "Копировать всю таблицу",
"table_designer.placeholder.primary_index_name": "Индекс первичного ключа использует фиксированное имя: PRIMARY",
"table_designer.placeholder.ref_columns": "Введите ссылочные поля; можно указать несколько",
"table_designer.placeholder.ref_table": "Ссылочная таблица; поддерживается db.table",