原则备份 [英] Doctrine Backuptables

查看:138
本文介绍了原则备份的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆