ruby-on-rails - 如何在 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 然后删除额外的表。
谢谢!
解决方案
我刚刚经历了这个,这就是我实现它的方式。我获取了转储文件并为我需要的表创建了一个单独的转储文件,然后将其导入。
所以创建表的转储文件的命令
pg_restore --data-only --table=tablename fulldumpfilename.dump > onetablefilename.dump
pg
我相信文件扩展名也可以是我的,.dump
所以我为新文件保留了它。还要调整路径以匹配您的文件位置。
然后您可以使用普通命令导入该表
psql destdb < onetablefilename.dump
如果你有很多表,可能不是最好的解决方案,我只有几个,这让我可以将它们提取出来,导入它们,还可以控制它们进入的顺序。
推荐阅读
- azure - Isito 入口控制器虚拟服务返回 503
- python - 通过 bs4 python 从 youtube 获取搜索结果
- java - 使用 Angular 7 + SpringBoot 发送电子邮件
- python - 打印字典错误:列表索引必须是整数或切片,而不是元组
- google-cloud-platform - 如何使用容器映像创建谷歌计算实例模板
- log4net - 如何接管在 log4net 中编写异常
- nginx - 基于jsonrpc方法的nginx反向代理
- c# - 在WPF中使用MVVM开发贪吃蛇游戏时如何设计View层?
- sql - Oracle 遍历列上的值
- javascript - 如何使用 ajax 调用在 ASP.Net WebForm 中动态填充 jsGrid 列和行?