在 postgresql 应用程序的 rails 中运行迁移后的顺序注意事项

Posted

技术标签:

【中文标题】在 postgresql 应用程序的 rails 中运行迁移后的顺序注意事项【英文标题】:NOTICES for sequence after running migration in rails on postgresql Application 【发布时间】:2011-07-14 20:31:27 【问题描述】:

当我在 postgresql 上的 Rails 应用程序中运行迁移时,我收到了以下通知

NOTICE:  CREATE TABLE will create implicit sequence "notification_settings_id_seq" for serial column "notification_settings.id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "notification_settings_pkey" for table "notification_settings"

我的迁移文件包含 088_create_notification_settings.rb

class CreateNotificationSettings < ActiveRecord::Migration
  def self.up
    create_table :notification_settings do |t|
      t.integer :user_id
      t.integer :notification_id
      t.boolean :notification_on
      t.boolean :outbound
    end
  end

  def self.down
    drop_table :notification_settings
  end
end

我想知道

此通知的含义是什么?

如何避免此通知?

如果不避免此类通知会对应用程序产生什么影响?

问候,

萨利尔

【问题讨论】:

【参考方案1】:

Rails(更准确地说是 ActiveRecord)正在将id 列添加到您的表中,并使该列成为主键。对于 PostgreSQL,此列的类型为 serialserial column 本质上是一个 4 字节整数与一个序列组合以自动提供自动递增值。

第一通知:

注意:CREATE TABLE 将为串行列“notification_settings.id”创建隐式序列“notification_settings_id_seq”

只是告诉你 PostgreSQL 在幕后创建了一个序列来生成 serial 列函数。

第二条通知:

注意:CREATE TABLE / PRIMARY KEY 将为表“notification_settings”创建隐式索引“notification_settings_pkey”

只是告诉你 PostgreSQL 正在创建一个索引来帮助实现主键,即使你没有明确要求它这样做。

您可以忽略这些通知,它们只是提供信息。如果您想抑制它们,可以将min_messages: WARNING 添加到您的database.yml 的相应部分。

【讨论】:

对于通过自制软件安装的 postgresql 9.2,您需要编辑 /usr/local/var/postgres/postgresql.conf 并设置 client_min_messsages = warning,database.yml 设置似乎不起作用。跨度> @weston:你在database.yml 中尝试了什么? AFAIK 它应该仍然可以工作,但我没有设置 9.2 来检查。【参考方案2】:

除了穆所说的:

如果您不想看到这些通知,可以通过将 client_min_messages 设置为警告(或错误)来关闭它们。

这可以在会话级别使用set client_min_messages = warning 或在所有连接的服务器配置文件中完成:

http://www.postgresql.org/docs/current/static/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-WHEN

【讨论】:

我希望我能接受多个答案,但因为我不能,我只是给你投票。【参考方案3】:

注意事项与序列的创建以及 Postgresql 在 id 列上创建自动增量的方式有关。

回答其他问题:

如何避免通知

在 database.yml 文件中简单地包含 min_messages:警告#magic sauce

如果忽略 NOTICES 会对申请产生什么影响。

基本上它会增加日志记录,尤其是在开发模式下运行时。

详情请见http://www.ruby-forum.com/topic/468070

【讨论】:

以上是关于在 postgresql 应用程序的 rails 中运行迁移后的顺序注意事项的主要内容,如果未能解决你的问题,请参考以下文章

在 postgresql 应用程序的 rails 中运行迁移后的顺序注意事项

在 Rails 应用程序中向 PostgreSQL 提供 SSL 证书

如何从 SQLite 迁移到 PostgreSQL (Rails)

在 Postgresql 中使用 UUID 的 Rails 5.2 活动存储

在 Rails 和 PostgreSQL 中完全忽略时区

使用 PostgreSQL 的模式和 Rails 创建多租户应用程序