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

Why am I seeing `SET xmloption = content;` in my structure.sql?

我正在使用 Rails 6,最近写了一个小的迁移来向 table 添加一列。简单的东西:

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,最近没有升级。

目前我不知道是什么添加了这一行,如果可能的话我想去掉它。有人知道是什么导致 this/how 阻止它吗?

Rails 不会生成 structure.sql——它会生成 PostgreSQL 的 built-in pg_dump 工具。根据 Active Record Migrations Rails Guide:

When the schema format is set to :sql, the database structure will be dumped using a tool specific to the database into db/structure.sql. For example, for PostgreSQL, the pg_dump utility is used.

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

据我所知,它这样做的原因是,当从 pg_dump 文件恢复时,不能假设目标数据库具有相同的 xmloption 设置源数据库。如果没有这一行,用户可能 运行 遇到 this bug report. The change was included in PostgreSQL 9.4.22—specifically commit 8ba48542.

中描述的问题

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