原则备份 [英] 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 ($康恩);
$ 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();
但是当我想再次导入时,我会收到以下错误。 。 。 。 。 :(
致命错误:未捕获的异常'PDOException'与消息'SQLSTATE [HY000]:常规错误:1005无法创建第33行的/Applications/MAMP/bin/php/php5.3.14/lib/php/Doctrine/ORM/Tools/ToolsException.php中的表'databasename。#sql-220_87'(errno:121)
PDOException:SQLSTATE [HY000]:常规错误:1005无法在/Applications/MAMP/bin/php/php5.3.14/lib/php/中创建表'databasename。#sql-220_87'(errno:121) Doctrine / DBAL / Connection.php在线646
调用堆栈:
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:执行ALTER TABLE时发生异常doc_consultant_practice_new ADD CONSTRAINT FK_60C69DE344F779A2 FOREIGN KEY(consultant_id)参考doc_xml_consultant_new(id)ON DELETE CASCADE ':
SQLSTATE [HY000]:常规错误:1005无法在/Applications/MAMP/bin/php/php5.3.14中创建表'databasename。#sql-220_87'(errno:121) /lib/php/Doctrine/DBAL/DBALException.php第47行
调用堆栈:
0.0011 761296 1. {main}()/path/to/jobs/import.php: 0
0.0014 767024 2. require_once('/ path / to / jobs / config.php')/ path / t o / 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失败,出现错误'执行时发生异常ALTER TABLE doc_consultant_practice_new ADD CONSTRAINT FK_60C69DE344F779A2 FOREIGN KEY(consultant_id)参考doc_xml_consultant_new(id)ON DELETE CASCADE':
SQLSTATE [HY000]:常规错误:1005无法创建表'databasename。#sql-220_87'(errno: 121)',同时执行DDL:ALTER TABLE do c_consultant_practice_new ADD CONSTRAINT FK_60C69DE344F779A2 FOREIGN KEY(consultant_id)参考doc_xml_consultant_new(id)ON DELETE CASCADE in /Applications/MAMP/bin/php/php5.3.14/lib/php/Doctrine/ORM/Tools/ToolsException.php在第33行
调用堆栈:
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
看起来你有一个问题,请问有谁知道我的错误或有更好的想法因为... e的索引名称重复,前缀表不为它们前缀索引。您应该为这种功能使用不同的数据库,您可以重命名它或同步打开两个连接的数据。
is there any way to make Backup Tables in Doctrine 2.
I have an XML and want to import it every day with an cron job. First I create a new Schema with the end _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);
}
After it i import the data from xml. And is all okay, i rename the Tables
$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();
But when i want to import again, i get the following error . . . . . :(
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
Do anybody know my mistake or have an better idea to realize backup tables?
it looks like you have an issue because of index name duplication, prefixing tables does not prefix indexes for them. You should use a different database for that kind of functionality, you can rename it afterwards or sync data with two connections opened.
这篇关于原则备份的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!