【问题标题】:How do I create a Sequel migration from an existing postgres table dump?如何从现有的 postgres 表转储创建 Sequel 迁移?
【发布时间】:2012-05-20 14:29:32
【问题描述】:

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

编辑: 以防万一不清楚,这是使用 ruby​​ Sequel SQL 库/gem

【问题讨论】:

    标签: ruby postgresql migration sequel


    【解决方案1】:

    您是在问如何使用 PostgreSQL 命令行客户端执行 SQL 脚本吗?如果是这样,答案是使用--file 选项:

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

    【讨论】:

    • 不,抱歉我没有说得更清楚,它使用的是 ruby​​ Sequel gem,一种 orm。
    • 啊,我不熟悉它,但是如果有某种方法可以直接在 SQL 中执行操作,您也许可以将文件的内容发送到这样的方法调用。不过,我怀疑您是否会像psql 那样让任何客户端读取 PostgreSQL 转储文件。也许您可以自己拨打systempsql 的电话?
    • 有一种方法可以传递一个我可以使用的 sql 字符串,但我必须解析文件(我认为),我并不是那么坚持。我认为,调用 psql 的想法是可行的,如果库中没有我缺少的任何内置内容,这似乎是一个不错的选择。
    【解决方案2】:

    您不会从表转储创建迁移,但您可以使用 Sequel 的 schema_dumper 扩展轻松创建迁移。 sequel 命令行程序中实际上内置了对此的支持:

    sequel -d postgres://postgres@localhost/mydb > 001_initial_migration.rb

    不支持转储函数或序列,因为它旨在生成独立于数据库的迁移。

    如果您正在使用函数和自定义序列,则您完全处于数据库特定领域,最好只使用数据库的工具。

    【讨论】:

    • 感谢有关函数和序列的提示,我必须使用它们(用于空间支持)。在这种情况下,我将坚持使用 DB 工具进行设置。
    【解决方案3】:
    DB.extension :schema_dumper
    
    query = Vydia::DB.dump_schema_migration({:indexes => true, :foreign_keys => true, :index_names => true})
    

    sequel 有一个扩展名schema_dumper,您可以使用它作为 ruby​​ 将 db 结构转储到迁移文件中,您也可以指定要转储的内容。

    【讨论】:

    • 请查看How to write a good answer。不鼓励仅使用代码的答案,因为它们没有解释如何解决问题。您应该更新您的答案以*解释这是做什么以及它如何改进已接受和赞成的答案。
    猜你喜欢
    • 2014-02-03
    • 2018-05-22
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    相关资源
    最近更新 更多