在使用PostgreSQL应用程序的Rails迁移后,顺序通知

34
当我在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

我想知道

这些 NOTICES 是什么意思?

如何避免这些 NOTICES?

如果不避免这些 NOTICES,对应用程序会有什么影响?

谢谢,

Salil

3个回答

77
Rails(更准确地说是ActiveRecord)在您的表中添加了一个名为id的列,并将该列设置为主键。对于PostgreSQL,此列将具有类型serialserial本质上是一个四字节整数和序列的组合,自动提供自增值。
第一个通知:

NOTICE: CREATE TABLE将创建序列“notification_settings_id_seq”以进行串行列“notification_settings.id”的自动增量。

只是告诉您PostgreSQL正在幕后创建序列,以使serial列功能可用。
第二个通知:

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

只是告诉您PostgreSQL正在创建索引来帮助实现主键,即使您没有明确要求它也是如此。
您可以忽略这些通知,它们只是信息性的。如果要抑制它们,可以将min_messages: WARNING添加到database.yml的适当部分中。

1
对于通过Homebrew安装的PostgreSQL 9.2,您需要编辑/usr/local/var/postgres/postgresql.conf并设置client_min_messages = warning,database.yml设置似乎无效。 - weston
@weston:你在database.yml中尝试了什么?据我所知,它应该仍然有效,但我没有设置9.2来检查。 - mu is too short

8

我希望我能接受多个答案,但是我不能,所以我只能给你点赞。 - Salil

2

NOTICES与序列的创建方式以及Postgresql在id列上创建自增的方式有关。

回答其他问题:

如何避免 NOTICES

在database.yml文件中简单地包括 min_messages: warning #魔法酱汁

如果忽略NOTICES,应用程序会受到什么影响。

基本上它将增加日志记录,特别是在开发模式下运行时。

有关更多详细信息,请参见http://www.ruby-forum.com/topic/468070


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接