在postgresql应用程序的rails中运行迁移后的序列注释

时间:2011-03-14 08:29:06

标签: ruby-on-rails ruby postgresql database-migration

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

我想知道

这个通知意味着什么?

如何避免此通知?

如果不避免,此类通知对申请会产生什么影响?

此致

萨里尔

3 个答案:

答案 0 :(得分:77)

Rails(ActiveRecord更精确)是在表中添加id列,并将此列作为主键。对于PostgreSQL,此列将具有类型serialserial column本质上是一个四字节整数,与一个自动提供自动递增值的序列相结合。

第一个通知:

  

注意: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的相应部分。

答案 1 :(得分:8)

除了mu所说的:

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

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

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

答案 2 :(得分:2)

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

回答其他问题:

  

如何避免通知

在database.yml文件中只需包含  min_messages:警告#magic酱

  

如果忽略NOTICES,对申请会有什么影响。

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

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