我有一个正在开发的Postgresql数据库(烧瓶,余烬)。我做了db_dump
来备份现有数据。然后,我在代码中添加了一个列。我必须再次创建数据库,以便新列将在数据库中。当我尝试使用psql -d dbname -f dumpfile
恢复数据时,出现很多错误,例如“关系“ xx”已存在”,“违反外键约束”等。
我是新来的。有没有办法将旧数据还原到已经建立了所有关系的新的空数据库?还是在代码中添加一列以保留数据时,是否已向数据库中添加了“手工”列?
答案 0 :(得分:1)
进行pg_dump
时,您仅转储了数据和表结构,bit没有删除任何表。现在,您正在尝试还原转储,这将尝试重新创建表。
您有几个选择(第一个是我建议的选择):
将--clean
添加到您的pg_dump
命令中-当您还原转储文件时,这将DROP
所有表。
您还可以--data-only
pg_dump
命令-这只会转储现有数据,而不会尝试重新创建表。但是,您将必须找到一种方法来截断表(或从表中删除数据),以免遇到任何FK错误或PK冲突。
答案 1 :(得分:1)
正确的操作方法是使用ALTER TABLE
向表中添加一列。
升级代码时,只需将旧代码替换为新代码即可。对于数据库则不是这样,因为它保存状态。您将必须提供修改现有数据库的SQL语句,以使其更改为所需的新状态。
要使其易于管理,请使用Flyway或Liquibase等专用软件。