我正在研究基于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
答案 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代码)的日志。