使用Postgresql对用户表运行迁移时出现问题

时间:2011-05-06 00:40:56

标签: ruby-on-rails ruby postgresql migration

我正在尝试更新迁移中设置的新列的某些默认值。但是,每当我尝试对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它似乎工作,我只能进行结构改变......

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

启用postgres日志记录(在/var/lib/pgsql/data/postgresql.conf中配置,grep用于“错误报告和记录”)。或者您可能想要使用SQL并自己运行它以查看发生了什么错误。由于您的更新,它可能是一个失败的约束。