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

Gly*_*oko 5 ruby postgresql ruby-on-rails ruby-on-rails-6

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

class AddInstagramUsernameToUsers < ActiveRecord::Migration[6.0]
  def change
    add_column :users, :instagram_username, :string
  end
end
Run Code Online (Sandbox Code Playgroud)

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

SET xmloption = content;

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

目前,我不知道该添加什么内容,如果可能的话,我想摆脱它。任何人都知道是什么原因造成的/如何预防呢?

Jor*_*ing 5

Rails不会生成structure.sql-它可以在PostgreSQL的内置pg_dump工具中运行。根据Active Record Migrations Rails指南

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

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

据我所知,这样做的原因是,从pg_dump文件还原时,不能假定目标数据库xmloption与源数据库具有相同的设置。如果没有此行,则用户可能会遇到此bug报告中所述的问题。该更改包含在PostgreSQL 9.4.22中-特别是commit 8ba48542

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