我正在使用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,最近尚未升级。
目前,我不知道该添加什么内容,如果可能的话,我想摆脱它。任何人都知道是什么导致了这种情况/如何预防呢?
答案 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。
没有办法禁用它,也没有理由这样做。