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

我想知道

这个通知是什么意思?

如何避免此通知?

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

问候,

萨利尔

4

3 回答 3

77

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

第一条通知:

注意: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.

于 2011-03-14T08:51:37.270 回答
8

除了穆所说的:

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

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

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

于 2011-03-14T08:56:37.860 回答
2

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

要回答其他问题:

如何避免通知

在 database.yml 文件中只需包含 min_messages: warning #magic sauce

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

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

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

于 2011-03-14T08:52:43.043 回答