【问题标题】:Why am I seeing `SET xmloption = content;` in my structure.sql?为什么我在 structure.sql 中看到 `SET xmloption = content;`?
【发布时间】:2019-06-19 18:29:53
【问题描述】:

我正在使用 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 版,最近没有升级。

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

【问题讨论】:

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


    【解决方案1】:

    Rails 不会生成structure.sql——它会生成 PostgreSQL 内置的 pg_dump 工具。根据Active Record Migrations Rails Guide

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

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

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

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

    【讨论】:

    • 酷利欧。我很满意。
    猜你喜欢
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 2023-03-16
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    相关资源
    最近更新 更多