我正在使用gem yaml_db将我的Postgres开发数据库导出到生产,这是在我的Ruby on Rails应用程序所在的虚拟机上。
我正在使用rake db:data:dump RAILS_ENV=development
创建data.yml和rake db:data:load RAILS_ENV=production
来导入数据,但我在导入时遇到了错误。
rake aborted!
ActiveRecord::StatementInvalid: PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block
: DELETE FROM "improvement_actions"
PG::FeatureNotSupported: ERROR: cannot truncate a table referenced in a foreign key constraint
DETAIL: Table "comments" references "improvement_actions".
有谁知道如何解决这个问题?或者是否有另一种导出数据库的方法?
答案 0 :(得分:1)
错误是因为您的数据库有外键,yaml_db不支持。
我认为最简单的解决方案是使用带有pg_dump
标记的--disable-triggers
导出您的开发数据库,然后使用pg_restore
将其导入您的生产数据库。
但是,如果你真的想使用yaml_db,那么rather complicated solution has been documented。该解决方案的核心是
deferrable initially immediate
(如果还没有)。记录的解决方案使用schema_plus gem,或者您可以在Postgres中执行。SerializationHelper::Base#load
在使用set constraints all deferred;
SerializationHelper::Base#truncate_table
通过尝试像往常一样截断(在具有延迟触发器的表上不允许)来截断表,并在截断失败时删除。