2012-05-12 36 views
2

我想知道在续集中创建基于来自postgres的现有表转储的最佳方式。我意识到我将不得不自己编写down方法来删除表/函数/序列,但有没有办法告诉续集迁移以加载现有的sql脚本并执行脚本中的所有内容?如何从现有的postgres表转储创建续集迁移?

编辑: 万一不明确的,这是使用红宝石续集SQL库/宝石

回答

6

你不会从创建一个表转储迁移,但你可以很容易地通过使用续集的schema_dumper扩展名来创建一个。这事实上是内置支持这个在续集命令行程序:

续集-d Postgres的:// Postgres的@本地/ MYDB> 001_initial_migration.rb

有倾倒的功能或序列不支持,因为这旨在生成与数据库无关的迁移。

如果您正在使用函数和自定义序列,那么您完全处于特定于数据库的领域,使用数据库工具可能会更好。

+0

感谢您提供关于函数和序列的提示,我不得不使用它(用于空间支持)。在这种情况下,我会坚持使用数据库工具进行设置。 – kelso

-1

你问如何执行与PostgreSQL的命令行客户端的SQL脚本?如果是的话,答案是使用--file选项:

psql -U postgres -d mydb -f dump.sql. 
+0

不,对不起,我不是更清楚,它是使用红宝石续集宝石,一个orm的种类。 – kelso

+1

啊,我并不熟悉它,但如果有某种方式直接在SQL中执行某些操作,则可以将文件的内容发送到这种方法调用。不过,我怀疑你会得到任何客户端来读取PostgreSQL转储文件以及'psql'。也许你可以自己对'psql'进行'system'调用? – theory

+0

有一种方法可以传递一个我可以使用的sql字符串,但是我必须解析这个文件(我认为),我并不是那么坚持。我认为,打电话给psql的想法是可行的,如果库没有内置任何内建的东西,我就会觉得这是个不错的选择。 – kelso

-1
DB.extension :schema_dumper 

query = Vydia::DB.dump_schema_migration({:indexes => true, :foreign_keys => true, :index_names => true}) 

续集有一个扩展schema_dumper您可以使用红宝石转储数据库结构到迁移文件,你也可以指定要倾倒的。

+0

请回顾[如何写出一个好的答案](https://stackoverflow.com/help/how-to-answer)。不接受代码的答案是不鼓励的,因为他们没有解释他们如何解决问题。你应该更新你的答案*解释这是什么以及它如何改进已接受和已答复的答案。 – FluffyKitten