2012-11-07 5 views
0

Doctrine 2에서 백업 테이블을 만들 수있는 방법이 있습니다.Doctrine Backuptables

XML을 가지고 있으며 매일 cron 작업으로 가져 오기를 원합니다. 처음에는 끝이 _new 인 새 스키마를 만듭니다.

if ($newTables) { 
    $tablePastfix = new \DoctrineExtensions\TablePastfix('_new'); 
    $evm->addEventListener(\Doctrine\ORM\Events::loadClassMetadata, $tablePastfix); 
    } 

    $entityManager = \Doctrine\ORM\EntityManager::create($conn, $config, $evm); 

    if ($newTables) { 
    $tool = new \Doctrine\ORM\Tools\SchemaTool($entityManager); 
    $classes = array (
     $entityManager->getClassMetadata('MyClasses'), 
     $entityManager->getClassMetadata('MyClasses'), 
     $entityManager->getClassMetadata('MyClasses'), 
    ); 
     $tool->createSchema($classes); 
} 

xml에서 데이터를 가져온 후. 그리고 모두 괜찮습니다, 나는 테이블

$dm = Doctrine\DBAL\DriverManager::getConnection($conn); 
$sql = "DROP TABLE `mytable_old`;"; 
$stmt = $dm->query($sql); 
$stmt->execute(); 

$dm = Doctrine\DBAL\DriverManager::getConnection($conn); 
$sql = "ALTER TABLE `mytable` RENAME `mytable_old`;"; 
$stmt = $dm->query($sql); 
$stmt->execute(); 

$dm = Doctrine\DBAL\DriverManager::getConnection($conn); 
$sql = "ALTER TABLE `mytable_new` RENAME `mytable`;"; 
$stmt = $dm->query($sql); 
$stmt->execute(); 

하지만 난 다시 가져올 때, 나는 다음과 같은 오류가 이름을 바꿉니다. . . . . 당신이 테이블 접두어, 때문에 인덱스 이름 중복 문제를 가지고있는 것처럼 :(

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1005 Can't create table 'databasename.#sql-220_87' (errno: 121)' in /Applications/MAMP/bin/php/php5.3.14/lib/php/Doctrine/ORM/Tools/ToolsException.php on line 33 

PDOException: SQLSTATE[HY000]: General error: 1005 Can't create table 'databasename.#sql-220_87' (errno: 121) in /Applications/MAMP/bin/php/php5.3.14/lib/php/Doctrine/DBAL/Connection.php on line 646 

Call Stack: 
    0.0011  761296 1. {main}() /path/to/jobs/import.php:0 
    0.0014  767024 2. require_once('/path/to/jobs/config.php') /path/to/jobs/import.php:7 
    0.0017  770536 3. require_once('/path/to/jobs/bootstrap.php') /path/to/jobs/config.php:3 
    0.0020  796264 4. require_once('/path/to/jobs/bootstrap_doctrine.php') /path/to/jobs/bootstrap.php:5 
    0.1468 7673040 5. Doctrine\ORM\Tools\SchemaTool->createSchema() /path/to/jobs/bootstrap_doctrine.php:53 
    1.1216 9445080 6. Doctrine\DBAL\Connection->executeQuery() /Applications/MAMP/bin/php/php5.3.14/lib/php/Doctrine/ORM/Tools/SchemaTool.php:90 
    1.1216 9445656 7. PDO->query() /Applications/MAMP/bin/php/php5.3.14/lib/php/Doctrine/DBAL/Connection.php:646 

Doctrine\DBAL\DBALException: An exception occurred while executing 'ALTER TABLE doc_consultant_practice_new ADD CONSTRAINT FK_60C69DE344F779A2 FOREIGN KEY (consultant_id) REFERENCES doc_xml_consultant_new (id) ON DELETE CASCADE': 

SQLSTATE[HY000]: General error: 1005 Can't create table 'databasename.#sql-220_87' (errno: 121) in /Applications/MAMP/bin/php/php5.3.14/lib/php/Doctrine/DBAL/DBALException.php on line 47 

Call Stack: 
    0.0011  761296 1. {main}() /path/to/jobs/import.php:0 
    0.0014  767024 2. require_once('/path/to/jobs/config.php') /path/to/jobs/import.php:7 
    0.0017  770536 3. require_once('/path/to/jobs/bootstrap.php') /path/to/jobs/config.php:3 
    0.0020  796264 4. require_once('/path/to/jobs/bootstrap_doctrine.php') /path/to/jobs/bootstrap.php:5 
    0.1468 7673040 5. Doctrine\ORM\Tools\SchemaTool->createSchema() /path/to/jobs/bootstrap_doctrine.php:53 
    1.1216 9445080 6. Doctrine\DBAL\Connection->executeQuery() /Applications/MAMP/bin/php/php5.3.14/lib/php/Doctrine/ORM/Tools/SchemaTool.php:90 

Doctrine\ORM\Tools\ToolsException: Schema-Tool failed with Error 'An exception occurred while executing 'ALTER TABLE doc_consultant_practice_new ADD CONSTRAINT FK_60C69DE344F779A2 FOREIGN KEY (consultant_id) REFERENCES doc_xml_consultant_new (id) ON DELETE CASCADE': 

SQLSTATE[HY000]: General error: 1005 Can't create table 'databasename.#sql-220_87' (errno: 121)' while executing DDL: ALTER TABLE doc_consultant_practice_new ADD CONSTRAINT FK_60C69DE344F779A2 FOREIGN KEY (consultant_id) REFERENCES doc_xml_consultant_new (id) ON DELETE CASCADE in /Applications/MAMP/bin/php/php5.3.14/lib/php/Doctrine/ORM/Tools/ToolsException.php on line 33 

Call Stack: 
    0.0011  761296 1. {main}() /path/to/jobs/import.php:0 
    0.0014  767024 2. require_once('/path/to/jobs/config.php') /path/to/jobs/import.php:7 
    0.0017  770536 3. require_once('/path/to/jobs/bootstrap.php') /path/to/jobs/config.php:3 
    0.0020  796264 4. require_once('/path/to/jobs/bootstrap_doctrine.php') /path/to/jobs/bootstrap.php:5 
    0.1468 7673040 5. Doctrine\ORM\Tools\SchemaTool->createSchema() /path/to/jobs/bootstrap_doctrine.php:53 

사람이 내 실수를 알거나 백업 테이블을 실현하는 더 나은 아이디어가 있습니까?

답변

0

이 보이는위한하지 접두사 인덱스를 않습니다 당신은 그 종류의 기능을 위해 다른 데이터베이스를 사용해야하며, 이후에 이름을 바꿀 수 있으며 열린 두 연결로 데이터를 동기화 할 수 있습니다.

관련 문제