Heroku PostgreSQL迁移问题

时间:2011-04-12 15:47:37

标签: ruby-on-rails-3 postgresql heroku

我正在研究基于rails的网站模型,并创建了一个名为ItemAttributes的模型类,它定义了一组特定项的有效属性。例如,“床的大小”是项目“床”的属性。我还创建了一个AttributeValue类,它定义了属性的有效值,比如'king''queter''full'等。

我试图通过迁移来填充heroku上的PostgreSQL数据库,但它会抛出这个相当无用的错误(迁移在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 个答案:

答案 0 :(得分:1)

当在同一事务中出现早期错误时,会出现此错误。查找并解决该错误。如果您预计会出现某些错误并且不想回滚整个事务,则可以使用保存点。

编辑,澄清

澄清一下,我看到流程错误的情况如下:

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代码)的日志。