После сброса базы данных в MySQL-5.1.73 и загрузки ее в MySQL-5.5 я заметил, что по крайней мере один первичный ключ таблицы не имеет своего auto_increment
флаг передан ... describe table
на оригинале гласит:
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| FIELD_ID | bigint(20) | NO | | 0 | |
| ID | bigint(20) | NO | PRI | NULL | auto_increment |
| ISSUE_ID | bigint(20) | NO | MUL | 0 | |
| LOCK_HASH | varchar(255) | YES | MUL | NULL | |
| LOCK_TIME | bigint(20) | YES | | NULL | |
| RANK | varchar(255) | NO | MUL | NULL | |
| TYPE | int(11) | NO | | 0 | |
+-----------+--------------+------+-----+---------+----------------+
Но после загрузки в цель последний столбец пуст - auto_increment
флаг ID
-поле больше нет.
Действительно, глядя в дамп, я вижу определение таблицы как:
CREATE TABLE "AO_60DB71_LEXORANK" (
"FIELD_ID" bigint(20) NOT NULL DEFAULT '0',
"ID" bigint(20) NOT NULL,
"ISSUE_ID" bigint(20) NOT NULL DEFAULT '0',
"LOCK_HASH" varchar(255) COLLATE utf8_bin DEFAULT NULL,
"LOCK_TIME" bigint(20) DEFAULT NULL,
"RANK" varchar(255) COLLATE utf8_bin NOT NULL,
"TYPE" int(11) NOT NULL DEFAULT '0',
PRIMARY KEY ("ID"),
KEY "index_ao_60db71_lexorank_rank" ("RANK"),
KEY "index_ao_60db71_lex604083109" ("ISSUE_ID"),
KEY "index_ao_60db71_lex1632828616" ("LOCK_HASH")
);
Нет очевидной инструкции по установке ID для автоматического увеличения ... Флаги не по умолчанию, используемые с mysqldump
мы:
extended-insert=false
compatible=postgres
single-transaction
Это известная проблема? Должен ли я попытаться создать отчет об ошибке в MySQL (Oracle)?
AUTO_INCREMENT
- это вариант только для MySQL (другое программное обеспечение баз данных использует другие команды - например, PostgreSQL использует специальный тип столбца, называемый SERIAL
).
Поэтому при экспорте с --compatible=postgres
в дамп он не попадет.
Вы можете прекратить экспорт с флагом совместимости PostgreSQL или вручную добавить AUTO_INCREMENT
вариант. В любом случае, если вы действительно планируете импортировать эту схему в PostgreSQL, вам придется изменить файл дампа, чтобы изменить тип столбца на SERIAL
для любого столбца, который вы хотите увеличить автоматически.
Обратите внимание, что, несмотря на название, --compatible
вариант не преобразовать схему в форму, которая гарантированно будет работать в выбранной вами базе данных.
Все, что делает этот вариант, это удалять вещи, которые являются уникальными для MySQL, так что вам будет легче завершить преобразование самостоятельно, вручную или с помощью какого-либо сценария, который вы создали.
Из документация:
Этот вариант не гарантирует совместимость с другими серверами. Он включает только те значения режима SQL, которые в настоящее время доступны для обеспечения большей совместимости вывода дампа. Например,
--compatible=oracle
не сопоставляет типы данных с типами Oracle и не использует синтаксис комментариев Oracle.