4

我今天遇到一种情况,我想在迁移中将部分 postgres 索引添加到表中。自然,这种东西在 Rails 使用中是不可能的add_index(它即将到来

因此,我被迫execute在迁移中使用语句。

现在,schema.rb在顶部有这个评论:

# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
#

不幸的是,如果我有任何自定义 DML,这个execute声明没有被跟踪schema.rb,这使得它schema.rb几乎毫无用处。

有什么办法可以强制execute包含 DML 的语句找到自己schema.rb

4

1 回答 1

6

使用 schema.rb 无法实现您想要的,您想要做的是切换到使用数据库的本机模式转储/检索代码。

config.active_record.schema_format = :sql

现在,您将获得一个 structure.sql 文件,而不是 schema.rb 文件。这应该透明地适用于所有 rails 的内置任务,并且由于它使用本机 dumper 格式,它将支持您想要的任何疯狂的东西。

于 2012-08-10T01:48:42.967 回答