为什么在structure.sql中看到`SET xmloption = content;`?

时间:2019-06-19 18:29:53

标签: ruby-on-rails ruby postgresql ruby-on-rails-6

我正在使用Rails 6,最近编写了一个小迁移文件,将一列添加到表中。简单的东西:

class AddInstagramUsernameToUsers < ActiveRecord::Migration[6.0]
  def change
    add_column :users, :instagram_username, :string
  end
end

但是请注意,我在运行迁移时看到以下行添加到了structure.sql中:

SET xmloption = content;

我并不对此特别担心((documentation描述此选项似乎使它看起来很无害),但是我不想让这么小的迁移更改任何元postgres内容。我尝试降级到Rails 5摆脱了这条线,但是没有运气。我使用的是Postgres版本10.8,最近尚未升级。

目前,我不知道该添加什么内容,如果可能的话,我想摆脱它。任何人都知道是什么导致了这种情况/如何预防呢?

1 个答案:

答案 0 :(得分:2)

Rails不会生成structure.sql -它可以在PostgreSQL的内置pg_dump工具中运行。根据{{​​3}}:

  

当模式格式设置为:sql时,将使用特定于数据库的工具将数据库结构转储到db/structure.sql中。例如,对于PostgreSQL,使用pg_dump实用程序。

是pg_dump在您的structure.sql中生成该行。

据我所知,这样做的原因是,从pg_dump文件还原时,不能假定目标数据库与源数据库具有相同的xmloption集。如果没有此行,则用户可能会遇到Active Record Migrations Rails Guide中所述的问题。所做的更改已包含在PostgreSQL 9.4.22中,特别是this bug report

没有办法禁用它,也没有理由这样做。