УВЕДОМЛЕНИЯ о последовательности после запуска миграции в rails в приложении postgresql

Когда я запускаю миграцию в приложении Rails на postgresql, я получаю следующие УВЕДОМЛЕНИЯ

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

я бы хотел знать

что означает это УВЕДОМЛЕНИЕ?

Как избежать этого УВЕДОМЛЕНИЯ?

Какое влияние окажут такие УВЕДОМЛЕНИЯ на Приложение, если их не избежать?

С уважением,

Салил


person Salil    schedule 14.03.2011    source источник


Ответы (3)


Rails (точнее, ActiveRecord) добавляет столбец id в вашу таблицу и делает этот столбец первичным ключом. Для PostgreSQL этот столбец будет иметь тип serial. Столбец serial представляет собой четырехбайтовое целое число, объединенное с последовательностью для автоматического предоставления автоматически увеличивающихся значений.

Первое уведомление:

ВНИМАНИЕ: CREATE TABLE создаст неявную последовательность «notification_settings_id_seq» для последовательного столбца «notification_settings.id».

просто говорит вам, что PostgreSQL создает последовательность за кулисами, чтобы сделать функцию столбца serial.

Второе уведомление:

ВНИМАНИЕ: CREATE TABLE / PRIMARY KEY создаст неявный индекс «notification_settings_pkey» для таблицы «notification_settings».

просто говорит вам, что PostgreSQL создает индекс, чтобы помочь реализовать первичный ключ, даже если вы явно не просили об этом.

Вы можете просто игнорировать эти уведомления, они носят информационный характер. Если вы хотите подавить их, вы можете добавить min_messages: WARNING в соответствующий раздел. вашего database.yml.

person mu is too short    schedule 14.03.2011
comment
Для postgresql 9.2, установленного через homebrew, вам нужно отредактировать /usr/local/var/postgres/postgresql.conf и установить client_min_messsages = warning, настройка database.yml, похоже, не работает. - person weston; 03.02.2013
comment
@weston: Что ты пробовал в database.yml? Насколько я знаю, он все еще должен работать, но у меня нет 9.2, чтобы проверить. - person mu is too short; 03.02.2013

В дополнение к тому, что сказал му:

Если вы не хотите видеть эти уведомления, вы можете отключить их, установив для client_min_messages значение предупреждения (или ошибки).

Это можно сделать на уровне сеанса, используя set client_min_messages = warning или в файле конфигурации сервера для всех подключений:

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

person a_horse_with_no_name    schedule 14.03.2011
comment
Я хотел бы принять более одного ответа, но, поскольку я не могу, я просто проголосую за вас. - person Salil; 14.03.2011

УВЕДОМЛЕНИЯ связаны с созданием последовательности и способом, которым Postgresql создает автоинкремент для столбца id.

Чтобы ответить на другие вопросы:

Как избежать УВЕДОМЛЕНИЙ

В файле database.yml просто включите min_messages: предупреждение #волшебный соус

Как повлияет на приложение игнорирование УВЕДОМЛЕНИЙ.

По сути, это увеличит ведение журнала, особенно если вы работаете в режиме разработки.

Подробнее см. http://www.ruby-forum.com/topic/468070.

person Grant Sayer    schedule 14.03.2011