7

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

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

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

SET xmloption = content;

我并不特别担心它,(诚然,描述该选项的文档使它看起来非常无害)但不想让这么小的迁移改变任何元 postgres 的东西。我尝试降级到 Rails 5 以摆脱这条线,但没有运气。我使用的是 postgres 10.8 版,最近没有升级。

目前我不知道是什么添加了这条线,如果可能的话,我想摆脱它。有谁知道是什么原因造成的/如何预防?

4

1 回答 1

11

Rails 不会生成structure.sql——它会根据 PostgreSQL 的内置 pg_dump 工具生成。根据Active Record 迁移 Rails 指南

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

是 pg_dump 在你的structure.sql.

据我所知,这样做的原因是,当从 pg_dump 文件恢复时,不能假定目标数据库xmloption与源数据库具有相同的集合。如果没有此行,用户可能会遇到此错误报告中所述的问题。该更改包含在 PostgreSQL 9.4.22 中——特别是提交 8ba48542

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

于 2019-06-19T21:31:51.620 回答