我正在尝试更新迁移中设置的新列的某些默认值。但是,每当我尝试对users表的记录执行任何操作时,我都会收到Postgres错误(除了修改其结构)。我使用的是Rails 3.0.7,ruby 1.9.2和pg gem版本0.11.0
以下是迁移:
def self.up
add_column :users, :state_machine, :string
add_column :users, :wizard_steps_completed, :integer, :default => "1"
add_column :users, :activated_at, :datetime
User.reset_column_information
User.all.each do |u|
u.update_attributes(:state_machine => "activated", :wizard_steps_completed => 3, :activated_at => u.created_at)
end
end
添加列没有任何问题。但是,对现有记录的更改都会失败,并显示以下错误:
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
== AddUserSignupInfo: migrating ==============================================
rake aborted!
An error has occurred, this and all later migrations canceled:
PGError: ERROR: current transaction is aborted, commands ignored until end of transaction block
: SELECT COUNT(*)
FROM pg_tables
WHERE tablename = 'users'
如果我尝试更新任何一个orecord它似乎工作,我只能进行结构改变......
有什么想法吗?
答案 0 :(得分:1)
启用postgres日志记录(在/var/lib/pgsql/data/postgresql.conf中配置,grep用于“错误报告和记录”)。或者您可能想要使用SQL并自己运行它以查看发生了什么错误。由于您的更新,它可能是一个失败的约束。