【发布时间】:2011-11-01 17:03:51
【问题描述】:
我正在尝试使用 SQL 脚本恢复数据库,但外键约束妨碍了
我正在使用 MySQL 数据库并将其带到 PostgreSQL。 由于 MySQL 创建表的语法最终完全不同,因此我采用了另一个具有相同架构但数据不同的 PostgreSQL 数据库,并仅从中恢复了架构。 换句话说,我现在有一个包含表、约束、序列和所有这些 shnaz 的数据库,但里面没有数据。
所以,是时候恢复数据了。 我使用 phpMyAdmin(仅数据)备份 MySQL 数据库作为 SQL 脚本(由于某种原因,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应该有类似的东西。
标签: mysql sql postgresql pgadmin