我正在尝试使用 SQL 脚本恢复数据库,但是外键约束妨碍了
我正在使用 MySQL DB 并将其带到 PostgreSQL。由于 MySQL 创建表的语法最终完全不同,因此我采用了另一个具有相同架构但数据不同的 PostgreSQL 数据库,并仅从中恢复了架构。换句话说,我现在有一个包含表、约束、序列和所有内容的数据库,但里面没有数据。
所以,是时候恢复数据了。我使用 phpMyAdmin(仅数据)备份 MySQL DB 作为 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 多个序列插入语句有点痛苦。所以,我在这里很懒,但是还有更简单的方法来处理序列吗?
或者,你们对一组不同的工具有什么建议可以使这更容易吗?
感谢您的时间,祝您有美好的一天。