我有一个
dump.sql
文件,我想将其恢复到我的计算机上的本地数据库。但是,当我尝试导入它时,我收到一条错误消息,指出所有模式、函数、关系、约束、角色都已经存在,即使我的数据库最初没有数据或表。还显示重复的键值违反唯一约束错误。
导入前我已检查数据库是否为空。有谁知道为什么会发生这种情况或如何解决它?
我尝试使用此代码来重新存储我的数据库。
psql -U <username> -d <db name> -f <dump file path>
仅考虑您共享的信息,您的转储文件似乎不仅包含数据,还包含用于创建表和其他对象的 DDL。因此,如果您当前的数据库已经包含这些对象,您应该采取不同的方法来恢复数据。
作为第一种选择,您可以先创建另一个数据库,然后将转储文件恢复到其中。
psql -U <username> -c "create database new_database;"
psql -U <username> -d <new_database> -f <dump file path>
作为第二种选择,您可能需要编辑转储文件并简单地删除创建表的部分。但是,尽管它可以修复现有对象上方的消息,但它肯定不会消除与约束冲突相关的错误。这些错误表明您的数据库不为空,或者转储文件不包含所有需要的对象,仅举几个例子。