【发布时间】:2020-02-02 12:17:10
【问题描述】:
我有一个 pg 转储文件和一个带有空表的 Rails 应用程序。 我只需要将转储恢复到已经存在的表中(即 schema.rb 中的表)。
pg_restore 的 --data-only --disable-triggers 选项的问题在于,当违反参照完整性时,例如当试图在其父记录存在之前填充子表时,不会填充数据。
或者使用--if-exists --clean 选项,它会在数据库中为转储文件中的所有内容创建新表。 (我现在意识到--if-exists 只是意味着在填充之前先删除任何现有表,它不会阻止创建新表)
我对 pg_restore 选项的解读是,这是不可能的。如果是这样,有没有办法删除数据库中所有未列在schema.rb 中的表?通过 Rails 应用程序还是从 linux(SSM 进入连接到 RDS 的 AWS EC2)?
这将允许我运行 pg_restore,然后删除额外的表。
谢谢!
【问题讨论】:
-
如果需要进行某些解析操作,您可以使用 pg_dump 和 pg_restore 的“-l”和“-L”选项。
-
好的,谢谢 所有看起来对我来说有点吓人。我将尝试使用 ruby 脚本删除不在白名单中的表。
标签: ruby-on-rails postgresql ruby-on-rails-5 pg-restore