首页 > 解决方案 > 如何在 Rails schema.rb 中仅 pg_restore 表

问题描述

我有一个 pg 转储文件和一个带有空表的 Rails 应用程序。我只需要将转储恢复到已经存在的表中(即 schema.rb 中的表)。

--data-only --disable-triggers选项的问题pg_restore在于,当违反参照完整性时,例如,当试图在其父记录存在之前填充子表时,不会填充数据。

或者使用这些--if-exists --clean选项,它会在数据库中为转储文件中的所有内容创建新表。(我现在意识到这--if-exists只是意味着在填充之前先删除任何现有表,它不会阻止创建新表)

我对 pg_restore 选项的解读是,这是不可能的。如果是这样,有没有办法删除数据库中未列出的所有表schema.rb?通过 Rails 应用程序还是从 linux(SSM 进入连接到 RDS 的 AWS EC2)?这将允许我运行 pg_restore 然后删除额外的表。

谢谢!

标签: ruby-on-railspostgresqlruby-on-rails-5pg-restore

解决方案


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

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

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

pg我相信文件扩展名也可以是我的,.dump所以我为新文件保留了它。还要调整路径以匹配您的文件位置。

然后您可以使用普通命令导入该表

psql destdb < onetablefilename.dump

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


推荐阅读