O sinalizador auto_increment da coluna da tabela não é preservado pelo backup?

1

Depois de descarregar um banco de dados no MySQL-5.1.73 e carregá-lo no MySQL-5.5, notei que pelo menos uma chave primária de tabela não teve seu sinal auto_increment transferido ... O describe table no original lê assim:

+-----------+--------------+------+-----+---------+----------------+
| 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       |                |
+-----------+--------------+------+-----+---------+----------------+

Mas, depois de carregar no destino, a última coluna está vazia - auto_increment sinalizador do ID -field desapareceu.

De fato, olhando para o lixo, vejo a definição da tabela como:

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")
);

Não há instruções óbvias para definir o ID para incrementar automaticamente ... Os sinalizadores não padrão usados com mysqldump foram:

extended-insert=false
compatible=postgres
single-transaction

Este é um problema conhecido? Devo tentar um relatório de erros com o MySQL (Oracle)?

    
por Mikhail T. 30.01.2017 / 01:48

1 resposta

2

AUTO_INCREMENT é uma opção somente do MySQL (outro software de banco de dados usa comandos diferentes - por exemplo, o PostgreSQL usa um tipo de coluna especial chamado SERIAL ).

Portanto, quando você exportar com --compatible=postgres , ele não será incluído no dump.

Você pode parar de exportar com o sinalizador de compatibilidade do PostgreSQL ou adicionar manualmente a opção AUTO_INCREMENT . Em qualquer um dos casos, se você planeja realmente importar esse esquema para o PostgreSQL, será necessário modificar o arquivo de despejo para alterar o tipo de coluna para SERIAL para qualquer coluna que desejar incrementar automaticamente.

Observe que, apesar do nome, a opção --compatible não transforma o esquema em um formato com a garantia de funcionar no banco de dados escolhido.

Tudo o que a opção faz é remover coisas que são exclusivas do MySQL, para que você possa terminar a transformação mais facilmente, manualmente ou usando algum tipo de script que você construiu.

A partir da documentação :

This option does not guarantee compatibility with other servers. It only enables those SQL mode values that are currently available for making dump output more compatible. For example, --compatible=oracle does not map data types to Oracle types or use Oracle comment syntax.

    
por 30.01.2017 / 03:59

Tags