我试图使用SQL脚本来恢复数据库SQL脚本来恢复数据库,但事情外键约束的方式从外键约束
我正在一个MySQL数据库,并把它交给PostgreSQL的获得。 由于MySQL创建表语法结束了很大的不同,我带了另一个PostgreSQL数据库具有相同的模式,但不同的数据,并从中恢复模式。 换句话说,我现在有一个数据库,其中包含表格,约束,序列以及所有那些内部没有数据的数据库。
因此,现在是恢复数据的时候了。 我使用phpMyAdmin(仅数据)作为SQL脚本备份MySQL数据库(由于某种原因,pgAdmin似乎不接受zip或gzip文件)并运行SQL脚本。 现在,这就是问题开始发生的地方,从MySQL到PostgreSQL是很自然的,所以语法错误一定会发生。
但是,也有其他非语法有关的问题,像这样的:
ERROR: insert or update on table "_account" violates foreign key constraint "fk_1_account"
DETAIL: Key (accountid)=(2) is not present in table "_entity".
所以,是的,基本上,一个外国约束存在,查询尝试将数据插入到_account
表,但尚未将相应的数据插入_entity
表中。 我该如何解决这个问题?有没有办法让pgAdmin3/PostgreSQL禁用所有的约束,插入数据,然后重新启用约束?
我遇到语法有关的错误,是这样的一个:
INSERT INTO _accounttype_seq (id) VALUES (11);
PostgreSQL的相当于该声明(如果我是正确的)是
ALTER SEQUENCE _accounttype_seq INCREMENT BY 11;
但是,这是一个有点痛运行整个脚本并更改所有200多个序列插入语句。所以,我在这里很懒,但是有没有更简单的方法来处理序列呢?
或者,你们对不同的工具有什么建议可以使这更简单吗?
感谢您的时间,祝您有美好的一天。
mysql有一个'foreign_key_checks'设置,您可以为导入目的禁用 - 不禁用它们就不可能导入任何带有循环引用的表,或者以非常特定的顺序列出表。 PG应该有类似的东西。 –
这些可能有所帮助: 1. http://stackoverflow.com/questions/2679854/postgresql-disabling-constraints,2. http://www.postgresql.org/docs/8.2/static/sql-set-constraints。 html – Abhay