2016-11-29 1 views
0

私はorm:schema-tool:createを実行して最初のテーブルを作成しましたが、すでに存在するテーブルを作成しようとしましたが、スクリプトが実行を停止したため、データベースにいくつかの新しいテーブルを作成する必要があります。相続人は、エラーメッセージは、それが出力:Doctrine - orm:schema-tool:create - すでに存在するテーブルを無視するには?

[Doctrine\ORM\Tools\ToolsException] 
    Schema-Tool failed with Error 'An exception occurred while executing 'CREATE TABLE autogen_structures (id INT AUTO_ 
    INCREMENT NOT NULL, structure_id INT DEFAULT NULL, INDEX FK_STRUCTURES_TO_AUTOGEN_STRUC (structure_id), PRIMARY KEY 
    (id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB': 
    SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'autogen_structures' already exists' while executing 
    DDL: CREATE TABLE autogen_structures (id INT AUTO_INCREMENT NOT NULL, structure_id INT DEFAULT NULL, INDEX FK_STRU 
    CTURES_TO_AUTOGEN_STRUC (structure_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE 
    = InnoDB 



    [Doctrine\DBAL\Exception\TableExistsException] 
    An exception occurred while executing 'CREATE TABLE autogen_structures (id INT AUTO_INCREMENT NOT NULL, structure_i 
    d INT DEFAULT NULL, INDEX FK_STRUCTURES_TO_AUTOGEN_STRUC (structure_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf 
    8 COLLATE utf8_unicode_ci ENGINE = InnoDB': 
    SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'autogen_structures' already exists 



    [Doctrine\DBAL\Driver\PDOException] 
    SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'autogen_structures' already exists 

を私はそれが既存のテーブルのすべてのデータを一掃していない、私は前にこの問題を経験していることを、実際にはかなりほっとしてるので、私はそれがあったと仮定していますその問題を引き起こしたorm:schema-tool:update。テーブルに何千もの行があるデータベースでは、バックアップファイルからデータベースを再作成するのに時間がかかるため、かなり大きな問題です。

新しいテーブルを作成して既存のテーブルを無視する方法はありますか?また、既存のテーブルのスキーマを更新する方法はありますか?

答えて

0

編集: 問題は完全に残念ながら解決されません。私はこのエラーを得た、私は再び実行してみましたし、今回はそれが動作しませんでした:

[Doctrine\DBAL\Exception\DriverException] 
    An exception occurred while executing 'ALTER TABLE compounds CHANGE id id INT AUTO_INCREMENT NOT NULL': 
    SQLSTATE[HY000]: General error: 1833 Cannot change column 'id': used in a foreign key constraint 'FK_5BBEC55AAE76FC 
    6F' of table 'chebi_backup.structures' 

これらの外部キー制約があり、私はコマンドを実行した初めてだったので、その問題になる理由を私は理解していません今度は2回目のコマンドを実行しました。私はスキーマを更新することができないなら、私は教義で作業することはできません。これを回避する方法はありますか?

編集前: 問題が解決しました(少なくともMySQLの場合)。バックアップテーブルにorm:schema-tool:update --dump-sql --forceを実行して、既存のテーブルのデータを消去するかどうかを確認しましたが、そうでないと、テーブルは保持されたままでした。クエリを見ると、既存のテーブルを作成しようとしなかったことがわかります。新しいテーブルが作成されただけです。

データが消えてしまう問題は、sqliteデータベースにありました。今回私はMySQLデータベースを使って作業しています。なぜ私は何が起こったのか分からなければ、もう一度起こる可能性があるので、データが前に拭き取られた理由はまだ分からない。

+0

'--force'は強制的にアップデートを実行します。より良い方法は '--force'なしで呼び出すことです。 'orm:schema-tool:update --dump-sql'を実行するとsqlがダンプされ、必要のない、または簡単に更新できない行を削除できます。 –

関連する問題