Heroku PostgreSQL Миграция Проблема - PullRequest
1 голос
/ 12 апреля 2011

Я работаю над моделью моего веб-сайта на основе рельсов и создал класс модели с именем ItemAttributes, который определяет набор допустимых атрибутов для конкретного элемента. Например, «размер кровати» является атрибутом элемента «кровать». Я также создал класс AttributeValue, который определяет допустимые значения для атрибутов, например «king», «queen», «full» и т. Д.

Я пытаюсь заполнить базу данных PostgreSQL на heroku миграцией, но она выдает эту довольно бесполезную ошибку (миграция работает локально на SQLite):

PGError: ERROR:  current transaction is aborted, commands ignored until end of transaction block
:             SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
              FROM pg_attribute a LEFT JOIN pg_attrdef d
                ON a.attrelid = d.adrelid AND a.attnum = d.adnum
             WHERE a.attrelid = '"attribute_values"'::regclass
               AND a.attnum > 0 AND NOT a.attisdropped
             ORDER BY a.attnum

Вот миграция, которую я использую:

class AddBedSizeValues < ActiveRecord::Migration
  def self.up
    id = ItemAttribute.find_by_name('bed size').id

    AttributeValue.create(
      :name => 'king',
      :item_attribute_id => id
    )
    AttributeValue.create(
      :name => 'queen',
      :item_attribute_id => id
    )
    AttributeValue.create(
      :name => 'full',
      :item_attribute_id => id
    )
    AttributeValue.create(
      :name => 'x-long twin',
      :item_attribute_id => id
    )
    AttributeValue.create(
      :name => 'twin',
      :item_attribute_id => id
    )
  end

1 Ответ

1 голос
/ 12 апреля 2011

Эта ошибка выдается, когда в той же транзакции произошла более ранняя ошибка. Найдите и устраните эту ошибку. Вы можете использовать точки сохранения, если ожидаете определенной ошибки и не хотите откатить всю транзакцию.

Редактировать, некоторые уточнения

Чтобы уточнить, в случаях, когда я видел ошибку, поток был примерно следующим:

BEGIN; -- start of transaction
SOME QUERY; -- Causes error but error is ignored
SECOND QUERY; -- Causes the error you get because it is still in the same transaction

После ошибки транзакция должна быть откатана и запущена новая, прежде чем вы сможете продолжить, или вы должны откатиться до точки сохранения.

Возможно, вы столкнулись с каким-то другим условием, которое вызывает эту ошибку, но, возможно, вам следует проверить журналы в PGDATA / pg_log, чтобы убедиться, что ваш движок регистрирует, что некоторые ошибки игнорируются.

Если это не поможет, вы можете попытаться создать журнал всех реальных запросов (вместо кода rails), выполненных во время миграции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...