【问题标题】:How to pg_restore only tables in Rails schema.rb如何在 Rails schema.rb 中仅 pg_restore 表
【发布时间】: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


【解决方案1】:

我刚刚经历了这个,这就是我实现它的方式。我获取了转储文件并为我需要的表创建了一个单独的转储文件,然后将其导入。

所以创建表的转储文件的命令

pg_restore --data-only --table=tablename fulldumpfilename.dump > onetablefilename.dump

文件扩展名也可以是pg 我相信,我的是.dump 所以我将它保留在新文件中。同时调整路径以匹配您的文件位置。

然后你可以用普通命令导入那个表

psql destdb < onetablefilename.dump

如果你有很多表,可能不是最好的解决方案,我只有几个,这让我可以将它们提取出来,导入它们,还可以控制它们进入的顺序。

【讨论】:

  • 我有很多桌子是的。如果我将表列为 -t 选项,pg_restore 对我的行为会有所不同,所以我现在必须坚持加载所有表。
猜你喜欢
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 2016-06-11
  • 2012-07-03
相关资源
最近更新 更多